From 08f90377384fc703b5fc703819943a86781b0100 Mon Sep 17 00:00:00 2001 From: ShyPike Date: Sun, 21 Mar 2010 12:58:33 +0100 Subject: [PATCH] Eliminate superfluous 'main' folder --- CHANGELOG.txt | 374 + COPYRIGHT.txt | 22 + GPL2.txt | 340 + GPL3.txt | 674 ++ INSTALL.txt | 123 + ISSUES.txt | 69 + LICENSE.txt | 17 + NSIS_Installer.nsi | 404 + PKG-INFO | 10 + README.txt | 131 + SABnzbd.py | 1456 ++++ SABnzbdDelegate.py | 692 ++ Sample-PostProc.cmd | 16 + Sample-PostProc.sh | 16 + cherrypy.zip | Bin 0 -> 179090 bytes interfaces/Classic/README.TXT | 21 + interfaces/Classic/templates/config.tmpl | 20 + interfaces/Classic/templates/config_cat.tmpl | 94 + .../Classic/templates/config_directories.tmpl | 85 + interfaces/Classic/templates/config_email.tmpl | 61 + interfaces/Classic/templates/config_general.tmpl | 146 + interfaces/Classic/templates/config_newzbin.tmpl | 83 + interfaces/Classic/templates/config_rss.tmpl | 217 + .../Classic/templates/config_scheduling.tmpl | 73 + interfaces/Classic/templates/config_server.tmpl | 61 + interfaces/Classic/templates/config_sorting.tmpl | 445 ++ interfaces/Classic/templates/config_switches.tmpl | 147 + interfaces/Classic/templates/connection_info.tmpl | 51 + interfaces/Classic/templates/history.tmpl | 76 + interfaces/Classic/templates/inc_bottom.tmpl | 32 + interfaces/Classic/templates/inc_cmenu.tmpl | 68 + interfaces/Classic/templates/inc_top.tmpl | 67 + interfaces/Classic/templates/main.tmpl | 113 + interfaces/Classic/templates/nzo.tmpl | 150 + interfaces/Classic/templates/queue.tmpl | 143 + .../Classic/templates/static/images/favicon.ico | Bin 0 -> 53523 bytes .../templates/static/javascript/dropdown.js | 12 + .../Classic/templates/static/placeholder.txt | 0 .../static/stylesheets/colorschemes/black.css | 110 + .../static/stylesheets/colorschemes/classic.css | 80 + .../static/stylesheets/colorschemes/darkblue.css | 28 + .../static/stylesheets/colorschemes/green.css | 28 + .../static/stylesheets/colorschemes/lightblue.css | 28 + .../static/stylesheets/colorschemes/red.css | 28 + .../stylesheets/colorschemes/white-black.css | 29 + .../templates/static/stylesheets/default.css | 257 + .../templates/static/stylesheets/defaultcolors.css | 138 + interfaces/Concept/README.txt | 36 + interfaces/Concept/licenses/LICENSE-BSD.txt | 18 + interfaces/Concept/licenses/LICENSE-CC.txt | 63 + interfaces/Concept/licenses/LICENSE-GPL.txt | 339 + interfaces/Concept/licenses/LICENSE-MIT.txt | 21 + interfaces/Concept/templates/main.tmpl | 114 + .../darkness/ui-bg_flat_30_cccccc_40x100.png | Bin 0 -> 180 bytes .../darkness/ui-bg_flat_50_5c5c5c_40x100.png | Bin 0 -> 180 bytes .../darkness/ui-bg_glass_20_555555_1x400.png | Bin 0 -> 115 bytes .../darkness/ui-bg_glass_40_0078a3_1x400.png | Bin 0 -> 135 bytes .../darkness/ui-bg_glass_40_ffc73d_1x400.png | Bin 0 -> 131 bytes .../ui-bg_gloss-wave_25_333333_500x100.png | Bin 0 -> 1874 bytes .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin 0 -> 95 bytes .../darkness/ui-bg_inset-soft_25_000000_1x100.png | Bin 0 -> 98 bytes .../darkness/ui-bg_inset-soft_30_f58400_1x100.png | Bin 0 -> 117 bytes .../images/darkness/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/darkness/ui-icons_4b8e0b_256x240.png | Bin 0 -> 4369 bytes .../images/darkness/ui-icons_a83300_256x240.png | Bin 0 -> 4369 bytes .../images/darkness/ui-icons_cccccc_256x240.png | Bin 0 -> 4369 bytes .../images/darkness/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../Concept/templates/static/images/logo.png | Bin 0 -> 4405 bytes .../images/redmond/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/redmond/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 182 bytes .../images/redmond/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 124 bytes .../images/redmond/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 123 bytes .../images/redmond/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 3457 bytes .../redmond/ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 104 bytes .../redmond/ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 88 bytes .../images/redmond/ui-icons_217bc0_256x240.png | Bin 0 -> 4369 bytes .../images/redmond/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/redmond/ui-icons_469bdd_256x240.png | Bin 0 -> 4369 bytes .../images/redmond/ui-icons_6da8d5_256x240.png | Bin 0 -> 4369 bytes .../images/redmond/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../images/redmond/ui-icons_d8e7f3_256x240.png | Bin 0 -> 5355 bytes .../images/redmond/ui-icons_f9bd01_256x240.png | Bin 0 -> 4369 bytes .../templates/static/images/sabnzbdplus.ico | Bin 0 -> 1406 bytes .../templates/static/javascripts/concept.js | 300 + .../Concept/templates/static/javascripts/lib.js | 417 + .../static/stylesheets/colorschemes/darkness.css | 406 + .../static/stylesheets/colorschemes/redmond.css | 406 + .../templates/static/stylesheets/concept.css | 92 + .../templates/static/stylesheets/ui.jqgrid.css | 33 + interfaces/Mobile/README.txt | 25 + interfaces/Mobile/language/de-de.txt | 41 + interfaces/Mobile/language/fr-fr.txt | 42 + interfaces/Mobile/language/nl-du.txt | 42 + interfaces/Mobile/language/sv-se.txt | 40 + interfaces/Mobile/language/us-en.txt | 42 + interfaces/Mobile/licenses/LICENSE-BSD.txt | 18 + interfaces/Mobile/licenses/LICENSE-CC.txt | 63 + interfaces/Mobile/licenses/LICENSE-GPL.txt | 339 + interfaces/Mobile/licenses/LICENSE-MIT.txt | 21 + interfaces/Mobile/templates/main.tmpl | 304 + .../templates/static/images/dark/back_button.png | Bin 0 -> 3756 bytes .../static/images/dark/back_button_clicked.png | Bin 0 -> 3741 bytes .../Mobile/templates/static/images/dark/button.png | Bin 0 -> 3315 bytes .../static/images/dark/button_clicked.png | Bin 0 -> 3283 bytes .../templates/static/images/dark/chevron.png | Bin 0 -> 3074 bytes .../static/images/dark/chevron_circle.png | Bin 0 -> 1243 bytes .../templates/static/images/dark/grayButton.png | Bin 0 -> 943 bytes .../templates/static/images/dark/loading.gif | Bin 0 -> 2536 bytes .../Mobile/templates/static/images/dark/on_off.png | Bin 0 -> 2496 bytes .../templates/static/images/dark/rowhead.png | Bin 0 -> 171 bytes .../Mobile/templates/static/images/dark/toggle.png | Bin 0 -> 2815 bytes .../templates/static/images/dark/toggleOn.png | Bin 0 -> 163 bytes .../templates/static/images/dark/toolbar.png | Bin 0 -> 805 bytes .../templates/static/images/dark/whiteButton.png | Bin 0 -> 978 bytes .../templates/static/images/light/backButton.png | Bin 0 -> 783 bytes .../templates/static/images/light/blueButton.png | Bin 0 -> 517 bytes .../templates/static/images/light/cancel.png | Bin 0 -> 362 bytes .../templates/static/images/light/chevron.png | Bin 0 -> 259 bytes .../templates/static/images/light/grayButton.png | Bin 0 -> 943 bytes .../templates/static/images/light/listArrowSel.png | Bin 0 -> 308 bytes .../templates/static/images/light/listGroup.png | Bin 0 -> 2863 bytes .../templates/static/images/light/loading.gif | Bin 0 -> 1435 bytes .../templates/static/images/light/on_off.png | Bin 0 -> 2634 bytes .../templates/static/images/light/pinstripes.png | Bin 0 -> 117 bytes .../templates/static/images/light/selection.png | Bin 0 -> 159 bytes .../Mobile/templates/static/images/light/thumb.png | Bin 0 -> 2834 bytes .../templates/static/images/light/toggle.png | Bin 0 -> 2815 bytes .../templates/static/images/light/toggleOn.png | Bin 0 -> 163 bytes .../templates/static/images/light/toolButton.png | Bin 0 -> 521 bytes .../templates/static/images/light/toolbar.png | Bin 0 -> 168 bytes .../templates/static/images/light/whiteButton.png | Bin 0 -> 978 bytes interfaces/Mobile/templates/static/images/sab.png | Bin 0 -> 2745 bytes .../Mobile/templates/static/javascripts/mobile.js | 840 ++ .../static/stylesheets/colorschemes/dark.css | 527 ++ .../static/stylesheets/colorschemes/light.css | 677 ++ .../templates/static/stylesheets/jqtouch.css | 373 + interfaces/Plush/README.txt | 143 + interfaces/Plush/language/de-de.txt | 70 + interfaces/Plush/language/fr-fr.txt | 68 + interfaces/Plush/language/nl-du.txt | 66 + interfaces/Plush/language/sv-se.txt | 69 + interfaces/Plush/language/us-en.txt | 68 + interfaces/Plush/licenses/LICENSE-BSD.txt | 18 + interfaces/Plush/licenses/LICENSE-CC.txt | 63 + interfaces/Plush/licenses/LICENSE-GPL.txt | 339 + interfaces/Plush/licenses/LICENSE-GPL3.txt | 674 ++ interfaces/Plush/licenses/LICENSE-LGPL.txt | 502 ++ interfaces/Plush/licenses/LICENSE-MIT.txt | 21 + interfaces/Plush/licenses/LICENSE-WebToolkit.txt | 11 + interfaces/Plush/templates/config.tmpl | 12 + interfaces/Plush/templates/config_cat.tmpl | 95 + interfaces/Plush/templates/config_directories.tmpl | 83 + interfaces/Plush/templates/config_email.tmpl | 69 + interfaces/Plush/templates/config_general.tmpl | 150 + interfaces/Plush/templates/config_inc_footer.tmpl | 33 + interfaces/Plush/templates/config_inc_header.tmpl | 62 + interfaces/Plush/templates/config_newzbin.tmpl | 94 + interfaces/Plush/templates/config_rss.tmpl | 227 + interfaces/Plush/templates/config_scheduling.tmpl | 103 + interfaces/Plush/templates/config_server.tmpl | 123 + interfaces/Plush/templates/config_sorting.tmpl | 476 ++ interfaces/Plush/templates/config_switches.tmpl | 225 + interfaces/Plush/templates/connection_info.tmpl | 58 + interfaces/Plush/templates/history.tmpl | 80 + interfaces/Plush/templates/main.tmpl | 292 + interfaces/Plush/templates/nzo.tmpl | 121 + interfaces/Plush/templates/queue.tmpl | 106 + .../static/images/plush-default-split.tar.gz | Bin 0 -> 83082 bytes .../static/images/plush-default/sabnzbdplus.ico | Bin 0 -> 1406 bytes .../static/images/plush-default/spinner.gif | Bin 0 -> 1169 bytes .../static/images/plush-default/sprite-config.png | Bin 0 -> 29590 bytes .../images/plush-default/sprite-jq-colorbox.png | Bin 0 -> 991 bytes .../static/images/plush-default/sprite-main.png | Bin 0 -> 28659 bytes .../static/images/plush-default/sprite-tilex.png | Bin 0 -> 610 bytes .../static/images/plush-default/sprite-tiley.png | Bin 0 -> 216 bytes .../static/images/plush-default/viewmag.png | Bin 0 -> 1457 bytes .../Plush/templates/static/javascripts/config.js | 223 + .../Plush/templates/static/javascripts/lib.js | 407 + .../Plush/templates/static/javascripts/plush.js | 815 ++ .../templates/static/stylesheets/plush-default.css | 1552 ++++ interfaces/smpl/CreativeCommons2-5.txt | 65 + interfaces/smpl/CreativeCommons3-0.txt | 76 + interfaces/smpl/GPL2.txt | 340 + interfaces/smpl/GPL3.txt | 674 ++ interfaces/smpl/LICENCE-silk_icons.txt | 49 + interfaces/smpl/LICENSE.txt | 17 + interfaces/smpl/License-ExCanvas.txt | 220 + interfaces/smpl/License-MochiKit.txt | 77 + interfaces/smpl/License-Nuvola.txt | 573 ++ interfaces/smpl/License-PlotKit.txt | 37 + interfaces/smpl/License-getElementPosition.txt | 39 + interfaces/smpl/README.txt | 66 + interfaces/smpl/language/de-de.txt | 48 + interfaces/smpl/language/fr-fr.txt | 47 + interfaces/smpl/language/nl-du.txt | 46 + interfaces/smpl/language/sv-se.txt | 48 + interfaces/smpl/language/us-en.txt | 47 + interfaces/smpl/templates/config.tmpl | 5 + interfaces/smpl/templates/config_cat.tmpl | 86 + interfaces/smpl/templates/config_directories.tmpl | 86 + interfaces/smpl/templates/config_email.tmpl | 77 + interfaces/smpl/templates/config_general.tmpl | 147 + interfaces/smpl/templates/config_newzbin.tmpl | 92 + interfaces/smpl/templates/config_rss.tmpl | 206 + interfaces/smpl/templates/config_scheduling.tmpl | 69 + interfaces/smpl/templates/config_server.tmpl | 102 + interfaces/smpl/templates/config_sorting.tmpl | 279 + interfaces/smpl/templates/config_switches.tmpl | 185 + interfaces/smpl/templates/connection_info.tmpl | 46 + interfaces/smpl/templates/history.tmpl | 147 + interfaces/smpl/templates/main.tmpl | 1239 +++ interfaces/smpl/templates/nzo.tmpl | 80 + interfaces/smpl/templates/queue.tmpl | 224 + .../smpl/templates/static/MochiKit/MochiKit.js | 8073 ++++++++++++++++++++ .../smpl/templates/static/MochiKit/__package__.js | 2 + .../smpl/templates/static/PlotKit/PlotKit.js | 2177 ++++++ .../smpl/templates/static/excanvas/excanvas.js | 785 ++ .../smpl/templates/static/feed-icon-14x14.png | Bin 0 -> 689 bytes .../smpl/templates/static/images/browser.png | Bin 0 -> 1154 bytes .../templates/static/images/bullet_arrow_down.png | Bin 0 -> 1018 bytes .../smpl/templates/static/images/control_pause.png | Bin 0 -> 598 bytes .../smpl/templates/static/images/control_play.png | Bin 0 -> 592 bytes interfaces/smpl/templates/static/images/down.gif | Bin 0 -> 53 bytes interfaces/smpl/templates/static/images/drive.png | Bin 0 -> 346 bytes .../smpl/templates/static/images/drive_go.png | Bin 0 -> 661 bytes .../smpl/templates/static/images/favicon.ico | Bin 0 -> 45452 bytes .../smpl/templates/static/images/key_enter.png | Bin 0 -> 3511 bytes .../static/images/messagebox_critical.png | Bin 0 -> 1032 bytes .../smpl/templates/static/images/newzbin.png | Bin 0 -> 694 bytes .../smpl/templates/static/images/nuvola/kgpg.png | Bin 0 -> 865 bytes interfaces/smpl/templates/static/images/up.gif | Bin 0 -> 53 bytes .../smpl/templates/static/sabnzbd_small4.png | Bin 0 -> 9355 bytes .../static/stylesheets/colorschemes/black.css | 113 + .../static/stylesheets/colorschemes/white.css | 108 + .../smpl/templates/static/stylesheets/smpl.css | 369 + interfaces/wizard/README.TXT | 21 + interfaces/wizard/five.html | 35 + interfaces/wizard/four.html | 39 + interfaces/wizard/inc_bottom.tmpl | 4 + interfaces/wizard/inc_top.tmpl | 15 + interfaces/wizard/index.html | 47 + interfaces/wizard/language/de-de.txt | 61 + interfaces/wizard/language/fr-fr.txt | 53 + interfaces/wizard/language/nl-du.txt | 56 + interfaces/wizard/language/sv-se.txt | 54 + interfaces/wizard/language/us-en.txt | 53 + interfaces/wizard/one.html | 76 + interfaces/wizard/static/images/classic-th.png | Bin 0 -> 18667 bytes interfaces/wizard/static/images/classic.png | Bin 0 -> 40024 bytes interfaces/wizard/static/images/favicon.ico | Bin 0 -> 45452 bytes interfaces/wizard/static/images/flags/de-de.png | Bin 0 -> 307 bytes interfaces/wizard/static/images/flags/fr-fr.png | Bin 0 -> 4474 bytes interfaces/wizard/static/images/flags/nl-du.png | Bin 0 -> 4208 bytes interfaces/wizard/static/images/flags/sv-se.png | Bin 0 -> 5854 bytes interfaces/wizard/static/images/flags/us-en.png | Bin 0 -> 8862 bytes interfaces/wizard/static/images/icon_sab.png | Bin 0 -> 3579 bytes interfaces/wizard/static/images/plush-th.png | Bin 0 -> 27290 bytes interfaces/wizard/static/images/plush.png | Bin 0 -> 54951 bytes interfaces/wizard/static/images/smpl-th.png | Bin 0 -> 23708 bytes interfaces/wizard/static/images/smpl.png | Bin 0 -> 62655 bytes interfaces/wizard/static/javascript/checkserver.js | 109 + interfaces/wizard/static/javascript/jquery.js | 19 + interfaces/wizard/static/javascript/pagetwo.js | 23 + interfaces/wizard/static/javascript/restart.js | 17 + interfaces/wizard/static/style.css | 232 + interfaces/wizard/three.html | 63 + interfaces/wizard/two.html | 50 + language/de-de.txt | 887 +++ language/email-de-de.tmpl | 43 + language/email-fr-fr.tmpl | 41 + language/email-nl-du.tmpl | 41 + language/email-sv-se.tmpl | 43 + language/email-us-en.tmpl | 41 + language/fr-fr.txt | 833 ++ language/nl-du.txt | 814 ++ language/rss-de-de.tmpl | 25 + language/rss-fr-fr.tmpl | 25 + language/rss-nl-nl.tmpl | 24 + language/rss-sv-se.tmpl | 25 + language/rss-us-en.tmpl | 25 + language/sv-se.txt | 830 ++ language/us-en.txt | 829 ++ licenses/License-CherryPy.txt | 39 + licenses/License-configobj.txt | 41 + licenses/License-feedparser.txt | 42 + licenses/License-json.txt | 512 ++ licenses/License-kronos.txt | 38 + licenses/License-listquote.txt | 41 + licenses/License-pynewsleecher.txt | 11 + licenses/License-rarfile.txt | 23 + licenses/License-rsslib.txt | 10 + licenses/License-ssmtplib.txt | 36 + licenses/Python/LICENSE-BerkeleyDB.txt | 102 + licenses/Python/LICENSE-OpenSSL.txt | 127 + licenses/Python/LICENSE-Python.txt | 270 + licenses/Python/LICENSE-TclTk.txt | 40 + licenses/Python/LICENSE.txt | 97 + main/CHANGELOG.txt | 374 - main/COPYRIGHT.txt | 22 - main/GPL2.txt | 340 - main/GPL3.txt | 674 -- main/INSTALL.txt | 123 - main/ISSUES.txt | 69 - main/LICENSE.txt | 17 - main/NSIS_Installer.nsi | 404 - main/PKG-INFO | 10 - main/README.txt | 131 - main/SABnzbd.py | 1456 ---- main/SABnzbdDelegate.py | 692 -- main/Sample-PostProc.cmd | 16 - main/Sample-PostProc.sh | 16 - main/cherrypy.zip | Bin 179090 -> 0 bytes main/interfaces/Classic/README.TXT | 21 - main/interfaces/Classic/templates/config.tmpl | 20 - main/interfaces/Classic/templates/config_cat.tmpl | 94 - .../Classic/templates/config_directories.tmpl | 85 - .../interfaces/Classic/templates/config_email.tmpl | 61 - .../Classic/templates/config_general.tmpl | 146 - .../Classic/templates/config_newzbin.tmpl | 83 - main/interfaces/Classic/templates/config_rss.tmpl | 217 - .../Classic/templates/config_scheduling.tmpl | 73 - .../Classic/templates/config_server.tmpl | 61 - .../Classic/templates/config_sorting.tmpl | 445 -- .../Classic/templates/config_switches.tmpl | 147 - .../Classic/templates/connection_info.tmpl | 51 - main/interfaces/Classic/templates/history.tmpl | 76 - main/interfaces/Classic/templates/inc_bottom.tmpl | 32 - main/interfaces/Classic/templates/inc_cmenu.tmpl | 68 - main/interfaces/Classic/templates/inc_top.tmpl | 67 - main/interfaces/Classic/templates/main.tmpl | 113 - main/interfaces/Classic/templates/nzo.tmpl | 150 - main/interfaces/Classic/templates/queue.tmpl | 143 - .../Classic/templates/static/images/favicon.ico | Bin 53523 -> 0 bytes .../templates/static/javascript/dropdown.js | 12 - .../Classic/templates/static/placeholder.txt | 0 .../static/stylesheets/colorschemes/black.css | 110 - .../static/stylesheets/colorschemes/classic.css | 80 - .../static/stylesheets/colorschemes/darkblue.css | 28 - .../static/stylesheets/colorschemes/green.css | 28 - .../static/stylesheets/colorschemes/lightblue.css | 28 - .../static/stylesheets/colorschemes/red.css | 28 - .../stylesheets/colorschemes/white-black.css | 29 - .../templates/static/stylesheets/default.css | 257 - .../templates/static/stylesheets/defaultcolors.css | 138 - main/interfaces/Concept/README.txt | 36 - main/interfaces/Concept/licenses/LICENSE-BSD.txt | 18 - main/interfaces/Concept/licenses/LICENSE-CC.txt | 63 - main/interfaces/Concept/licenses/LICENSE-GPL.txt | 339 - main/interfaces/Concept/licenses/LICENSE-MIT.txt | 21 - main/interfaces/Concept/templates/main.tmpl | 114 - .../darkness/ui-bg_flat_30_cccccc_40x100.png | Bin 180 -> 0 bytes .../darkness/ui-bg_flat_50_5c5c5c_40x100.png | Bin 180 -> 0 bytes .../darkness/ui-bg_glass_20_555555_1x400.png | Bin 115 -> 0 bytes .../darkness/ui-bg_glass_40_0078a3_1x400.png | Bin 135 -> 0 bytes .../darkness/ui-bg_glass_40_ffc73d_1x400.png | Bin 131 -> 0 bytes .../ui-bg_gloss-wave_25_333333_500x100.png | Bin 1874 -> 0 bytes .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin 95 -> 0 bytes .../darkness/ui-bg_inset-soft_25_000000_1x100.png | Bin 98 -> 0 bytes .../darkness/ui-bg_inset-soft_30_f58400_1x100.png | Bin 117 -> 0 bytes .../images/darkness/ui-icons_222222_256x240.png | Bin 4369 -> 0 bytes .../images/darkness/ui-icons_4b8e0b_256x240.png | Bin 4369 -> 0 bytes .../images/darkness/ui-icons_a83300_256x240.png | Bin 4369 -> 0 bytes .../images/darkness/ui-icons_cccccc_256x240.png | Bin 4369 -> 0 bytes .../images/darkness/ui-icons_ffffff_256x240.png | Bin 4369 -> 0 bytes .../Concept/templates/static/images/logo.png | Bin 4405 -> 0 bytes .../images/redmond/ui-bg_flat_0_aaaaaa_40x100.png | Bin 180 -> 0 bytes .../images/redmond/ui-bg_flat_55_fbec88_40x100.png | Bin 182 -> 0 bytes .../images/redmond/ui-bg_glass_75_d0e5f5_1x400.png | Bin 124 -> 0 bytes .../images/redmond/ui-bg_glass_85_dfeffc_1x400.png | Bin 123 -> 0 bytes .../images/redmond/ui-bg_glass_95_fef1ec_1x400.png | Bin 119 -> 0 bytes .../redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 3457 -> 0 bytes .../redmond/ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 104 -> 0 bytes .../redmond/ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 88 -> 0 bytes .../images/redmond/ui-icons_217bc0_256x240.png | Bin 4369 -> 0 bytes .../images/redmond/ui-icons_2e83ff_256x240.png | Bin 4369 -> 0 bytes .../images/redmond/ui-icons_469bdd_256x240.png | Bin 4369 -> 0 bytes .../images/redmond/ui-icons_6da8d5_256x240.png | Bin 4369 -> 0 bytes .../images/redmond/ui-icons_cd0a0a_256x240.png | Bin 4369 -> 0 bytes .../images/redmond/ui-icons_d8e7f3_256x240.png | Bin 5355 -> 0 bytes .../images/redmond/ui-icons_f9bd01_256x240.png | Bin 4369 -> 0 bytes .../templates/static/images/sabnzbdplus.ico | Bin 1406 -> 0 bytes .../templates/static/javascripts/concept.js | 300 - .../Concept/templates/static/javascripts/lib.js | 417 - .../static/stylesheets/colorschemes/darkness.css | 406 - .../static/stylesheets/colorschemes/redmond.css | 406 - .../templates/static/stylesheets/concept.css | 92 - .../templates/static/stylesheets/ui.jqgrid.css | 33 - main/interfaces/Mobile/README.txt | 25 - main/interfaces/Mobile/language/de-de.txt | 41 - main/interfaces/Mobile/language/fr-fr.txt | 42 - main/interfaces/Mobile/language/nl-du.txt | 42 - main/interfaces/Mobile/language/sv-se.txt | 40 - main/interfaces/Mobile/language/us-en.txt | 42 - main/interfaces/Mobile/licenses/LICENSE-BSD.txt | 18 - main/interfaces/Mobile/licenses/LICENSE-CC.txt | 63 - main/interfaces/Mobile/licenses/LICENSE-GPL.txt | 339 - main/interfaces/Mobile/licenses/LICENSE-MIT.txt | 21 - main/interfaces/Mobile/templates/main.tmpl | 304 - .../templates/static/images/dark/back_button.png | Bin 3756 -> 0 bytes .../static/images/dark/back_button_clicked.png | Bin 3741 -> 0 bytes .../Mobile/templates/static/images/dark/button.png | Bin 3315 -> 0 bytes .../static/images/dark/button_clicked.png | Bin 3283 -> 0 bytes .../templates/static/images/dark/chevron.png | Bin 3074 -> 0 bytes .../static/images/dark/chevron_circle.png | Bin 1243 -> 0 bytes .../templates/static/images/dark/grayButton.png | Bin 943 -> 0 bytes .../templates/static/images/dark/loading.gif | Bin 2536 -> 0 bytes .../Mobile/templates/static/images/dark/on_off.png | Bin 2496 -> 0 bytes .../templates/static/images/dark/rowhead.png | Bin 171 -> 0 bytes .../Mobile/templates/static/images/dark/toggle.png | Bin 2815 -> 0 bytes .../templates/static/images/dark/toggleOn.png | Bin 163 -> 0 bytes .../templates/static/images/dark/toolbar.png | Bin 805 -> 0 bytes .../templates/static/images/dark/whiteButton.png | Bin 978 -> 0 bytes .../templates/static/images/light/backButton.png | Bin 783 -> 0 bytes .../templates/static/images/light/blueButton.png | Bin 517 -> 0 bytes .../templates/static/images/light/cancel.png | Bin 362 -> 0 bytes .../templates/static/images/light/chevron.png | Bin 259 -> 0 bytes .../templates/static/images/light/grayButton.png | Bin 943 -> 0 bytes .../templates/static/images/light/listArrowSel.png | Bin 308 -> 0 bytes .../templates/static/images/light/listGroup.png | Bin 2863 -> 0 bytes .../templates/static/images/light/loading.gif | Bin 1435 -> 0 bytes .../templates/static/images/light/on_off.png | Bin 2634 -> 0 bytes .../templates/static/images/light/pinstripes.png | Bin 117 -> 0 bytes .../templates/static/images/light/selection.png | Bin 159 -> 0 bytes .../Mobile/templates/static/images/light/thumb.png | Bin 2834 -> 0 bytes .../templates/static/images/light/toggle.png | Bin 2815 -> 0 bytes .../templates/static/images/light/toggleOn.png | Bin 163 -> 0 bytes .../templates/static/images/light/toolButton.png | Bin 521 -> 0 bytes .../templates/static/images/light/toolbar.png | Bin 168 -> 0 bytes .../templates/static/images/light/whiteButton.png | Bin 978 -> 0 bytes .../Mobile/templates/static/images/sab.png | Bin 2745 -> 0 bytes .../Mobile/templates/static/javascripts/mobile.js | 840 -- .../static/stylesheets/colorschemes/dark.css | 527 -- .../static/stylesheets/colorschemes/light.css | 677 -- .../templates/static/stylesheets/jqtouch.css | 373 - main/interfaces/Plush/README.txt | 143 - main/interfaces/Plush/language/de-de.txt | 70 - main/interfaces/Plush/language/fr-fr.txt | 68 - main/interfaces/Plush/language/nl-du.txt | 66 - main/interfaces/Plush/language/sv-se.txt | 69 - main/interfaces/Plush/language/us-en.txt | 68 - main/interfaces/Plush/licenses/LICENSE-BSD.txt | 18 - main/interfaces/Plush/licenses/LICENSE-CC.txt | 63 - main/interfaces/Plush/licenses/LICENSE-GPL.txt | 339 - main/interfaces/Plush/licenses/LICENSE-GPL3.txt | 674 -- main/interfaces/Plush/licenses/LICENSE-LGPL.txt | 502 -- main/interfaces/Plush/licenses/LICENSE-MIT.txt | 21 - .../Plush/licenses/LICENSE-WebToolkit.txt | 11 - main/interfaces/Plush/templates/config.tmpl | 12 - main/interfaces/Plush/templates/config_cat.tmpl | 95 - .../Plush/templates/config_directories.tmpl | 83 - main/interfaces/Plush/templates/config_email.tmpl | 69 - .../interfaces/Plush/templates/config_general.tmpl | 150 - .../Plush/templates/config_inc_footer.tmpl | 33 - .../Plush/templates/config_inc_header.tmpl | 62 - .../interfaces/Plush/templates/config_newzbin.tmpl | 94 - main/interfaces/Plush/templates/config_rss.tmpl | 227 - .../Plush/templates/config_scheduling.tmpl | 103 - main/interfaces/Plush/templates/config_server.tmpl | 123 - .../interfaces/Plush/templates/config_sorting.tmpl | 476 -- .../Plush/templates/config_switches.tmpl | 225 - .../Plush/templates/connection_info.tmpl | 58 - main/interfaces/Plush/templates/history.tmpl | 80 - main/interfaces/Plush/templates/main.tmpl | 292 - main/interfaces/Plush/templates/nzo.tmpl | 121 - main/interfaces/Plush/templates/queue.tmpl | 106 - .../static/images/plush-default-split.tar.gz | Bin 83082 -> 0 bytes .../static/images/plush-default/sabnzbdplus.ico | Bin 1406 -> 0 bytes .../static/images/plush-default/spinner.gif | Bin 1169 -> 0 bytes .../static/images/plush-default/sprite-config.png | Bin 29590 -> 0 bytes .../images/plush-default/sprite-jq-colorbox.png | Bin 991 -> 0 bytes .../static/images/plush-default/sprite-main.png | Bin 28659 -> 0 bytes .../static/images/plush-default/sprite-tilex.png | Bin 610 -> 0 bytes .../static/images/plush-default/sprite-tiley.png | Bin 216 -> 0 bytes .../static/images/plush-default/viewmag.png | Bin 1457 -> 0 bytes .../Plush/templates/static/javascripts/config.js | 223 - .../Plush/templates/static/javascripts/lib.js | 407 - .../Plush/templates/static/javascripts/plush.js | 815 -- .../templates/static/stylesheets/plush-default.css | 1552 ---- main/interfaces/smpl/CreativeCommons2-5.txt | 65 - main/interfaces/smpl/CreativeCommons3-0.txt | 76 - main/interfaces/smpl/GPL2.txt | 340 - main/interfaces/smpl/GPL3.txt | 674 -- main/interfaces/smpl/LICENCE-silk_icons.txt | 49 - main/interfaces/smpl/LICENSE.txt | 17 - main/interfaces/smpl/License-ExCanvas.txt | 220 - main/interfaces/smpl/License-MochiKit.txt | 77 - main/interfaces/smpl/License-Nuvola.txt | 573 -- main/interfaces/smpl/License-PlotKit.txt | 37 - .../interfaces/smpl/License-getElementPosition.txt | 39 - main/interfaces/smpl/README.txt | 66 - main/interfaces/smpl/language/de-de.txt | 48 - main/interfaces/smpl/language/fr-fr.txt | 47 - main/interfaces/smpl/language/nl-du.txt | 46 - main/interfaces/smpl/language/sv-se.txt | 48 - main/interfaces/smpl/language/us-en.txt | 47 - main/interfaces/smpl/templates/config.tmpl | 5 - main/interfaces/smpl/templates/config_cat.tmpl | 86 - .../smpl/templates/config_directories.tmpl | 86 - main/interfaces/smpl/templates/config_email.tmpl | 77 - main/interfaces/smpl/templates/config_general.tmpl | 147 - main/interfaces/smpl/templates/config_newzbin.tmpl | 92 - main/interfaces/smpl/templates/config_rss.tmpl | 206 - .../smpl/templates/config_scheduling.tmpl | 69 - main/interfaces/smpl/templates/config_server.tmpl | 102 - main/interfaces/smpl/templates/config_sorting.tmpl | 279 - .../interfaces/smpl/templates/config_switches.tmpl | 185 - .../interfaces/smpl/templates/connection_info.tmpl | 46 - main/interfaces/smpl/templates/history.tmpl | 147 - main/interfaces/smpl/templates/main.tmpl | 1239 --- main/interfaces/smpl/templates/nzo.tmpl | 80 - main/interfaces/smpl/templates/queue.tmpl | 224 - .../smpl/templates/static/MochiKit/MochiKit.js | 8073 -------------------- .../smpl/templates/static/MochiKit/__package__.js | 2 - .../smpl/templates/static/PlotKit/PlotKit.js | 2177 ------ .../smpl/templates/static/excanvas/excanvas.js | 785 -- .../smpl/templates/static/feed-icon-14x14.png | Bin 689 -> 0 bytes .../smpl/templates/static/images/browser.png | Bin 1154 -> 0 bytes .../templates/static/images/bullet_arrow_down.png | Bin 1018 -> 0 bytes .../smpl/templates/static/images/control_pause.png | Bin 598 -> 0 bytes .../smpl/templates/static/images/control_play.png | Bin 592 -> 0 bytes .../smpl/templates/static/images/down.gif | Bin 53 -> 0 bytes .../smpl/templates/static/images/drive.png | Bin 346 -> 0 bytes .../smpl/templates/static/images/drive_go.png | Bin 661 -> 0 bytes .../smpl/templates/static/images/favicon.ico | Bin 45452 -> 0 bytes .../smpl/templates/static/images/key_enter.png | Bin 3511 -> 0 bytes .../static/images/messagebox_critical.png | Bin 1032 -> 0 bytes .../smpl/templates/static/images/newzbin.png | Bin 694 -> 0 bytes .../smpl/templates/static/images/nuvola/kgpg.png | Bin 865 -> 0 bytes .../interfaces/smpl/templates/static/images/up.gif | Bin 53 -> 0 bytes .../smpl/templates/static/sabnzbd_small4.png | Bin 9355 -> 0 bytes .../static/stylesheets/colorschemes/black.css | 113 - .../static/stylesheets/colorschemes/white.css | 108 - .../smpl/templates/static/stylesheets/smpl.css | 369 - main/interfaces/wizard/README.TXT | 21 - main/interfaces/wizard/five.html | 35 - main/interfaces/wizard/four.html | 39 - main/interfaces/wizard/inc_bottom.tmpl | 4 - main/interfaces/wizard/inc_top.tmpl | 15 - main/interfaces/wizard/index.html | 47 - main/interfaces/wizard/language/de-de.txt | 61 - main/interfaces/wizard/language/fr-fr.txt | 53 - main/interfaces/wizard/language/nl-du.txt | 56 - main/interfaces/wizard/language/sv-se.txt | 54 - main/interfaces/wizard/language/us-en.txt | 53 - main/interfaces/wizard/one.html | 76 - .../interfaces/wizard/static/images/classic-th.png | Bin 18667 -> 0 bytes main/interfaces/wizard/static/images/classic.png | Bin 40024 -> 0 bytes main/interfaces/wizard/static/images/favicon.ico | Bin 45452 -> 0 bytes .../wizard/static/images/flags/de-de.png | Bin 307 -> 0 bytes .../wizard/static/images/flags/fr-fr.png | Bin 4474 -> 0 bytes .../wizard/static/images/flags/nl-du.png | Bin 4208 -> 0 bytes .../wizard/static/images/flags/sv-se.png | Bin 5854 -> 0 bytes .../wizard/static/images/flags/us-en.png | Bin 8862 -> 0 bytes main/interfaces/wizard/static/images/icon_sab.png | Bin 3579 -> 0 bytes main/interfaces/wizard/static/images/plush-th.png | Bin 27290 -> 0 bytes main/interfaces/wizard/static/images/plush.png | Bin 54951 -> 0 bytes main/interfaces/wizard/static/images/smpl-th.png | Bin 23708 -> 0 bytes main/interfaces/wizard/static/images/smpl.png | Bin 62655 -> 0 bytes .../wizard/static/javascript/checkserver.js | 109 - main/interfaces/wizard/static/javascript/jquery.js | 19 - .../interfaces/wizard/static/javascript/pagetwo.js | 23 - .../interfaces/wizard/static/javascript/restart.js | 17 - main/interfaces/wizard/static/style.css | 232 - main/interfaces/wizard/three.html | 63 - main/interfaces/wizard/two.html | 50 - main/language/de-de.txt | 887 --- main/language/email-de-de.tmpl | 43 - main/language/email-fr-fr.tmpl | 41 - main/language/email-nl-du.tmpl | 41 - main/language/email-sv-se.tmpl | 43 - main/language/email-us-en.tmpl | 41 - main/language/fr-fr.txt | 833 -- main/language/nl-du.txt | 814 -- main/language/rss-de-de.tmpl | 25 - main/language/rss-fr-fr.tmpl | 25 - main/language/rss-nl-nl.tmpl | 24 - main/language/rss-sv-se.tmpl | 25 - main/language/rss-us-en.tmpl | 25 - main/language/sv-se.txt | 830 -- main/language/us-en.txt | 829 -- main/licenses/License-CherryPy.txt | 39 - main/licenses/License-configobj.txt | 41 - main/licenses/License-feedparser.txt | 42 - main/licenses/License-json.txt | 512 -- main/licenses/License-kronos.txt | 38 - main/licenses/License-listquote.txt | 41 - main/licenses/License-pynewsleecher.txt | 11 - main/licenses/License-rarfile.txt | 23 - main/licenses/License-rsslib.txt | 10 - main/licenses/License-ssmtplib.txt | 36 - main/licenses/Python/LICENSE-BerkeleyDB.txt | 102 - main/licenses/Python/LICENSE-OpenSSL.txt | 127 - main/licenses/Python/LICENSE-Python.txt | 270 - main/licenses/Python/LICENSE-TclTk.txt | 40 - main/licenses/Python/LICENSE.txt | 97 - main/nzb.ico | Bin 96689 -> 0 bytes main/osx/par2/LICENSE | 10 - main/osx/par2/par2-classic | Bin 955376 -> 0 bytes main/osx/par2/par2-sl | Bin 910112 -> 0 bytes main/osx/resources/Credits.rtf | 59 - main/osx/resources/InfoPlist.strings | Bin 148 -> 0 bytes main/osx/resources/MainMenu.nib/classes.nib | 18 - main/osx/resources/MainMenu.nib/info.nib | 21 - main/osx/resources/MainMenu.nib/objects.nib | Bin 1882 -> 0 bytes main/osx/resources/nzbfile.icns | Bin 114788 -> 0 bytes main/osx/resources/sab_clicked.png | Bin 388 -> 0 bytes main/osx/resources/sab_idle.png | Bin 902 -> 0 bytes main/osx/resources/sab_pause.png | Bin 1079 -> 0 bytes main/osx/resources/sabnzbdplus.icns | Bin 117188 -> 0 bytes main/osx/resources/update | 51 - main/osx/unrar/unrar | Bin 440184 -> 0 bytes main/package.py | 537 -- main/sabnzbd-template.sparseimage.zip | Bin 466185 -> 0 bytes main/sabnzbd.ico | Bin 287934 -> 0 bytes main/sabnzbd/__init__.py | 791 -- main/sabnzbd/articlecache.py | 165 - main/sabnzbd/assembler.py | 243 - main/sabnzbd/bpsmeter.py | 76 - main/sabnzbd/cfg.py | 212 - main/sabnzbd/codecs.py | 230 - main/sabnzbd/config.py | 932 --- main/sabnzbd/constants.py | 117 - main/sabnzbd/database.py | 407 - main/sabnzbd/decoder.py | 312 - main/sabnzbd/decorators.py | 47 - main/sabnzbd/dirscanner.py | 356 - main/sabnzbd/downloader.py | 842 -- main/sabnzbd/emailer.py | 223 - main/sabnzbd/interface.py | 3700 --------- main/sabnzbd/lang.py | 204 - main/sabnzbd/misc.py | 1393 ---- main/sabnzbd/newsunpack.py | 1224 --- main/sabnzbd/newswrapper.py | 375 - main/sabnzbd/newzbin.py | 365 - main/sabnzbd/nzbqueue.py | 943 --- main/sabnzbd/nzbstuff.py | 1242 --- main/sabnzbd/postproc.py | 627 -- main/sabnzbd/rss.py | 513 -- main/sabnzbd/scheduler.py | 406 - main/sabnzbd/trylist.py | 59 - main/sabnzbd/tvsort.py | 1064 --- main/sabnzbd/urlgrabber.py | 218 - main/sabnzbd/utils/__init__.py | 0 main/sabnzbd/utils/certgen.py | 82 - main/sabnzbd/utils/configobj.py | 2504 ------ main/sabnzbd/utils/feedparser.py | 2858 ------- main/sabnzbd/utils/json.py | 94 - main/sabnzbd/utils/kronos.py | 579 -- main/sabnzbd/utils/listquote.py | 856 --- main/sabnzbd/utils/osx.py | 53 - main/sabnzbd/utils/rarfile.py | 522 -- main/sabnzbd/utils/rsslib.py | 340 - main/sabnzbd/utils/servertests.py | 121 - main/sabnzbd/utils/ssmtplib.py | 159 - main/sabnzbd/utils/upload.py | 66 - main/sabnzbd/version.py | 8 - main/sabnzbd/wizard.py | 272 - main/setup.py | 19 - main/win/nsis/Include/registerExtension.nsh | 71 - main/win/nsis/Plugins/KillProc.dll | Bin 25088 -> 0 bytes main/win/nsis/Plugins/KillProc.txt | 64 - main/win/par2/COPYING | 340 - main/win/par2/README_FIRST.txt | 917 --- main/win/par2/par2-classic.exe | Bin 229376 -> 0 bytes main/win/par2/par2.exe | Bin 423936 -> 0 bytes main/win/par2/x64/COPYING | 340 - main/win/par2/x64/README_FIRST.txt | 917 --- main/win/par2/x64/par2.exe | Bin 515072 -> 0 bytes main/win/unrar/UnRAR.exe | Bin 246272 -> 0 bytes main/win/unrar/license.txt | 34 - main/win/unrar/x64/UnRAR.exe | Bin 262144 -> 0 bytes main/win/unrar/x64/license.txt | 34 - main/win/unzip/LICENSE | 55 - main/win/unzip/README | 288 - main/win/unzip/README.NT | 40 - main/win/unzip/WHERE | 258 - main/win/unzip/unzip.exe | Bin 167936 -> 0 bytes nzb.ico | Bin 0 -> 96689 bytes osx/par2/LICENSE | 10 + osx/par2/par2-classic | Bin 0 -> 955376 bytes osx/par2/par2-sl | Bin 0 -> 910112 bytes osx/resources/Credits.rtf | 59 + osx/resources/InfoPlist.strings | Bin 0 -> 148 bytes osx/resources/MainMenu.nib/classes.nib | 18 + osx/resources/MainMenu.nib/info.nib | 21 + osx/resources/MainMenu.nib/objects.nib | Bin 0 -> 1882 bytes osx/resources/nzbfile.icns | Bin 0 -> 114788 bytes osx/resources/sab_clicked.png | Bin 0 -> 388 bytes osx/resources/sab_idle.png | Bin 0 -> 902 bytes osx/resources/sab_pause.png | Bin 0 -> 1079 bytes osx/resources/sabnzbdplus.icns | Bin 0 -> 117188 bytes osx/resources/update | 51 + osx/unrar/unrar | Bin 0 -> 440184 bytes package.py | 537 ++ sabnzbd-template.sparseimage.zip | Bin 0 -> 466185 bytes sabnzbd.ico | Bin 0 -> 287934 bytes sabnzbd/__init__.py | 791 ++ sabnzbd/articlecache.py | 165 + sabnzbd/assembler.py | 243 + sabnzbd/bpsmeter.py | 76 + sabnzbd/cfg.py | 212 + sabnzbd/codecs.py | 230 + sabnzbd/config.py | 932 +++ sabnzbd/constants.py | 117 + sabnzbd/database.py | 407 + sabnzbd/decoder.py | 312 + sabnzbd/decorators.py | 47 + sabnzbd/dirscanner.py | 356 + sabnzbd/downloader.py | 842 ++ sabnzbd/emailer.py | 223 + sabnzbd/interface.py | 3700 +++++++++ sabnzbd/lang.py | 204 + sabnzbd/misc.py | 1393 ++++ sabnzbd/newsunpack.py | 1224 +++ sabnzbd/newswrapper.py | 375 + sabnzbd/newzbin.py | 365 + sabnzbd/nzbqueue.py | 943 +++ sabnzbd/nzbstuff.py | 1242 +++ sabnzbd/postproc.py | 627 ++ sabnzbd/rss.py | 513 ++ sabnzbd/scheduler.py | 406 + sabnzbd/trylist.py | 59 + sabnzbd/tvsort.py | 1064 +++ sabnzbd/urlgrabber.py | 218 + sabnzbd/utils/__init__.py | 0 sabnzbd/utils/certgen.py | 82 + sabnzbd/utils/configobj.py | 2504 ++++++ sabnzbd/utils/feedparser.py | 2858 +++++++ sabnzbd/utils/json.py | 94 + sabnzbd/utils/kronos.py | 579 ++ sabnzbd/utils/listquote.py | 856 +++ sabnzbd/utils/osx.py | 53 + sabnzbd/utils/rarfile.py | 522 ++ sabnzbd/utils/rsslib.py | 340 + sabnzbd/utils/servertests.py | 121 + sabnzbd/utils/ssmtplib.py | 159 + sabnzbd/utils/upload.py | 66 + sabnzbd/version.py | 8 + sabnzbd/wizard.py | 272 + setup.py | 19 + win/nsis/Include/registerExtension.nsh | 71 + win/nsis/Plugins/KillProc.dll | Bin 0 -> 25088 bytes win/nsis/Plugins/KillProc.txt | 64 + win/par2/COPYING | 340 + win/par2/README_FIRST.txt | 917 +++ win/par2/par2-classic.exe | Bin 0 -> 229376 bytes win/par2/par2.exe | Bin 0 -> 423936 bytes win/par2/x64/COPYING | 340 + win/par2/x64/README_FIRST.txt | 917 +++ win/par2/x64/par2.exe | Bin 0 -> 515072 bytes win/unrar/UnRAR.exe | Bin 0 -> 246272 bytes win/unrar/license.txt | 34 + win/unrar/x64/UnRAR.exe | Bin 0 -> 262144 bytes win/unrar/x64/license.txt | 34 + win/unzip/LICENSE | 55 + win/unzip/README | 288 + win/unzip/README.NT | 40 + win/unzip/WHERE | 258 + win/unzip/unzip.exe | Bin 0 -> 167936 bytes 760 files changed, 74413 insertions(+), 74413 deletions(-) create mode 100644 CHANGELOG.txt create mode 100644 COPYRIGHT.txt create mode 100644 GPL2.txt create mode 100644 GPL3.txt create mode 100644 INSTALL.txt create mode 100644 ISSUES.txt create mode 100644 LICENSE.txt create mode 100644 NSIS_Installer.nsi create mode 100644 PKG-INFO create mode 100644 README.txt create mode 100755 SABnzbd.py create mode 100755 SABnzbdDelegate.py create mode 100644 Sample-PostProc.cmd create mode 100755 Sample-PostProc.sh create mode 100644 cherrypy.zip create mode 100644 interfaces/Classic/README.TXT create mode 100644 interfaces/Classic/templates/config.tmpl create mode 100644 interfaces/Classic/templates/config_cat.tmpl create mode 100644 interfaces/Classic/templates/config_directories.tmpl create mode 100644 interfaces/Classic/templates/config_email.tmpl create mode 100644 interfaces/Classic/templates/config_general.tmpl create mode 100644 interfaces/Classic/templates/config_newzbin.tmpl create mode 100644 interfaces/Classic/templates/config_rss.tmpl create mode 100644 interfaces/Classic/templates/config_scheduling.tmpl create mode 100644 interfaces/Classic/templates/config_server.tmpl create mode 100644 interfaces/Classic/templates/config_sorting.tmpl create mode 100644 interfaces/Classic/templates/config_switches.tmpl create mode 100644 interfaces/Classic/templates/connection_info.tmpl create mode 100644 interfaces/Classic/templates/history.tmpl create mode 100644 interfaces/Classic/templates/inc_bottom.tmpl create mode 100644 interfaces/Classic/templates/inc_cmenu.tmpl create mode 100644 interfaces/Classic/templates/inc_top.tmpl create mode 100644 interfaces/Classic/templates/main.tmpl create mode 100644 interfaces/Classic/templates/nzo.tmpl create mode 100644 interfaces/Classic/templates/queue.tmpl create mode 100644 interfaces/Classic/templates/static/images/favicon.ico create mode 100644 interfaces/Classic/templates/static/javascript/dropdown.js create mode 100644 interfaces/Classic/templates/static/placeholder.txt create mode 100644 interfaces/Classic/templates/static/stylesheets/colorschemes/black.css create mode 100644 interfaces/Classic/templates/static/stylesheets/colorschemes/classic.css create mode 100644 interfaces/Classic/templates/static/stylesheets/colorschemes/darkblue.css create mode 100644 interfaces/Classic/templates/static/stylesheets/colorschemes/green.css create mode 100644 interfaces/Classic/templates/static/stylesheets/colorschemes/lightblue.css create mode 100644 interfaces/Classic/templates/static/stylesheets/colorschemes/red.css create mode 100644 interfaces/Classic/templates/static/stylesheets/colorschemes/white-black.css create mode 100644 interfaces/Classic/templates/static/stylesheets/default.css create mode 100644 interfaces/Classic/templates/static/stylesheets/defaultcolors.css create mode 100644 interfaces/Concept/README.txt create mode 100644 interfaces/Concept/licenses/LICENSE-BSD.txt create mode 100644 interfaces/Concept/licenses/LICENSE-CC.txt create mode 100644 interfaces/Concept/licenses/LICENSE-GPL.txt create mode 100644 interfaces/Concept/licenses/LICENSE-MIT.txt create mode 100644 interfaces/Concept/templates/main.tmpl create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_flat_30_cccccc_40x100.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_flat_50_5c5c5c_40x100.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_glass_20_555555_1x400.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_glass_40_0078a3_1x400.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_glass_40_ffc73d_1x400.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_gloss-wave_25_333333_500x100.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_highlight-soft_80_eeeeee_1x100.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_25_000000_1x100.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_30_f58400_1x100.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-icons_222222_256x240.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-icons_4b8e0b_256x240.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-icons_a83300_256x240.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-icons_cccccc_256x240.png create mode 100755 interfaces/Concept/templates/static/images/darkness/ui-icons_ffffff_256x240.png create mode 100644 interfaces/Concept/templates/static/images/logo.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-bg_flat_55_fbec88_40x100.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-bg_glass_75_d0e5f5_1x400.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-bg_glass_85_dfeffc_1x400.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-icons_217bc0_256x240.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-icons_2e83ff_256x240.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-icons_469bdd_256x240.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-icons_6da8d5_256x240.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-icons_cd0a0a_256x240.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-icons_d8e7f3_256x240.png create mode 100755 interfaces/Concept/templates/static/images/redmond/ui-icons_f9bd01_256x240.png create mode 100644 interfaces/Concept/templates/static/images/sabnzbdplus.ico create mode 100644 interfaces/Concept/templates/static/javascripts/concept.js create mode 100644 interfaces/Concept/templates/static/javascripts/lib.js create mode 100755 interfaces/Concept/templates/static/stylesheets/colorschemes/darkness.css create mode 100755 interfaces/Concept/templates/static/stylesheets/colorschemes/redmond.css create mode 100644 interfaces/Concept/templates/static/stylesheets/concept.css create mode 100755 interfaces/Concept/templates/static/stylesheets/ui.jqgrid.css create mode 100644 interfaces/Mobile/README.txt create mode 100644 interfaces/Mobile/language/de-de.txt create mode 100644 interfaces/Mobile/language/fr-fr.txt create mode 100644 interfaces/Mobile/language/nl-du.txt create mode 100644 interfaces/Mobile/language/sv-se.txt create mode 100644 interfaces/Mobile/language/us-en.txt create mode 100644 interfaces/Mobile/licenses/LICENSE-BSD.txt create mode 100644 interfaces/Mobile/licenses/LICENSE-CC.txt create mode 100644 interfaces/Mobile/licenses/LICENSE-GPL.txt create mode 100644 interfaces/Mobile/licenses/LICENSE-MIT.txt create mode 100644 interfaces/Mobile/templates/main.tmpl create mode 100644 interfaces/Mobile/templates/static/images/dark/back_button.png create mode 100644 interfaces/Mobile/templates/static/images/dark/back_button_clicked.png create mode 100644 interfaces/Mobile/templates/static/images/dark/button.png create mode 100644 interfaces/Mobile/templates/static/images/dark/button_clicked.png create mode 100644 interfaces/Mobile/templates/static/images/dark/chevron.png create mode 100644 interfaces/Mobile/templates/static/images/dark/chevron_circle.png create mode 100644 interfaces/Mobile/templates/static/images/dark/grayButton.png create mode 100644 interfaces/Mobile/templates/static/images/dark/loading.gif create mode 100644 interfaces/Mobile/templates/static/images/dark/on_off.png create mode 100644 interfaces/Mobile/templates/static/images/dark/rowhead.png create mode 100644 interfaces/Mobile/templates/static/images/dark/toggle.png create mode 100644 interfaces/Mobile/templates/static/images/dark/toggleOn.png create mode 100644 interfaces/Mobile/templates/static/images/dark/toolbar.png create mode 100644 interfaces/Mobile/templates/static/images/dark/whiteButton.png create mode 100644 interfaces/Mobile/templates/static/images/light/backButton.png create mode 100644 interfaces/Mobile/templates/static/images/light/blueButton.png create mode 100644 interfaces/Mobile/templates/static/images/light/cancel.png create mode 100644 interfaces/Mobile/templates/static/images/light/chevron.png create mode 100644 interfaces/Mobile/templates/static/images/light/grayButton.png create mode 100644 interfaces/Mobile/templates/static/images/light/listArrowSel.png create mode 100644 interfaces/Mobile/templates/static/images/light/listGroup.png create mode 100644 interfaces/Mobile/templates/static/images/light/loading.gif create mode 100644 interfaces/Mobile/templates/static/images/light/on_off.png create mode 100644 interfaces/Mobile/templates/static/images/light/pinstripes.png create mode 100644 interfaces/Mobile/templates/static/images/light/selection.png create mode 100644 interfaces/Mobile/templates/static/images/light/thumb.png create mode 100644 interfaces/Mobile/templates/static/images/light/toggle.png create mode 100644 interfaces/Mobile/templates/static/images/light/toggleOn.png create mode 100644 interfaces/Mobile/templates/static/images/light/toolButton.png create mode 100644 interfaces/Mobile/templates/static/images/light/toolbar.png create mode 100644 interfaces/Mobile/templates/static/images/light/whiteButton.png create mode 100644 interfaces/Mobile/templates/static/images/sab.png create mode 100644 interfaces/Mobile/templates/static/javascripts/mobile.js create mode 100644 interfaces/Mobile/templates/static/stylesheets/colorschemes/dark.css create mode 100644 interfaces/Mobile/templates/static/stylesheets/colorschemes/light.css create mode 100644 interfaces/Mobile/templates/static/stylesheets/jqtouch.css create mode 100644 interfaces/Plush/README.txt create mode 100644 interfaces/Plush/language/de-de.txt create mode 100644 interfaces/Plush/language/fr-fr.txt create mode 100644 interfaces/Plush/language/nl-du.txt create mode 100644 interfaces/Plush/language/sv-se.txt create mode 100644 interfaces/Plush/language/us-en.txt create mode 100644 interfaces/Plush/licenses/LICENSE-BSD.txt create mode 100644 interfaces/Plush/licenses/LICENSE-CC.txt create mode 100644 interfaces/Plush/licenses/LICENSE-GPL.txt create mode 100755 interfaces/Plush/licenses/LICENSE-GPL3.txt create mode 100755 interfaces/Plush/licenses/LICENSE-LGPL.txt create mode 100644 interfaces/Plush/licenses/LICENSE-MIT.txt create mode 100644 interfaces/Plush/licenses/LICENSE-WebToolkit.txt create mode 100644 interfaces/Plush/templates/config.tmpl create mode 100644 interfaces/Plush/templates/config_cat.tmpl create mode 100644 interfaces/Plush/templates/config_directories.tmpl create mode 100644 interfaces/Plush/templates/config_email.tmpl create mode 100644 interfaces/Plush/templates/config_general.tmpl create mode 100644 interfaces/Plush/templates/config_inc_footer.tmpl create mode 100644 interfaces/Plush/templates/config_inc_header.tmpl create mode 100644 interfaces/Plush/templates/config_newzbin.tmpl create mode 100644 interfaces/Plush/templates/config_rss.tmpl create mode 100644 interfaces/Plush/templates/config_scheduling.tmpl create mode 100644 interfaces/Plush/templates/config_server.tmpl create mode 100644 interfaces/Plush/templates/config_sorting.tmpl create mode 100644 interfaces/Plush/templates/config_switches.tmpl create mode 100644 interfaces/Plush/templates/connection_info.tmpl create mode 100644 interfaces/Plush/templates/history.tmpl create mode 100644 interfaces/Plush/templates/main.tmpl create mode 100644 interfaces/Plush/templates/nzo.tmpl create mode 100644 interfaces/Plush/templates/queue.tmpl create mode 100644 interfaces/Plush/templates/static/images/plush-default-split.tar.gz create mode 100644 interfaces/Plush/templates/static/images/plush-default/sabnzbdplus.ico create mode 100644 interfaces/Plush/templates/static/images/plush-default/spinner.gif create mode 100644 interfaces/Plush/templates/static/images/plush-default/sprite-config.png create mode 100755 interfaces/Plush/templates/static/images/plush-default/sprite-jq-colorbox.png create mode 100644 interfaces/Plush/templates/static/images/plush-default/sprite-main.png create mode 100644 interfaces/Plush/templates/static/images/plush-default/sprite-tilex.png create mode 100644 interfaces/Plush/templates/static/images/plush-default/sprite-tiley.png create mode 100644 interfaces/Plush/templates/static/images/plush-default/viewmag.png create mode 100644 interfaces/Plush/templates/static/javascripts/config.js create mode 100644 interfaces/Plush/templates/static/javascripts/lib.js create mode 100644 interfaces/Plush/templates/static/javascripts/plush.js create mode 100644 interfaces/Plush/templates/static/stylesheets/plush-default.css create mode 100644 interfaces/smpl/CreativeCommons2-5.txt create mode 100644 interfaces/smpl/CreativeCommons3-0.txt create mode 100644 interfaces/smpl/GPL2.txt create mode 100644 interfaces/smpl/GPL3.txt create mode 100644 interfaces/smpl/LICENCE-silk_icons.txt create mode 100644 interfaces/smpl/LICENSE.txt create mode 100644 interfaces/smpl/License-ExCanvas.txt create mode 100644 interfaces/smpl/License-MochiKit.txt create mode 100644 interfaces/smpl/License-Nuvola.txt create mode 100644 interfaces/smpl/License-PlotKit.txt create mode 100644 interfaces/smpl/License-getElementPosition.txt create mode 100644 interfaces/smpl/README.txt create mode 100644 interfaces/smpl/language/de-de.txt create mode 100644 interfaces/smpl/language/fr-fr.txt create mode 100644 interfaces/smpl/language/nl-du.txt create mode 100644 interfaces/smpl/language/sv-se.txt create mode 100644 interfaces/smpl/language/us-en.txt create mode 100644 interfaces/smpl/templates/config.tmpl create mode 100644 interfaces/smpl/templates/config_cat.tmpl create mode 100644 interfaces/smpl/templates/config_directories.tmpl create mode 100644 interfaces/smpl/templates/config_email.tmpl create mode 100644 interfaces/smpl/templates/config_general.tmpl create mode 100644 interfaces/smpl/templates/config_newzbin.tmpl create mode 100644 interfaces/smpl/templates/config_rss.tmpl create mode 100644 interfaces/smpl/templates/config_scheduling.tmpl create mode 100644 interfaces/smpl/templates/config_server.tmpl create mode 100644 interfaces/smpl/templates/config_sorting.tmpl create mode 100644 interfaces/smpl/templates/config_switches.tmpl create mode 100644 interfaces/smpl/templates/connection_info.tmpl create mode 100644 interfaces/smpl/templates/history.tmpl create mode 100644 interfaces/smpl/templates/main.tmpl create mode 100644 interfaces/smpl/templates/nzo.tmpl create mode 100644 interfaces/smpl/templates/queue.tmpl create mode 100644 interfaces/smpl/templates/static/MochiKit/MochiKit.js create mode 100644 interfaces/smpl/templates/static/MochiKit/__package__.js create mode 100644 interfaces/smpl/templates/static/PlotKit/PlotKit.js create mode 100644 interfaces/smpl/templates/static/excanvas/excanvas.js create mode 100644 interfaces/smpl/templates/static/feed-icon-14x14.png create mode 100644 interfaces/smpl/templates/static/images/browser.png create mode 100644 interfaces/smpl/templates/static/images/bullet_arrow_down.png create mode 100644 interfaces/smpl/templates/static/images/control_pause.png create mode 100644 interfaces/smpl/templates/static/images/control_play.png create mode 100644 interfaces/smpl/templates/static/images/down.gif create mode 100644 interfaces/smpl/templates/static/images/drive.png create mode 100644 interfaces/smpl/templates/static/images/drive_go.png create mode 100644 interfaces/smpl/templates/static/images/favicon.ico create mode 100644 interfaces/smpl/templates/static/images/key_enter.png create mode 100644 interfaces/smpl/templates/static/images/messagebox_critical.png create mode 100644 interfaces/smpl/templates/static/images/newzbin.png create mode 100644 interfaces/smpl/templates/static/images/nuvola/kgpg.png create mode 100644 interfaces/smpl/templates/static/images/up.gif create mode 100644 interfaces/smpl/templates/static/sabnzbd_small4.png create mode 100644 interfaces/smpl/templates/static/stylesheets/colorschemes/black.css create mode 100644 interfaces/smpl/templates/static/stylesheets/colorschemes/white.css create mode 100644 interfaces/smpl/templates/static/stylesheets/smpl.css create mode 100644 interfaces/wizard/README.TXT create mode 100644 interfaces/wizard/five.html create mode 100644 interfaces/wizard/four.html create mode 100644 interfaces/wizard/inc_bottom.tmpl create mode 100644 interfaces/wizard/inc_top.tmpl create mode 100644 interfaces/wizard/index.html create mode 100644 interfaces/wizard/language/de-de.txt create mode 100644 interfaces/wizard/language/fr-fr.txt create mode 100644 interfaces/wizard/language/nl-du.txt create mode 100644 interfaces/wizard/language/sv-se.txt create mode 100644 interfaces/wizard/language/us-en.txt create mode 100644 interfaces/wizard/one.html create mode 100644 interfaces/wizard/static/images/classic-th.png create mode 100644 interfaces/wizard/static/images/classic.png create mode 100644 interfaces/wizard/static/images/favicon.ico create mode 100644 interfaces/wizard/static/images/flags/de-de.png create mode 100644 interfaces/wizard/static/images/flags/fr-fr.png create mode 100644 interfaces/wizard/static/images/flags/nl-du.png create mode 100644 interfaces/wizard/static/images/flags/sv-se.png create mode 100644 interfaces/wizard/static/images/flags/us-en.png create mode 100644 interfaces/wizard/static/images/icon_sab.png create mode 100644 interfaces/wizard/static/images/plush-th.png create mode 100644 interfaces/wizard/static/images/plush.png create mode 100644 interfaces/wizard/static/images/smpl-th.png create mode 100644 interfaces/wizard/static/images/smpl.png create mode 100644 interfaces/wizard/static/javascript/checkserver.js create mode 100644 interfaces/wizard/static/javascript/jquery.js create mode 100644 interfaces/wizard/static/javascript/pagetwo.js create mode 100644 interfaces/wizard/static/javascript/restart.js create mode 100644 interfaces/wizard/static/style.css create mode 100644 interfaces/wizard/three.html create mode 100644 interfaces/wizard/two.html create mode 100644 language/de-de.txt create mode 100644 language/email-de-de.tmpl create mode 100644 language/email-fr-fr.tmpl create mode 100644 language/email-nl-du.tmpl create mode 100644 language/email-sv-se.tmpl create mode 100644 language/email-us-en.tmpl create mode 100644 language/fr-fr.txt create mode 100644 language/nl-du.txt create mode 100644 language/rss-de-de.tmpl create mode 100644 language/rss-fr-fr.tmpl create mode 100644 language/rss-nl-nl.tmpl create mode 100644 language/rss-sv-se.tmpl create mode 100644 language/rss-us-en.tmpl create mode 100644 language/sv-se.txt create mode 100644 language/us-en.txt create mode 100644 licenses/License-CherryPy.txt create mode 100644 licenses/License-configobj.txt create mode 100644 licenses/License-feedparser.txt create mode 100644 licenses/License-json.txt create mode 100644 licenses/License-kronos.txt create mode 100644 licenses/License-listquote.txt create mode 100644 licenses/License-pynewsleecher.txt create mode 100644 licenses/License-rarfile.txt create mode 100644 licenses/License-rsslib.txt create mode 100644 licenses/License-ssmtplib.txt create mode 100644 licenses/Python/LICENSE-BerkeleyDB.txt create mode 100644 licenses/Python/LICENSE-OpenSSL.txt create mode 100644 licenses/Python/LICENSE-Python.txt create mode 100644 licenses/Python/LICENSE-TclTk.txt create mode 100644 licenses/Python/LICENSE.txt delete mode 100644 main/CHANGELOG.txt delete mode 100644 main/COPYRIGHT.txt delete mode 100644 main/GPL2.txt delete mode 100644 main/GPL3.txt delete mode 100644 main/INSTALL.txt delete mode 100644 main/ISSUES.txt delete mode 100644 main/LICENSE.txt delete mode 100644 main/NSIS_Installer.nsi delete mode 100644 main/PKG-INFO delete mode 100644 main/README.txt delete mode 100755 main/SABnzbd.py delete mode 100755 main/SABnzbdDelegate.py delete mode 100644 main/Sample-PostProc.cmd delete mode 100755 main/Sample-PostProc.sh delete mode 100644 main/cherrypy.zip delete mode 100644 main/interfaces/Classic/README.TXT delete mode 100644 main/interfaces/Classic/templates/config.tmpl delete mode 100644 main/interfaces/Classic/templates/config_cat.tmpl delete mode 100644 main/interfaces/Classic/templates/config_directories.tmpl delete mode 100644 main/interfaces/Classic/templates/config_email.tmpl delete mode 100644 main/interfaces/Classic/templates/config_general.tmpl delete mode 100644 main/interfaces/Classic/templates/config_newzbin.tmpl delete mode 100644 main/interfaces/Classic/templates/config_rss.tmpl delete mode 100644 main/interfaces/Classic/templates/config_scheduling.tmpl delete mode 100644 main/interfaces/Classic/templates/config_server.tmpl delete mode 100644 main/interfaces/Classic/templates/config_sorting.tmpl delete mode 100644 main/interfaces/Classic/templates/config_switches.tmpl delete mode 100644 main/interfaces/Classic/templates/connection_info.tmpl delete mode 100644 main/interfaces/Classic/templates/history.tmpl delete mode 100644 main/interfaces/Classic/templates/inc_bottom.tmpl delete mode 100644 main/interfaces/Classic/templates/inc_cmenu.tmpl delete mode 100644 main/interfaces/Classic/templates/inc_top.tmpl delete mode 100644 main/interfaces/Classic/templates/main.tmpl delete mode 100644 main/interfaces/Classic/templates/nzo.tmpl delete mode 100644 main/interfaces/Classic/templates/queue.tmpl delete mode 100644 main/interfaces/Classic/templates/static/images/favicon.ico delete mode 100644 main/interfaces/Classic/templates/static/javascript/dropdown.js delete mode 100644 main/interfaces/Classic/templates/static/placeholder.txt delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/colorschemes/black.css delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/colorschemes/classic.css delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/colorschemes/darkblue.css delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/colorschemes/green.css delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/colorschemes/lightblue.css delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/colorschemes/red.css delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/colorschemes/white-black.css delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/default.css delete mode 100644 main/interfaces/Classic/templates/static/stylesheets/defaultcolors.css delete mode 100644 main/interfaces/Concept/README.txt delete mode 100644 main/interfaces/Concept/licenses/LICENSE-BSD.txt delete mode 100644 main/interfaces/Concept/licenses/LICENSE-CC.txt delete mode 100644 main/interfaces/Concept/licenses/LICENSE-GPL.txt delete mode 100644 main/interfaces/Concept/licenses/LICENSE-MIT.txt delete mode 100644 main/interfaces/Concept/templates/main.tmpl delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_30_cccccc_40x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_50_5c5c5c_40x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_glass_20_555555_1x400.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_glass_40_0078a3_1x400.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_glass_40_ffc73d_1x400.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_gloss-wave_25_333333_500x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_highlight-soft_80_eeeeee_1x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_25_000000_1x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_30_f58400_1x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-icons_222222_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-icons_4b8e0b_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-icons_a83300_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-icons_cccccc_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/darkness/ui-icons_ffffff_256x240.png delete mode 100644 main/interfaces/Concept/templates/static/images/logo.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-bg_flat_55_fbec88_40x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_75_d0e5f5_1x400.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_85_dfeffc_1x400.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_95_fef1ec_1x400.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-bg_inset-hard_100_f5f8f9_1x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-bg_inset-hard_100_fcfdfd_1x100.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-icons_217bc0_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-icons_2e83ff_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-icons_469bdd_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-icons_6da8d5_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-icons_cd0a0a_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-icons_d8e7f3_256x240.png delete mode 100755 main/interfaces/Concept/templates/static/images/redmond/ui-icons_f9bd01_256x240.png delete mode 100644 main/interfaces/Concept/templates/static/images/sabnzbdplus.ico delete mode 100644 main/interfaces/Concept/templates/static/javascripts/concept.js delete mode 100644 main/interfaces/Concept/templates/static/javascripts/lib.js delete mode 100755 main/interfaces/Concept/templates/static/stylesheets/colorschemes/darkness.css delete mode 100755 main/interfaces/Concept/templates/static/stylesheets/colorschemes/redmond.css delete mode 100644 main/interfaces/Concept/templates/static/stylesheets/concept.css delete mode 100755 main/interfaces/Concept/templates/static/stylesheets/ui.jqgrid.css delete mode 100644 main/interfaces/Mobile/README.txt delete mode 100644 main/interfaces/Mobile/language/de-de.txt delete mode 100644 main/interfaces/Mobile/language/fr-fr.txt delete mode 100644 main/interfaces/Mobile/language/nl-du.txt delete mode 100644 main/interfaces/Mobile/language/sv-se.txt delete mode 100644 main/interfaces/Mobile/language/us-en.txt delete mode 100644 main/interfaces/Mobile/licenses/LICENSE-BSD.txt delete mode 100644 main/interfaces/Mobile/licenses/LICENSE-CC.txt delete mode 100644 main/interfaces/Mobile/licenses/LICENSE-GPL.txt delete mode 100644 main/interfaces/Mobile/licenses/LICENSE-MIT.txt delete mode 100644 main/interfaces/Mobile/templates/main.tmpl delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/back_button.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/back_button_clicked.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/button.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/button_clicked.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/chevron.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/chevron_circle.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/grayButton.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/loading.gif delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/on_off.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/rowhead.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/toggle.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/toggleOn.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/toolbar.png delete mode 100644 main/interfaces/Mobile/templates/static/images/dark/whiteButton.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/backButton.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/blueButton.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/cancel.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/chevron.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/grayButton.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/listArrowSel.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/listGroup.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/loading.gif delete mode 100644 main/interfaces/Mobile/templates/static/images/light/on_off.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/pinstripes.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/selection.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/thumb.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/toggle.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/toggleOn.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/toolButton.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/toolbar.png delete mode 100644 main/interfaces/Mobile/templates/static/images/light/whiteButton.png delete mode 100644 main/interfaces/Mobile/templates/static/images/sab.png delete mode 100644 main/interfaces/Mobile/templates/static/javascripts/mobile.js delete mode 100644 main/interfaces/Mobile/templates/static/stylesheets/colorschemes/dark.css delete mode 100644 main/interfaces/Mobile/templates/static/stylesheets/colorschemes/light.css delete mode 100644 main/interfaces/Mobile/templates/static/stylesheets/jqtouch.css delete mode 100644 main/interfaces/Plush/README.txt delete mode 100644 main/interfaces/Plush/language/de-de.txt delete mode 100644 main/interfaces/Plush/language/fr-fr.txt delete mode 100644 main/interfaces/Plush/language/nl-du.txt delete mode 100644 main/interfaces/Plush/language/sv-se.txt delete mode 100644 main/interfaces/Plush/language/us-en.txt delete mode 100644 main/interfaces/Plush/licenses/LICENSE-BSD.txt delete mode 100644 main/interfaces/Plush/licenses/LICENSE-CC.txt delete mode 100644 main/interfaces/Plush/licenses/LICENSE-GPL.txt delete mode 100755 main/interfaces/Plush/licenses/LICENSE-GPL3.txt delete mode 100755 main/interfaces/Plush/licenses/LICENSE-LGPL.txt delete mode 100644 main/interfaces/Plush/licenses/LICENSE-MIT.txt delete mode 100644 main/interfaces/Plush/licenses/LICENSE-WebToolkit.txt delete mode 100644 main/interfaces/Plush/templates/config.tmpl delete mode 100644 main/interfaces/Plush/templates/config_cat.tmpl delete mode 100644 main/interfaces/Plush/templates/config_directories.tmpl delete mode 100644 main/interfaces/Plush/templates/config_email.tmpl delete mode 100644 main/interfaces/Plush/templates/config_general.tmpl delete mode 100644 main/interfaces/Plush/templates/config_inc_footer.tmpl delete mode 100644 main/interfaces/Plush/templates/config_inc_header.tmpl delete mode 100644 main/interfaces/Plush/templates/config_newzbin.tmpl delete mode 100644 main/interfaces/Plush/templates/config_rss.tmpl delete mode 100644 main/interfaces/Plush/templates/config_scheduling.tmpl delete mode 100644 main/interfaces/Plush/templates/config_server.tmpl delete mode 100644 main/interfaces/Plush/templates/config_sorting.tmpl delete mode 100644 main/interfaces/Plush/templates/config_switches.tmpl delete mode 100644 main/interfaces/Plush/templates/connection_info.tmpl delete mode 100644 main/interfaces/Plush/templates/history.tmpl delete mode 100644 main/interfaces/Plush/templates/main.tmpl delete mode 100644 main/interfaces/Plush/templates/nzo.tmpl delete mode 100644 main/interfaces/Plush/templates/queue.tmpl delete mode 100644 main/interfaces/Plush/templates/static/images/plush-default-split.tar.gz delete mode 100644 main/interfaces/Plush/templates/static/images/plush-default/sabnzbdplus.ico delete mode 100644 main/interfaces/Plush/templates/static/images/plush-default/spinner.gif delete mode 100644 main/interfaces/Plush/templates/static/images/plush-default/sprite-config.png delete mode 100755 main/interfaces/Plush/templates/static/images/plush-default/sprite-jq-colorbox.png delete mode 100644 main/interfaces/Plush/templates/static/images/plush-default/sprite-main.png delete mode 100644 main/interfaces/Plush/templates/static/images/plush-default/sprite-tilex.png delete mode 100644 main/interfaces/Plush/templates/static/images/plush-default/sprite-tiley.png delete mode 100644 main/interfaces/Plush/templates/static/images/plush-default/viewmag.png delete mode 100644 main/interfaces/Plush/templates/static/javascripts/config.js delete mode 100644 main/interfaces/Plush/templates/static/javascripts/lib.js delete mode 100644 main/interfaces/Plush/templates/static/javascripts/plush.js delete mode 100644 main/interfaces/Plush/templates/static/stylesheets/plush-default.css delete mode 100644 main/interfaces/smpl/CreativeCommons2-5.txt delete mode 100644 main/interfaces/smpl/CreativeCommons3-0.txt delete mode 100644 main/interfaces/smpl/GPL2.txt delete mode 100644 main/interfaces/smpl/GPL3.txt delete mode 100644 main/interfaces/smpl/LICENCE-silk_icons.txt delete mode 100644 main/interfaces/smpl/LICENSE.txt delete mode 100644 main/interfaces/smpl/License-ExCanvas.txt delete mode 100644 main/interfaces/smpl/License-MochiKit.txt delete mode 100644 main/interfaces/smpl/License-Nuvola.txt delete mode 100644 main/interfaces/smpl/License-PlotKit.txt delete mode 100644 main/interfaces/smpl/License-getElementPosition.txt delete mode 100644 main/interfaces/smpl/README.txt delete mode 100644 main/interfaces/smpl/language/de-de.txt delete mode 100644 main/interfaces/smpl/language/fr-fr.txt delete mode 100644 main/interfaces/smpl/language/nl-du.txt delete mode 100644 main/interfaces/smpl/language/sv-se.txt delete mode 100644 main/interfaces/smpl/language/us-en.txt delete mode 100644 main/interfaces/smpl/templates/config.tmpl delete mode 100644 main/interfaces/smpl/templates/config_cat.tmpl delete mode 100644 main/interfaces/smpl/templates/config_directories.tmpl delete mode 100644 main/interfaces/smpl/templates/config_email.tmpl delete mode 100644 main/interfaces/smpl/templates/config_general.tmpl delete mode 100644 main/interfaces/smpl/templates/config_newzbin.tmpl delete mode 100644 main/interfaces/smpl/templates/config_rss.tmpl delete mode 100644 main/interfaces/smpl/templates/config_scheduling.tmpl delete mode 100644 main/interfaces/smpl/templates/config_server.tmpl delete mode 100644 main/interfaces/smpl/templates/config_sorting.tmpl delete mode 100644 main/interfaces/smpl/templates/config_switches.tmpl delete mode 100644 main/interfaces/smpl/templates/connection_info.tmpl delete mode 100644 main/interfaces/smpl/templates/history.tmpl delete mode 100644 main/interfaces/smpl/templates/main.tmpl delete mode 100644 main/interfaces/smpl/templates/nzo.tmpl delete mode 100644 main/interfaces/smpl/templates/queue.tmpl delete mode 100644 main/interfaces/smpl/templates/static/MochiKit/MochiKit.js delete mode 100644 main/interfaces/smpl/templates/static/MochiKit/__package__.js delete mode 100644 main/interfaces/smpl/templates/static/PlotKit/PlotKit.js delete mode 100644 main/interfaces/smpl/templates/static/excanvas/excanvas.js delete mode 100644 main/interfaces/smpl/templates/static/feed-icon-14x14.png delete mode 100644 main/interfaces/smpl/templates/static/images/browser.png delete mode 100644 main/interfaces/smpl/templates/static/images/bullet_arrow_down.png delete mode 100644 main/interfaces/smpl/templates/static/images/control_pause.png delete mode 100644 main/interfaces/smpl/templates/static/images/control_play.png delete mode 100644 main/interfaces/smpl/templates/static/images/down.gif delete mode 100644 main/interfaces/smpl/templates/static/images/drive.png delete mode 100644 main/interfaces/smpl/templates/static/images/drive_go.png delete mode 100644 main/interfaces/smpl/templates/static/images/favicon.ico delete mode 100644 main/interfaces/smpl/templates/static/images/key_enter.png delete mode 100644 main/interfaces/smpl/templates/static/images/messagebox_critical.png delete mode 100644 main/interfaces/smpl/templates/static/images/newzbin.png delete mode 100644 main/interfaces/smpl/templates/static/images/nuvola/kgpg.png delete mode 100644 main/interfaces/smpl/templates/static/images/up.gif delete mode 100644 main/interfaces/smpl/templates/static/sabnzbd_small4.png delete mode 100644 main/interfaces/smpl/templates/static/stylesheets/colorschemes/black.css delete mode 100644 main/interfaces/smpl/templates/static/stylesheets/colorschemes/white.css delete mode 100644 main/interfaces/smpl/templates/static/stylesheets/smpl.css delete mode 100644 main/interfaces/wizard/README.TXT delete mode 100644 main/interfaces/wizard/five.html delete mode 100644 main/interfaces/wizard/four.html delete mode 100644 main/interfaces/wizard/inc_bottom.tmpl delete mode 100644 main/interfaces/wizard/inc_top.tmpl delete mode 100644 main/interfaces/wizard/index.html delete mode 100644 main/interfaces/wizard/language/de-de.txt delete mode 100644 main/interfaces/wizard/language/fr-fr.txt delete mode 100644 main/interfaces/wizard/language/nl-du.txt delete mode 100644 main/interfaces/wizard/language/sv-se.txt delete mode 100644 main/interfaces/wizard/language/us-en.txt delete mode 100644 main/interfaces/wizard/one.html delete mode 100644 main/interfaces/wizard/static/images/classic-th.png delete mode 100644 main/interfaces/wizard/static/images/classic.png delete mode 100644 main/interfaces/wizard/static/images/favicon.ico delete mode 100644 main/interfaces/wizard/static/images/flags/de-de.png delete mode 100644 main/interfaces/wizard/static/images/flags/fr-fr.png delete mode 100644 main/interfaces/wizard/static/images/flags/nl-du.png delete mode 100644 main/interfaces/wizard/static/images/flags/sv-se.png delete mode 100644 main/interfaces/wizard/static/images/flags/us-en.png delete mode 100644 main/interfaces/wizard/static/images/icon_sab.png delete mode 100644 main/interfaces/wizard/static/images/plush-th.png delete mode 100644 main/interfaces/wizard/static/images/plush.png delete mode 100644 main/interfaces/wizard/static/images/smpl-th.png delete mode 100644 main/interfaces/wizard/static/images/smpl.png delete mode 100644 main/interfaces/wizard/static/javascript/checkserver.js delete mode 100644 main/interfaces/wizard/static/javascript/jquery.js delete mode 100644 main/interfaces/wizard/static/javascript/pagetwo.js delete mode 100644 main/interfaces/wizard/static/javascript/restart.js delete mode 100644 main/interfaces/wizard/static/style.css delete mode 100644 main/interfaces/wizard/three.html delete mode 100644 main/interfaces/wizard/two.html delete mode 100644 main/language/de-de.txt delete mode 100644 main/language/email-de-de.tmpl delete mode 100644 main/language/email-fr-fr.tmpl delete mode 100644 main/language/email-nl-du.tmpl delete mode 100644 main/language/email-sv-se.tmpl delete mode 100644 main/language/email-us-en.tmpl delete mode 100644 main/language/fr-fr.txt delete mode 100644 main/language/nl-du.txt delete mode 100644 main/language/rss-de-de.tmpl delete mode 100644 main/language/rss-fr-fr.tmpl delete mode 100644 main/language/rss-nl-nl.tmpl delete mode 100644 main/language/rss-sv-se.tmpl delete mode 100644 main/language/rss-us-en.tmpl delete mode 100644 main/language/sv-se.txt delete mode 100644 main/language/us-en.txt delete mode 100644 main/licenses/License-CherryPy.txt delete mode 100644 main/licenses/License-configobj.txt delete mode 100644 main/licenses/License-feedparser.txt delete mode 100644 main/licenses/License-json.txt delete mode 100644 main/licenses/License-kronos.txt delete mode 100644 main/licenses/License-listquote.txt delete mode 100644 main/licenses/License-pynewsleecher.txt delete mode 100644 main/licenses/License-rarfile.txt delete mode 100644 main/licenses/License-rsslib.txt delete mode 100644 main/licenses/License-ssmtplib.txt delete mode 100644 main/licenses/Python/LICENSE-BerkeleyDB.txt delete mode 100644 main/licenses/Python/LICENSE-OpenSSL.txt delete mode 100644 main/licenses/Python/LICENSE-Python.txt delete mode 100644 main/licenses/Python/LICENSE-TclTk.txt delete mode 100644 main/licenses/Python/LICENSE.txt delete mode 100644 main/nzb.ico delete mode 100644 main/osx/par2/LICENSE delete mode 100755 main/osx/par2/par2-classic delete mode 100755 main/osx/par2/par2-sl delete mode 100755 main/osx/resources/Credits.rtf delete mode 100755 main/osx/resources/InfoPlist.strings delete mode 100755 main/osx/resources/MainMenu.nib/classes.nib delete mode 100755 main/osx/resources/MainMenu.nib/info.nib delete mode 100755 main/osx/resources/MainMenu.nib/objects.nib delete mode 100644 main/osx/resources/nzbfile.icns delete mode 100644 main/osx/resources/sab_clicked.png delete mode 100755 main/osx/resources/sab_idle.png delete mode 100755 main/osx/resources/sab_pause.png delete mode 100644 main/osx/resources/sabnzbdplus.icns delete mode 100755 main/osx/resources/update delete mode 100755 main/osx/unrar/unrar delete mode 100644 main/package.py delete mode 100644 main/sabnzbd-template.sparseimage.zip delete mode 100644 main/sabnzbd.ico delete mode 100644 main/sabnzbd/__init__.py delete mode 100644 main/sabnzbd/articlecache.py delete mode 100644 main/sabnzbd/assembler.py delete mode 100644 main/sabnzbd/bpsmeter.py delete mode 100644 main/sabnzbd/cfg.py delete mode 100644 main/sabnzbd/codecs.py delete mode 100644 main/sabnzbd/config.py delete mode 100644 main/sabnzbd/constants.py delete mode 100644 main/sabnzbd/database.py delete mode 100644 main/sabnzbd/decoder.py delete mode 100644 main/sabnzbd/decorators.py delete mode 100644 main/sabnzbd/dirscanner.py delete mode 100644 main/sabnzbd/downloader.py delete mode 100644 main/sabnzbd/emailer.py delete mode 100644 main/sabnzbd/interface.py delete mode 100644 main/sabnzbd/lang.py delete mode 100644 main/sabnzbd/misc.py delete mode 100644 main/sabnzbd/newsunpack.py delete mode 100644 main/sabnzbd/newswrapper.py delete mode 100644 main/sabnzbd/newzbin.py delete mode 100644 main/sabnzbd/nzbqueue.py delete mode 100644 main/sabnzbd/nzbstuff.py delete mode 100644 main/sabnzbd/postproc.py delete mode 100644 main/sabnzbd/rss.py delete mode 100644 main/sabnzbd/scheduler.py delete mode 100644 main/sabnzbd/trylist.py delete mode 100644 main/sabnzbd/tvsort.py delete mode 100644 main/sabnzbd/urlgrabber.py delete mode 100644 main/sabnzbd/utils/__init__.py delete mode 100644 main/sabnzbd/utils/certgen.py delete mode 100644 main/sabnzbd/utils/configobj.py delete mode 100644 main/sabnzbd/utils/feedparser.py delete mode 100644 main/sabnzbd/utils/json.py delete mode 100644 main/sabnzbd/utils/kronos.py delete mode 100644 main/sabnzbd/utils/listquote.py delete mode 100644 main/sabnzbd/utils/osx.py delete mode 100644 main/sabnzbd/utils/rarfile.py delete mode 100644 main/sabnzbd/utils/rsslib.py delete mode 100644 main/sabnzbd/utils/servertests.py delete mode 100644 main/sabnzbd/utils/ssmtplib.py delete mode 100644 main/sabnzbd/utils/upload.py delete mode 100644 main/sabnzbd/version.py delete mode 100644 main/sabnzbd/wizard.py delete mode 100644 main/setup.py delete mode 100644 main/win/nsis/Include/registerExtension.nsh delete mode 100644 main/win/nsis/Plugins/KillProc.dll delete mode 100644 main/win/nsis/Plugins/KillProc.txt delete mode 100755 main/win/par2/COPYING delete mode 100755 main/win/par2/README_FIRST.txt delete mode 100644 main/win/par2/par2-classic.exe delete mode 100755 main/win/par2/par2.exe delete mode 100755 main/win/par2/x64/COPYING delete mode 100755 main/win/par2/x64/README_FIRST.txt delete mode 100755 main/win/par2/x64/par2.exe delete mode 100644 main/win/unrar/UnRAR.exe delete mode 100644 main/win/unrar/license.txt delete mode 100644 main/win/unrar/x64/UnRAR.exe delete mode 100644 main/win/unrar/x64/license.txt delete mode 100644 main/win/unzip/LICENSE delete mode 100644 main/win/unzip/README delete mode 100644 main/win/unzip/README.NT delete mode 100644 main/win/unzip/WHERE delete mode 100644 main/win/unzip/unzip.exe create mode 100644 nzb.ico create mode 100644 osx/par2/LICENSE create mode 100755 osx/par2/par2-classic create mode 100755 osx/par2/par2-sl create mode 100755 osx/resources/Credits.rtf create mode 100755 osx/resources/InfoPlist.strings create mode 100755 osx/resources/MainMenu.nib/classes.nib create mode 100755 osx/resources/MainMenu.nib/info.nib create mode 100755 osx/resources/MainMenu.nib/objects.nib create mode 100644 osx/resources/nzbfile.icns create mode 100644 osx/resources/sab_clicked.png create mode 100755 osx/resources/sab_idle.png create mode 100755 osx/resources/sab_pause.png create mode 100644 osx/resources/sabnzbdplus.icns create mode 100755 osx/resources/update create mode 100755 osx/unrar/unrar create mode 100644 package.py create mode 100644 sabnzbd-template.sparseimage.zip create mode 100644 sabnzbd.ico create mode 100644 sabnzbd/__init__.py create mode 100644 sabnzbd/articlecache.py create mode 100644 sabnzbd/assembler.py create mode 100644 sabnzbd/bpsmeter.py create mode 100644 sabnzbd/cfg.py create mode 100644 sabnzbd/codecs.py create mode 100644 sabnzbd/config.py create mode 100644 sabnzbd/constants.py create mode 100644 sabnzbd/database.py create mode 100644 sabnzbd/decoder.py create mode 100644 sabnzbd/decorators.py create mode 100644 sabnzbd/dirscanner.py create mode 100644 sabnzbd/downloader.py create mode 100644 sabnzbd/emailer.py create mode 100644 sabnzbd/interface.py create mode 100644 sabnzbd/lang.py create mode 100644 sabnzbd/misc.py create mode 100644 sabnzbd/newsunpack.py create mode 100644 sabnzbd/newswrapper.py create mode 100644 sabnzbd/newzbin.py create mode 100644 sabnzbd/nzbqueue.py create mode 100644 sabnzbd/nzbstuff.py create mode 100644 sabnzbd/postproc.py create mode 100644 sabnzbd/rss.py create mode 100644 sabnzbd/scheduler.py create mode 100644 sabnzbd/trylist.py create mode 100644 sabnzbd/tvsort.py create mode 100644 sabnzbd/urlgrabber.py create mode 100644 sabnzbd/utils/__init__.py create mode 100644 sabnzbd/utils/certgen.py create mode 100644 sabnzbd/utils/configobj.py create mode 100644 sabnzbd/utils/feedparser.py create mode 100644 sabnzbd/utils/json.py create mode 100644 sabnzbd/utils/kronos.py create mode 100644 sabnzbd/utils/listquote.py create mode 100644 sabnzbd/utils/osx.py create mode 100644 sabnzbd/utils/rarfile.py create mode 100644 sabnzbd/utils/rsslib.py create mode 100644 sabnzbd/utils/servertests.py create mode 100644 sabnzbd/utils/ssmtplib.py create mode 100644 sabnzbd/utils/upload.py create mode 100644 sabnzbd/version.py create mode 100644 sabnzbd/wizard.py create mode 100644 setup.py create mode 100644 win/nsis/Include/registerExtension.nsh create mode 100644 win/nsis/Plugins/KillProc.dll create mode 100644 win/nsis/Plugins/KillProc.txt create mode 100755 win/par2/COPYING create mode 100755 win/par2/README_FIRST.txt create mode 100644 win/par2/par2-classic.exe create mode 100755 win/par2/par2.exe create mode 100755 win/par2/x64/COPYING create mode 100755 win/par2/x64/README_FIRST.txt create mode 100755 win/par2/x64/par2.exe create mode 100644 win/unrar/UnRAR.exe create mode 100644 win/unrar/license.txt create mode 100644 win/unrar/x64/UnRAR.exe create mode 100644 win/unrar/x64/license.txt create mode 100644 win/unzip/LICENSE create mode 100644 win/unzip/README create mode 100644 win/unzip/README.NT create mode 100644 win/unzip/WHERE create mode 100644 win/unzip/unzip.exe diff --git a/CHANGELOG.txt b/CHANGELOG.txt new file mode 100644 index 0000000..fc7e841 --- /dev/null +++ b/CHANGELOG.txt @@ -0,0 +1,374 @@ +------------------------------------------------------------------------------- +0.5.1 RC1 by The SABnzbd-Team +------------------------------------------------------------------------------- +- Add 'size_limit' option. Any job bigger than this limit will be set to + low priority and be paused. +- TV Season sort now has "affected categories" too. Check your settings!! +- Fixed problems that could lead to an infinite unpacking loop + (when using a "sick" NZB and using +U instead of +D postprocessing) +- Duplicate title checking in RSS is now done across all feeds +- Fixed issues with accented characters in NZB names when using RSS +- Fixed issues with accented characters in category folder names when using RSS +- Plush: fix nzo range selection when clicking checkboxes +- When detecting an unsupported unrar on Posix systems, drop unsupported features + (This may lead to files being lost when duplicate names exist.) +- Sorting examples were sometimes wrong +- Sorting couldn't handle some pattern combinations +- Fixed priority handling for RSS feeds and newzbin bookmarks +- Fixed crash occuring when user profile contains characters outside ISO-8859-1 +- Allow nzb-backup folder field to be cleared +- When using only manual newzbin bookmark reading, allow automatic un-bookmarking +- Fixed several translation errors and omissions +- Keep Windows awake during post-processing of last job (while queue is already empty) +- Make it possible to run Python user scripts on OSX +------------------------------------------------------------------------------- +0.5.0Final by The SABnzbd-Team +------------------------------------------------------------------------------- +- Relabeled to 0.5.0 +------------------------------------------------------------------------------- +0.5.0RC8 by The SABnzbd-Team +------------------------------------------------------------------------------- +- Add par2_multicore option to Config->Switches +- Windows/OSX: Replaced OpenSSL libraries +- Windows: Replaced par2-multicore by new version +------------------------------------------------------------------------------- +0.5.0RC7 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +- When priority of newzbin or RSS job comes from the category, it wasn't effective. +- When unpacked file and directly download file have the same name, + the latter got lost +- Make nzbmatrix error handling robust +- When apikey is present in API call, do not require username/password +- Windows installer is now multi-language too +- Windows installer warns about queue when upgrading from 0.4.x +------------------------------------------------------------------------------- +0.5.0RC6 by The SABnzbd-Team +------------------------------------------------------------------------------- +Changes: +- Add INI-only option "par2_multicore" to enable/disable par2-multicore +Fixes: +- Prevent crash in RSS due to odd characters +- Prevent deadlock in downloader when server is blocked +- Unrar option -ai should only be used on Windows +- Prevent deletion of par files of other sets in multi-set NZBs +------------------------------------------------------------------------------- +0.5.0RC5 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +- Incorrect job rename in SMPL skin on Windows +- INI-only option "no_penalties" to limit timeout penalties for + non-optional servers to 1 minute +- HTTPS certificate paths should default to admin_dir directive +- The second parameter of the user script should be the original NZB file name, + even when the job has been renamed. +- Show clear error message when RSS feed preview or force-download fails. +- Don't warn about RSS reading problems when a scheduled scan is done. +- Ignore empty "username" and "apikey" parameters in nzbmatrix.com URLs + and add stored values. +- Suppress authentication warning for API call "get_scripts". + It's used by some external utilities to determine if username/password is required. +------------------------------------------------------------------------------- +0.5.0RC4 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +- Ignore read-only attributes of files in a RAR archive +- Remove potential crash on OSX when handling corrupt par2 file +- Enable manual unblocking of permantly blocked servers +- Retry permanently blocked servers after 30 minutes (compensate for shoddy servers) +- INI-only option "folder_length_max" for trimming folder name size + (default 128 for Windows, for others 256) +- Give unrar preference over rar when both installed on a Posix system +------------------------------------------------------------------------------- +0.5.0RC3 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +- Avoid potential crash when server closes connection +- On Connections Page: show original error message sent by server +- Make sure unrar check isn't done for OSX +------------------------------------------------------------------------------- +0.5.0RC2 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +- Increase timeout for nzb fetches from URLs to 60 sec +- Duplicate title checking in RSS is now case-insensitive +- Only warn about presense of old queue when no new queue is present yet +- Don't warn when a supported RAR (instead of UNRAR) program is present +------------------------------------------------------------------------------- +0.5.0RC1 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +- Fix broken server test in Wizard and Config->Servers +- Add tbbmalloc.dll to par2 program (prevents problems when you have + another version of that file on your system) +- Fix uneven download speed of very large NZBs +- Include special par2 variant for OSX 10.6+ (automatically selected) +- Fix problem with the script folder path containing a space +- Fix disabling of RSS feeds when changing settings +- When forcing disconnect don't try to send "Quit" to a non-responding server +- Warn user (once) about presence of old queue file +- Updated German texts +------------------------------------------------------------------------------- +0.5.0Beta6 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +- Solve problems with unwilling servers and "random" server time-outs. +- Do not generate warnings for intermittent server problems. +- Joinable rar-sets were not always properly joined. +- Fixed timing problems when SABnzbd is running behind an Apache server +- Don't report failed default permissions setting when the user has set none +------------------------------------------------------------------------------- +0.5.0Beta5 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +- Removed potential deadlock from Downloader +- Allow backup servers to be used when all primaries blocked or inactive +- Scheduled PAUSE_ALL failed to stop downloading +- Will now continue unpacking other rar-sets when one rar-set fails to unpack + (but only when option "Post-process Verified jobs" is off) +- QuickPar messed up the par files of multi-set NZBs +- When the par2 tool joined multi-part files of a multi-NZB, it mixed up files + from other sets +- Work-around for a bug in par2-tbb (making if fail to join some multi-part jobs). +- When scaling down the number of connections of a server, + will now retry with the full amount 10 minutes later. +------------------------------------------------------------------------------- +0.5.0Beta4 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +* Fixed poor reliability of reading RSS feeds and subsequent NZB fetches + (caused by a too short time-out value). +* Posix: when user has not set a permissions value, use the account's + default permissions (prevents problems with permissions coming from rar files) +* When option "Post-process only verified jobs" is set, do not execute + user-script when job fails +* NZB files read in from categorized watched folder did not inherit + the category's priority +* Fixed error reporting about incorrect NZB file +* Improved year recognition in tvsort +* Some skin fixes +------------------------------------------------------------------------------- +0.5.0Beta3 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes: +* Solved problems with adding NZB by URL (also through RSS) +* Proper display of download speed in OSX menu +* Fixed compatibility of Plush and IE8 +------------------------------------------------------------------------------- +0.5.0Beta2 by The SABnzbd-Team +------------------------------------------------------------------------------- +Fixes +* nzbmatrix.com support fixed (fetch NZB and Wizard settings) +* Problems on some systems because of reading NZB-spec from newzbin + for each NZB file +* When an RSS feed has more than 9 filters, the order was disturbed +* Fixed several TVSort problems including a hangup +* Each RSS preview added jobs marked "will not be downloaded" + instead of just the very first scan. +* Email reporting disk-full was malformed +* Sample detection was to eager to detect +* Improve detection of 64bit versions of Windows Vista/7/Server2008 +* Explicit priorities in nzb upload were ignored +* Corrections in translations +Improvements +* INI-only option to reduce the amount of admin saves (important for very large NZBs) +* INI-only option to enable/disable final folder renaming (__UNPACK/__FAILED) +* Fixed OSX uninstaller so that it will leave extra skins on the disk +* Association of NZB files with SABnzbd for OSX +* Retry folder renames and deletions on Windows +* Don't save RSS admin to disk, when no feeds are active + +------------------------------------------------------------------------------- +0.5.0Beta1 by The SABnzbd-Team +------------------------------------------------------------------------------- +Highlights + * Multi-language UI: English, French, Dutch, German and Swedish + * Start-up Wizard to get you going fast + * QuickCheck : on-the-fly par2 check. When a download is correct, + the normal par2 check is skipped + * Configuration changes take immediate effect (except skins and some system folders) + * Job priorities, individual job pausing, job renaming + * Flexible server setup (scheduled on/off, optional servers) + * The Plush and Smpl skins have been improved and are a lot faster than before + and they have paging + * New "Mobile" skin (replaces iPhone-skin) + * RSS supports more sites and has generally improved + * For Windows distribution: 64-bit par2 and unrar are used + on 64-bit Vista/Win7/Server2008 + * Support for password protected rar-files (limited) + * Expanded TV/Movie sorting +More Tech stuff + * HTTPS support for the Web-UI + * Email templates to design your own emails (including multiple recipients) + * Extensive API for utility developers + * History survives a full queue/admin clean and future upgrades + * Windows: optional association of NZB files with SABnzbd (double-click support) + +------------------------------------------------------------------------------- +0.5.0Alpha12 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Drop country names from language strings +* Fixed crash when setting script to None +* Add missing "Restart required" messages in Config->General in Classic and Smpl +* When pause-download-while-pp is reset, resume downloading immediately +------------------------------------------------------------------------------- +0.5.0Alpha11 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Fix foreign character problems in several places +* Add Swedish translation +* Plush tweaks +* Allow foreign characters in email templates +* Prevent selection of "Mobile" skin as primary +------------------------------------------------------------------------------- +0.5.0Alpha10 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Fix foreign character problems in several places +* top_only option wasn't changable on-the-fly +* Windows uninstaller left behind some files +* Complete the API with the del_config function +* German translation +* Plush tweaks +------------------------------------------------------------------------------- +0.5.0Alpha9 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Fixed bug in handling fetching of additional par2 files +* Fixed nzbmatrix support properly +* Fixed potential urlgrabber crash on startup +* Fixed problem with NZB files containing space before ".nzb" +* Fixed Windows Vista/7/Server2008 x64 detection +* Allow feed:// syntax in RSS feeds +* Restore 0.4.x compatibility for the RSS URL. +* Even more Plush improvements +------------------------------------------------------------------------------- +0.5.0Alpha8 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Fixed failing RSS filters +* Fixed nzbmatrix.com RSS support + Note: you URL must contain username and ApiKey +------------------------------------------------------------------------------- +0.5.0Alpha7 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Use RSS titles for job names instead of downloaded filename. + (This bypasses newzbin's filename mangling). +* URL grabber will do 5 retries before giving up (and generate + correct retry links in History). +* RSS support for nzbserien.org (and slight improvement for nzbs.org) +* Plush overhaul +* "smpl" is now the preferred skin, "Default" renamed to "Classic". +* Detect internal problems and restart SABnzbd if found +* Enable "hibernate" and "standby" as end-of-queue actions for Linux systems + (Will only work if supported by the kernel of your platform) +* Update to unrar 3.90 (OSX and Windows) +* Remove segment files after par2-based joining +* Internationalisation of all texts in History +* Internationalisation of email templates +* Prevent crash when encountering a corrupt par2 file during QuickCheck +* Added new api call: api?mode=warnings&name=clear +* Added new api call: api?mode=translate&value=ACRONYM&output=json +* Priorities in RSS feeds now work properly +* Add "Require" filter type for RSS feeds +* Add SSL type (V23, V2, V3), only needed for som odd ISP's +* Add INI-file-only option to skip the check after unrar. + This is to support people with consistently failing checks. +* Passwords for encrypted RARs can be set in the job title +------------------------------------------------------------------------------- +0.5.0Alpha6 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Add 64bit unrar/rar 3.90 for Windows +* "Mobile" skin (limited functionality) +* Removed a number category-related problems +* Scan enabled RSS feeds 15 sec after startup +* Get newzbin bookmarks 20 sec after startup +* Add scheduled pause-all command thats stops all disk activity +* Improved handling of accented characters (also in par2) +* Unrelated empty folders are no longer removed from "incomplete" folder +* Initial runs of RSS will no longer be downloaded by "download" button + instead thay are marked and can be downloaded individually +* TV Sort: Fixed double brackets () naming on items with the country in the name. +* Disable password completion by browsers on Config pages. +* Retry links in History were incorrrect +* Solved lots of small bugs +* Skin improvements +------------------------------------------------------------------------------- +0.5.0Alpha5 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Less bugs +------------------------------------------------------------------------------- +0.5.0Alpha4 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Less bugs +------------------------------------------------------------------------------- +0.5.0Alpha3 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Session/API key system ported from 0.4.11 +* Multi-language, including Dutch and French translations +* Less bugs +------------------------------------------------------------------------------- +0.5.0Alpha2 by The SABnzbd-Team +------------------------------------------------------------------------------- +* Fixed failing delete-bookmark-on-newzbin feature. +* Wizard improvements +* Plush improvements +* par2 for OSX replaced +* Added penalty timeout for unresponsive servers (when flagged as "optional"). +* Fixed some incompatibilities with Python 2.4 and 2.6 +* TV sorting improved +* Support for :: or [::] as valid hostnames. :: listens on all ipv6 addresses. +* Allow non-conforming RSS feeds (fixes nzbmatrix.com issue) +------------------------------------------------------------------------------- +0.5.0Alpha1 by The SABnzbd-Team +------------------------------------------------------------------------------- +Core Stuff: +* Updated Cherrypy - Among other things, this means you can now use HTTPS for the + web ui and have a prettier login window if you use a login/pass. + We have also dropped the need for /sabnzbd/ in the urls you use to access sabnzbd. + It'll still work with /sabnzbd/, but it will also work without it now. +* New XML Parser - Results in lower memory usage when reading .nzb files, especially large ones. +* File Quick-Check - We can now skip par2 verification altogether in some cases by performing + a quick-check of file hashes before post-processing. +* New Quick-Start Wizard - If you don't have any servers set, you'll get a neat little + five-page wizard allowing you to change all the config settings you really need to worry about. + Stuff like "How should SABnzbd be accessible? Remotely or locally?" and "What's your server address", + in a step by step manner. Features a button on the server page to test the connection to the news server, + to make sure you have entered your details correctly. +* Revamped Config System - The configuration backend was overhauled in 0.5. + Many of the config pages have been changed around to make more sense, + you can now easily enable/disable servers, and in general all server interaction is much faster than before. +* E-mail Templates - The e-mail system from 0.4.x has been updated to have a full template system, + allowing you to customize e-mail alerts. +* File Association - .nzb files are now associated with SABnzbd, so you can just double click them + to load the file into your queue. Currently only Windows is fully supported, however + you can launch SABnzbd with arguments containing a path, or multiple paths to local nzb/rar/zip files. +* .TS Filejoining - File joining has been improved to allow support for joining multiple .TS files into one file. +* Date Sorting - To compliment series sorting, sorting has now been added for downloads with dates in their names, + allowing you to place files in daily, monthly, yearly folders with proper naming +* General Sorting - Sorting for general downloads allows users to expand the series sorting into + other types of downloads. Has support for years in titles allowing files to be placed in folders + depending on the decade. +The API: +* Totally overhauled for 0.5. Basically, you now have full access to near everything about + SABnzbd via POST and XML/JSON. See the full docs for more details. Why does this matter? + It means if you know any programming language and understand how to parse XML/JSON and POST data to an URI, + then you can write some application which can communicate with SABnzbd almost as easily as a template can. +The Queue & History: +* Per-Item Pause - Now, in addition to being able to pause the whole queue, you can also pause + individual items in the queue. You can also force downloads to start while the whole queue is paused. +* Priorities - The queue now has four priorities, Normal, High, Low and force. + Think of this as an easy method to move things around your queue, or to insert things into + specific areas of your queue. One use case is to set everything to "normal" by default, + so it works like 0.4.x. However, you can then add a new post or RSS feed as high-priority to have it be + inserted to the top of the queue, or add one as low-priority to have it inserted at the bottom of the queue + and keep below normal downloads that are added. Forced items will go straight to the top of the queue, + and will continue to download even if the queue is paused. +* New History Backend - The history is now stored in a database, so we can handle larger histories better, + and store more information about downloads. +Skins: +* General Template Changes - Templates have all been updated to support all the neat new features. + So if you're one of those guys still married to Default, don't worry about missing out on all this new stuff. +* Plush - Complete backend rewrite to work almost exclusively off the API [so it's MUCH faster], + and a reorganized (and more accessible!) main menu. +* SMPL - Has been reworked to be much faster and friendlier to use. + The default page now shows the top 5 items from the queue and history. + The queue and history are also now pages to stop loading a massive number of items. +Bugfixes: +* Sure! diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt new file mode 100644 index 0000000..55d5273 --- /dev/null +++ b/COPYRIGHT.txt @@ -0,0 +1,22 @@ + +(c) Copyright 2007-2010 by "The SABnzbd-team" + +The SABnzbd-team is: + +Current team: + ShyPike + sw1tch + pairofdimes + inpheaux + rAf +Honorary member (and original author) + Gregor Kaufmann + +SABnzbd comes with ABSOLUTELY NO WARRANTY. +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +See GPL2.txt and GPL3.txt + diff --git a/GPL2.txt b/GPL2.txt new file mode 100644 index 0000000..f90922e --- /dev/null +++ b/GPL2.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/GPL3.txt b/GPL3.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/GPL3.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/INSTALL.txt b/INSTALL.txt new file mode 100644 index 0000000..c16b7a5 --- /dev/null +++ b/INSTALL.txt @@ -0,0 +1,123 @@ + SABnzbd+ trunk + +------------------------------------------------------------------------------- +0) LICENSE +------------------------------------------------------------------------------- + +(c) Copyright 2007-2010 by "The SABnzbd-team" + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +------------------------------------------------------------------------------- +1) INSTALL with the Win32 installer +------------------------------------------------------------------------------- +Just run the downloaded EXE file and the installer will start. +It's just a simple standard installer. +After installaton, find the SABnzbd program in the Start menu and start it. + +Within 5-10 seconds your web browser will start and show the user interface. +Use the "Help" button in the web-interface to be directed to the Help Wiki. + + +------------------------------------------------------------------------------- +2) INSTALL pre-built Win32 binaries +------------------------------------------------------------------------------- +Unzip pre-built version to any folder of your liking. +Start the SABnzbd.exe program. +Within 5-10 seconds your web browser will start and show the user interface. +Use the "Help" button in the web-interface to be directed to the Help Wiki. + + +------------------------------------------------------------------------------- +3) INSTALL with only sources +------------------------------------------------------------------------------- + +You need to have Python installed and some modules. + +Unix/Linux/OSX + Python-2.4.4 http://www.python.org +OR + Python-2.5.4 http://www.python.org + +Windows + Python-2.5.latest http://www.activestate.com + +Essential modules + cheetah-2.0.1+ http://www.cheetahtemplate.org/ + yenc module >= 0.3 http://sabnzbd.sourceforge.net/yenc-0.3.tar.gz + http://sabnzbd.sourceforge.net/yenc-0.3-w32fixed.zip (Win32-only) + par2cmdline >= 0.4 http://parchive.sourceforge.net/ + http://chuchusoft.com/par2_tbb/index.html (multi-core) + +Essential modules for python 2.4 ONLY + pysqlite3 >= 2.3.4 http://pysqlite.org (python-pysqlite2) + +Optional modules + unrar >= 3.90+ http://www.rarlab.com/rar_add.htm + unzip >= 5.52 http://www.info-zip.org/ + +Optional modules Windows + pyopenssl >= 0.10 http://pypi.python.org/pypi/pyOpenSSL + (Binaries, including the OpenSSL libraries) + +Optional modules Unix/Linux/OSX + pyopenssl >= 0.7 http://pypi.python.org/pypi/pyOpenSSL + openssl => v0.9.8g+ http://www.openssl.org/ + Make sure the OpenSSL libraries match with PyOpenSSL + +Embedded modules (only use the included version) + CherryPy-3.2 rev2138 with patches http://www.cherrypy.org + + +Unpack the ZIP-file containing the SABnzbd sources to any folder of your liking. +Start the program from the commandline: + python SABnzbd.py +Within 5-10 seconds your web browser will start and show the user interface. +Use the "Help" button in the web-interface to be directed to the Help Wiki. + + +------------------------------------------------------------------------------- +4) TROUBLESHOOTING +------------------------------------------------------------------------------- + +Your browser may start up with just an error page. + +This means that SABnzbd cannot use the default port 8080 to run its web-server on. +Try to use another port, you'll need to use the a command window: + SABnzbd.exe -s localhost:7777 +or + python SABnzbd.py -s localhost:7777 + +You may of course try other port numbers too. + +For troubleshooting you can use the program SABnzbd-console.exe. +This will show a black window where logging information will be shown. This +may help you solve problems easier. + +------------------------------------------------------------------------------- +5) MORE INFORMATION +------------------------------------------------------------------------------- + +Visit the WIKI site: + http://wiki.sabnzbd.org/ + + +------------------------------------------------------------------------------- +6) CREDITS +------------------------------------------------------------------------------- + +Serveral parts of SABnzbd were built by other people, illustrating the +wonderful world of Free Open Source Software. +See the licences folder of the main program and of the skin folders. diff --git a/ISSUES.txt b/ISSUES.txt new file mode 100644 index 0000000..03334b2 --- /dev/null +++ b/ISSUES.txt @@ -0,0 +1,69 @@ +******************************************* +*** Known issues *** +******************************************* + +- To prevent unexpectedly large NZBs from eating your quotum you can set + the option 'size_limit' in the INI file. + Any NZB larger than this size will be set to paused and get a low priority. + +- When par2 or unrar hang up, never just stop SABnzbd. + Instead use your operating system's task manager to stop the par2 or unrar program. + Forcing SABnzbd to quit may damage your queues. + Windows-only: + If you keep having trouble with par2 multicore you can disable it + in Config->Switches. + This will force the use of the old and tried, but slower par2-classic program. + +- Windows cannot handle pathnames longer than 254 characters. + Currently, SABnzbd doesn't handle this problem gracefully. + We have added the INI-only option "folder_length_max" in which you can set + a maximum folder name size. + For Windows the default is 128 and for others 256. + A quite safe value for Windows would be 64. + SABnzbd will take care of overlapping names. + See: http://wiki.sabnzbd.org/configure-special + +- Some Usenet servers have intermittent login (or other) problems. + For these the server blocking method is not very favourable. + There is an INI-only option that will limit blocks to 1 minute. + no_penalties = 1 + See: http://wiki.sabnzbd.org/configure-special + +- On OSX you may encounter downloaded files with foreign characters. + The par2 repair may fail when the files were created on a Windows system. + The problem is caused by the PAR2 utility and we cannot fix this now. + This does not apply to files inside RAR files. + +- On Linux when you download files they may have the wrong character encoding. + You will see this only when downloaded files contain accented characters. + You need to fix it yourself by running the convmv utility (availaible for most Linux platforms). + +- The "Watched Folder" sometimes fails to delete the NZB files it has + processed. This happens when other software still accesses these files. + Some third-party utilities supporting SABnzbd are known to do this. + We cannot solve this problem, because the Operating System (read Windows) + prevents the removal. + +- Jobs deleted from the queue will leave downloaded files behind + in the "incomplete" folder. + You will have to remove these files manually. + +- Memory usage can sometimes have high peaks. This makes using SABnzbd on very low + memory systems (eg a SAN device) a challenge. + +- SABnzbd is not compatible with some software firewall versions. + The Mircosoft Windows Firewall works fine, but remember to tell this + firewall that SABnzbd is allowed to talk to other computers. + +- When SABnzbd cannot send nofication emails, check your virus scanner, + firewall or securiry suite. It may be blocking outgoing email. + +- When you are using external drives or network shares on OSX or Linux + make sure that the drives are mounted. + The operating system wil simply redirect your files to alternative locations. + You may have trouble finding the files when mounting the drive later. + +- Sometimes logging stops. This is a notorious bug in Python logging. SABnzbd will + function as normal. If you run from sources or use the --console option with the + Win32-binary, you will see that logging continues in the console window, but + nothing will be written to the log-files. diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..261a33f --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,17 @@ +(c) Copyright 2007-2010 by "The SABnzbd-team" + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +See accompanying files GPL2.txt and GPL3.txt. \ No newline at end of file diff --git a/NSIS_Installer.nsi b/NSIS_Installer.nsi new file mode 100644 index 0000000..c0c6714 --- /dev/null +++ b/NSIS_Installer.nsi @@ -0,0 +1,404 @@ +; -*- coding: latin-1 -*- +; +; Copyright 2008-2010 The SABnzbd-Team +; +; This program is free software; you can redistribute it and/or +; modify it under the terms of the GNU General Public License +; as published by the Free Software Foundation; either version 2 +; of the License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to the Free Software +; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +!addplugindir win\nsis\Plugins +!addincludedir win\nsis\Include + +!include "MUI2.nsh" +!include "registerExtension.nsh" + + +Name "${SAB_PRODUCT}" +OutFile "${SAB_FILE}" + + +; Some default compiler settings (uncomment and change at will): +; SetCompress auto ; (can be off or force) +; SetDatablockOptimize on ; (can be off) +; CRCCheck on ; (can be off) +; AutoCloseWindow false ; (can be true for the window go away automatically at end) +; ShowInstDetails hide ; (can be show to have them shown, or nevershow to disable) +; SetDateSave off ; (can be on to have files restored to their orginal date) +WindowIcon on + +InstallDir "$PROGRAMFILES\SABnzbd" +InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" "" +;DirText $(MsgSelectDir) + + ;Vista redirects $SMPROGRAMS to all users without this + RequestExecutionLevel admin + FileErrorText "If you have no admin rights, try to install into a user directory." + + +;-------------------------------- +;Variables + + Var MUI_TEMP + Var STARTMENU_FOLDER +;-------------------------------- +;Interface Settings + + !define MUI_ABORTWARNING + + ;Show all languages, despite user's codepage + !define MUI_LANGDLL_ALLLANGUAGES + + !define MUI_ICON "interfaces/Classic/templates/static/images/favicon.ico" + + +;-------------------------------- +;Pages + + !insertmacro MUI_PAGE_LICENSE "LICENSE.txt" + !define MUI_COMPONENTSPAGE_NODESC + !insertmacro MUI_PAGE_COMPONENTS + + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\SABnzbd" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + !define MUI_STARTMENUPAGE_DEFAULTFOLDER "SABnzbd" + ;Remember the installer language + !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" + !define MUI_LANGDLL_REGISTRY_KEY "Software\SABnzbd" + !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" + + !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER + + + !insertmacro MUI_PAGE_INSTFILES + !define MUI_FINISHPAGE_RUN + !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" + !define MUI_FINISHPAGE_RUN_TEXT $(MsgStartSab) + !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt" + !define MUI_FINISHPAGE_SHOWREADME_TEXT $(MsgShowRelNote) + ;!define MUI_FINISHPAGE_LINK "View the SABnzbdPlus Wiki" + ;!define MUI_FINISHPAGE_LINK_LOCATION "http://wiki.sabnzbd.org/" + !define MUI_FINISHPAGE_LINK $(MsgSupportUs) + !define MUI_FINISHPAGE_LINK_LOCATION "http://www.sabnzbd.org/contribute/" + + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_CONFIRM + !define MUI_UNPAGE_COMPONENTSPAGE_NODESC + !insertmacro MUI_UNPAGE_COMPONENTS + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + ; Set supported languages + !insertmacro MUI_LANGUAGE "English" ;first language is the default language + !insertmacro MUI_LANGUAGE "French" + !insertmacro MUI_LANGUAGE "German" + !insertmacro MUI_LANGUAGE "Dutch" + !insertmacro MUI_LANGUAGE "Swedish" + + +;-------------------------------- +;Reserve Files + + ;If you are using solid compression, files that are required before + ;the actual installation should be stored first in the data block, + ;because this will make your installer start faster. + + !insertmacro MUI_RESERVEFILE_LANGDLL + + +Function LaunchLink + ExecShell "" "$INSTDIR\SABnzbd.exe" +FunctionEnd + +;-------------------------------- +Function .onInit + !insertmacro MUI_LANGDLL_DISPLAY + +;make sure sabnzbd.exe isnt running..if so abort + loop: + StrCpy $0 "SABnzbd.exe" + KillProc::FindProcesses + StrCmp $0 "0" endcheck + MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgCloseSab) IDOK loop IDCANCEL exitinstall + exitinstall: + Abort + endcheck: +FunctionEnd + + +Section "SABnzbd" SecDummy +SetOutPath "$INSTDIR" + +IfFileExists $INSTDIR\sabnzbd.exe 0 endWarnExist + IfFileExists $INSTDIR\language\us-en.txt endWarnExist 0 + MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgOldQueue) IDOK endWarnExist IDCANCEL 0 + Abort +endWarnExist: + +; add files / whatever that need to be installed here. +File /r "dist\*" + + +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" "" "$INSTDIR" +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayName" "SABnzbd (remove only)" +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "UninstallString" '"$INSTDIR\uninstall.exe"' +;WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayIcon" '"$INSTDIR\need-a-.ico"' +; write out uninstaller +WriteUninstaller "$INSTDIR\Uninstall.exe" + + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\SABnzbd.lnk" "$INSTDIR\SABnzbd.exe" + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\SABnzbd - SafeMode.lnk" "$INSTDIR\SABnzbd-console.exe" + WriteINIStr "$SMPROGRAMS\$STARTMENU_FOLDER\SABnzbd - Documentation.url" "InternetShortcut" "URL" "http://wiki.sabnzbd.org/" + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + + + !insertmacro MUI_STARTMENU_WRITE_END + + +SectionEnd ; end of default section + +Section /o $(MsgRunAtStart) startup + CreateShortCut "$SMPROGRAMS\Startup\SABnzbd.lnk" "$INSTDIR\SABnzbd.exe" "-b0" +SectionEnd ; + +Section $(MsgIcon) desktop + CreateShortCut "$DESKTOP\SABnzbd.lnk" "$INSTDIR\SABnzbd.exe" +SectionEnd ; end of desktop icon section + +Section /o $(MsgAssoc) assoc + ${registerExtension} "$INSTDIR\nzb.ico" "$INSTDIR\SABnzbd.exe" ".nzb" "NZB File" + ;${registerExtension} "$INSTDIR\SABnzbd.exe" ".nzb" "NZB File" +SectionEnd ; end of file association section + +; begin uninstall settings/section +UninstallText $(MsgUninstall) + +Section "un.$(MsgDelProgram)" Uninstall +;make sure sabnzbd.exe isnt running..if so shut it down + + StrCpy $0 "sabnzbd.exe" + DetailPrint "Searching for processes called '$0'" + KillProc::FindProcesses + StrCmp $1 "-1" wooops + DetailPrint "-> Found $0 processes" + + StrCmp $0 "0" completed + Sleep 1500 + + StrCpy $0 "sabnzbd.exe" + DetailPrint "Killing all processes called '$0'" + KillProc::KillProcesses + StrCmp $1 "-1" wooops + DetailPrint "-> Killed $0 processes, failed to kill $1 processes" + + Goto completed + + wooops: + DetailPrint "-> Error: Something went wrong :-(" + Abort + + completed: + DetailPrint "Process Killed" + + + ; add delete commands to delete whatever files/registry keys/etc you installed here. + Delete "$INSTDIR\uninstall.exe" + DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" + DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" + + ; Delete installation files are carefully as possible + ; Using just rmdir /r "$instdir" is considered unsafe! + Delete "$INSTDIR\language\email-de-de.tmpl" + Delete "$INSTDIR\language\email-us-en.tmpl" + Delete "$INSTDIR\language\email-nl-du.tmpl" + Delete "$INSTDIR\language\email-fr-fr.tmpl" + Delete "$INSTDIR\language\email-sv-se.tmpl" + Delete "$INSTDIR\language\de-de.txt" + Delete "$INSTDIR\language\us-en.txt" + Delete "$INSTDIR\language\nl-du.txt" + Delete "$INSTDIR\language\fr-fr.txt" + Delete "$INSTDIR\language\sv-se.txt" + RMDir "$INSTDIR\language" + RMDir /r "$INSTDIR\interfaces\Classic" + RMDir /r "$INSTDIR\interfaces\Plush" + RMDir /r "$INSTDIR\interfaces\smpl" + RMDir /r "$INSTDIR\interfaces\Mobile" + RMDir /r "$INSTDIR\interfaces\wizard" + RMDir "$INSTDIR\interfaces" + RMDir /r "$INSTDIR\win\par2" + RMDir /r "$INSTDIR\win\unrar" + RMDir /r "$INSTDIR\win\unzip" + RMDir /r "$INSTDIR\win" + Delete "$INSTDIR\licenses\*.txt" + Delete "$INSTDIR\licenses\Python\*.txt" + RMDir "$INSTDIR\licenses\Python" + RMDir "$INSTDIR\licenses" + Delete "$INSTDIR\lib\libeay32.dll" + Delete "$INSTDIR\lib\pywintypes25.dll" + Delete "$INSTDIR\lib\ssleay32.dll" + Delete "$INSTDIR\lib\sabnzbd.zip" + Delete "$INSTDIR\lib\*.pyd" + RMDir /r "$INSTDIR\lib\" + Delete "$INSTDIR\CHANGELOG.txt" + Delete "$INSTDIR\COPYRIGHT.txt" + Delete "$INSTDIR\email.tmpl" + Delete "$INSTDIR\GPL2.txt" + Delete "$INSTDIR\GPL3.txt" + Delete "$INSTDIR\INSTALL.txt" + Delete "$INSTDIR\ISSUES.txt" + Delete "$INSTDIR\LICENSE.txt" + Delete "$INSTDIR\MSVCR71.dll" + Delete "$INSTDIR\nzb.ico" + Delete "$INSTDIR\PKG-INFO" + Delete "$INSTDIR\python25.dll" + Delete "$INSTDIR\python26.dll" + Delete "$INSTDIR\README.txt" + Delete "$INSTDIR\SABnzbd-console.exe" + Delete "$INSTDIR\SABnzbd.exe" + Delete "$INSTDIR\Sample-PostProc.cmd" + Delete "$INSTDIR\Uninstall.exe" + Delete "$INSTDIR\w9xpopen.exe" + RMDir "$INSTDIR" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + + Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk" + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" + Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - SafeMode.lnk" + Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - Documentation.url" + RMDir "$SMPROGRAMS\$MUI_TEMP" + + Delete "$SMPROGRAMS\Startup\SABnzbd.lnk" + + Delete "$DESKTOP\SABnzbd.lnk" + + DeleteRegKey HKEY_CURRENT_USER "Software\SABnzbd" + + ${unregisterExtension} ".nzb" "NZB File" + + +SectionEnd ; end of uninstall section + +Section "un.$(MsgDelSettings)" DelSettings + Delete "$LOCALAPPDATA\sabnzbd\sabnzbd.ini" + RMDir /r "$LOCALAPPDATA\sabnzbd\admin" +SectionEnd + + +Section "un.$(MsgDelLogs)" DelLogs + RMDir /r "$LOCALAPPDATA\sabnzbd\logs" +SectionEnd + + +Section "un.$(MsgDelCache)" DelCache + RMDir /r "$LOCALAPPDATA\sabnzbd\cache" + RMDir "$LOCALAPPDATA\sabnzbd" +SectionEnd + +; eof + +;-------------------------------- +;Language strings +; MsgWarnRunning 'Please close "SABnzbd.exe" first' + LangString MsgStartSab ${LANG_ENGLISH} "Start SABnzbd (hidden)" + LangString MsgStartSab ${LANG_DUTCH} "Start SABnzbd (verborgen)" + LangString MsgStartSab ${LANG_FRENCH} "Lancer SABnzbd (caché)" + LangString MsgStartSab ${LANG_GERMAN} "SABnzbd starten (unsichtbar)" + LangString MsgStartSab ${LANG_SWEDISH} "Starta SABnzbd (dold)" + + LangString MsgShowRelNote ${LANG_ENGLISH} "Show Release Notes" + LangString MsgShowRelNote ${LANG_DUTCH} "Toon Vrijgave Bericht (Engels)" + LangString MsgShowRelNote ${LANG_FRENCH} "Afficher les notes de version" + LangString MsgShowRelNote ${LANG_GERMAN} "Versionshinweise anzeigen" + LangString MsgShowRelNote ${LANG_SWEDISH} "Visa release noteringar" + + LangString MsgSupportUs ${LANG_ENGLISH} "Support the project, Donate!" + LangString MsgSupportUs ${LANG_DUTCH} "Steun het project, Doneer!" + LangString MsgSupportUs ${LANG_FRENCH} "Supportez le projet, faites un don !" + LangString MsgSupportUs ${LANG_GERMAN} "Bitte unterstützen Sie das Projekt durch eine Spende!" + LangString MsgSupportUs ${LANG_SWEDISH} "Donera och stöd detta projekt!" + + LangString MsgCloseSab ${LANG_ENGLISH} "Please close $\"SABnzbd.exe$\" first" + LangString MsgCloseSab ${LANG_DUTCH} "Sluit $\"SABnzbd.exe$\" eerst af" + LangString MsgCloseSab ${LANG_FRENCH} "Quittez $\"SABnzbd.exe$\" avant l\'installation, SVP" + LangString MsgCloseSab ${LANG_GERMAN} "Schliessen Sie bitte zuerst $\"SABnzbd.exe$\"." + LangString MsgCloseSab ${LANG_SWEDISH} "Var vänlig stäng $\"SABnzbd.exe$\" först" + + LangString MsgOldQueue ${LANG_ENGLISH} " >>>> WARNING <<<<$\r$\n$\r$\nIf not empty, download your current queue with the old program.$\r$\nThe new program will ignore your current queue!" + LangString MsgOldQueue ${LANG_DUTCH} " >>>> WAARSCHUWING <<<<$\r$\n$\r$\nIndien niet leeg, download eerst de gehele huidige wachtrij met het oude programma.$\r$\nHet nieuwe programma zal je huidige wachtrij negeren!" + LangString MsgOldQueue ${LANG_FRENCH} " >>>> ATTENTION <<<<$\r$\n$\r$\nsi votre file d'attente de téléchargement n'est pas vide, terminez la avec la version précédente du programme.$\r$\nLa nouvelle version l'ignorera!" + LangString MsgOldQueue ${LANG_GERMAN} " >>>> ACHTUNG <<<<$\r$\n$\r$\nWarten Sie, bis das alte Programm alle Downloads fertiggestellt hat.$\r$\nDas neue Programm wird die noch ausstehenden Downloads ignorieren!" + LangString MsgOldQueue ${LANG_SWEDISH} " >>>> VARNING <<<<$\r$\n$\r$\nOm kön inte är tom, hämta din nuvarande kö med det gamla programmet.$\r$\nDet nya programmet kommer att ignorera din nuvarande kö!" + + LangString MsgUninstall ${LANG_ENGLISH} "This will uninstall SABnzbd from your system" + LangString MsgUninstall ${LANG_DUTCH} "Dit verwijdert SABnzbd van je systeem" + LangString MsgUninstall ${LANG_FRENCH} "Ceci désinstallera SABnzbd de votre système" + LangString MsgUninstall ${LANG_GERMAN} "Dies entfernt SABnzbd von Ihrem System" + LangString MsgUninstall ${LANG_SWEDISH} "Detta kommer att avinstallera SABnzbd från systemet" + + LangString MsgRunAtStart ${LANG_ENGLISH} "Run at startup" + LangString MsgRunAtStart ${LANG_DUTCH} "Opstarten bij systeem start" + LangString MsgRunAtStart ${LANG_FRENCH} "Lancer au démarrage" + LangString MsgRunAtStart ${LANG_GERMAN} "Beim Systemstart ausführen" + LangString MsgRunAtStart ${LANG_SWEDISH} "Kör vid uppstart" + + LangString MsgIcon ${LANG_ENGLISH} "Desktop Icon" + LangString MsgIcon ${LANG_DUTCH} "Pictogram op bureaublad" + LangString MsgIcon ${LANG_FRENCH} "Icône sur le Bureau" + LangString MsgIcon ${LANG_GERMAN} "Desktop-Symbol" + LangString MsgIcon ${LANG_SWEDISH} "Skrivbordsikon" + + LangString MsgAssoc ${LANG_ENGLISH} "NZB File association" + LangString MsgAssoc ${LANG_DUTCH} "NZB bestanden koppelen aan SABnzbd" + LangString MsgAssoc ${LANG_FRENCH} "Association des fichiers NZB" + LangString MsgAssoc ${LANG_GERMAN} "Mit NZB-Dateien verknüpfen" + LangString MsgAssoc ${LANG_SWEDISH} "NZB Filassosication" + + LangString MsgDelProgram ${LANG_ENGLISH} "Delete Program" + LangString MsgDelProgram ${LANG_DUTCH} "Verwijder programma" + LangString MsgDelProgram ${LANG_FRENCH} "Supprimer le programme" + LangString MsgDelProgram ${LANG_GERMAN} "Programm löschen" + LangString MsgDelProgram ${LANG_SWEDISH} "Ta bort programmet" + + LangString MsgDelSettings ${LANG_ENGLISH} "Delete Settings" + LangString MsgDelSettings ${LANG_DUTCH} "Verwijder instellingen" + LangString MsgDelSettings ${LANG_FRENCH} "Supprimer Paramètres" + LangString MsgDelSettings ${LANG_GERMAN} "Einstellungen löschen" + LangString MsgDelSettings ${LANG_SWEDISH} "Ta bort inställningar" + + LangString MsgDelLogs ${LANG_ENGLISH} "Delete Logs" + LangString MsgDelLogs ${LANG_DUTCH} "Verwijder logging" + LangString MsgDelLogs ${LANG_FRENCH} "Supprimer les logs" + LangString MsgDelLogs ${LANG_GERMAN} "Protokoll löschen" + LangString MsgDelLogs ${LANG_SWEDISH} "Ta bort logg" + + LangString MsgDelCache ${LANG_ENGLISH} "Delete Cache" + LangString MsgDelCache ${LANG_DUTCH} "Verwijder Cache" + LangString MsgDelCache ${LANG_FRENCH} "Supprimer le cache" + LangString MsgDelCache ${LANG_GERMAN} "Cache löschen" + LangString MsgDelCache ${LANG_SWEDISH} "Ta bort temporär-mapp" + +Function un.onInit + !insertmacro MUI_UNGETLANGUAGE +FunctionEnd diff --git a/PKG-INFO b/PKG-INFO new file mode 100644 index 0000000..ad6d0de --- /dev/null +++ b/PKG-INFO @@ -0,0 +1,10 @@ +Metadata-Version: 1.0 +Name: SABnzbd +Version: 0.6.0 +Summary: SABnzbd-0.6.0 +Home-page: http://sourceforge.net/projects/sabnzbdplus +Author: The SABnzbd Team +Author-email: team@sabnzbd.org +License: GNU General Public License 2 (GPL2 or later) +Description: Fully automated Usenet Binary Downloader +Platform: posix diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..c4ffe36 --- /dev/null +++ b/README.txt @@ -0,0 +1,131 @@ +******************************************* +*** This is SABnzbd 0.6.0 Trunk *** +******************************************* +SABnzbd is an open-source cross-platform binary newsreader. +It simplifies the process of downloading from Usenet dramatically, +thanks to its friendly web-based user interface and advanced +built-in post-processing options that automatically verify, repair, +extract and clean up posts downloaded from Usenet. +SABnzbd also has a fully customizable user interface, +and offers a complete API for third-party applications to hook into. + +There is an extensive Wiki on the use of SABnzbd. +http://wiki.sabnzbd.org/ + +>>> PLEASE ALSO READ THE FILE "ISSUES.txt" <<< + +******************************************* +*** Upgrading from 0.5.0 *** +******************************************* +Stop SABnzbd. +Install new version over the old one +Start SABnzbd. + + +******************************************* +*** Upgrading from 0.4.x *** +******************************************* + +>>>>> PLEASE DOWNLOAD YOUR CURRENT QUEUE BEFORE UPGRADING <<<<<< + +When upgrading from a 0.4.x release such as 0.4.12 your old settings will be kept. +You will however be given a fresh queue and history. If you have items in your queue +from the older version of SABnzbd, you can either re-import the nzb files if you kept +an nzb backup folder, or temporarily go back to 0.4.x until your queue is complete. + +The history is now stored in a better format meaning future upgrades should be backwards +compatible. + + +******************************************* +*** Changes since 0.4.12 *** +******************************************* +Core Upgrades +- New Quick-Start Wizard - If you don't have any servers set you'll get a neat + little five-page wizard allowing you to change all the config settings you + really need to worry about. Stuff like "How should SABnzbd be accessible? + Remotely or locally?" and "What's your server address", in a step by step manner. + Features a button on the server page to test the connection to the news server, + to make sure you have entered your details correctly. +- HTTPS Support - The Web-UI now supports HTTPS and has a standard login window + (if you use a login/pass). The URL no longer requires the /sabnzbd/ part, + though the old URL is still supported. +- File Quick-Check - We can now skip par2 verification altogether in most cases + by performing a quick-check of file hashes before post-processing. + If quick-check passes, then all the files are complete and we can proceed + without doing the lengthy par2 verification step. +- Localization System - We now ship with five localizations, + English, French, Dutch, German and Swedish, and have a rather simple system + for implementing new translations. If you'd like to contribute one, + please inquire on our forums. +- More Indexing Sites - SABnzbd now supports more than just Newzbin. + See the support list for full details. Highlights include the RSS feeds + for NZBMatrix and Nzbs.org +- Revamped Config System - The configuration backend was overhauled in 0.5. + Many of the config pages have been changed around to make more sense, + you can now easily enable/disable servers, you can turn servers on and off + with schedules and in general all server interaction is much faster than before. + You also only have to restart SABnzbd for major changes to take effect. +- File Association - .nzb files can now be associated with SABnzbd in Windows, + so you can just double click them to load the file into your queue. + You can set this up manually on other operating systems by launching SABnzbd + with arguments containing a path, or multiple paths to local nzb/rar/zip files. +- Password Support - Basic support for password protected rar-files is now in. + It's limited, but it works. +- .TS filejoining - The file joining system now supports merging .TS files. +- New Sorting Options - Date and Custom sorting options have been added, so downloads + with a date can be sorted as such, and further customized sorting options + can be developed by users. +- Email Templates - You can now design custom email templates to report + whatever information you want, including multiple recipients. +- OSX Finder menu - SABnzbd now embeds itself in the Finder menubar to give + you some basic functions. + +The API +- 0.4 introduced our API, 0.5 expands it to cover everything SABnzbd is capable of. + Why does this matter? It means if you know any programming language and + understand how to parse XML/JSON and POST data to an address, + then you can write some application which can communicate with SABnzbd + almost as easily as a template can. + +The Queue & History + +- Per-Item Pause - Now, in addition to being able to pause the whole queue, + you can also pause individual items in the queue. You can also force downloads + to start while the whole queue is paused. +- Temporary Pause - 0.5 also brings the ability to pause the queue temporarily. + So if you just want to pause for 30 minutes while you use your internet connection + for something else, you can. This is nice, as it means you don't have + to remember to go back and unpause SABnzbd. +- Priorities - The queue now has four priorities, Normal, High, Low and force. + Think of this as an easy method to move things around your queue, or to insert + things into specific areas of your queue. One use case is to set everything + to "normal" by default, so it works like 0.4.x. However, you can then add + a new post or RSS feed as high-priority to have it be inserted to the top of the queue, + or add one as low-priority to have it inserted at the bottom of the queue + and keep below normal downloads that are added. Forced items will go straight + to the top of the queue, and will continue to download even if the queue is paused. +- Renaming - You can now rename items in the Queue, SABnzbd will use the new name + as the completed directory name. +- New History Backend - The history is now stored in a database, + so we can handle larger histories better, and store more information about downloads. + It also now survives between having the queue cleared. + +Templates + +- New Default Template - With 0.5, the "smpl" template is now the default. + The old basic template is still there, but is now called "Classic". +- SMPL - Has been reworked to be much faster and friendlier to use. + The default page now shows the top 5 items from the queue and history. + The queue and history are also now paginated to stop loading a massive number of items. +- Plush - Complete backend rewrite to work almost exclusively off the API + [so it's MUCH faster], and a reorganized (and more accessible!) main menu. + The Queue and History also now have pagination built in, so you can have hundreds + of items in both, and only ever have to deal with a manageable number of items on any given page. +- Mobile - Thanks to the new API and the jQTouch Framework, we've got + a brand new mobile theme. It's full featured (save for config options), + and gives you the ability to add new nzbs, reorder existing ones, manage the queue, etc. + "Mobile" replaces the old "iPhone" template. + +Bugfixes: +* Sure! diff --git a/SABnzbd.py b/SABnzbd.py new file mode 100755 index 0000000..469d2c3 --- /dev/null +++ b/SABnzbd.py @@ -0,0 +1,1456 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +import sys +if sys.version_info < (2,4): + print "Sorry, requires Python 2.4 or higher." + sys.exit(1) + +import logging +import logging.handlers +import os +import getopt +import signal +import glob +import socket +import platform +import time + +try: + import Cheetah + if Cheetah.Version[0] != '2': + raise ValueError +except ValueError: + print "Sorry, requires Python module Cheetah 2.0rc7 or higher." + sys.exit(1) +except: + print "The following modules need to be installed: Cheetah, cherrypy(included, unpack the zip), sqlite(if python 2.4)" + sys.exit(1) + +import cherrypy +if not cherrypy.__version__.startswith("3.2"): + print "Sorry, requires Python module Cherrypy 3.2 (use the included version)" + sys.exit(1) + +from cherrypy import _cpserver +from cherrypy import _cpwsgi_server + +try: + from sqlite3 import version as sqlite3_version +except: + try: + from pysqlite2.dbapi2 import version as sqlite3_version + except: + print "Sorry, requires Python module sqlite3 (pysqlite2 in python2.4)" + if os.name != 'nt': + print "Try: apt-get install python-pysqlite2" + sys.exit(1) + +import sabnzbd +import sabnzbd.interface +from sabnzbd.constants import * +import sabnzbd.newsunpack +from sabnzbd.misc import get_user_shellfolders, launch_a_browser, real_path, \ + check_latest_version, panic_tmpl, panic_port, panic_fwall, panic, exit_sab, \ + panic_xport, notify, split_host, convert_version, get_ext, create_https_certificates, \ + windows_variant, ip_extract, set_serv_parms, get_serv_parms +import sabnzbd.scheduler as scheduler +import sabnzbd.config as config +import sabnzbd.cfg +import sabnzbd.downloader as downloader +from sabnzbd.codecs import unicoder +from sabnzbd.lang import T, Ta +from sabnzbd.utils import osx + +from threading import Thread + +LOG_FLAG = False # Global for this module, signalling loglevel change + +_first_log = True +def FORCELOG(txt): + global _first_log + if _first_log: + os.remove('d:/temp/debug.txt') + _first_log = False + ff = open('d:/temp/debug.txt', 'a+') + ff.write(txt) + ff.write('\n') + ff.close() + + +#------------------------------------------------------------------------------ +try: + import win32api + import win32serviceutil, win32evtlogutil, win32event, win32service, pywintypes + win32api.SetConsoleCtrlHandler(sabnzbd.sig_handler, True) +except ImportError: + if sabnzbd.WIN32: + print "Sorry, requires Python module PyWin32." + sys.exit(1) + + +def guard_loglevel(): + """ Callback function for guarding loglevel """ + global LOG_FLAG + LOG_FLAG = True + + +#------------------------------------------------------------------------------ +class FilterCP3: + ### Filter out all CherryPy3-Access logging that we receive, + ### because we have the root logger + def __init__(self): + pass + def filter(self, record): + _cplogging = record.module == '_cplogging' + # Python2.4 fix + # record has no attribute called funcName under python 2.4 + if hasattr(record, 'funcName'): + access = record.funcName == 'access' + else: + access = True + return not (_cplogging and access) + + +class guiHandler(logging.Handler): + """ + Logging handler collects the last warnings/errors/exceptions + to be displayed in the web-gui + """ + def __init__(self, size): + """ + Initializes the handler + """ + logging.Handler.__init__(self) + self.size = size + self.store = [] + + def emit(self, record): + """ + Emit a record by adding it to our private queue + """ + if len(self.store) >= self.size: + # Loose the oldest record + self.store.pop(0) + try: + self.store.append(self.format(record)) + except UnicodeDecodeError: + # Catch elusive Unicode conversion problems + pass + + def clear(self): + self.store = [] + + def count(self): + return len(self.store) + + def last(self): + if self.store: + return self.store[len(self.store)-1] + else: + return "" + + def content(self): + """ + Return an array with last records + """ + return self.store + + +#------------------------------------------------------------------------------ + +def print_help(): + print + print "Usage: %s [-f ] " % sabnzbd.MY_NAME + print + print "Options marked [*] are stored in the config file" + print + print "Options:" + print " -f --config-file Location of config file" + print " -s --server Listen on server:port [*]" + print " -t --templates Template directory [*]" + print " -2 --template2 Secondary template dir [*]" + print + print " -l --logging <0..2> Set logging level (0= least, 2= most) [*]" + print " -w --weblogging <0..2> Set cherrypy logging (0= off, 1= on, 2= file-only) [*]" + print + print " -b --browser <0..1> Auto browser launch (0= off, 1= on) [*]" + if sabnzbd.WIN32: + print " -d --daemon Use when run as a service" + else: + print " -d --daemon Fork daemon process" + print + print " --force Discard web-port timeout (see Wiki!)" + print " -h --help Print this message" + print " -v --version Print version information" + print " -c --clean Remove queue, cache and logs" + print " -p --pause Start in paused mode" + print " --https Port to use for HTTPS server" + +def print_version(): + print """ +%s-%s + +Copyright (C) 2008-2010, The SABnzbd-Team +SABnzbd comes with ABSOLUTELY NO WARRANTY. +This is free software, and you are welcome to redistribute it +under certain conditions. It is licensed under the +GNU GENERAL PUBLIC LICENSE Version 2 or (at your option) any later version. + +""" % (sabnzbd.MY_NAME, sabnzbd.__version__) + + +#------------------------------------------------------------------------------ +def daemonize(): + try: + pid = os.fork() + if pid > 0: + sys.exit(0) + except OSError: + print "fork() failed" + sys.exit(1) + + os.chdir(sabnzbd.DIR_PROG) + os.setsid() + # Make sure I can read my own files and shut out others + prev= os.umask(0) + os.umask(prev and int('077',8)) + + try: + pid = os.fork() + if pid > 0: + sys.exit(0) + except OSError: + print "fork() failed" + sys.exit(1) + + dev_null = file('/dev/null', 'r') + os.dup2(dev_null.fileno(), sys.stdin.fileno()) + +#------------------------------------------------------------------------------ +def Bail_Out(browserhost, cherryport, access=False): + """Abort program because of CherryPy troubles + """ + logging.error(Ta('error-noWebUi')) + if access: + panic_xport(browserhost, cherryport) + else: + panic_port(browserhost, cherryport) + sabnzbd.halt() + exit_sab(2) + +#------------------------------------------------------------------------------ +def Web_Template(key, defweb, wdir): + """ Determine a correct web template set, + return full template path + """ + if wdir is None: + try: + wdir = fix_webname(key()) + except: + wdir = '' + if not wdir: + wdir = defweb + key.set(wdir) + if not wdir: + # No default value defined, accept empty path + return '' + + full_dir = real_path(sabnzbd.DIR_INTERFACES, wdir) + full_main = real_path(full_dir, DEF_MAIN_TMPL) + logging.info("Web dir is %s", full_dir) + + if not os.path.exists(full_main): + logging.warning(Ta('warn-noSkin@1'), full_main) + full_dir = real_path(sabnzbd.DIR_INTERFACES, DEF_STDINTF) + full_main = real_path(full_dir, DEF_MAIN_TMPL) + if not os.path.exists(full_main): + logging.exception('Cannot find standard template: %s', full_dir) + panic_tmpl(full_dir) + exit_sab(1) + + sabnzbd.lang.install_language(real_path(full_dir, DEF_INT_LANGUAGE), sabnzbd.cfg.language(), wdir) + + return real_path(full_dir, "templates") + + +#------------------------------------------------------------------------------ +def CheckColor(color, web_dir): + """ Check existence of color-scheme """ + if color and os.path.exists(os.path.join(web_dir,'static/stylesheets/colorschemes/'+color+'.css')): + return color + else: + return '' + +#------------------------------------------------------------------------------ +def fix_webname(name): + if name: + xname = name.title() + else: + xname = '' + if xname in ('Default',): + return 'Classic' + elif xname in ('Classic', 'Plush', 'Mobile'): + return xname + elif xname in ('Smpl', 'Wizard'): + return name.lower() + else: + return name + +#------------------------------------------------------------------------------ +def GetProfileInfo(vista_plus): + """ Get the default data locations + """ + ok = False + if sabnzbd.DAEMON: + # In daemon mode, do not try to access the user profile + # just assume that everything defaults to the program dir + sabnzbd.DIR_APPDATA = sabnzbd.DIR_PROG + sabnzbd.DIR_LCLDATA = sabnzbd.DIR_PROG + sabnzbd.DIR_HOME = sabnzbd.DIR_PROG + if sabnzbd.WIN32: + # Ignore Win32 "logoff" signal + # This should work, but it doesn't + # Instead the signal_handler will ignore the "logoff" signal + #signal.signal(5, signal.SIG_IGN) + pass + ok = True + elif sabnzbd.WIN32: + specials = get_user_shellfolders() + try: + sabnzbd.DIR_APPDATA = '%s\\%s' % (specials['AppData'], DEF_WORKDIR) + sabnzbd.DIR_LCLDATA = '%s\\%s' % (specials['Local AppData'], DEF_WORKDIR) + sabnzbd.DIR_HOME = specials['Personal'] + ok = True + except: + try: + if vista_plus: + root = os.environ['AppData'] + user = os.environ['USERPROFILE'] + sabnzbd.DIR_APPDATA = '%s\\%s' % (root.replace('\\Roaming', '\\Local'), DEF_WORKDIR) + sabnzbd.DIR_HOME = '%s\\Documents' % user + else: + root = os.environ['USERPROFILE'] + sabnzbd.DIR_APPDATA = '%s\\%s' % (root, DEF_WORKDIR) + sabnzbd.DIR_HOME = root + + try: + # Conversion to 8bit ASCII required for CherryPy + sabnzbd.DIR_APPDATA = sabnzbd.DIR_APPDATA.encode('latin-1') + sabnzbd.DIR_HOME = sabnzbd.DIR_HOME.encode('latin-1') + ok = True + except: + # If unconvertible characters exist, use MSDOS name + try: + sabnzbd.DIR_APPDATA = win32api.GetShortPathName(sabnzbd.DIR_APPDATA) + sabnzbd.DIR_HOME = win32api.GetShortPathName(sabnzbd.DIR_HOME) + ok = True + except: + pass + sabnzbd.DIR_LCLDATA = sabnzbd.DIR_APPDATA + except: + pass + + elif sabnzbd.DARWIN: + sabnzbd.DIR_APPDATA = '%s/Library/Application Support/SABnzbd' % (os.environ['HOME']) + sabnzbd.DIR_LCLDATA = sabnzbd.DIR_APPDATA + sabnzbd.DIR_HOME = os.environ['HOME'] + ok = True + + else: + # Unix/Linux + sabnzbd.DIR_APPDATA = '%s/.%s' % (os.environ['HOME'], DEF_WORKDIR) + sabnzbd.DIR_LCLDATA = sabnzbd.DIR_APPDATA + sabnzbd.DIR_HOME = os.environ['HOME'] + ok = True + + if not ok: + panic("Cannot access the user profile.", + "Please start with sabnzbd.ini file in another location") + exit_sab(2) + + +#------------------------------------------------------------------------------ +def print_modules(): + """ Log all detected optional or external modules + """ + if sabnzbd.decoder.HAVE_YENC: + logging.info("_yenc module... found!") + else: + if hasattr(sys, "frozen"): + logging.error(Ta('error-noYEnc')) + else: + logging.info("_yenc module... NOT found!") + + if sabnzbd.newsunpack.PAR2_COMMAND: + logging.info("par2 binary... found (%s)", sabnzbd.newsunpack.PAR2_COMMAND) + else: + logging.error(Ta('error-noPar2')) + + if sabnzbd.newsunpack.PAR2C_COMMAND: + logging.info("par2-classic binary... found (%s)", sabnzbd.newsunpack.PAR2C_COMMAND) + + if sabnzbd.newsunpack.RAR_COMMAND: + logging.info("unrar binary... found (%s)", sabnzbd.newsunpack.RAR_COMMAND) + else: + logging.warning(Ta('warn-noUnrar')) + + if sabnzbd.newsunpack.ZIP_COMMAND: + logging.info("unzip binary... found (%s)", sabnzbd.newsunpack.ZIP_COMMAND) + else: + logging.warning(Ta('warn-noUnzip')) + + if not sabnzbd.WIN32: + if sabnzbd.newsunpack.NICE_COMMAND: + logging.info("nice binary... found (%s)", sabnzbd.newsunpack.NICE_COMMAND) + else: + logging.info("nice binary... NOT found!") + if sabnzbd.newsunpack.IONICE_COMMAND: + logging.info("ionice binary... found (%s)", sabnzbd.newsunpack.IONICE_COMMAND) + else: + logging.info("ionice binary... NOT found!") + + if sabnzbd.newswrapper.HAVE_SSL: + logging.info("pyOpenSSL... found (%s)", sabnzbd.newswrapper.HAVE_SSL) + else: + logging.info("pyOpenSSL... NOT found - try apt-get install python-pyopenssl (SSL is optional)") + + +#------------------------------------------------------------------------------ +def get_webhost(cherryhost, cherryport, https_port): + """ Determine the webhost address and port, + return (host, port, browserhost) + """ + if cherryhost is None: + cherryhost = sabnzbd.cfg.cherryhost() + else: + sabnzbd.cfg.cherryhost.set(cherryhost) + + # Get IP address, but discard APIPA/IPV6 + # If only APIPA's or IPV6 are found, fall back to localhost + ipv4 = ipv6 = False + localhost = hostip = 'localhost' + try: + info = socket.getaddrinfo(socket.gethostname(), None) + except: + # Hostname does not resolve, use 0.0.0.0 + cherryhost = '0.0.0.0' + info = socket.getaddrinfo(localhost, None) + for item in info: + ip = str(item[4][0]) + if ip.startswith('169.254.'): + pass # Is an APIPA + elif ':' in ip: + ipv6 = True + elif '.' in ip and not ipv4: + ipv4 = True + hostip = ip + + # A blank host will use the local ip address + if cherryhost == '': + if ipv6 and ipv4: + # To protect Firefox users, use numeric IP + cherryhost = hostip + browserhost = hostip + else: + cherryhost = socket.gethostname() + browserhost = cherryhost + + # 0.0.0.0 will listen on all ipv4 interfaces (no ipv6 addresses) + elif cherryhost == '0.0.0.0': + # Just take the gamble for this + cherryhost = '0.0.0.0' + browserhost = localhost + + # :: will listen on all ipv6 interfaces (no ipv4 addresses) + elif cherryhost in ('::','[::]'): + cherryhost = cherryhost.strip('[').strip(']') + # Assume '::1' == 'localhost' + browserhost = localhost + + # IPV6 address + elif '[' in cherryhost or ':' in cherryhost: + browserhost = cherryhost + + # IPV6 numeric address + elif cherryhost.replace('.', '').isdigit(): + # IPV4 numerical + browserhost = cherryhost + + elif cherryhost == localhost: + cherryhost = localhost + browserhost = localhost + + else: + # If on Vista and/or APIPA, use numerical IP, to help FireFoxers + if ipv6 and ipv4: + cherryhost = hostip + browserhost = cherryhost + + # Some systems don't like brackets in numerical ipv6 + if '[' in cherryhost: + try: + info = socket.getaddrinfo(cherryhost, None) + except: + cherryhost = cherryhost.strip('[]') + + if ipv6 and ipv4 and \ + (browserhost not in ('localhost', '127.0.0.1', '[::1]', '::1')): + sabnzbd.AMBI_LOCALHOST = True + logging.info("IPV6 has priority on this system, potential Firefox issue") + + if ipv6 and ipv4 and cherryhost == '' and sabnzbd.WIN32: + logging.warning(Ta('warn-0000')) + + if cherryhost == 'localhost' and not sabnzbd.WIN32 and not sabnzbd.DARWIN: + # On the Ubuntu family, localhost leads to problems for CherryPy + ips = ip_extract() + if '127.0.0.1' in ips and '::1' in ips: + cherryhost = '127.0.0.1' + if ips[0] != '127.0.0.1': + browserhost = '127.0.0.1' + + if cherryport is None: + cherryport = sabnzbd.cfg.cherryport.get_int() + else: + sabnzbd.cfg.cherryport.set(str(cherryport)) + + if https_port is None: + https_port = sabnzbd.cfg.https_port.get_int() + else: + sabnzbd.cfg.https_port.set(str(https_port)) + # if the https port was specified, assume they want HTTPS enabling also + sabnzbd.cfg.enable_https.set(True) + + if cherryport == https_port: + sabnzbd.cfg.enable_https.set(False) + logging.error(Ta('error-sameHTTP-HTTPS')) + + return cherryhost, cherryport, browserhost, https_port + +def is_sabnzbd_running(url): + import urllib2 + try: + url = '%sapi?mode=version' % (url) + s = urllib2.urlopen(url) + ver = s.read() + if ver and ver.strip() == sabnzbd.__version__: + return True + else: + return False + except: + return False + +def find_free_port(host, currentport, i=0): + while i >=10 and currentport <= 49151: + try: + cherrypy.process.servers.check_port(host, currentport) + return currentport + except: + currentport+=5 + i+=1 + return -1 + +def check_for_sabnzbd(url, upload_nzbs): + # Check for a running instance of sabnzbd(same version) on this port + if is_sabnzbd_running(url): + # Upload any specified nzb files to the running instance + if upload_nzbs: + from sabnzbd.utils.upload import upload_file + for f in upload_nzbs: + upload_file(url, f) + else: + # Launch the web browser and quit since sabnzbd is already running + launch_a_browser(url, force=True) + exit_sab(0) + return True + return False + +def copy_old_files(newpath): + # OSX only: + # If no INI file found but old one exists, copy it + # When copying the INI, also copy rss, bookmarks and watched-data + if not os.path.exists(os.path.join(newpath, DEF_INI_FILE)): + if not os.path.exists(newpath): + os.mkdir(newpath) + oldpath = os.environ['HOME'] + "/.sabnzbd" + oldini = os.path.join(oldpath, DEF_INI_FILE) + if os.path.exists(oldini): + import shutil + try: + shutil.copy(oldini, newpath) + except: + pass + oldpath = os.path.join(oldpath, DEF_CACHE_DIR) + newpath = os.path.join(newpath, DEF_CACHE_DIR) + if not os.path.exists(newpath): + os.mkdir(newpath) + try: + shutil.copy(os.path.join(oldpath, RSS_FILE_NAME), newpath) + except: + pass + try: + shutil.copy(os.path.join(oldpath, BOOKMARK_FILE_NAME), newpath) + except: + pass + try: + shutil.copy(os.path.join(oldpath, SCAN_FILE_NAME), newpath) + except: + pass + + +def evaluate_inipath(path): + # Derive INI file path from a partial path. + # Full file path: if file does not exist the name must contain a dot + # but not a leading dot. + # A foldername is enough, the standard name will be appended. + + path = os.path.normpath(os.path.abspath(path)) + inipath = os.path.join(path, DEF_INI_FILE) + if os.path.isdir(path): + return inipath + elif os.path.isfile(path): + return path + else: + dir, name = os.path.split(path) + if name.find('.') < 1: + return inipath + else: + return path + + +def cherrypy_logging(log_path): + log = cherrypy.log + log.access_file = '' + log.error_file = '' + # Max size of 512KB + maxBytes = getattr(log, "rot_maxBytes", 524288) + # cherrypy.log cherrypy.log.1 cherrypy.log.2 + backupCount = getattr(log, "rot_backupCount", 3) + + # Make a new RotatingFileHandler for the error log. + fname = getattr(log, "rot_error_file", log_path) + h = logging.handlers.RotatingFileHandler(fname, 'a', maxBytes, backupCount) + h.setLevel(logging.DEBUG) + h.setFormatter(cherrypy._cplogging.logfmt) + log.error_log.addHandler(h) + + +#------------------------------------------------------------------------------ +def commandline_handler(frozen=True): + """ Split win32-service commands are true parameters + Returns: + service, sab_opts, serv_opts, upload_nzbs + """ + service = '' + sab_opts = [] + serv_inst = False + serv_opts = [os.path.normpath(os.path.abspath(sys.argv[0]))] + upload_nzbs = [] + + # Ugly hack to remove the extra "SABnzbd*" parameter the Windows binary + # gets when it's restarted + if len(sys.argv) > 1 and \ + 'sabnzbd' in sys.argv[1].lower() and \ + not sys.argv[1].startswith('-'): + slice = 2 + else: + slice = 1 + + # Prepend options from env-variable to options + info = os.environ.get('SABnzbd', '').split() + info.extend(sys.argv[slice:]) + + try: + opts, args = getopt.getopt(info, "phdvncw:l:s:f:t:b:2:", + ['pause', 'help', 'daemon', 'nobrowser', 'clean', 'logging=', + 'weblogging=', 'server=', 'templates', + 'template2', 'browser=', 'config-file=', 'delay=', 'force', + 'version', 'https=', 'autorestarted', + # Below Win32 Service options + 'password=', 'username=', 'startup=', 'perfmonini=', 'perfmondll=', + 'interactive', 'wait=', + ]) + except getopt.GetoptError: + print_help() + exit_sab(2) + + # Check for Win32 service commands + if args and args[0] in ('install', 'update', 'remove', 'start', 'stop', 'restart', 'debug'): + service = args[0] + serv_opts.extend(args) + + if not service: + # Get and remove any NZB file names + for entry in args: + if get_ext(entry) in ('.nzb', '.zip','.rar', '.nzb.gz'): + upload_nzbs.append(entry) + + for opt, arg in opts: + if opt in ('password','username','startup','perfmonini', 'perfmondll', 'interactive', 'wait'): + # Service option, just collect + if service: + serv_opts.append(opt) + if arg: + serv_opts.append(arg) + else: + if opt == '-f': + arg = os.path.normpath(os.path.abspath(arg)) + sab_opts.append((opt, arg)) + + return service, sab_opts, serv_opts, upload_nzbs + + +def get_f_option(opts): + """ Return value of the -f option """ + for opt, arg in opts: + if opt == '-f': + return arg + else: + return None + + +#------------------------------------------------------------------------------ +def main(): + global LOG_FLAG + + autobrowser = None + autorestarted = False + sabnzbd.MY_FULLNAME = sys.argv[0] + fork = False + pause = False + inifile = None + cherryhost = None + cherryport = None + https_port = None + cherrypylogging = None + clean_up = False + logging_level = None + web_dir = None + web_dir2 = None + delay = 0.0 + vista_plus = False + vista64 = False + force_web = False + re_argv = [sys.argv[0]] + + service, sab_opts, serv_opts, upload_nzbs = commandline_handler() + + for opt, arg in sab_opts: + if opt == '--servicecall': + sabnzbd.MY_FULLNAME = arg + elif opt in ('-d', '--daemon'): + if not sabnzbd.WIN32: + fork = True + autobrowser = False + sabnzbd.DAEMON = True + consoleLogging = False + re_argv.append(opt) + elif opt in ('-f', '--config-file'): + inifile = arg + re_argv.append(opt) + re_argv.append(arg) + elif opt in ('-h', '--help'): + print_help() + exit_sab(0) + elif opt in ('-t', '--templates'): + web_dir = arg + elif opt in ('-2', '--template2'): + web_dir2 = arg + elif opt in ('-s', '--server'): + (cherryhost, cherryport) = split_host(arg) + elif opt in ('-n', '--nobrowser'): + autobrowser = False + elif opt in ('-b', '--browser'): + try: + autobrowser = bool(int(arg)) + except: + autobrowser = True + elif opt in ('--autorestarted'): + autorestarted = True + elif opt in ('-c', '--clean'): + clean_up = True + elif opt in ('-w', '--weblogging'): + try: + cherrypylogging = int(arg) + except: + cherrypylogging = -1 + if cherrypylogging < 0 or cherrypylogging > 2: + print_help() + exit_sab(1) + elif opt in ('-l', '--logging'): + try: + logging_level = int(arg) + except: + logging_level = -1 + if logging_level < 0 or logging_level > 2: + print_help() + exit_sab(1) + elif opt in ('-v', '--version'): + print_version() + exit_sab(0) + elif opt in ('-p', '--pause'): + pause = True + elif opt in ('--delay',): + # For debugging of memory leak only!! + try: + delay = float(arg) + except: + pass + elif opt in ('--force',): + force_web = True + re_argv.append(opt) + elif opt in ('--https',): + https_port = int(arg) + re_argv.append(opt) + re_argv.append(arg) + + sabnzbd.MY_FULLNAME = os.path.normpath(os.path.abspath(sabnzbd.MY_FULLNAME)) + sabnzbd.MY_NAME = os.path.basename(sabnzbd.MY_FULLNAME) + sabnzbd.DIR_PROG = os.path.dirname(sabnzbd.MY_FULLNAME) + sabnzbd.DIR_INTERFACES = real_path(sabnzbd.DIR_PROG, DEF_INTERFACES) + sabnzbd.DIR_LANGUAGE = real_path(sabnzbd.DIR_PROG, DEF_LANGUAGE) + org_dir = os.getcwd() + + if getattr(sys, 'frozen', None) == 'macosx_app': + # Correct path if frozen with py2app (OSX) + sabnzbd.MY_FULLNAME = sabnzbd.MY_FULLNAME.replace("/Resources/SABnzbd.py","/MacOS/SABnzbd") + + # Need console logging for SABnzbd.py and SABnzbd-console.exe + consoleLogging = (not hasattr(sys, "frozen")) or (sabnzbd.MY_NAME.lower().find('-console') > 0) + + # No console logging needed for OSX app + noConsoleLoggingOSX = (sabnzbd.DIR_PROG.find('.app/Contents/Resources') > 0) + if noConsoleLoggingOSX: + consoleLogging = 1 + + LOGLEVELS = (logging.WARNING, logging.INFO, logging.DEBUG) + + # Setup primary logging to prevent default console logging + gui_log = guiHandler(MAX_WARNINGS) + gui_log.setLevel(logging.WARNING) + format_gui = '%(asctime)s\n%(levelname)s\n%(message)s' + gui_log.setFormatter(logging.Formatter(format_gui)) + sabnzbd.GUIHANDLER = gui_log + + # Create logger + logger = logging.getLogger('') + logger.setLevel(logging.WARNING) + logger.addHandler(gui_log) + + # Detect Windows variant + if sabnzbd.WIN32: + vista_plus, vista64 = windows_variant() + + if inifile: + # INI file given, simplest case + inifile = evaluate_inipath(inifile) + else: + # No ini file given, need profile data + GetProfileInfo(vista_plus) + # Find out where INI file is + inifile = os.path.abspath(sabnzbd.DIR_PROG + '/' + DEF_INI_FILE) + if not os.path.exists(inifile): + inifile = os.path.abspath(sabnzbd.DIR_LCLDATA + '/' + DEF_INI_FILE) + if sabnzbd.DARWIN: + copy_old_files(sabnzbd.DIR_LCLDATA) + + # If INI file at non-std location, then use program dir as $HOME + if sabnzbd.DIR_LCLDATA != os.path.dirname(inifile): + sabnzbd.DIR_HOME = os.path.dirname(inifile) + + # All system data dirs are relative to the place we found the INI file + sabnzbd.DIR_LCLDATA = os.path.dirname(inifile) + + if not os.path.exists(inifile) and not os.path.exists(sabnzbd.DIR_LCLDATA): + try: + os.makedirs(sabnzbd.DIR_LCLDATA) + except IOError: + panic('Cannot create folder "%s".' % sabnzbd.DIR_LCLDATA, 'Check specified INI file location.') + exit_sab(1) + + sabnzbd.cfg.set_root_folders(sabnzbd.DIR_HOME, sabnzbd.DIR_LCLDATA, sabnzbd.DIR_PROG, sabnzbd.DIR_INTERFACES) + + res, msg = config.read_config(inifile) + if not res: + panic(msg, 'Specify a correct file or delete this file.') + exit_sab(1) + + # Set root folders for HTTPS server file paths + sabnzbd.cfg.set_root_folders2() + + # Determine web host address + cherryhost, cherryport, browserhost, https_port = get_webhost(cherryhost, cherryport, https_port) + enable_https = sabnzbd.cfg.enable_https() + + # When this is a daemon, just check and bail out if port in use + if sabnzbd.DAEMON: + if enable_https and https_port: + try: + cherrypy.process.servers.check_port(cherryhost, https_port) + except IOError, error: + Bail_Out(browserhost, cherryport) + try: + cherrypy.process.servers.check_port(cherryhost, cherryport) + except IOError, error: + Bail_Out(browserhost, cherryport) + + # If an instance of sabnzbd(same version) is already running on this port, launch the browser + # If another program or sabnzbd version is on this port, try 10 other ports going up in a step of 5 + # If 'Port is not bound' (firewall) do not do anything (let the script further down deal with that). + ## SSL + if enable_https and https_port: + try: + cherrypy.process.servers.check_port(browserhost, https_port) + except IOError, error: + if str(error) == 'Port not bound.': + pass + else: + url = 'https://%s:%s/' % (browserhost, https_port) + if not check_for_sabnzbd(url, upload_nzbs): + port = find_free_port(browserhost, https_port) + if port > 0: + sabnzbd.cfg.https_port.set(port) + cherryport = port + ## NonSSL + try: + cherrypy.process.servers.check_port(browserhost, cherryport) + except IOError, error: + if str(error) == 'Port not bound.': + pass + else: + url = 'http://%s:%s/' % (browserhost, cherryport) + if not check_for_sabnzbd(url, upload_nzbs): + port = find_free_port(browserhost, cherryport) + if port > 0: + sabnzbd.cfg.cherryport.set(port) + cherryport = port + + + if cherrypylogging is None: + cherrypylogging = sabnzbd.cfg.log_web() + else: + sabnzbd.cfg.log_web.set(cherrypylogging) + + if logging_level is None: + logging_level = sabnzbd.cfg.log_level() + else: + sabnzbd.cfg.log_level.set(logging_level) + + logdir = sabnzbd.cfg.log_dir.get_path() + if fork and not logdir: + print "Error:" + print "I refuse to fork without a log directory!" + sys.exit(1) + + if clean_up: + xlist= glob.glob(logdir + '/*') + for x in xlist: + if RSS_FILE_NAME not in x: + os.remove(x) + + try: + sabnzbd.LOGFILE = os.path.join(logdir, DEF_LOG_FILE) + logsize = sabnzbd.cfg.log_size.get_int() + rollover_log = logging.handlers.RotatingFileHandler(\ + sabnzbd.LOGFILE, 'a+', + logsize, + sabnzbd.cfg.log_backups()) + + format = '%(asctime)s::%(levelname)s::[%(module)s:%(lineno)d] %(message)s' + rollover_log.setFormatter(logging.Formatter(format)) + rollover_log.addFilter(FilterCP3()) + sabnzbd.LOGHANDLER = rollover_log + logger.addHandler(rollover_log) + logger.setLevel(LOGLEVELS[logging_level]) + + except IOError: + print "Error:" + print "Can't write to logfile" + exit_sab(2) + + if fork: + try: + x= sys.stderr.fileno + x= sys.stdout.fileno + ol_path = os.path.join(logdir, DEF_LOG_ERRFILE) + out_log = file(ol_path, 'a+', 0) + sys.stderr.flush() + sys.stdout.flush() + os.dup2(out_log.fileno(), sys.stderr.fileno()) + os.dup2(out_log.fileno(), sys.stdout.fileno()) + except AttributeError: + pass + + else: + try: + x= sys.stderr.fileno + x= sys.stdout.fileno + + if consoleLogging: + console = logging.StreamHandler() + console.addFilter(FilterCP3()) + console.setLevel(LOGLEVELS[logging_level]) + console.setFormatter(logging.Formatter(format)) + logger.addHandler(console) + if noConsoleLoggingOSX: + logging.info('Console logging for OSX App disabled') + so = file('/dev/null', 'a+') + os.dup2(so.fileno(), sys.stdout.fileno()) + os.dup2(so.fileno(), sys.stderr.fileno()) + except AttributeError: + pass + + logging.info('--------------------------------') + logging.info('%s-%s (rev=%s)', sabnzbd.MY_NAME, sabnzbd.__version__, sabnzbd.__baseline__) + if sabnzbd.WIN32: + suffix = '' + if vista_plus: + suffix = ' (=Vista+)' + if vista64: + suffix = ' (=Vista+ x64)' + sabnzbd.WIN64 = True + logging.info('Platform=%s%s Class=%s', platform.platform(), suffix, os.name) + else: + logging.info('Platform = %s', os.name) + logging.info('Python-version = %s', sys.version) + + # OSX 10.5 I/O priority setting + if sabnzbd.DARWIN: + logging.info('[osx] IO priority setting') + try: + from ctypes import cdll + libc=cdll.LoadLibrary('/usr/lib/libc.dylib') + boolSetResult=libc.setiopolicy_np(0,1,3) + logging.info('[osx] IO priority set to throttle for process scope') + except: + logging.info('[osx] IO priority setting not supported') + + if autobrowser != None: + sabnzbd.cfg.autobrowser.set(autobrowser) + else: + autobrowser = sabnzbd.cfg.autobrowser() + + sabnzbd.cfg.debug_delay.set(delay) + + # Find external programs + sabnzbd.newsunpack.find_programs(sabnzbd.DIR_PROG) + + if not sabnzbd.WIN_SERVICE: + signal.signal(signal.SIGINT, sabnzbd.sig_handler) + signal.signal(signal.SIGTERM, sabnzbd.sig_handler) + + init_ok = sabnzbd.initialize(pause, clean_up, evalSched=True) + + if not init_ok: + logging.error('Initializing %s-%s failed, aborting', + sabnzbd.MY_NAME, sabnzbd.__version__) + exit_sab(2) + + os.chdir(sabnzbd.DIR_PROG) + + web_dir = Web_Template(sabnzbd.cfg.web_dir, DEF_STDINTF, fix_webname(web_dir)) + web_dir2 = Web_Template(sabnzbd.cfg.web_dir2, '', fix_webname(web_dir2)) + + wizard_dir = os.path.join(sabnzbd.DIR_INTERFACES, 'wizard') + sabnzbd.lang.install_language(os.path.join(wizard_dir, DEF_INT_LANGUAGE), sabnzbd.cfg.language(), 'wizard') + + sabnzbd.WEB_DIR = web_dir + sabnzbd.WEB_DIR2 = web_dir2 + sabnzbd.WIZARD_DIR = wizard_dir + + sabnzbd.WEB_COLOR = CheckColor(sabnzbd.cfg.web_color(), web_dir) + sabnzbd.cfg.web_color.set(sabnzbd.WEB_COLOR) + sabnzbd.WEB_COLOR2 = CheckColor(sabnzbd.cfg.web_color2(), web_dir2) + sabnzbd.cfg.web_color2.set(sabnzbd.WEB_COLOR2) + + if fork and not sabnzbd.WIN32: + daemonize() + + # Save the INI file + config.save_config(force=True) + + logging.info('Starting %s-%s', sabnzbd.MY_NAME, sabnzbd.__version__) + try: + sabnzbd.start() + except: + logging.exception("Failed to start %s-%s", sabnzbd.MY_NAME, sabnzbd.__version__) + sabnzbd.halt() + + print_modules() + + # Upload any nzb/zip/rar/nzb.gz files from file association + if upload_nzbs: + from sabnzbd.utils.upload import add_local + for f in upload_nzbs: + add_local(f) + + cherrylogtoscreen = False + sabnzbd.WEBLOGFILE = None + + if cherrypylogging: + if logdir: + sabnzbd.WEBLOGFILE = os.path.join(logdir, DEF_LOG_CHERRY) + # Define our custom logger for cherrypy errors + cherrypy_logging(sabnzbd.WEBLOGFILE) + if not fork: + try: + x= sys.stderr.fileno + x= sys.stdout.fileno + if cherrypylogging == 1: + cherrylogtoscreen = True + except: + pass + + cherrypy.config.update({'server.environment': 'production', + 'server.socket_host': cherryhost, + 'server.socket_port': cherryport, + 'log.screen': cherrylogtoscreen, + 'engine.autoreload_frequency' : 100, + 'engine.autoreload_on' : False, + 'engine.reexec_retry' : 100, + 'tools.encode.on' : True, + 'tools.gzip.on' : True, + 'tools.sessions.on' : True, + 'request.show_tracebacks': True, + 'checker.check_localhost' : bool(consoleLogging), + 'error_page.401': sabnzbd.misc.error_page_401 + }) + + https_cert = sabnzbd.cfg.https_cert.get_path() + https_key = sabnzbd.cfg.https_key.get_path() + if enable_https: + # If either the HTTPS certificate or key do not exist, make some self-signed ones. + if not (https_cert and os.path.exists(https_cert)) or not (https_key and os.path.exists(https_key)): + create_https_certificates(https_cert, https_key) + + if https_port and not (os.path.exists(https_cert) or os.path.exists(https_key)): + logging.warning(Ta('warn-noCertKey')) + https_port = False + + if https_port: + secure_server = _cpwsgi_server.CPWSGIServer() + secure_server.bind_addr = (cherryhost, https_port) + secure_server.ssl_certificate = https_cert + secure_server.ssl_private_key = https_key + adapter = _cpserver.ServerAdapter(cherrypy.engine, secure_server, secure_server.bind_addr) + adapter.subscribe() + + static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir, 'static')} + wizard_static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(wizard_dir, 'static')} + + appconfig = {'/sabnzbd/api' : {'tools.basic_auth.on' : False}, + '/api' : {'tools.basic_auth.on' : False}, + '/m/api' : {'tools.basic_auth.on' : False}, + '/rss' : {'tools.basic_auth.on' : False}, + '/sabnzbd/rss' : {'tools.basic_auth.on' : False}, + '/m/rss' : {'tools.basic_auth.on' : False}, + '/sabnzbd/shutdown': {'streamResponse': True}, + '/sabnzbd/static': static, + '/static': static, + '/sabnzbd/wizard/static': wizard_static, + '/wizard/static': wizard_static + } + + if web_dir2: + static2 = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir2, 'static')} + appconfig['/sabnzbd/m/api'] = {'tools.basic_auth.on' : False} + appconfig['/sabnzbd/m/rss'] = {'tools.basic_auth.on' : False} + appconfig['/sabnzbd/m/shutdown'] = {'streamResponse': True} + appconfig['/sabnzbd/m/static'] = static2 + appconfig['/m/static'] = static2 + appconfig['/sabnzbd/m/wizard/static'] = wizard_static + appconfig['/m/wizard/static'] = wizard_static + + login_page = sabnzbd.interface.MainPage(web_dir, '/', web_dir2, '/m/', first=2) + cherrypy.tree.mount(login_page, '/', config=appconfig) + + # Set authentication for CherryPy + sabnzbd.interface.set_auth(cherrypy.config) + + logging.info('Starting web-interface on %s:%s', cherryhost, cherryport) + + sabnzbd.cfg.log_level.callback(guard_loglevel) + + try: + # Use internal cherrypy check first to prevent ugly tracebacks + cherrypy.process.servers.check_port(browserhost, cherryport) + cherrypy.engine.start() + except IOError, error: + if str(error) == 'Port not bound.': + if not force_web: + panic_fwall(vista_plus) + sabnzbd.halt() + exit_sab(2) + else: + logging.debug("Failed to start web-interface: ", exc_info = True) + Bail_Out(browserhost, cherryport) + except socket.error, error: + logging.debug("Failed to start web-interface: ", exc_info = True) + Bail_Out(browserhost, cherryport, access=True) + except: + logging.debug("Failed to start web-interface: ", exc_info = True) + Bail_Out(browserhost, cherryport) + + # Wait for server to become ready + cherrypy.engine.wait(cherrypy.process.wspbus.states.STARTED) + + if not autorestarted: + if enable_https and https_port: + launch_a_browser("https://%s:%s/sabnzbd" % (browserhost, https_port)) + else: + launch_a_browser("http://%s:%s/sabnzbd" % (browserhost, cherryport)) + + notify("SAB_Launched", None) + osx.sendGrowlMsg('SABnzbd %s' % (sabnzbd.__version__),"http://%s:%s/sabnzbd" % (browserhost, cherryport),osx.NOTIFICATION['startup']) + # Now's the time to check for a new version + check_latest_version() + autorestarted = False + + # Have to keep this running, otherwise logging will terminate + timer = 0 + while not sabnzbd.SABSTOP: + if sabnzbd.WIN_SERVICE: + rc = win32event.WaitForMultipleObjects((sabnzbd.WIN_SERVICE.hWaitStop, + sabnzbd.WIN_SERVICE.overlapped.hEvent), 0, 3000) + if rc == win32event.WAIT_OBJECT_0: + sabnzbd.save_state() + logging.info('Leaving SABnzbd') + sabnzbd.SABSTOP = True + return + else: + time.sleep(3) + + # Check for loglevel changes + if LOG_FLAG: + LOG_FLAG = False + level = LOGLEVELS[sabnzbd.cfg.log_level()] + logger.setLevel(level) + if consoleLogging: + console.setLevel(level) + + ### 30 sec polling tasks + if timer > 9: + timer = 0 + # Keep Windows awake (if needed) + sabnzbd.keep_awake() + # Restart scheduler (if needed) + scheduler.restart() + # Save config (if needed) + config.save_config() + # Check the threads + if not sabnzbd.check_all_tasks(): + autorestarted = True + cherrypy.engine.execv = True + else: + timer += 1 + + ### 3 sec polling tasks + # Check for auto-restart request + if cherrypy.engine.execv: + scheduler.stop() + sabnzbd.halt() + cherrypy.engine.exit() + sabnzbd.SABSTOP = True + if downloader.paused(): + re_argv.append('-p') + if autorestarted: + re_argv.append('--autorestarted') + sys.argv = re_argv + os.chdir(org_dir) + if sabnzbd.DARWIN: + args = sys.argv[:] + args.insert(0, sys.executable) + #TO FIX : when executing from sources on osx, after a restart, process is detached from console + #If OSX frozen restart of app instead of embedded python + if getattr(sys, 'frozen', None) == 'macosx_app': + #[[NSProcessInfo processInfo] processIdentifier]] + #logging.info("%s" % (NSProcessInfo.processInfo().processIdentifier())) + logging.info(os.getpid()) + os.system('kill -9 %s && open "%s"' % (os.getpid(),sabnzbd.MY_FULLNAME.replace("/Contents/MacOS/SABnzbd","")) ) + else: + pid = os.fork() + if pid == 0: + os.execv(sys.executable, args) + elif sabnzbd.WIN_SERVICE: + # Hope for the service manager to restart us + sys.exit(1) + else: + cherrypy.engine._do_execv() + + config.save_config() + + notify("SAB_Shutdown", None) + osx.sendGrowlMsg('SABnzbd',T('grwl-shutdown-end-msg'),osx.NOTIFICATION['startup']) + logging.info('Leaving SABnzbd') + sys.stderr.flush() + sys.stdout.flush() + if getattr(sys, 'frozen', None) == 'macosx_app': + AppHelper.stopEventLoop() + else: + os._exit(0) + + + +##################################################################### +# +# Windows Service Support +# +if sabnzbd.WIN32: + import servicemanager + class SABnzbd(win32serviceutil.ServiceFramework): + """ Win32 Service Handler """ + + _svc_name_ = 'SABnzbd' + _svc_display_name_ = 'SABnzbd Binary Newsreader' + _svc_deps_ = ["EventLog", "Tcpip"] + _svc_description_ = 'Automated downloading from Usenet. ' \ + 'Set to "automatic" to start the service at system startup. ' \ + 'You may need to login with a real user account when you need ' \ + 'access to network shares.' + + def __init__(self, args): + win32serviceutil.ServiceFramework.__init__(self, args) + + self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) + self.overlapped = pywintypes.OVERLAPPED() + self.overlapped.hEvent = win32event.CreateEvent(None, 0, 0, None) + sabnzbd.WIN_SERVICE = self + + def SvcDoRun(self): + msg = 'SABnzbd-service %s' % sabnzbd.__version__ + self.Logger(servicemanager.PYS_SERVICE_STARTED, msg + ' has started') + sys.argv = get_serv_parms(self._svc_name_) + main() + self.Logger(servicemanager.PYS_SERVICE_STOPPED, msg + ' has stopped') + + def SvcStop(self): + self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) + win32event.SetEvent(self.hWaitStop) + + def Logger(self, state, msg): + win32evtlogutil.ReportEvent(self._svc_display_name_, + state, 0, + servicemanager.EVENTLOG_INFORMATION_TYPE, + (self._svc_name_, unicoder(msg))) + + def ErrLogger(self, msg, text): + win32evtlogutil.ReportEvent(self._svc_display_name_, + servicemanager.PYS_SERVICE_STOPPED, 0, + servicemanager.EVENTLOG_ERROR_TYPE, + (self._svc_name_, unicoder(msg)), + unicoder(text)) + + +def prep_service_parms(args): + """ Prepare parameter list for service """ + + # Must store our original path, because the Python Service launcher + # won't give it to us. + serv = [os.path.normpath(os.path.abspath(sys.argv[0]))] + + # Convert the tuples to list + for arg in args: + serv.append(arg[0]) + if arg[1]: + serv.append(arg[1]) + + # Make sure we run in daemon mode + serv.append('-d') + return serv + + +def HandleCommandLine(allow_service=True): + """ Handle command line for a Windows Service + Prescribed name that will be called by Py2Exe. + You MUST set 'cmdline_style':'custom' in the package.py! + Returns True when any service commands were detected. + """ + service, sab_opts, serv_opts, upload_nzbs = commandline_handler() + if service and not allow_service: + # The other frozen apps don't support Services + print "For service support, use SABnzbd-service.exe" + return True + elif service: + if service in ('install', 'update'): + # In this case check for required parameters + path = get_f_option(sab_opts) + if not path: + print 'The -f parameter is required.\n' \ + 'Use: -f %s' % service + return True + + # First run the service installed, because this will + # set the service key in the Registry + win32serviceutil.HandleCommandLine(SABnzbd, argv=serv_opts) + + # Add our own parameter to the Registry + sab_opts = prep_service_parms(sab_opts) + if set_serv_parms(SABnzbd._svc_name_, sab_opts): + print '\nYou may need to set additional Service parameters.\n' \ + 'Run services.msc from a command prompt.\n' + else: + print 'Cannot set required Registry info.' + else: + # Other service commands need no manipulation + win32serviceutil.HandleCommandLine(SABnzbd) + return bool(service) + + + +##################################################################### +# +# Platform specific startup code +# +if __name__ == '__main__': + + if sabnzbd.WIN32: + if not HandleCommandLine(allow_service=not hasattr(sys, "frozen")): + main() + + elif getattr(sys, 'frozen', None) == 'macosx_app': + # OSX binary + + try: + from PyObjCTools import AppHelper + from SABnzbdDelegate import SABnzbdDelegate + + class startApp(Thread): + def __init__(self): + logging.info('[osx] sabApp Starting - starting main thread') + Thread.__init__(self) + def run(self): + main() + logging.info('[osx] sabApp Stopping - main thread quit ') + AppHelper.stopEventLoop() + def stop(self): + logging.info('[osx] sabApp Quit - stopping main thread ') + sabnzbd.halt() + cherrypy.engine.exit() + sabnzbd.SABSTOP = True + logging.info('[osx] sabApp Quit - main thread stopped') + + sabApp = startApp() + sabApp.start() + AppHelper.runEventLoop() + + except: + main() + + else: + main() + diff --git a/SABnzbdDelegate.py b/SABnzbdDelegate.py new file mode 100755 index 0000000..06d159c --- /dev/null +++ b/SABnzbdDelegate.py @@ -0,0 +1,692 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +import objc +from Foundation import * +from AppKit import * +from PyObjCTools import AppHelper +from objc import YES, NO, nil +from threading import Thread + +import os +import cherrypy +import Cheetah.DummyTransaction +import sys +import time + +import logging +import logging.handlers + +import sabnzbd +import sabnzbd.cfg + +from sabnzbd.constants import * +from sabnzbd.misc import launch_a_browser,get_filename,get_ext,diskfree +from sabnzbd.lang import T +from sabnzbd.utils import osx + +import sabnzbd.nzbqueue as nzbqueue +import sabnzbd.config as config +import sabnzbd.scheduler as scheduler +import sabnzbd.downloader as downloader +import sabnzbd.dirscanner as dirscanner +from sabnzbd.bpsmeter import BPSMeter +from sabnzbd.newzbin import Bookmarks +from sabnzbd.database import get_history_handle + +status_icons = {'idle':'../Resources/sab_idle.png','pause':'../Resources/sab_pause.png','clicked':'../Resources/sab_clicked.png'} +start_time = NSDate.date() + +class SABnzbdDelegate(NSObject): + + icons = {} + status_bar = None + + def awakeFromNib(self): + #Status Bar iniatilize + self.buildMenu() + #Timer for updating menu + self.timer = NSTimer.alloc().initWithFireDate_interval_target_selector_userInfo_repeats_(start_time, 3.0, self, 'updateAction:', None, True) + NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSDefaultRunLoopMode) + NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSEventTrackingRunLoopMode) +# NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSModalPanelRunLoopMode) + + self.timer.fire() + + def buildMenu(self): + #logging.info("building menu") + status_bar = NSStatusBar.systemStatusBar() + self.status_item = status_bar.statusItemWithLength_(NSVariableStatusItemLength) + for i in status_icons.keys(): + self.icons[i] = NSImage.alloc().initByReferencingFile_(status_icons[i]) + self.status_item.setImage_(self.icons['idle']) + self.status_item.setAlternateImage_(self.icons['clicked']) + self.status_item.setHighlightMode_(1) + self.status_item.setToolTip_('SABnzbd') + self.status_item.setEnabled_(YES) + + #Wait for SABnzbd Initialisation + cherrypy.engine.wait(cherrypy.process.wspbus.states.STARTED) + + logging.info("[osx] yes=%s" % (T('yes'))) + + while T('yes')[0:1]=="#": + time.sleep(0.5) + logging.info("[osx] language file not loaded, waiting") + + #Variables + self.state = "Idle" + self.speed = downloader.get_limit() + self.version_notify = 1 + self.status_removed = 0 + + #Menu construction + self.menu = NSMenu.alloc().init() + + try: + menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_("Dummy", '', '') + menu_item.setHidden_(YES) + self.isLeopard = 1 + except: + self.isLeopard = 0 + + #Warnings Item + self.warnings_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-warnings'), 'openBrowserAction:', '') + if self.isLeopard: + self.warnings_menu_item.setHidden_(YES) + else: + self.warnings_menu_item.setEnabled_(NO) + self.warnings_menu_item.setRepresentedObject_("connections/") + self.menu.addItem_(self.warnings_menu_item) + + #State Item + self.state_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-status-idle'), 'openBrowserAction:', '') + self.state_menu_item.setRepresentedObject_("") + self.menu.addItem_(self.state_menu_item) + + #Config Item + menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-config'), 'openBrowserAction:', '') + menu_item.setRepresentedObject_("config/general/") + menu_item.setAlternate_(YES) + menu_item.setKeyEquivalentModifierMask_(NSAlternateKeyMask) + self.menu.addItem_(menu_item) + + #Queue Item + self.queue_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-queue'), 'openBrowserAction:', '') + self.queue_menu_item.setRepresentedObject_("") + self.menu.addItem_(self.queue_menu_item) + + #Purge Queue Item + self.purgequeue_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-purgequeue'), 'purgeAction:', '') + self.purgequeue_menu_item.setRepresentedObject_("queue") + self.purgequeue_menu_item.setAlternate_(YES) + self.purgequeue_menu_item.setKeyEquivalentModifierMask_(NSAlternateKeyMask) + self.menu.addItem_(self.purgequeue_menu_item) + + #History Item + self.history_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-history'), 'openBrowserAction:', '') + self.history_menu_item.setRepresentedObject_("") + self.menu.addItem_(self.history_menu_item) + + #Purge History Item + self.purgehistory_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-purgehistory'), 'purgeAction:', '') + self.purgehistory_menu_item.setRepresentedObject_("history") + self.purgehistory_menu_item.setAlternate_(YES) + self.purgehistory_menu_item.setKeyEquivalentModifierMask_(NSAlternateKeyMask) + self.menu.addItem_(self.purgehistory_menu_item) + + self.separator_menu_item = NSMenuItem.separatorItem() + self.menu.addItem_(self.separator_menu_item) + + #Limit Speed Item & Submenu + self.speed_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-speedlimit'), '', '') + + self.menu_speed = NSMenu.alloc().init() + + speeds ={ 0 : T('osx-menu-none'), 50 :'50 KB/s' , 100 : '100 KB/s', 200 : '200 KB/s' , 300 : '300 KB/s' , + 400 : '400 KB/s', 500 :'500 KB/s' , 600 : '600 KB/s', 700 : '700 KB/s' , 800 : '800 KB/s' , + 900 : '900 KB/s', 1000 :'1000 KB/s' , 1500 : '1500 KB/s', 2000 : '2000 KB/s' , 3000 : '3000 KB/s' + } + + for speed in sorted(speeds.keys()): + menu_speed_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('%s' % (speeds[speed]), 'speedlimitAction:', '') + menu_speed_item.setRepresentedObject_("%s" % (speed)) + self.menu_speed.addItem_(menu_speed_item) + + self.speed_menu_item.setSubmenu_(self.menu_speed) + self.menu.addItem_(self.speed_menu_item) + + #Pause Item & Submenu + self.pause_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-pause'), 'pauseAction:', '') + self.pause_menu_item.setRepresentedObject_('0') + + self.menu_pause = NSMenu.alloc().init() + + for i in range(6): + menu_pause_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_("%s %s" % ((i+1)*10,T('osx-menu-min')), 'pauseAction:', '') + menu_pause_item.setRepresentedObject_("%s" % ((i+1)*10)) + self.menu_pause.addItem_(menu_pause_item) + + self.pause_menu_item.setSubmenu_(self.menu_pause) + self.menu.addItem_(self.pause_menu_item) + + #Resume Item + self.resume_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-resume'), 'resumeAction:', '') + if self.isLeopard: + self.resume_menu_item.setHidden_(YES) + else: + self.resume_menu_item.setEnabled_(NO) + self.menu.addItem_(self.resume_menu_item) + + #Newzbin Item + self.newzbin_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-getnewzbinbm'), 'getNewzbinBookmarksAction:', '') + if self.isLeopard: + self.newzbin_menu_item.setHidden_(YES) + else: + self.newzbin_menu_item.setEnabled_(NO) + self.menu.addItem_(self.newzbin_menu_item) + + self.separator2_menu_item = NSMenuItem.separatorItem() + self.menu.addItem_(self.separator2_menu_item) + + #Complete Folder Item + self.completefolder_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-complete'), 'openFolderAction:', '') + self.completefolder_menu_item.setRepresentedObject_(sabnzbd.cfg.COMPLETE_DIR.get_path()) + self.menu.addItem_(self.completefolder_menu_item) + + #Incomplete Folder Item + self.incompletefolder_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-incomplete'), 'openFolderAction:', '') + self.incompletefolder_menu_item.setRepresentedObject_(sabnzbd.cfg.DOWNLOAD_DIR.get_path()) + self.menu.addItem_(self.incompletefolder_menu_item) + + self.menu.addItem_(NSMenuItem.separatorItem()) + + #About Item (TO FIX) + #menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('About SABnzbd', 'aboutAction:', '') + #self.menu.addItem_(menu_item) + + #Quit Item + menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-quit'), 'terminate:', '') + self.menu.addItem_(menu_item) + + #Restart Item + menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-restart'), 'restartAction:', '') + menu_item.setAlternate_(YES) + menu_item.setKeyEquivalentModifierMask_(NSAlternateKeyMask) + self.menu.addItem_(menu_item) + + #Add menu to Status Item + self.status_item.setMenu_(self.menu) + + def updateAction_(self, notification): + try: + if os.path.exists("%s/notDisplayMenu" % (sabnzbd.DIR_APPDATA)): + sabnzbd.OSX_ICON = 0 + else: + sabnzbd.OSX_ICON = 1 + + if sabnzbd.OSX_ICON: + if self.status_removed == 1: + self.buildMenu() + + if self.serverUpdate(): + self.warningsUpdate() + self.queueUpdate() + self.historyUpdate() + self.stateUpdate() + self.iconUpdate() + self.pauseUpdate() + self.speedlimitUpdate() + self.versionUpdate() + self.newzbinUpdate() + self.diskspaceUpdate() + else: + if self.status_removed == 0: + status_bar = NSStatusBar.systemStatusBar() + status_bar.removeStatusItem_(self.status_item) + self.status_removed = 1 + status_bar = None + self.status_item = None + except : + logging.info("[osx] Exception %s" % (sys.exc_info()[0])) + + def queueUpdate(self): + try: + qnfo = sabnzbd.nzbqueue.queue_info() + pnfo_list = qnfo[QNFO_PNFO_LIST_FIELD] + + bytesleftprogess = 0 + bpsnow = BPSMeter.do.get_bps() + self.info = "" + + self.menu_queue = NSMenu.alloc().init() + + if len(pnfo_list): + + menu_queue_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-queuelimit'), '', '') + self.menu_queue.addItem_(menu_queue_item) + self.menu_queue.addItem_(NSMenuItem.separatorItem()) + + job_nb = 1 + for pnfo in pnfo_list: + if job_nb >= 10: + break + filename = pnfo[PNFO_FILENAME_FIELD] + msgid = pnfo[PNFO_MSGID_FIELD] + bytesleft = pnfo[PNFO_BYTES_LEFT_FIELD] / MEBI + bytesleftprogess += pnfo[PNFO_BYTES_LEFT_FIELD] + bytes = pnfo[PNFO_BYTES_FIELD] / MEBI + nzo_id = pnfo[PNFO_NZO_ID_FIELD] + timeleft = self.calc_timeleft(bytesleftprogess, bpsnow) + + job = "%s\t(%d/%d MB) %s" % (filename, bytesleft, bytes, timeleft) + job_nb += 1 + menu_queue_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(job, '', '') + self.menu_queue.addItem_(menu_queue_item) + + self.info = "%d nzb(s)\t( %d / %d MB )" % (len(pnfo_list),(qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI), (qnfo[QNFO_BYTES_FIELD] / MEBI)) + + else: + menu_queue_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-empty'), '', '') + self.menu_queue.addItem_(menu_queue_item) + + self.queue_menu_item.setSubmenu_(self.menu_queue) + + except : + logging.info("[osx] queueUpdate Exception %s" % (sys.exc_info()[0])) + + def historyUpdate(self): + try: + # Fetch history items + history_db = sabnzbd.database.get_history_handle() + items, fetched_items, total_items = history_db.fetch_history(0,10,None) + + self.menu_history = NSMenu.alloc().init() + self.failedAttributes = { NSForegroundColorAttributeName:NSColor.redColor(), NSFontAttributeName:NSFont.menuFontOfSize_(14.0) } + + menu_history_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-historylimit'), '', '') + self.menu_history.addItem_(menu_history_item) + self.menu_history.addItem_(NSMenuItem.separatorItem()) + + if fetched_items: + for history in items: + #logging.info("[osx] history : %s" % (history)) + job = "%s" % (history['name']) + path = "" + if os.path.isdir(history['storage']) or os.path.isfile(history['storage']): + if os.path.isfile(history['storage']): + path = os.path.dirname(history['storage']) + else: + path = history['storage'] + if path: + menu_history_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(job, 'openFolderAction:', '') + else: + menu_history_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(job, '', '') + if history['status'] != "Completed": + jobfailed = NSAttributedString.alloc().initWithString_attributes_(job, self.failedAttributes) + menu_history_item.setAttributedTitle_(jobfailed) + menu_history_item.setRepresentedObject_("%s" % (path)) + self.menu_history.addItem_(menu_history_item) + else: + menu_history_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-empty'), '', '') + self.menu_history.addItem_(menu_history_item) + + self.history_menu_item.setSubmenu_(self.menu_history) + except : + logging.info("[osx] historyUpdate Exception %s" % (sys.exc_info()[0])) + + def warningsUpdate(self): + try: + warnings = sabnzbd.GUIHANDLER.count() + if warnings: + warningsAttributes = { + NSForegroundColorAttributeName: NSColor.redColor(), + NSFontAttributeName: NSFont.menuFontOfSize_(14.0) + } + + warningsTitle = NSAttributedString.alloc().initWithString_attributes_( "%s : %s" % (T('osx-menu-warnings'),warnings), warningsAttributes) + + self.warnings_menu_item.setAttributedTitle_(warningsTitle) + if self.isLeopard: + self.warnings_menu_item.setHidden_(NO) + else: + self.warnings_menu_item.setEnabled_(YES) + else: + self.warnings_menu_item.setTitle_("%s : 0" % (T('osx-menu-warnings'))) + if self.isLeopard: + self.warnings_menu_item.setHidden_(YES) + else: + self.warnings_menu_item.setEnabled_(NO) + except : + logging.info("[osx] warningsUpdate Exception %s" % (sys.exc_info()[0])) + + def stateUpdate(self): + try: + qnfo = sabnzbd.nzbqueue.queue_info() + bpsnow = BPSMeter.do.get_bps() + if downloader.paused(): + self.state = T('osx-menu-status-paused') + if sabnzbd.scheduler.pause_int() != "0": + self.setMenuTitle("\n\n%s\n" % (sabnzbd.scheduler.pause_int())) + else: + self.setMenuTitle("") + elif qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI > 0: + + self.state = "" + speed = self.to_units(bpsnow) + timeleft = (speed>1 and self.calc_timeleft(qnfo[QNFO_BYTES_LEFT_FIELD],bpsnow)) or "--" + + statusbarText = "\n\n%s\n%s\n" % (timeleft, speed) + + if sabnzbd.SABSTOP: + statusbarText = "..." + + if os.path.exists("%s/notDisplaySpeed" % (sabnzbd.DIR_APPDATA)): + statusbarText = "" + + self.setMenuTitle(statusbarText) + else: + self.state = T('osx-menu-status-idle') + self.setMenuTitle("") + + if self.state != "" and self.info != "": + self.state_menu_item.setTitle_("%s - %s" % (self.state,self.info)) + if self.info == "": + self.state_menu_item.setTitle_("%s" % (self.state)) + else: + self.state_menu_item.setTitle_("%s" % (self.info)) + + except : + logging.info("[osx] stateUpdate Exception %s" % (sys.exc_info()[0])) + + def iconUpdate(self): + try: + if downloader.paused(): + self.status_item.setImage_(self.icons['pause']) + else: + self.status_item.setImage_(self.icons['idle']) + except : + logging.info("[osx] iconUpdate Exception %s" % (sys.exc_info()[0])) + + def pauseUpdate(self): + try: + if downloader.paused(): + if self.isLeopard: + self.resume_menu_item.setHidden_(NO) + self.pause_menu_item.setHidden_(YES) + else: + self.resume_menu_item.setEnabled_(YES) + self.pause_menu_item.setEnabled_(NO) + else: + if self.isLeopard: + self.resume_menu_item.setHidden_(YES) + self.pause_menu_item.setHidden_(NO) + else: + self.resume_menu_item.setEnabled_(NO) + self.pause_menu_item.setEnabled_(YES) + except : + logging.info("[osx] pauseUpdate Exception %s" % (sys.exc_info()[0])) + + def speedlimitUpdate(self): + try: + speed = int(downloader.get_limit()) + if self.speed != speed : + self.speed = speed + speedsValues = self.menu_speed.numberOfItems() + for i in range(speedsValues): + menuitem = self.menu_speed.itemAtIndex_(i) + if speed == int(menuitem.representedObject()): + menuitem.setState_(NSOnState) + else: + menuitem.setState_(NSOffState) + except : + logging.info("[osx] speedlimitUpdate Exception %s" % (sys.exc_info()[0])) + + def versionUpdate(self): + try: + if sabnzbd.NEW_VERSION and self.version_notify: + #logging.info("[osx] New Version : %s" % (sabnzbd.NEW_VERSION)) + new_release, new_rel_url = sabnzbd.NEW_VERSION.split(';') + osx.sendGrowlMsg("SABnzbd","%s : %s" % (T('grwl-newversion-msg'),new_release),osx.NOTIFICATION['other']) + self.version_notify = 0 + except : + logging.info("[osx] versionUpdate Exception %s" % (sys.exc_info()[0])) + + + def newzbinUpdate(self): + try: + if sabnzbd.cfg.newzbin_username() and sabnzbd.cfg.newzbin_password() and sabnzbd.cfg.NEWZBIN_BOOKMARKS(): + if self.isLeopard: + self.newzbin_menu_item.setHidden_(NO) + else: + self.newzbin_menu_item.setEnabled_(YES) + else: + if self.isLeopard: + self.newzbin_menu_item.setHidden_(YES) + else: + self.newzbin_menu_item.setEnabled_(NO) + except : + logging.info("[osx] newzbinUpdate Exception %s" % (sys.exc_info()[0])) + + def serverUpdate(self): + try: + if not config.get_servers(): + self.state_menu_item.setTitle_(T('osx-menu-wizard')) + hide=YES + alternate=NO + value=0 + else: + hide=NO + alternate=YES + value=1 + if self.isLeopard: + self.speed_menu_item.setHidden_(hide) + self.resume_menu_item.setHidden_(hide) + self.pause_menu_item.setHidden_(hide) + self.newzbin_menu_item.setHidden_(hide) + self.purgequeue_menu_item.setAlternate_(alternate) + self.purgequeue_menu_item.setHidden_(hide) + self.queue_menu_item.setHidden_(hide) + self.purgehistory_menu_item.setAlternate_(alternate) + self.purgehistory_menu_item.setHidden_(hide) + self.history_menu_item.setHidden_(hide) + self.separator_menu_item.setHidden_(hide) + self.separator2_menu_item.setHidden_(hide) + self.completefolder_menu_item.setHidden_(hide) + self.incompletefolder_menu_item.setHidden_(hide) + else: + self.speed_menu_item.setEnabled_(alternate) + self.resume_menu_item.setEnabled_(alternate) + self.pause_menu_item.setEnabled_(alternate) + self.newzbin_menu_item.setEnabled_(alternate) + self.purgequeue_menu_item.setAlternate_(alternate) + self.purgequeue_menu_item.setEnabled_(alternate) + self.queue_menu_item.setEnabled_(alternate) + self.purgehistory_menu_item.setAlternate_(alternate) + self.purgehistory_menu_item.setEnabled_(alternate) + self.history_menu_item.setEnabled_(alternate) + self.separator_menu_item.setEnabled_(alternate) + self.separator2_menu_item.setEnabled_(alternate) + self.completefolder_menu_item.setEnabled_(alternate) + self.incompletefolder_menu_item.setEnabled_(alternate) + return value + + except : + logging.info("[osx] configUpdate Exception %s" % (sys.exc_info()[0])) + return 0 + + def diskspaceUpdate(self): + try: + self.completefolder_menu_item.setTitle_("%s%.2f GB" % (T('osx-menu-complete'),diskfree(sabnzbd.cfg.COMPLETE_DIR.get_path()))) + self.incompletefolder_menu_item.setTitle_("%s%.2f GB" % (T('osx-menu-incomplete'),diskfree(sabnzbd.cfg.DOWNLOAD_DIR.get_path()))) + except : + logging.info("[osx] diskspaceUpdate Exception %s" % (sys.exc_info()[0])) + + def setMenuTitle(self,text): + try: + style = NSMutableParagraphStyle.new() + style.setParagraphStyle_(NSParagraphStyle.defaultParagraphStyle()) + style.setAlignment_(NSCenterTextAlignment) + style.setLineSpacing_(0.0) + style.setMaximumLineHeight_(9.0) + style.setParagraphSpacing_(-3.0) + + #Trying to change color of title to white when menu is open TO FIX + if self.menu.highlightedItem(): + #logging.info("Menu Clicked") + titleColor = NSColor.highlightColor() + else: + #logging.info("Menu Not Clicked") + titleColor = NSColor.blackColor() + + titleAttributes = { + NSBaselineOffsetAttributeName : 5.0, + NSFontAttributeName: NSFont.menuFontOfSize_(9.0), + NSParagraphStyleAttributeName: style + #,NSForegroundColorAttributeName: titleColor + } + + title = NSAttributedString.alloc().initWithString_attributes_(text, titleAttributes) + self.status_item.setAttributedTitle_(title) + except : + logging.info("[osx] setMenuTitle Exception %s" % (sys.exc_info()[0])) + + def calc_timeleft(self, bytesleft, bps): + """ + Calculate the time left in the format HH:MM:SS + """ + try: + totalseconds = int(bytesleft / bps) + minutes, seconds = divmod(totalseconds, 60) + hours, minutes = divmod(minutes, 60) + if minutes <10: + minutes = '0%s' % minutes + if seconds <10: + seconds = '0%s' % seconds + return '%s:%s:%s' % (hours, minutes, seconds) + except: + return '0:00:00' + + def to_units(self, val): + """ Convert number to K/M/G/T/P notation + """ + TAB_UNITS = ("", "K", "M", "G", "T", "P") + val = str(val).strip() + if val == "-1": + return val + n=0 + try: + val = float(val) + except: + return '' + + while (val > 1023.0) and (n < 5): + val = val / 1024.0 + n= n+1 + unit = TAB_UNITS[n] + if n>1: + return " %.2f %sB/s " % (val, unit) + else: + return " %d %sB/s " % (val, unit) + + def openBrowserAction_(self, sender): + if sender.representedObject: + link = sender.representedObject() + else: + link = "" + #logging.info("[osx] opening http://%s:%s/sabnzbd/%s" % (sabnzbd.cfg.CHERRYHOST(), sabnzbd.cfg.CHERRYPORT(),link)) + launch_a_browser("http://%s:%s/sabnzbd/%s" % (sabnzbd.cfg.CHERRYHOST(), sabnzbd.cfg.CHERRYPORT(),link),True) + + def speedlimitAction_(self, sender): + #logging.info("[osx] speed limit to %s" % (sender.representedObject())) + speed = int(sender.representedObject()) + if speed != self.speed: + downloader.limit_speed(speed) + self.speedlimitUpdate() + + def purgeAction_(self, sender): + mode = sender.representedObject() + #logging.info("[osx] purge %s" % (mode)) + if mode == "queue": + nzbqueue.remove_all_nzo() + elif mode == "history": + history_db = sabnzbd.database.get_history_handle() + history_db.remove_history() + + def pauseAction_(self, sender): + minutes = int(sender.representedObject()) + #logging.info("[osx] pause for %s" % (minutes)) + if minutes: + scheduler.plan_resume(minutes) + else: + downloader.pause_downloader() + + def resumeAction_(self, sender): + scheduler.plan_resume(0) + + def getNewzbinBookmarksAction_(self, sender): + Bookmarks.do.run() + + def openFolderAction_(self, sender): + os.system('open "%s"' % sender.representedObject()) + +# def aboutAction_(self, sender): +# app = NSApplication.sharedApplication() +# app.orderFrontStandardAboutPanel_(nil) + + def restartAction_(self, sender): + self.setMenuTitle("\n\n%s\n"% (T('osx-menu-shutdowning'))) + sabnzbd.halt() + cherrypy.engine.restart() + self.setMenuTitle("\n\n%s\n"% (T('osx-menu-shutdowning'))) + + def application_openFiles_(self, nsapp, filenames): + #logging.info('[osx] file open') + #logging.info('[osx] file : %s' % (filenames)) + pp = None + script = None + cat = None + priority = None + for name in filenames : + #logging.info('[osx] processing : %s' % (name)) + if os.path.exists(name): + fn = get_filename(name) + #logging.info('[osx] filename : %s' % (fn)) + if fn: + if get_ext(name) in ('.zip','.rar', '.gz'): + #logging.info('[osx] archive') + dirscanner.ProcessArchiveFile(fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True) + elif get_ext(name) in ('.nzb'): + #logging.info('[osx] nzb') + dirscanner.ProcessSingleFile(fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True) + #logging.info('opening done') + + def applicationShouldTerminate_(self, sender): + logging.info('[osx] application terminating') + self.setMenuTitle("\n\n%s\n"% (T('osx-menu-shutdowning'))) + self.status_item.setHighlightMode_(NO) + sabnzbd.OSX_ICON = 0 + logging.info('[osx] application stopping daemon') + sabnzbd.halt() + cherrypy.engine.exit() + sabnzbd.SABSTOP = True + osx.sendGrowlMsg('SABnzbd',T('grwl-shutdown-end-msg'),osx.NOTIFICATION['other']) + logging.info('Leaving SABnzbd') + sys.stderr.flush() + sys.stdout.flush() + return NSTerminateNow + diff --git a/Sample-PostProc.cmd b/Sample-PostProc.cmd new file mode 100644 index 0000000..77861bf --- /dev/null +++ b/Sample-PostProc.cmd @@ -0,0 +1,16 @@ +@echo off +rem Example of a post processing script for SABnzbd + +echo. +echo Running in directory "%~d0%~p0" +echo. +echo The first parameter (result-dir) = %1 +echo The second parameter (nzb-name) = %2 +echo The third parameter (nice name) = %3 +echo The fourth parameter (newzbin #) = %4 +echo The fifth parameter (category) = %5 +echo The sixth parameter (group) = %6 +echo The seventh parameter (status) = %7 +echo. + + diff --git a/Sample-PostProc.sh b/Sample-PostProc.sh new file mode 100755 index 0000000..7cc7dee --- /dev/null +++ b/Sample-PostProc.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# Example of a post processing script for SABnzbd + +echo +echo Started as $0 +echo +echo "The first parameter (result-dir) =" "$1" +echo "The second parameter (nzb-name) =" "$2" +echo "The third parameter (nice name) =" "$3" +echo "The fourth parameter (newzbin-id) =" "$4" +echo "The fifth parameter (category) =" "$5" +echo "The sixth parameter (group) =" "$6" +echo "The seventh parameter (status) =" "$7" +echo + + diff --git a/cherrypy.zip b/cherrypy.zip new file mode 100644 index 0000000000000000000000000000000000000000..68dd4d20457bd0d0c6a1421a78263ff364438dbb GIT binary patch literal 179090 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
Ta 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 G0{uVr39}Ob literal 0 HcmV?d00001 diff --git a/interfaces/Classic/README.TXT b/interfaces/Classic/README.TXT new file mode 100644 index 0000000..8f672a9 --- /dev/null +++ b/interfaces/Classic/README.TXT @@ -0,0 +1,21 @@ +# +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# +# This is the Default web interface for SABnzbd +# Simple, but compatible with all popular browsers. +# diff --git a/interfaces/Classic/templates/config.tmpl b/interfaces/Classic/templates/config.tmpl new file mode 100644 index 0000000..754e9f0 --- /dev/null +++ b/interfaces/Classic/templates/config.tmpl @@ -0,0 +1,20 @@ + + + + + + + + +

$T('configuration')

+

+$T('confgFile'): $configfn +

+ +$T('explain-Restart')

+ +
+ +
+ + diff --git a/interfaces/Classic/templates/config_cat.tmpl b/interfaces/Classic/templates/config_cat.tmpl new file mode 100644 index 0000000..2cab3a9 --- /dev/null +++ b/interfaces/Classic/templates/config_cat.tmpl @@ -0,0 +1,94 @@ + + + + + + + + +

$T('configCat')

+$T('explain-configCat')
+ + $T('explain-catNewzbin')
+ +
$T('link-initCat')

+ + +$T('explain-relFolder') $defdir
+
+ + + + + + + + + + + + + + + "> + + + + + + + + + + + + + + + + + + + + + + + + +
$T('category') $T('mode')  $T('priority') $T('script')$T('catFolderPath') $T('catNewzbin')/ $T('catGroups')
+
+ + +
+ +
+ + + + + +
+ + diff --git a/interfaces/Classic/templates/config_directories.tmpl b/interfaces/Classic/templates/config_directories.tmpl new file mode 100644 index 0000000..52c7043 --- /dev/null +++ b/interfaces/Classic/templates/config_directories.tmpl @@ -0,0 +1,85 @@ + + + + + + + + +

$T('folderConfig')

+

+ $T('explain-folderConfig')
+

+
+
+
+ $T('userFolders') + $T('in') "$my_home"

+ $T('opt-download_dir'):
+ $T('explain-download_dir')
+ +
+
+ $T('opt-download_free'):
+ $T('explain-download_free')
+ +
+
+ $T('opt-complete_dir'):
+ $T('explain-complete_dir')
+ + +
+
+ $T('opt-permissions'):
+ $T('explain-permissions')
+ + +
+
+ $T('opt-dirscan_dir'):
+ $T('explain-dirscan_dir')
+ +
+
+ $T('opt-dirscan_speed'):
+ $T('explain-dirscan_speed')
+ +
+
+ $T('opt-script_dir'):
+ $T('explain-script_dir')
+ +
+
+ $T('opt-email_dir'):
+ $T('explain-email_dir')
+ +
+
+ $T('systemFolders') + $T('in') "$my_lcldata"

+ $T('opt-cache_dir'):
+ $T('explain-cache_dir')
+ +
+
+ $T('opt-log_dir'):
+ $T('explain-log_dir')
+ +
+
+ $T('opt-nzb_backup_dir'):
+ $T('explain-nzb_backup_dir')
+ + +
+ +

+ + + + +
+ + diff --git a/interfaces/Classic/templates/config_email.tmpl b/interfaces/Classic/templates/config_email.tmpl new file mode 100644 index 0000000..689e8c5 --- /dev/null +++ b/interfaces/Classic/templates/config_email.tmpl @@ -0,0 +1,61 @@ + + + + + + + +

$T('configEmail')

+
+
+
+$T('emailOptions') +$T('opt-email_endjob')
+ /> $T('email-never') + /> $T('email-always') + /> $T('email-errorOnly') +

+
+$T('explain-email_full')
+
+ +
+$T('explain-email_rss')
+ +$T('opt-email_dir'):
+$T('explain-email_dir')
+ +
+
+
+$T('emailAccount') +$T('opt-email_server'):
+$T('explain-email_server').
+ +
+
+$T('opt-email_to'):
+$T('explain-email_to')
+ +
+
+$T('opt-email_from'):
+$T('explain-email_from')
+ +
+
+$T('opt-email_account'):
+$T('explain-email_account')
+ +
+
+$T('opt-email_pwd'):
+$T('explain-email_pwd')
+ + +
+ +

+
+ + diff --git a/interfaces/Classic/templates/config_general.tmpl b/interfaces/Classic/templates/config_general.tmpl new file mode 100644 index 0000000..867a6ee --- /dev/null +++ b/interfaces/Classic/templates/config_general.tmpl @@ -0,0 +1,146 @@ + + + + + + + + +

$T('generalConfig')

+
+
+
+ +$T('webServer') +$T('restartRequired')

+$T('opt-host'):
+$T('explain-host')
+ +
+
+$T('opt-port'):
+$T('explain-port')
+ +
+
+$T('opt-web_dir'):
+$T('explain-web_dir')
+ +

+$T('opt-web_dir2'):
+$T('explain-web_dir2')
+ +

$T('opt-apikey'):
+$T('explain-apikey')
+ +$T('button-apikey') +

+
+$T('explain-disableApikey') $T('explain-disableApikeyWarn') + +

+$T('opt-language'):
+$T('explain-language')
+ + +
+
+
+$T('webAuth') +$T('opt-web_username'):
+$T('explain-web_username')
+ +
+
+$T('opt-web_password')
+$T('explain-web_password')
+ +
+ +
+
+$T('httpsSupport') +$T('restartRequired')

+
+$T('explain-enable_https')
+
+$T('opt-https_port'):
+$T('explain-https_port')
+ +
+
+$T('opt-https_cert'):
+$T('explain-https_cert')
+ +
+
+$T('opt-https_key'):
+$T('explain-https_key')
+ +
+
+ +
+
+$T('tuning') +$T('opt-refresh_rate'):
+$T('explain-refresh_rate')
+ +
+
+$T('opt-rss_rate'):
+$T('explain-rss_rate')
+ +
+
+$T('opt-bandwidth_limit'):
+$T('explain-bandwidth_limit')
+ +
+
+$T('opt-cache_limitstr'):
+$T('explain-cache_limitstr')
+ +
+
+$T('opt-cleanup_list'):
+$T('explain-cleanup_list')

+ + +
+
+

+ + + + +

+
+ + + diff --git a/interfaces/Classic/templates/config_newzbin.tmpl b/interfaces/Classic/templates/config_newzbin.tmpl new file mode 100644 index 0000000..2833bc2 --- /dev/null +++ b/interfaces/Classic/templates/config_newzbin.tmpl @@ -0,0 +1,83 @@ + + + + + + + + +

Newzbin

+$T('explain-newzbin')

+
+
+
+$T('accountInfo') +$T('opt-username_newzbin'):
+$T('explain-username_newzbin')
+ +
+
+$T('opt-password_newzbin'):
+$T('explain-password_newzbin')
+ +
+
+ +
+
+$T('newzbinBookmarks') +
+$T('explain-newzbin_bookmarks')
+$T('link-getBookmarks') +
+ + $T('link-HideBM') + + $T('link-ShowBM') + +
+
+
+$T('explain-newzbin_unbookmark')
+
+$T('opt-bookmark_rate'):
+$T('explain-bookmark_rate')
+ +
+
+ +
+ $T('processedBM') + + $msgid  + +
+ + +

+
+ +
+ +

NzbMatrix

+$T('explain-nzbmatrix')

+ +
+
+
+$T('accountInfo') +$T('opt-username_matrix'):
+$T('explain-username_matrix')
+ +
+
+$T('opt-apikey_matrix'):
+$T('explain-apikey_matrix')
+ +
+
+ +

+
+ + diff --git a/interfaces/Classic/templates/config_rss.tmpl b/interfaces/Classic/templates/config_rss.tmpl new file mode 100644 index 0000000..6d2c886 --- /dev/null +++ b/interfaces/Classic/templates/config_rss.tmpl @@ -0,0 +1,217 @@ + + + + + + + + +

$T('configRSS')

+ +
+
+
+$T('newFeedURI') +   +

+ + +
+
+
+ +

$T('explain-RSS')

+ + +

$T('feedDefinition')

+
+
+
+ >/> + $T('feed') $feed + + + + + +

+ + + + + + + + + + + + + +
+ + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
         $T('rss-order')$T('rss-type')$T('rss-filter')$T('category')Mode$T('script')
+ + + + + + + +
+
+ + + +
+
+ +
+ + + + + + + + + + + + +
+
+ + + + diff --git a/interfaces/Classic/templates/config_scheduling.tmpl b/interfaces/Classic/templates/config_scheduling.tmpl new file mode 100644 index 0000000..a6be5c6 --- /dev/null +++ b/interfaces/Classic/templates/config_scheduling.tmpl @@ -0,0 +1,73 @@ + + + + + + + + +

$T('configSchedule')

+
+
+
+$T('addSchedule') + <%import time +t = time.localtime() +hour = t[3] +if hour != 23: + hour += 1 +else: + hour = 0 %> +$T('hour'):
+ +: + +
$T('sch-frequency'):
+ +
$T('sch-action'):
+ +
$T('sch-arguments'):
+ + +

+
+
+
+

$T('currentSchedules'):

+
+ + +
+
+$T('sch-task') $taskinfo[$schednum][0]: $taskinfo[$schednum][1]:$taskinfo[$schednum][2] - $taskinfo[$schednum][3] - $taskinfo[$schednum][4] + + + + +
+

+ +
+ + diff --git a/interfaces/Classic/templates/config_server.tmpl b/interfaces/Classic/templates/config_server.tmpl new file mode 100644 index 0000000..413dbe8 --- /dev/null +++ b/interfaces/Classic/templates/config_server.tmpl @@ -0,0 +1,61 @@ + + + + + + + + +

$T('configServer')

+
+
+
+ $T('addServer') + $T('srv-host'):

+ $T('srv-port'):

+ $T('srv-username'):

+ $T('srv-password'):

+ $T('srv-timeout'):

+ $T('srv-connections'):

+ + $T('srv-ssl') $T('opt-notInstalled') + + > $T('srv-ssl')
+ +  $T('srv-fillserver')
+  $T('srv-optional')
+  $T('srv-enable')
+ +

+
+
+ + + +
+
+ $server + $T('srv-host'):

+ $T('srv-port'):

+ $T('srv-username'):

+ $T('srv-password'):

+ $T('srv-timeout'):

+ $T('srv-connections'):

+ + $T('srv-ssl') $T('opt-notInstalled') + + /> $T('srv-ssl')
+ + /> $T('srv-fillserver')
+ /> $T('srv-optional')
+ /> $T('srv-enable')
+ + +

+

+
+
+ +
+ + diff --git a/interfaces/Classic/templates/config_sorting.tmpl b/interfaces/Classic/templates/config_sorting.tmpl new file mode 100644 index 0000000..b1bd006 --- /dev/null +++ b/interfaces/Classic/templates/config_sorting.tmpl @@ -0,0 +1,445 @@ + + + + + + + + + + +

$T('configSort')

+ +
+
+
+ +$T('seriesSorting') + + 0 then "checked=1" else ""#--> /> $T('opt-tvsort')
+
+ $T('affectedCat'): +
+ +

+ + $T('sort-legenda') +
+
+ $T('sort-meaning') + $T('sort-pattern') + $T('sort-result') +
+
+ $T('show-name') + %sn + $T('show-sp-name') +
+ %s.n + $T('show-dot-name') +
+ %s_n + $T('show-us-name') +
+
+ $T('show-seasonNum') + %s + 1 +
+ %0s + 01 +
+
+ $T('show-epNum') + %e + 5 +
+ %0e + 05 +
+
+ $T('ep-name') + %en + $T('ep-sp-name') +
+ %e.n + $T('ep-dot-name') +
+ %e_n + $T('ep-us-name') +
+
+ $T('fileExt') + %ext + avi +
+
+ $T('orgFilename') + %fn + $T("sort-File") +
+
+ $T('lowercase') + {$T('TEXT')} + $T('text') +
+ +

+ $T('sortString'):
+
+ $T('presetSort'):
+ + + +
+
+ $T('example'): +

+
+
+
+$T('genericSort') + + 0 then "checked=1" else ""#--> /> $T('opt-movieSort') +

+ 0 then "checked=1" else ""#--> /> $T('opt-movieExtra') +

+ $T('affectedCat'): +
+ + +

+ $T('sort-legenda') +
+
+ $T('sort-meaning') + $T('sort-pattern') + $T('sort-result') +
+
+ $T('sort-title') + %title + $T('movie-sp-name') +
+ %.title + $T('movie-dot-name') +
+ %_title + $T('movie-us-name') +
+
+ $T('year') + %y + 2000 +
+
+ $T('extension') + %ext + avi +
+
+ $T('partNumber') + %1 + 1 +
+
+ $T('decade') + %decade + 00 +
+
+ $T('decade') + %0decade + 2000 +
+
+ $T('orgFilename') + %fn + $T('sort-File') +
+
+ $T('lowercase') + {$T('TEXT')} + $T('text') +
+


+ $T('sortString'):
+
+ $T('multiPartLabel'):
+
+ $T('presetSort'):
+ +
+
+ $T('example'): +

+
+
+
+$T('dateSorting') + + 0 then "checked=1" else ""#--> /> $T('opt-dateSort')
+
+ $T('affectedCat'): +
+ +

+ $T('sort-legenda') +
+
+ $T('sort-meaning') + $T('sort-pattern') + $T('sort-result') +
+
+ $T('show-name') + %t + $T('show-sp-name') +
+ %.t + $T('show-dot-name') +
+ %_t + $T('show-us-name') +
+
+ $T('year') + %y + 2009 +
+
+ $T('month') + %m + 1 +
+ %0m + 01 +
+
+ $T('day-of-month') + %d + 2 +
+ %0d + 02 +
+
+
+ $T('decade') + %decade + 00 +
+
+ $T('decade') + %0decade + 2000 +
+
+ $T('orgFilename') + %fn + $T('sort-File') +
+
+ $T('lowercase') + {$T('TEXT')} + $T('text') +
+

+ $T('sortString'):
+
+ $T('presetSort'):
+ + +
+
+ $T('example'): +
+ + +

+ + +
+ + diff --git a/interfaces/Classic/templates/config_switches.tmpl b/interfaces/Classic/templates/config_switches.tmpl new file mode 100644 index 0000000..23055ae --- /dev/null +++ b/interfaces/Classic/templates/config_switches.tmpl @@ -0,0 +1,147 @@ + + + + + + + + +

$T('switchesConfig')

+
+
+
+ $T('processingSwitches') +
+ $T('explain-quick_check')
+
+
+ $T('explain-enable_unrar')
+
+
+ $T('explain-enable_unzip')
+
+
+ $T('explain-enable_filejoin')
+
+
+ $T('explain-ts_join')
+
+
+ $T('explain-enable_par_cleanup')
+
+
+ $T('explain-fail_on_crc')
+
+
+ $T('explain-top_only')
+
+
+ $T('explain-safe_postproc')
+
+
+ $T('explain-no_dupes')
+
+ $T('opt-dirscan_opts'):
+ $T('explain-dirscan_opts')
+ /> $T('none') + /> $T('pp-repair') + /> $T('pp-unpack') + /> $T('pp-delete') +
+
+ $T('opt-dirscan_script'):
+ $T('explain-dirscan_script')
+ +
+
+ $T('opt-dirscan_priority'):
+ $T('explain-dirscan_priority')
+ +
+
+ +
+ $T('explain-par2_multicore')
+
+ + $T('opt-par_option'):
+ $T('explain-par_option')
+ +
+
+ + $T('opt-nice'):
+ $T('explain-nice')
+ +
+
+ + + $T('opt-ionice'):
+ $T('explain-ionice')
+ +
+
+ +
+
+ $T('otherSwitches') +
+ $T('explain-auto_disconnect')
+
+
+ $T('explain-send_group')
+
+
+ $T('explain-auto_sort')
+
+
+ $T('explain-check_new_rel')
+
+
+ $T('explain-replace_spaces')
+
+
+ $T('explain-replace_illegal')
+
+
+ $T('explain-auto_browser')
+
+
+ $T('explain-pause_on_post_processing')
+
+ $T('opt-ignore_samples'):
+ $T('explain-ignore_samples')
+ /> $T('igsam-off') + /> $T('igsam-del') + /> $T('igsam-not') +
+
+ + $T('opt-ssl_type'):
+ $T('explain-ssl_type')
+ +
+
+
+

+
+ + diff --git a/interfaces/Classic/templates/connection_info.tmpl b/interfaces/Classic/templates/connection_info.tmpl new file mode 100644 index 0000000..97f4ac6 --- /dev/null +++ b/interfaces/Classic/templates/connection_info.tmpl @@ -0,0 +1,51 @@ + + + + + + + + +$T('link-forceDisc') | +$T('link-testEmail') | +$T('link-showLog') | +$T('link-showWeblog') +$T('logging'): + + + +

$T('connections')

+ +
    + +
  • + $server[0]:$server[1]: $server[2] + + ($T('server-blocked')) +   $server[6] + +
      + +
    • $T('thread') #$thrd[0] -> $thrd[1] -> $thrd[2] -> $thrd[3]
    • + +
    +
  • + +
+ + +

$T('emailResult')

+ $lastmail + + +

$T('lastWarnings') ($T('clearWarnings'))

+ + $warn
+ + + + diff --git a/interfaces/Classic/templates/history.tmpl b/interfaces/Classic/templates/history.tmpl new file mode 100644 index 0000000..5e7c956 --- /dev/null +++ b/interfaces/Classic/templates/history.tmpl @@ -0,0 +1,76 @@ + + + + + + + $T('purgeHist') | + + $T('hideDetails') + + $T('showDetails') + + + +
+

+$T('sizeHist'): $total_size +

+<% import datetime %> + + + + + +<% +compl = datetime.datetime.fromtimestamp(float(line['completed'])).strftime('%Y-%m-%d %H:%M:%S') +%> + + "> + + + + + + + + + "> + + + + + +
$T('completed')$T('name')$T('size')$T('status')
+ + $compl$line.name - $line.action_line - $line.fail_message$line.size$T('post-'+$line.status) + +
+ + +
+ +
+ + +
$T('stage-'+$stage.name.title.lower())
+ +
$action
+ +
+ + +
$T('category')
+
$line.category
+
+ + +
$T('msg-path')
+
$line.storage
+
+ +
+
+ + + diff --git a/interfaces/Classic/templates/inc_bottom.tmpl b/interfaces/Classic/templates/inc_bottom.tmpl new file mode 100644 index 0000000..cc5b8b9 --- /dev/null +++ b/interfaces/Classic/templates/inc_bottom.tmpl @@ -0,0 +1,32 @@ + + + + + +

$T('ft-warning')

+ $warning + + + diff --git a/interfaces/Classic/templates/inc_cmenu.tmpl b/interfaces/Classic/templates/inc_cmenu.tmpl new file mode 100644 index 0000000..798eb3e --- /dev/null +++ b/interfaces/Classic/templates/inc_cmenu.tmpl @@ -0,0 +1,68 @@ + + + + + + + + + $T('cmenu-general') | + + $T('cmenu-general') | + + + + $T('cmenu-folders') | + + $T('cmenu-folders') | + + + + $T('cmenu-switches') | + + $T('cmenu-switches') | + + + + $T('cmenu-servers') | + + $T('cmenu-servers') | + + + + $T('cmenu-scheduling') | + + $T('cmenu-scheduling') | + + + + $T('cmenu-rss') | + + $T('cmenu-rss') | + + + + $T('cmenu-email') | + + $T('cmenu-email') | + + + + $T('cmenu-newzbin') | + + $T('cmenu-newzbin') | + + + + $T('cmenu-cat') | + + $T('cmenu-cat') | + + + + $T('cmenu-sorting') + + $T('cmenu-sorting') + + + diff --git a/interfaces/Classic/templates/inc_top.tmpl b/interfaces/Classic/templates/inc_top.tmpl new file mode 100644 index 0000000..24357d8 --- /dev/null +++ b/interfaces/Classic/templates/inc_top.tmpl @@ -0,0 +1,67 @@ + + + + SABnzbd+ $version - $T('queued'): $mbleft MB + + + + + + + + + + + + + +

SABnzbd+ $version$T('signOn')

+ + + + + + $T('menu-home') | + + $T('menu-home') | + + + + $T('menu-queue') | + + $T('menu-queue') | + + + + $T('menu-history') | + + $T('menu-history') | + + + + $T('menu-config') | + + $T('menu-config') | + + + + $T('menu-cons') | + + $T('menu-cons') | + + + + + + + diff --git a/interfaces/Classic/templates/main.tmpl b/interfaces/Classic/templates/main.tmpl new file mode 100644 index 0000000..a8c0eb1 --- /dev/null +++ b/interfaces/Classic/templates/main.tmpl @@ -0,0 +1,113 @@ + + + + + + + + $T('link-resume') + + $T('link-pause') +| + +$T('link-shutdown') + + +

$T("addNewJobs")

+
+
+
+ $T('add') + $T('reportId') / URL + + + + + + + + + +
+ + +
+
+
+
+
+
+ $T('addFile') + + + + + + + + + +
+ + +
+
+
+ + diff --git a/interfaces/Classic/templates/nzo.tmpl b/interfaces/Classic/templates/nzo.tmpl new file mode 100644 index 0000000..95a59c5 --- /dev/null +++ b/interfaces/Classic/templates/nzo.tmpl @@ -0,0 +1,150 @@ + + + + + + + + + + + + +   + + + +

$T('nzoDetails')

+
+
+ +
+
+ + + +
+
+ + + + +
+
+ + + +
+
+ + +

+ +
+
+ +


+ + + +
+ + + + + + +
+ $T('nzo-selection'):$T('nzo-all') + $T('nzo-none') + $T('nzo-invert') + + + + + + active"> + + + + + + +
$T('nzo-filename')/$T('nzo-subject')$T('size')$T('nzo-age')
>$file.filename$file.size$file.age
+
+ + diff --git a/interfaces/Classic/templates/queue.tmpl b/interfaces/Classic/templates/queue.tmpl new file mode 100644 index 0000000..a466af7 --- /dev/null +++ b/interfaces/Classic/templates/queue.tmpl @@ -0,0 +1,143 @@ + + + + + + + + + $T('link-resume') + + $T('link-pause') +| +$T('link-sortByName') | +$T('link-sortByAge') | +$T('link-sortBySize') | + + $T('link-hideFiles') + + $T('link-showFiles')| + +$T('onQueueFinish'): + +| $T('speedLimit'): + $T('KBs') +| $T('pauseFor'): + $T('minute') +| +$T('purgeQueue') + + +
+
+ + + + + + + + + + + + $slot.priority $slot.status"> + + + + + + + + + + + + + + + + + + + finished"> + + + + + active"> + + + + + waiting"> + + +
$T('order')$T('category')$T('mode')$T('priority')$T('script')$T('name')$T('remainTotal')$T('eta')$T('age')
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+ +
+
$slot.filename$slot.sizeleft/$slot.size$slot.eta$slot.avg_age
Finished$line.filename$line.mbleft/$line.mb MB$line.age
RemoveActive$line.filename$line.mbleft/$line.mb MB$line.age
Waiting$line.filename (set: $line.set)$line.mbleft/$line.mb MB$line.age
+ + + diff --git a/interfaces/Classic/templates/static/images/favicon.ico b/interfaces/Classic/templates/static/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a6de1e25b6d065dd1051bf9fcef51f2cb9ebf68a GIT binary patch literal 53523 zcmb@tbx>PR^f;P?1PJb~rC4z*P$&c_&=xK3?rsH&2A876tw39(xVr>*E5$8Hfffty z@c6v%Z{GZ7-d|64CY#;d+`W7J+_UEZ06+jb;J*e0FaTmC0066}F&zFsb16~);N%MY|;RLfCd1-%lkj`VrBq9KNSFAVEA8i0ssK54FDi``u=Y{8!!M+ItlHt`>u(-35aA=G zu0E>@!ZtxSu#o{z)Nkt+e9}l3&n91%6x|v6X2Q>vVLE8C`Sl#>FN~x$rN07SK~T9s zN%Ri%i)8-b4noBy=pduMk)HinS&3-DwzFMdr+V}wtt^zr4D)-h4um@F?&(g)4Q*rh zqgpY)EcOR+^}8Lc2aPUzP%c}a631QQ!0cgwU;SP~|Ns}=4KGiPXk>-4%Tx+2S+^A+OWyHbFa+ zU{|ykFMDZs3m~Xc=c~I~u{#6y2Wj>PHTHlQ#t_FZ{cGNAVQN?qoYU-_6-Ig-bR2#L z?W*GRB_&@KkbgZu0^>mfmHXn#T@lBmVD{)fX;sxj+@pX*?1i;hgnq^b{%~ea7lGl- zZ$$ITcpunj>9vm~@a~5CFu*f{p6$vP>jCRZuZvd8pvbpIujs8wZr)0W=BgzAFsD|= zGj+;qt?{qJI*Qh#$%V5lNqK)=74w|Q5b}r#k~^%vTr^?b{OkG#u*su+PB5B(Q2(|I zSGD~HxH3kesWatt(;=(%^Ow)2lWOHzEMY%{#MSk(u8FMzingh97|SWKz3aFnyP*I&ph&__O2>SCUp4Y;Zpl zZ9^2vc&Al0$~CLNo7h`e7ZEZY3v&)U@4up527%IlscYx)fKgDCJX^kLPGRWb4!b-=j18j;oNVvZ4x z#&q^6dMb#QIT7G*zCdern8$X*H1`4A4QDu@|+G)MY+7$l*4qF2>I8ZVF`{!Psojh^d0 zXjfOMx&h`(O~6vRW6j(SWtMKSkeXh@IbJU07AUSCwXuv9;K5#}>HDZJ(kNoOIXXCYn=XKgp z;Gi!rEt$ULxT039q%i-7W=8}xpk4+@^k`hu0`xQN-nBPKXYa5eysFTIFOcK7r`LaX zP(_l#`nhPv{@7lD5aEtK)UYMabi5oI{pE7%@6PK!g>8M0MHo- z#0YZ*+Bt3j^HJt;-%esy4zlsX(GEeEZ~-I*(_NofTUBH9M^?B#A`Q{5SS`QhBiLWL zw!;7LP;SU{x7LXkcuq|5koL&6|KOF5l9J}BilyAY?@P`xzEgkLf4tfud8DTKNOrt3m%27h~V1NocS+gb}`z?l8SUYdogk*D}{f4_K3N%_5x%=mG8@rF*O$ z5=eM;KjK#18Uu~nOD|a3)c3nl^xYGWgn<`KS3^54JBX&>C7GoAA*SQ6qlJ*um~zg| zS>Da>qik7*yK|VoJ~jgI;1iR}a$NfE8T^H-yaJyd?rF`Tce`|cS0k^lz6S=eQv)_v zNy{F&7Cc1e93uH30eHd>kRHjq+^gviL&p?fzfytbS8H@ZF{BJaZwpm3%+fiWaNQ5> znsn#(OiY7tnV}3R}!Yc=3ImvGF|D4{?#TYXHe0E94w# z`V*GV8x%DFSx?pM$J^kn9-n(l6R}?H^nc0lD3^FKqnA{ zVu&~nS9zD|dk{*XwwpvcsWMO4HWQ7k_r+Ouys4$u$Gq_mIialBl+S^Y!|aYEoXk3MP2p zo=zqQ$@;^Mxl8s>75U%hBBxpxV;-=ln&R_+IKw5L2%z)+LBEMgDJ=3X!Xm%R1IHHl z{0tkyf?j1~27pS;W&&s`PNeZOI;VshWCo@4eoNh8gjEBE6`%}8nDc>W!GP2}hR+bc zGHL)U2Q%-{1ub}glwOJgp-wY31WZF4^OxblH2FzJG0BaRr@phd3+8uFD!y$R+ESy1 zbuxT)Gyyi5RP9qU-eo2Rn3Y3e5aVv?JQg$)`G7we#b}W&0DH+6fvynj{RZHg=8=yM zk>@2#KAj5w6M%UeYpo6E6oyM@sxp8II);2nmx(5@A-BqX-@nCGx)J}7dKP%8^f>9P zU-`pe$=69DF?;9q{#Gr?U{Ri!(TMZkLHZk{O)Py!$D z@?@g_tSE`EJkt~q%D0FYx&dB^DN`Q_#XgAnQG_@b9znv%!(3o6UHHe?}DhhA| zRRDYxdp2px?nH9E;x%XTgzt?SsNu3IGMwb!dkr*c{>R%$MlK))HnQNGI5h&$&InI& z`3swP;d1`i%~tlrLL3$*M%%>VJE7?9tbjf@f~rpfs)jHpW0YD^HK1LloUwL0&`{`~ zG2X-9+Q2~4Csu8WNQd+QHBJ7p@52~+dn!1-A5*XK765NCsCQ>P^-!d$WAuT#a;lQQ z1fIa_wY#g93HoS%(Ryw~n1B}^HOr1ZDaIy71|!eoP{$xZ!P2=`1)r8RAk9EMwv&ha z#x9Q7_BwgIjdE}*gjc3oL$tEE@6VC}-R}`raweh7s+#?R4hC=w;2EBsjbLZ(nbsJD zK(_&!A7n%T$JvGF5WKm@pBw`Vjv7c7k6}yKnzkk#_EF~&(P0GcUAYA|JH!C2IrCv2O$%_HTWZvF;h*arxO}c6`s9T=4}R zg%~`$NdNT_&tkq`P@D+Xet(QbTvI7Ni4Ouu;ueF18BXQVKyp{5AdO6DapUAX6(9@Z zopBBLTRExl1f<2YKGu8x_`RG9{C@QG;;Ios8U9CKtiS(e9M>YDcfVSJGj41DsGr1C zJQ8EEjdGCm5ljgnMl0UGQ*BV#O-A3R{f!{-H(aW2AAy)LaQ0OZur;_&RLz138L)T3t4!1u)I`-WWv;J;S!T&=#YN%tcqEF_}~Vsiq$TPQ3iI z7(_q3`A5_)<0$YtaR?^e%Q-k%zt8lv@ysdsVdMR`z1c12VR+gvc!3fcOZl4qpk91S zD_$Pq8Lx}Rx&D>u7&I^Fg#PRBU3z>LF5AeKFK{`OfvkmrGTc8X$wq&>9Nm#MK|fNq z`ttEy^nT|F!I6xoYxmpRXg0U-Q(ReQlav}jJ4^z>6a=&yjmYF~C)j$w%SZg5E~OvK z!iP8gZ8$R{*kO8!O*D&fA!XHoZ7rHmA8MqG(=~x_dI5@?U>`Sqh9$XTL9dL^w)(Q_ zuvv-wwEt9wFfoJrGw{J+ry!2Ee}4FE;}YN6DPyugF{|o$EJ`KbM57D)YQ?=NefYj- zv%ROmnD{IL0D4qj;yFn%c^@U6N0on1Tp{!uApx5*EM@<#o*rYu7rX)5PWeQ>i<1uH z3pr)aRz@y}ii-v%y~{#1dq@z>JYIw5G65E6Yt+~#lrV{9E8c{qw@dGy{Uf!K>Anri zDg`pE)mupvmNjNlO$T^@&5<;6J1!#O5~Xb!AP*emm=jC_O}{;kX=;!H%`hRmR_j8Ubaf9@3bc-!VWzj=X$2yonh zTn~Nh`W9%skoPN9SMF%cB)O1=Cxa>{=DZLYLa20t^FJ1fgP^o*0;z?W5<1H-Si$ei zfvfl$s{s>UdZ1zjrn^mR7l{Z$MP=j=ySP}$&JJ&8S09d5*wl&U6X9M2(iVLNnlg@g zK?6C3=7paq=Akq{DegY=pv{k4#`_VV2}JY7{(|cCEtbkEor92A^L}!;|5W;yRn<^u z`hg~He0>)*&f>xs@fQ^R3)7!AW16|}dGf_Tc<7Q7(QFo=0&{0`$hMpM90~4JCPRpY zP^CwZzs6BBF*_ji=9!z>-}q4sjbuS; zs?opK3cojk2_)7=tpKU$;PPQwmNv$>LiVl88#Ke%I-^v9U$I3RfoiSB1j?qQ&9nMCo)v?XssS8R^bb8i( zr-f*iAU5=9M<%SX8#~@73<|0~$T*y|J-eyI41Pr=#=xcvaE6#Z4|H`Jy<=xlkqkbb z2cH^ccdds-Z5xlqBGXAl);UVn{om{8|=Pr zdnsu31yhLO=2ufFNB3)R;&5ppuVe&7>3JaC)kP6;QYFuOrn?gtO0DT73>~!hHa^#> z#)7}co+o%Vm!r83xN--}aNWkz5K??Q6ipFpEF75br8TtI5y!&WRr@K3fE7yUHhu8 zOO35DQ)641DQTARuhaF3{S%-pX%7a|_@N7Heil?!vj;!&-d$A2;p89JQ+lf_D$;hu zZpX_Ns_yhPL-%7HOe%2-O;z8!MEo%!pYbBfYHq#*5k=~PocPnz`Cb03zfi@SKQJ#q z9A5czVd>d}c0(h97F|6T6oz}xuPVWe^?yKQn%|FeX}YEbL^^n-JK0A6En=-PoVuUI zMaYCcclpVT)MI(eplvm3O^i>l0OWx*{S<}GW&@~3BnPK0>Urie?5xpFe!*M%Ln9e1 zf!smKUup#D^N&@^oFDH-uP&#<*e5<#8V$Z-X!t}La-Xy?=zmIcaFbRI_NZF@&A7tVH%lk8f-p1is4mBCFu6-=|ii!G~#e^MCYl zidYjVf9yEsU%hQ?MjDC8t`R{2Z zYjIt`Zx6XN;QmkN%f$rYx{5KjHc_RS)dftv^7z14d;$j~mSULlriG?57$kdj%}l`3 zsE;;Km^p4+G&4az+KCCKQ;cO?Ufg}=nG`Qvi&Pah2Iyx~i?fr;!7RMoI z2Y6X!Xir=#{kg+k%)YB7O3MF$rNh~dg5kFtb2)N?_rrZP-)X$O%PS#?hi_-4-0r?* z!(6p`tBKB>V;CJmRV2jlnN+w3tF$&#F(FDVB5fJuY#3h-e_~f|HpQZoRczRE+@_x( zdgt=&p z<QDEF*6~9Ab@ zxZ86Vdd8tKL;Eno2T(d<(C)rAYU=8A`1iHVK~f2|0+0K-lErE>8leL6qZx=X$~&S{ zS}_mrEo@10xWa494Fcl>YHv(y|7ZR3r(WpZ`VPH!;e$&g0n+J=%t8au=l|BK9BAl& zuA%)>n#{G@HIds26?&fh+H)7LjZ^`afGCOXdQZdK6OX~B2va4B^1wHr4{ZiL5s8XS zJD~Ze_S2p&sF%x|pIySWUA}?uof>}@JTH%gw%IB$ zXmS47`(wQ~1D*F2&5yf&SQkUHbEWm~(<4TVnEa)Dg$?uAuaB74QI2+CoEW{i+VOn2 z`{rOh=qk}67`m0LXCfr717 z$HF~{pYP?8=)beK#ISZ<=dT}^NnTG<6RBV(L&!_7Osf=Pqqbfbm|KOS!aiEF?o8guiev? z4}4Dy+B?W{)|8qxvAHT_oeX)BVCwQbDqQH* z;8ekY{Zvs|(@SkP!>xvww=dSI&VJ+k7j@ZCD4v(G7#@_8IZ?(oyu{#8(&cF4FEXBp z`FT`0_ccX|F!n@1U-e|%KzJj}tXS65N5>RfH60~H zy$j1e&x<8d+3al?PQ|Y@5K`#Eo^t{x=E%upPO0zM+8Ki8ukI&_65^G@?b;feeHoR! z-hoUxrJF!w-_sx#S#0N^`{#gAYGgp^OFTf`YkS(a2wOk>R>`c48be{}%3mD}+Z&nP z$<#Xc&V;v}67K zh>za+?8&@@k|iis)csv{`cycYpy^Dt`;oxUru52z%DJYB>1?>+gsV1?s;l0(t^rh_ zN3TZ&#PkAmPKNVF#}8Jtg)_UP?8AD*umbs2#=Z#AOZ00V!wdb*+OZi1IDxirWtC^J zpM?2s(zpUhWNoIr!2Z^Cj~_7O3*g`(RZfMiaexR zE8lHs_S#Eco61)8mcVX&XE@+t$XV5L?Cb3QoRAperChcfPDtkv?`J>E7wUfWO;88+ zdWV%(Kw>r(jsq))iK^)#jES#K-MpFY_YxehqjgPda}F{}enGlWK*)djAih(&UDv&> zc~G4Rc2o3N6L9m$25UX}M$ONIG*e;jeqK7C3~ZtE7ots$RQaTfui6gBN8vV&b3v%; zGcg%Q-1(O3kq3s&@8w(_P4x;F#~3s;`@E9#rd_Q;vzdA_n%bQ2$L`Gfw~QZCKYz=k zn=oFH{lo>jV(qjwW2Z+meu{IqA}a3NZ27QKdQ>#}FWvfZH?(LbUtB5H*B_;UNx=J|VY8I{f`+*)I@guJv zs(vlcFKswDXMOl8BvZZ$5mf5KkiR&kMFG^$3>h}Ec|x?G!2|EoaNzl~emH*F9367U zN(EPM?GHg>Iv@hAD{A3<{=RmcL$;X&rB?2FElasU%LoUz-iy|fgF0IEK-Tj|(Eys;T+c<-kZM46M1aVVy=G1W$O(0ij052&;PK)kjEO4kw2 zOb`pj)HY$K%Ukp}7;rOEpGyzY(PAnc^Wt%#`IJg&v82EMqA$YpXelK7n%BI7L})=j zmh4)k@FiH4J7`yicDzfPG%ikVy#ZT{^d23>u;G6qA8X|e%lB&@> z?(=d&+%O6wU+Ve(gxKi?lTMo@-BgM-C#JOztdFg(#}!GIPDR|$bUudVBj>i&XS90e zW{IW_mTyeJ?PTuz94LEKIr^w3$G&NK2hq~UK6H}>=1Cy5>0&@`y*-W@FcKt184%Tv z*1h?Hn_ht7o%|Wl`nc(VFhs352dLkZO*1`r$R?Xosy*FM36Xg@Gih^oowqf_u#=d1 z8hD6v-Dx)_fTVO>-F@$E3%aTdlrgfGm_~7N0sX*!9){5`wqV3_5n0QX`+l?sDWS+= z)s=nzYfWh02c>Oa+pyyPH^&@~i>gb1OsgD*v@d_r2zIZ$X@fvRQ(@%LUW4GmgF_?R z#VDcGJmyK7fiG}8oOVsc>%np>25#BfB9~++0mvgH94w(Nw`Z(UJPT6oW*I`&YsQS{ zAe)X%M%_(@Zj%CjW(#SX*QJoSED$~&yB{~&2YVt5P%deN32?VZrd0TwDFR zC49%I)T6IDJ5go++LcKdtcDY`?t&mk92_vJ9IkFpwOOFh@IX<>6vAx4~6l<9ch|uSc zV1|a`OFpY|bKR7V+!O_Vsoi6<+{6qfp;BVKsOXMZD2&6Mz*pao(?izd+(`i9|M zUUNsI3DiJ~k3tWK#GvIF!Rh^nR>7Z?;CH8Yr@hhKhF9aI^eiLl1CD^i!rJHZ1aepjBD{v65D*0~)jJe+yd;W>qTPa|d&JVvm1Fhgiki$8#JW;qzeN`Wp4{Wm`Rsvz0o9o#|@rk-#(jN+1}s zc2X>zY(x`f_%$yC2UB^S&cM8zV@N8;#VM$C|5WfBRwh+NW8l`Yi(`rY zm&AARrM=*mV4oAeu~&U5Tz%s=fC?7X!$drHrYm8uMK8MWfk;cIHupi#-L$34nueDv zQ(tB9t`FxW)G2%PYSCy+u#Q);fNZdj8E^HdwN}=`d>fIQ`h|BFFKp9)6#Tb7;-bk&W3^$7 zmZuI(MU-%09mWh$Scopj2y5XC($s>tuFxI>M3W|m%K&n_jp1@?4HyUQALFAJkH~7Y zWP}6t8V7P37Y54b9{B9^q~a1`#St%V#rLX|pLN)WTScGPpJcWz!YK%wsNVo2tIu!HyouD8RrugL_e0@nqYJjUvYCbC2bOV|Gdy_WX5e*>}vrhX+U_TuVH~r4V&d_XY>bsN$P($?`PFnfc=~xWJmia61-uS!p@r~m%xCDIuiN_Y4jLv} zGhU!l&+v?y^QSU+&tUAm?$T6#3I#)9YScph?CyJY6>>%8{%l377~Yy@yKH9ahSA`}>ju z^V_hUv=PhO?w2DUPiU$S%nw{8Q|1-xAG6dK{4=X@J#(#m{~WP;*(-^cGW1$rOF|QO zmf=>fr5)IJa)dIpT6(sh>h|PiEsrlrHoa_)8{|uNNWu%i*!i+2FvqfZVD{$sK6QfP znRpO$U0v+eYBq;-;mP%(}c*+wo8XUQ1x@y*7zbbxr??!e$r?0&3I{1h&_ylidXVe)ctVVs2C zI+{}(ME`8++=@0;=nT(w$yh4O*6DK ze)WJsD?&nZt^XNs8MA6Bu0db~D7*R)c`qwQHD)nqdv{**`U_YZcL$o}!uo^da`ErW z4-Yq`Utpt(_~qzFErz~kbM*T=iRhfTY|q-X`o182eh`Ys{~AAUV#}W_-%fkQcESFl zMEBkCUGn!%|M8?v!pkCTIx{P%Pb53|)h3ZJvH)trU$nXy{F!~T-O;l)hB`y~XN)1q zdv^W>wV$G7VV^>j%Euu1ZcVM`(^}(1s)74dmy#~@ z*+17D3WHbv_%PlbdNp+{aCu9pDZCnqMS6pG5}!|E%DDunAcM`{fszsqI-;2;>z=ab zTsu=E)i8aDc@jJS+(Q?S4x_~5Z>i`e>`SrA05gS`FIJR~jWiDgF3W_Df96%#l}yEa zp60VwQTDz=isEw@F3$-rK0;lT#du(>Mg@3zR4O7`l;?+{w?)K-^eaehj8+F{{HBZ@ z8qS0KJNWd}pam9LLB`cdmJ0H4K*~PVrf#!!=_QLn>FmIMspd}P0dW+H2SVB7-}8;p zi(4tH@yp&v0;R@*i~ezpk7zpUw!<#6d1ddWyM8%zs&TydgVDHkv;C{@#wAV)^OyID zTgd6lzaI{;i4e{Y3nvdpXpi@S#Kwn%6Eh;AmqSuy&bA!;<2zpNl0G~&QP~P;vhPH7 zc>{fhPmhdH4&r~NejpiL=w$#CwgUizOd>y0&}4iZ1={DKm`+NZrupHa6tj5Rj!KeT zeEtT_?X*=kMeCtD|E|7en}=V81`ih47Z-dbzWi9nQn8MawQ*(l z-4a5~&Puyhai^7sI7_U|(_G^jli=Grd!LLJg2A)miVw%;V7mijO+ls%PQox?>! zXcpm(w?w(T*jP@5w0A6e!F?N$qC)0pwuCsjj=GEEnoD$S;Y^;taLa{pcw}yE=)`7} zF8WK4QGIqJ)@8k4l6w%F^-W`1EIOVW*$vzkYyA`WnA`n$)#>Jll6<5-y~gOQnxpuj zJoao|ZD?#+Ji%#ur-tmZ|GWp&12+j$dy36XmwR&7IN|N$Gk&i-gch^?h-ZEwi6Q55 zJ|t!QQEif{c)&f${SF`hCx)ne5B(S0v5WE;`ajW}>igTx>4LpASvB(MOXS9RiY2N* z-zAqFvck7wMFqv&(|TCFB_jvFu82-(^21X#{S60VY%jSvHfj!-yQ8J+mq~;X#XhnM zu()D(ke_ZJ1Lm~$EN0|ISlF9&A&+Lz9BCY&=jZUUP`>{hn|gWRQC+}?>&!q+A%_oY zDWre?LacelML+qC_7ur457^wx*O4K9-W#w#9-&^50n$6vIFt-~IO%zF$i?ZccJ*r0 ztZ~B8@JJHV!>hm^xSL^&q0`s`s+;3<4;nFsnQaR0oud&ZotguY! z`1pHB@m9Ob`Q7O+zxVn`G{L#mg&8{vl?<9V5nqqdq)z{SFKed5w2$AfkI+>3L?8KB z{&>xN^Fp4l;b@o#XORCM4ZIAc5*ZaZ!M6|p)bEjAn_|6hN$I;j{z8CUFS#Gr+Z*Tm zPt&<}uB*G3<)jJ3m*;DtxfC4oc!6T;NkJ|14@8Dk9V3}jiH^*m(q3vuHY7UPP>`T< zZ3$^AqJT7{n@EQgUnf)XjSj;k(InBrB>L|P4(?dU{Dm01$An@HDIpc;36L82u8MeDaO`Cql8-MJ85euskT#c=|KE*7iZH0;B z!KrY0&>=~s8B~M=QSP>9t_6^Qz8y@qBGnC`Wi%(}CVgRSS;%+USf;cxqKMf^b4D66 zyDR&Sk3)whUc|>`@btUDVXjKE3ddDEAFwm=UZbs_V|ev!Dadfk6_i|L{^0Y0f0d3m zlU&hx|9GtHrLi?-kGM4Gl>lx@>`~9rSL!q*3Ka06>(FuZ`BpXF`HLK@6n1V#h!nUr zbva~2@yaC^brreU8^?N?8*bvpFPza%xy;ajILXSjP8Lgp{oDEdufNQb-1q;Cl-e8n$ z_cgf93X5pcBMD$;I7*7*C#=YsqlnGgI{aky?QZer_Ou)G@f!*)xEkuTpN)3jW+L%b zz&Bw0^OFHOy9>tnuB*Oy3n1S2jfP$rUXMwptt%13LwwH!@?PblmcE(P2w1%0p;+ta zQgJ#&O>>%K)QfAYe67zh{eZZaNgqX8m~jS)dBO1=_w3u^F4TTZ*2n+u&hJ0`HR_fl z{$N=l^%mr$|Bk5I-LsiqEnQH-%F_lq7%hb|ha!_;(~9-ta{ehtbmQ#v`%Lkri^&@w zV>+$r;RNnC1e z%>BBvHc@i)iKSL;)rG=U5C|b(GCeKoD-I|$^i}Our zUr0g=)^Wc<4SNA#X!|jI>^RR)x&w@xtUK0VHVj2Nnx*)gq7!1KN_oeXXNX%!_pi;Gv>Lm}_^|Dk& zO6~fpOGqs2N^HCChM*Dn_@7)oy1t)c(=E_EqABJbLFM-1ZP(5( z<(#LMSO8UX*cv?JBH(^mrTW*%JJ#Iq0(}n;cx&ot662&Y1$Qrna-_4o5evQCwTt_u zT#7TuxRt9Hy1|-+j|6;b2?HtZT3GqZ#@*0ZVN*j3>QC7^ZBqS^Zjm>fn5SI7gX}m7*knAl{!hdY^C9+#e_P2zqftN=8(7^?MyxOm{-@;6jbH$ zf*qe6g3lp77Wg)6JL{M%lztT#2zQ2R)KaRHGM?`26zg{Vl^4G5i+vr?oaF8+f<*6n z?UBRTm~-rca~cuuIv{X0WStNg?uwBOd-8j$$@)jHRnyJm8F=f(>ir$ExRvPXLcq$QXVGq1_Z-Fhg*XFF`-jpW zJmk!M-u-9C(1}C(ll{A3`O{$edis6e@OQ_}+P>|i>k(e^02A&!aLFkzDdD$Efg#z`VQu!lxP)YMCwkm~xIlmOVZXMmxqX=RpW z3na(>e*T%r`S7W(A+v>zeWEZXZXjDieB;bxyGfagyjK~ndoOqVV z#0G>KL50{%SJPoXPwWTdo$kL$O^}Vo4aDSTqxQQPRpf~2W(93K|PQ;nq#t;#c&>J(x#jPqtuJ4@-> zOshXy-CR-_dTPQ`JI#|k!4lk6%hVOpAj3@YhQRp-?K-eq*&27l&oI@9bKoS_Ppl{z zPOo0-Qc&`&T+{f{4waeNPL0d?eU%!D-9BksjL!99E9N^!gt)iI7U@M(Jk8kUFQNO& z=u24u9;sC{qPDD1gyz)Q8uI=9=}1kX`26p{XrC~b@wH%W7x_3Zf{fUP-KA8};4Moj__f18iRbX2r@ZL5@6DDf*g6HKQXHLk zv6{~LX?HQdS95FFlL`*h&8?7-4Y{K`AwKq5IQ{ZdTIu~ac5XAgWz&1TY5sLta%0M3 z19G#x-yV@JxE4Iew&zdU<_xkK_O=tKgh6PmC|lSlOY}L>MfK4Hj`BXAq6soV>lOMq z6)i6O>{9RBX`4Q5bUq(Cm-{)D=JQR5&Tgrq$X~aNK|B{*t>Rg5g+{*Es%0uHoi>4` zl?=4c33RkZ|H3XdwW_1an=ONIjMIC-b@b>Qhskq>eq;#xWcu&U{8d+%-GiG^l?avV z4JvX6KfXE8V>@=!tK*T<>Y*b#jbh-j5Y+)ibX|*)!#;{{KXP%fG;jQ1%UD_5#JJV> z`^g`!>%HcPL9@*Qb9VziKJXcguI~f_B!43uk%$i3y6ju)4o+V08CahEXMOrv%CcYM zZu;z^>nA9YQqG`BE-0pwool6TFxX%eA@J-K2K}NC4S&sT|;7$`aIFIl<^vStBf)n49o*zJ7X_NG1 zKb@xNP`XeGVS41uZ;Ed z?a#h_OCQf@r*OTyB^MVH-+UPIwiR4ckC~-+@6+~f=Q1D%xwyRHh5W09J_hRYtx>ss z&`@+bI6mmYlYC~*`nl~3r`KZXOEQFWZdTqHeJpZ^*@gVd1@oGY#QGv8(U)GJT^pJk zT^8|&D!BCOZ+?~6n^WTjBFx4#r4O9AV+TaYiYuwwww~5|=#j!$St8lFn}p`u*yw6Q*I) z@xxiT*aBRi!g5-I$Z}Ok)wWo{I{=H7>C{&&f_@G$OXIo2+Xg%b{dIlj*!zzE;?se1Z1V-lN|D^d%t{zY+blT2k zbqd*O#J^I(^Su7+f(WRX#}ZSN+bbd^6@L{RsF{9+sKlaJMLXm&*-JIWYKQ;2!LfUr z6_!X;^{qaCXwkC2b+Z>M05i2ORExXw{Z?m>F@7V|Fvv>d>u;o#7DBT_lmqtJ#AK6S zWRDS)M%pwE?4+=Wu9;QU(l`z7OCpY=%W=878;#l4uls(z45njE|0f~rJK;+n(9{72 zY@>6*PZDXBL=08;k9cn`)JvqsB~VdRC`R67SK#IQ8ojJIA8$NX^Y6|4$fM+{R)L6+ zohoov^=Pxq`9eScJ%j)oSW`dhL!wP`er*uk& zZpk2Q#sT!fYS5VdAQv?B^fBTTbC~jDaauWiFK$s0`9Wn{QH3>zJ_ohmsNya76;)N- z4$9q0*I3hkI>~GCChniDZ%z+=*lZbvddH&l_}gA;XCx$`wvS(N!+zaCp-1$FjDI*7 zbpcQ)baW6V8magdb5D~qk`2XJ9i&3Fk;yM_o9hh|YZIAts%YR7uf7)ijkAzE0 z_!}I-?%YpR=74vy%5N&9O@jaLwder&(`ESoS&QByVLAc;kYfI?TJ#+K7@C2P;hiO4 zDc#caem%ETD@@O_h^jFkNr0>n!NSdZQfa&J0|;Wa7^^lI@P}k#3~<14IIKViL^XZr zmXLC?NDwU}0q0WmA(3npk!&InbF_g`DoNi6ck}WeH!tg**_ltpuU2N-1xA?br)!u0 z(%YP!mAAA^{B(bCFKI!?B4Ja_g9SZR{r+ErGl&L{bHKpZvKh{$EXvgcyNWE*N4Lm{ zF}jIBHl|*0pE`H_=M*#!P08o3?ez!vQ??6J;))H+M0=yhIsr8QUe^aZPz-?rG z?yn;O1^dq?DoOt20|PEMa0aLtkAUuG0Q=bkI zzMf44g$rMN$sbc-fJ*6)^9b|`Lk#`OFkh!&p2yA4h;~tp@0asFVt%)u8&5)x+QwqD zOnmS%^Xmx!G9eBS2}m2ZVp53As0{G%I4WGN%JOv?eJIc47`<7TWTv{NPZXJI_}ct{ z@ml58Y+zTo5bvu$Zy8l*HNv${qyAFOfr^%84Q1!nTGae>L`mauk`++-Qu8f9om(%2 z$V;%3C$~jk9?&7Q^~eG>Wr%}|m?s&${eXalaZL-&qLFHaf)Ff$Vye8VWMtxTV-FW0 zD2M=W6J-Izr0p|IB>(q06VklJgT<%n+Y-eJDbbDZ2#H+I`(Sjz!p(9#SMR7$Di6|6 zB1X&-cn2r+i+Z4?6U)Ekg40uR$|CTkaUrS2kC4gdB{VN?E%c)P+D`_OWha=*&y40lb*Ikf8sRfcUiZLhCwU3!sUa7T>+|4ZsI+ zp=D%d48FGm#yl0*;njZnBAzHu$MC6m@L|^VO1;lB;QwgvOTcp4zW;ZV2GyI2Obs;B zAVQ^7Dxxxk1`(Ap88T(aP+i0|Q^-)6GLMlt2?y!V*R#uUcrN`WTKsv74%OW z$<)^N@wPq{e5ydCF4DPW+q>tBR!OAG`ImYRl3kQ?nYf9+3J~==1n$N(gLx+o= zmGc*Id@PzYwyn|7H^%Ra%+&uL-Nfd}`#(0CkGcL{MN-PYjl`IBZPS#pUXX_|l6I@5 z2g;0b-P{Y38FM{Z%uBoBdSAvoY<}tX(5#6C@nX-01p9eBD&8oeAit}_;tp=Ut#`>i zPSF_W`KY+DmKJ&Gs`*uI8Bx49lLWp{|m%OiJ|Nl6xJ;FY(xIWMdKH z-q~ijXsmqFU#d&<Xj(mA+-Z5~0;wTdIN!ezoOK?#CD`MfI#f7mGvJzb*r1~G4rMXLH zlSN9=mPSLnNNJAtIS{q}!}&koze|?RB4c)nYrWR)G-7$<^^%3#NZx0u@HsB?4g0;H zDWbvYY#mh5|3$Vd6SuvrA}-)~!e4 zMz2&<9x0t`tkNKPi@eR4<4#+ZlRfCUmb%jYWv=?iv=<9YJMx6Iv>rXWG+oB+ber+c z;YE`!s&^X|P7InEH5-#RUm^L`ByHW$lv6}SG{adVCTZlFCKBVcukGD3=#NKB@-3xa zFB_cgb+hwTG5veSMVR_ z<>9NiFkpM~KVdmv-nj)t^!H7Om?So9Q~ESz!P`q3c3DFr8#RqsnZ4GcO_ZVYalg;{ ztHm9abJRTa*U2>abYzyF$R>^UiIFSkgymeExmU7raiHz+xb=-Z=E+amEa&HInx;Bt zy57g+jTt8Da_i+>ce)wm*_EEAK`SH%92mfBgOyW+y(IO&sv zwR^P~fBo#hvrm0z*ac~8^fc?1qh;u*aO&Vz%{7(>Jd*dde)?sZjZsStc`+{!<fcp zX`6pGN1}A4O{9dA&Z2&=cFdoeofmP)Bz;qu-8N&dW5q*U``DU1dD&`6y4jWhW95$^i*qbT;Qv{a>Tm8V!<}8t+L@uWR6{zw!b4PMqZhoH5->MI=FDTQ%(t&~?XSPPoAhDX-Iv$m?Yxm^fx!+P0$P?#WgG zyH-y%2+30SexF>N*RZXK-}K~7YJGIfB z!Tsa4_cTGNki@oHQ7kw@|N;xc2aUcu!jF|MUN&J^P zI?T8+!3QNi9?|X7&t^nxo#uug5=!J(^uA$yNp!#sqn_qWZrp?I$}99PWvv^uD&BaN zs@|I~*1^a27C0?!Juy+-$aUXlKf_h?16FQdHn^XlVAn=t=LQ}#9K~peR=!xZAt+}($GKCL*qt*wJ?Wp zv-wOh%^j|ndxe+mzwg@gRyEg_GMG{tKxlGh9opAoyp@{Suar3WkT$vr2q%~=)_Mj)TPfV75xJdoI@6`R9 z7B>z#9ngFIi6ZN!>(;l|Iy=+%$gvN}J4b}u%yi7rovtNVdB|!}MxjWXTiFvLpU!PK zDD+x;#rw?sW&S7RPBb%<+f=;5a69pjYkaDB_@QZM-=Dodd~=ufkLRyABJh;nS31!` zCi!*Cx4UCKxQGOT*kT7MvQ__!^M_XimRUYO6rxdqn~p8gINpTMu;{DUP1gl z_KDgXzqoeKJ|Iv=?L><^L&JI>{AfEc^1bcKb3Id&mHIyv-E5yRGJoj+y=BLw6tC_O zT@*ZH-~{PwMT1v=nD*y33%zcZ>uQX0LarcIWx+iTFQv(cWO z`@PN%*6D3v=U_H?)#%-a?!-O}&C8hGsH2^1=j08#ua|2TuHFCnxy^#Kk6CM97$xm> zc$7TtkdLODwDTzG%=|SeZgVdywk{COIJqD(^YvlFR0 z+30JE&^e_Lb8vHV6*boRazC^m0!nBR5qQ zm%L|L16rzXd^#*U#6uDy306q$N^h--)I^Cqv&Q+fFKl2o8r*p<{P$5);|@E}n0 z99=x@#jpc|E;)P_ONv)NA!$`?aUgJ#?niCMg8BPSrkxVW&TBSNb*BGnx8a*6E-pc=Yd_mGJ=t`aXOx4^r3bM$O!NGAs6R5vJ{dYXEhn04wg0r*LF(+OV@dX{Vqe5$ zjLAM`X?`tL>GXZ`PM1v*m5weJZSr!3l!LDMlvk}^PZ*k}`p4dT3a7;5wDiT$lGB%3r_5RH_25&w z=)`v&3ioy`+>yEF#j20Z7rm2hp#S;Q?9kX-qvlOrz4-F5CztLwI7lpl?T$u(`q>ti9y|4 zomGu~RXQtMcW0{gV!u9-b0uk0t(nr<21_F8-4_`N7xa_991oJ#q67xvX7e3jN`)Y|++27cRd-V8&Z%MmpIqpjla?WFHeyG zl^aBIUTK4QlX5#+yU0A*xbg4CW;2>I%+7w+()(U%`)$5K(Lv56_SCcaH?p=sH2;q5Qd@(tP=caau+k-edo82Dz?^`O(* znX5-eXWxuVx;{C0U(l7$P0ssmb`u?zd-Km7JFexpx+q6x_M5LbW818$iL2AzDK*T_ zI_=pv+3eypm&2}Ox|Zq$6{|fn&zYIiJzu@w-6m6_uXPhMJN%AV&ziaZ^_>mQrLPnE z$E&u?4w98GNNyXF8n)(`>*glesnOwJcfQS=H9O&M(j0e% zjbplZNgdL5hEc9>;~PV#M%qWr_4>QZlobV!|JK|&Q{MmWbfW9=wB={_t;Y>>QWJ)M zF3CGy@_g!M7wSDIGyT~k-JHKiXQ^InE*`mKbL7OGvPaFc+u4o0;Wt{&@|@ADn9Zfd z5_=E**?QE_QRafe8KHgloC;T1U}-J)B39|ryGe5w=0z9e>@ZQX6j+Moi{A)nHqSh0 zhi0f};{D;aN_2eh3>(*Wt7voR#8+q*gssdvxvEq3W8yAHywt3p^h{4@#-NR>T zIx~3fyT@D3M8cMayY~hji7ySFk-K)2k(l|}$+p86?DLX6ux9J(i#PfopX(ldxXt=a zJH}gIyCR*eo_WQ|@WO;~d$R@3tIsU%{^$?A10p)f?T&oenOXW|fKtBmN#BuSL+Mz- z=NI#aYo>R*X*IXigq-7V11D@%nttN;n_#oSdi$((25c`4K03Kzc0%7%N2kjfoNYLR zS`JzNe#YYCEiEryaTxYIZ>^6-VaGxpf95TN#3GfX{wEGdWhMx^CM-GkVBTtV{oZ<0o{5X>8zdLj z=R&cXh2O-KRGhv(%s{t<%%HCxz{JW;8A5-hiOeFfWG^AN`|QSB}WK zdFPAH{-oP4XuSBHEYS$phDzu2C(M$NBV&w);Efk?2n}Bu5pq+ zcXe5l>(Q@A6+dhgbxCHfMZnU|c4rPewOW_d*x%h+bL0KNvQwv9$qnt7yzbQSR-gB( zH@tdCzpZ=D%kx{`5qIC4YZW)AKAF7#ZiIK6=#hutw>7Yd-qtVJ%3%wcv)oqXW6K4i zMdqivSlg^qY~gkK^5kWDrv@ENf_pL&xl@#7(qHH)$E3OFmA&MCA&|rEln>h>+!zjWF@`nq!^~ zU%c~R+i!;&-P<$jhrMkk@4av;3kFEb2T=7OZUYDg;31#v1qXxvcm1bxuLTP_NM{I8(4I{jbaEzF}fI$+;p7>52Vc;ETi_wl{DOrtjB>oVW}pZW88 z_)%CDNB*7ae&e6Pu)61}`>m#Fz;m^^%6$)B`eD2}`KtR(IPL15tM0d&rcoR6!fDnd zUY&f^{U)4tb+3%tQ^_xXpr`-%*IWbNwSQH5uZw%t*{-_Zg!BHv zb2VpQ=375Vuaf@>%Tn8Tb$M0yn{Ylqc7y_4!8=q47dO|4@dx<0vrd#0S*E70(O6#&uhlN|4d5yP5nqz_29qoA!`60tc;}We++^@>gbY!bo7Xc<5uAOh4h|8 z$-r5Z#Jr-WPbgK*koy6^o-dT_ETLrkdp13?@dYIt zp4FT`+Q21{Av&G@1{os(KCG;Spv=E|i9iAk0mj69;BnUG&J!u|2xjeub}zR#&pQ=3 zA@^heZ})Q$NA4#8#{fqF$Q^CJ>r-XhuYXiC{^O!3=?`}3Hx+aM{%Bg!5M_N5W$fJhImo>WFa==Ba;UuyMBzPU zqSR~v>E@NmrrmQaC8O63`{Dj> z^n2jG9k@d|BAfHLa=$i*lJEyL<3D*fC6jhiGIj%}1N2QSn_b=WiMZ5Z;4m9t!*U@6 zIo0ICaoA?0rOs&5-8YwDnhv8W3E08$Lf*&~fp$hz^9OmpA4i*vivjy@<&Y zWcf`>mfZM0Z`29;{>1HE`S%0=9~n-G?@CIBE#cZG$8k_!0ebp<0$;uX+`<8aSdLZu zffDJ^Gm7*a`-Suv#p!Rwt*>o1a;pkxXP$FK-sNo^JcDgKTi&6aL!Yn69m_m&$2^hy z;;W$h%aqK&KuK@{C9_XbGV3TMfl%j7-NTi~a@#|_Gy-hzy_^!S#gq(Q0PO;_2UusZ z@MFNI?*jJ-KtF&I;M>d6Ets`=_YqvbW<8Wev?+2zemr=;#``>9EZ^woSjN%bJa4Sy z(ciI+l1>2th?r~uI1DxNp^u#eVn8dr|dr!C#y0MlvT z;eU(ekNWBz0R9hUrz)V1&=zQO)DZ&fHI_4kSjJgz zSAyNE;x6p>*w(Xtzmu~)mUY&yzzaj<_YFqE-w3>47PoZ&2e`We8Uwz)Y`tfJ4^U#~ zLy4{T_hI1*KDd{&J^BXP82PfCp>8WLxuvV)zY^M@7Ih#&+9*v^D_0Wxl=ad>azmVT+*M zyhLmU-vC_y7DLiOFD1m%o#T&oN6u(>zC2(Zz}Ex#`;Ou=n?L8cW4{*LIKHkEw!3hB zhuq7{d_}*H;mSSM^T^Q_cv-l<24oPc!D-*h%yK|3SK#*uXbW2bX~}PiSNO};TLgHD zRf45kLr5nR$`DugVwuM}5!(c;C#wSfhIPcYw`FZRv~PSHhxI&f_j2xheOFfIzp3xR z@7cai6xZGlfqEYOwA(O-G-`@{z3xO>Uaped9G9Q{2KcI+4m~A^m1hR%k&^@Ke!icF z?f>_H{R0H*VPh`WwqqU7*7H!;m2-!7j;-s3xMP{evc}i<==a#xV?P}0x^Ba;pT`h^ z%0Up+9)SOW?eDod_m+b1pbTQ(pYuQDk9|Pw_tgaav)D$U4`AEA0FnH)yz_NE+MO-) zJooL;&x(GEsN3Ezm!-|Kd2#g*y02h~A)70@FY};P)@~E3i+GeLF-s_ejp?F<%^i81^Uky=wt= zv4tz}SN{F>@8BQ>zR&UZSD89{H8%5Z>;w{;rj;1ys$1Zb76>_((kvwG4Su)JA-s^1UWzk;E&^fYB2U$ zS7;9WF)h@A`7ZN64QQ&`r&V6Ck16cgS2J6O+Pt8&XC9^MpcjJu4g8M4elhaz40Unmz6_C7{QdSf>?Q@a&mhL#xo=D0 z?^Z~u#q;_>H_$`xd`c&Ogt7wVg`IoAve?OqAu^4AKYs%o;NLR?#+bRf7y9{Qiz#*b zr+zWy4W*J$Z*u&hESl68e=8~QeU3kltpNX7pE(~uKd3MGeV|n4Ci0&~!5#p|`mw)$ zS1DrL1Nhr=buaK=L@6EhzJ4+N6U?*SE#r@MQF{l5NDF?y|F^LO{@pWR{*N1Dhw{G} z_)i0Q>JzB*R?zOU_HW;#9{F2HLD|nB@SiQSW6NOwgCGmaQ=ixX`58mIz_$Nb7aMm6 z`^*1+`|FuY5kp(xZ^ezL0snI#%ldi-47X4#XbV{WSQi`F)f0bHDX@J8(eDc5ZKK%w z51JvmtDXTvD%1(uL6$$3MZ<0kk&^rU_SfwU{H=h$CCsb9xD(hPx_=Zt1M3y==}5ia z^8BGJ8rm>KQug=r*Xbk$+%rfUb8g%T_(M}fVM?rCaUb%-HjuSHmPG?Ap8xM1|1sz) z33FrjiJlpZyLhqve-MRY8Gz=f-TsV@ng>Xxic7z% zIPgzr`QvwY90&pzbbaa-m?z7>_e2Wv04y0;qYw=ew+G-H=I^`o%ytt!@PF(B!B}h{ zwEf5*nxk^Srx5*JfNG!hH+Ielzx{Q=7j;cbfp7qzCE(Y`d8^Z&uBi*lAM@=5-yS&M zK6W!VK852IelSk+JAvb1IQG-kgR*j4=48P3 zpgw^>-+ z+rqQ>^-#;iifEZE1{?=jk^txH1)9b?h?>4XeDkyb65m_P@$3BlOW{8a{HKBcX$?Sk zqT=;g0Czrftml<*p>=(Qe7-aXGZvvV5kmr_}r<7IHyo$E1^tT@9%NXDd;LnK&#?>MJUH?iANJvO% ziiwGx6Bidh*Puaz8Uddb6%}RiGw+Frh@8VbA@3UHhtJ{jGBPrn6_p70hw19-(x|AY z8e{r&7;7(E16!N-@LB#nOrtjMqKqK_u!`~nw_(=S*7VDlFAM_rrc{gz-^1S$5)x1j zERj_{|GjkZewqAi8Wr=Y?md)IAP`iNUr7Hg0d>_AS1L zpctAmmC5B0||{0;M|m=`ZMAM(#s=Rf>2!tV&j%kY$7g&}+AG|N|A?q6|Dk>;DTmJ|>Bm6uYuMhv><*%qWEJM7mem1O+ z^2^I#QUCGr@eGy=fN+R$rd_*s<@y(Trs8w-`Sa(M%2b&ys`P(%cXu`o%p2uFo$_*F zK2_D9-;-bXec^QQewqK*d;3+D{Qsue7*wl|@-AUGN{Pr~@~31*OL7a?R8=8Z^`BPR#nJ!`=Y~)+RBc+iy|v6WI)j z2gCsmXTu%=2=@SXL3{^B@1|Z!@QOE@>xhu1nkK|%Xc}=2V93ZduwU&B z!|i2c7;+Vm0=PtBeIkVC0B0b60>Wc}!w}yO;V$T>;X3y%@b2c93|apa*0*Odu!oBw zOVcT7)a?86Tf#Ut=H12h1(BAUK_nzA@5`wuH~y{BPL!y&b%gcrIWQN`knvD|o+Jco7aIj|ok1J-H7`gGij z(x@5zuKzfWhy5}$U_HQihFA|Ngmsw9iFgCGszffor*0@gG&}f!zx>1Q&kEefkW(KS zZVff)^E}9v2qEhGECA(3oyP-U&WRj?5cST<&VcOTORy#k{;Nl_?h*J>Civ3d;7e)X zOIImTXv)OK#!_e>m@=^O7A;yZ#0ln*hAm}aEhWRsV(a~$D64HH;u3m9vSH=%bRAPk zqGLLPbRYSS^cu&Ic_%@qVE@w~56a1hr{M3Cfa8F8xE}}MVE`vPZvS z*md#i9y4SO>o=4vg>tay8bjtMQ_|Xm?WckM*g66ASagPJ~3d+3? zup6G=`3cr$g1>KtJq?`RDOvvneIEAl+=F%fH(^ab_zkXY4?PcS_0GV)wPW1gC0xfp zek;ro!8{JGVfS7EYbjw(qem#LDVxo$tLZVC68qtwNi*$3Air|C-(bYndk?!uY5W!_ zTh|fbr#F}~fbZUCz&|)2IS6`2Kf(PeyCK~9nIW;D^KC^8i7AA#3VU)kya1nJ^^SY6 z7_#gZL;i#{=?kwguI zhC4vV$l)N^f%h*A55c`ySkt>HkMoy^Y|55Z-0O-ygL>y=hy9M{D47FmJaNw(zuyn{ zzM$@Xz-MsZOBdHSq;sEruqQ=W4v2e35%U4_h*qbjUj_d`tm_~Fyq8N{W`O>|x3T<| z1N=ugehlog6>PBP0awppSw(+meFpW;%Fd9PN13wydJLHWYuU$cW?&6JLxwKF^#cs7 zCCVfUDwW1aejsVpKU=s7h^0p^)B)h{pku5%%K`FNj3>bFM?Zr9gYPd+WypdQ@EP#; zU}$saK%K_P&Xn!3W!OFTqa)FG7S3pc% za$&D9_YFL52RVJ}w4*CegjQP=3##>|AOmYR>Q4Sn zy#=IGpIqGQDZ1w+Rrs4y+?(+;P{8;8VyN`7d@2$K?bnzM(8fZU9UR8BQ@HQK6!snH znrA{Ep>F)g#8E&xI_E;W$4KnSrL7+@OsmW?z*^6riDMd?nUuCjEnx(^A5f8yc=RJ| ztGG4uI;M3efBT*SScja8^|H*~XVmm5rJbMD9WXs}fI%koSN);yfP0X%JAwR_$C#_G zAb)VzxQBqW@0m-iy%>ePk6}$a!}NN|gVJA*b7}O*gL)wV$~3N7*X&q#@*CL;NW1R2 zupf?TvM-x@zhjtT<)HM}<6Ih^Zx}{o63E}aCqr7p`ilm2q<=$O0Wq@AB^K^fZT|y0 z;}fNUu+M=-UBt`M2q=O2YjO;%8SVjR0T_e)(sfgQ4QvF^p69}TEJkbpeYy-jwwLgL zS+`$~m!&cP6T^s20sXgwHP0ID>P~)rD*?3Uxlpe$`upzCEg*X|56JtM<7H{A|I9EF zQ$hbmwhU1>%p?+0b))~bmI9)0l?!bEHQ9TMo`C$|6Q<5_@C&640zrO58%op+>P~*W zE&^!Jb4f=h#(d9T^g8Gsnoz-xm-H=$ba^40Nk<@xjJ3x~pa@%QWa z-oGY)VO~|mtKwhN=c;|Qy4;k5YYYZ_MdZVm7KEAtnYosaXn;Q#(!Sj*?i`Sb79 zRVXZ9HEHtse;Z26cP3{2u8^UyZ|Eqc_PN|yBkY+qI8S;G0GmqLxkWt34$oo6bL!UR zz?=}wO+Z~%Mg9xmKJGWGe&2~glO8aykOgy$?D=5q*(P}I51#*ndGqtKAQwBwwzCxG z)!uMtrQsQAD{fbve>>Z!koPJ8o^Mlv{W~-p|-GWKNfHhRvGXd^Ut<0Ve@` z-gu7P_98fk=jB)KOVg^(f51!_L+n#PM8u;Y{~iEo0Dp;)CTjk~&bx?=kKxWm!!u%W z9vXGcbB2#}R_8dk$mflE$Mf;$oR@IhxE#l^#EnMFc3F*D?j1z$SmeMvE z1?K^lvS(#tp29Z9JaG=3okxZc?TzP9A#cnZ&z~3+6&09kk;i$O}xMa^5ML$JP6;g=ObcXIETvveGSi2!L!Cu=g1rLMw?^ap@}e`avbJT_H*am zA#XcxN~{ML1IK)b{{!a*=0p4iX>A+?d2`=W)`J_sGy0HsJDAfkAZl&A*)w_3##qh} z;E$~Dp&d{LEN7@I{!v$wDe^IU7);yZ*^hzkgvV=22fTuLhiuRb z%3;#0_W2uivxB;l-7h{1#-TC2+F~_)5U}-wu|4`*3u5jDtlHY6gRpIfP88Sd>)DiS4SFH*FJweGdqHEL%jp0r*M=n zdu|C-!!-)=d2j_--}M^z+EZw6YR4b*$M=vtTrf3Bvugn;ChWzwk!`wQ{+ppx*KC~_ zRuXM3&7ggNbuKxy08)agr&d7Squ$th5%=ASh<~l?G5sH1dS(jne={VoKG16{H~z_= z&0Uia&vVCf$kB(?+TdRAHb2U;((k&aYDC*)E1dtF32jw2gjux!KA%Z647UMyu8pmf z!N21Mn282M-|t6&aTMG$Czi-POW=87h`{gawSYD3$D4oM8B zY%X`MwU9p9^&fb4A)eDMBRB@@G>*Wzy>PztkRlQT{XguJ<9X582gfs!aqXb6UOG5_ zgtI4a!F$)>tXFsVjk`KIUu5e=JTLMh0KYBp|I@&8gmLW;o=JiEHf{BcsOnZeAHsa# zW$cgZWKk-XMk$^{*%bRgxCRx^Wydo}-R4o!OfwfUto)s2;*^5lPa|QD2+xAV{|mi8+vQPkrj36whtUwncK15mXTMPtn^yh4 ze%Gtmm&7X*@UQ~#KKp&A*z_f2ibeC=OV{i&0UK_F=f*+alORtXIQNeC37*+4tC$Th zR_3qMc?g_AS4gZpK0zO^^c!?_F9rL4B1YX_!@DDeGY*Ea*h+wLTj47a$91a$d}aJU D?nm8m literal 0 HcmV?d00001 diff --git a/interfaces/Classic/templates/static/javascript/dropdown.js b/interfaces/Classic/templates/static/javascript/dropdown.js new file mode 100644 index 0000000..8528b92 --- /dev/null +++ b/interfaces/Classic/templates/static/javascript/dropdown.js @@ -0,0 +1,12 @@ +sfHover = function() { + var sfEls = document.getElementById("nav").getElementsByTagName("LI"); + for (var i=0; i a, td > a { +color:white; +} + +a.remove { +color:black; +} + + diff --git a/interfaces/Classic/templates/static/stylesheets/colorschemes/darkblue.css b/interfaces/Classic/templates/static/stylesheets/colorschemes/darkblue.css new file mode 100644 index 0000000..b792ee1 --- /dev/null +++ b/interfaces/Classic/templates/static/stylesheets/colorschemes/darkblue.css @@ -0,0 +1,28 @@ +.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ + background-color: #44577c; + color:white; +} + +th { +background-color: #333; +color:white; +} +#first, #third { +color: #44577c; +} +.SubMenu a.current { + color:#ccc; +} +a.current:hover, a:hover { + background-color: black; + color:white +} + +td > a, td > a { +color:white; +} + +a.remove { +color:black; +} + diff --git a/interfaces/Classic/templates/static/stylesheets/colorschemes/green.css b/interfaces/Classic/templates/static/stylesheets/colorschemes/green.css new file mode 100644 index 0000000..756110d --- /dev/null +++ b/interfaces/Classic/templates/static/stylesheets/colorschemes/green.css @@ -0,0 +1,28 @@ +.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ + background-color: #3f7c78; + color:white; +} +#first, #third { +color: #3f7c78; +} + +th{ +background-color: #333; +color:white; +} +.SubMenu a.current { + color:#444; +} +a.current:hover, a:hover { + background-color: black; + color:white +} + +td > a, td > a { +color:white; +} + +a.remove { +color:black; +} + diff --git a/interfaces/Classic/templates/static/stylesheets/colorschemes/lightblue.css b/interfaces/Classic/templates/static/stylesheets/colorschemes/lightblue.css new file mode 100644 index 0000000..9ad3160 --- /dev/null +++ b/interfaces/Classic/templates/static/stylesheets/colorschemes/lightblue.css @@ -0,0 +1,28 @@ +.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ + background-color: #5ca5ff; + color:white; +} +#first, #third { +color: #5ca5ff; +} + +th { +background-color: #000; +color:white; +} +.SubMenu a.current { + color:black; +} +a.current:hover, a:hover { + background-color: black; + color:white +} + +td > a, td > a { +color:white; +} + +a.remove { +color:black; +} + diff --git a/interfaces/Classic/templates/static/stylesheets/colorschemes/red.css b/interfaces/Classic/templates/static/stylesheets/colorschemes/red.css new file mode 100644 index 0000000..8ddd8fb --- /dev/null +++ b/interfaces/Classic/templates/static/stylesheets/colorschemes/red.css @@ -0,0 +1,28 @@ +.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ + background-color: #CC0033; + color:white; +} + +th { +background-color: #333; +color:white; +} +#first, #third { +color: #CC0033; +} +.SubMenu a.current { + color:black; +} +a.current:hover, a:hover { + background-color: black; + color:white +} + +td > a, td > a { +color:white; +} + +a.remove { +color:black; +} + diff --git a/interfaces/Classic/templates/static/stylesheets/colorschemes/white-black.css b/interfaces/Classic/templates/static/stylesheets/colorschemes/white-black.css new file mode 100644 index 0000000..9ed0d8c --- /dev/null +++ b/interfaces/Classic/templates/static/stylesheets/colorschemes/white-black.css @@ -0,0 +1,29 @@ + +.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ + background-color: #4e4e4e; + color:white; +} + +th { +background-color: #333; +color:white; +} +#first, #third { +color: #4e4e4e; +} +.SubMenu a.current { + color:#ccc; +} +a.current:hover, a:hover { + background-color: black; + color:white +} + +td > a, td > a { +color:white; +} + +a.remove { +color:black; +} + diff --git a/interfaces/Classic/templates/static/stylesheets/default.css b/interfaces/Classic/templates/static/stylesheets/default.css new file mode 100644 index 0000000..d4ad71c --- /dev/null +++ b/interfaces/Classic/templates/static/stylesheets/default.css @@ -0,0 +1,257 @@ +body { + font-family: 'Verdana', 'Helvetica', 'Sans-serif', 'sans'; + font-size: 12px; + line-height: 18px; + padding: 15px; + margin: 0px; +} + +a { + text-decoration: none; +} + +form { + margin: 0px; + padding: 0px; + border: none; + display: inline; +} + +legend { + font-weight: bold; +} +div.EntryBlock { + display: inline; +} +div.EntryBlock form { + display: inline; +} +fieldset.EntryFieldSet { + vertical-align: top; + display: inline; + padding: 7px; + margin: 5px; +} +.MainMenu a { + font-weight: bold; + padding: 3px; + padding-bottom: 7px; + text-decoration: none; + padding-left: 12px; + padding-right: 12px; +} + +.SubMenu a { + font-weight: bold; + padding: 3px; + padding-bottom: 7px; + text-decoration: none; + padding-left: 12px; + padding-right: 12px; + /*Stop mid-word wrapping to next link */ + display: inline-block; + +} + +a.current { + border: none; + padding: 3px; + padding-bottom: 7px; + padding-left: 12px; + padding-right: 12px; +} + +a.current { + color:white; +} + +a.current:hover { + border: none; +} + + +.block { + padding: 10px; +} + +.blockWithBorder { + display: block; + border-width: thin; + border-style: solid; + padding: 5px; +} + +.MainMenu { + display: block; + padding: 5px; + +} +.SubMenu { + display: block; + padding: 5px; +} + +table { + font-size: 9pt; + margin: 0px; +} +td, td { + padding: 5px; +} +th { + font-weight: bold; +} + +tr.active { + font-weight: bold; +} + +tr.finished { + font-weight: normal; +} + +tr.waiting { + font-style: italic; +} + +td.pre { + font-size: 13px; + font-family: 'courier new',courier,serif; + font-weight: bold; +} + +h1 { + text-align: left; + font-size: 19px; + font-weight: normal; + padding-bottom: 4px; +} +* html h1 { + padding-bottom: 2px; +} +h2 { + font-size: 18px; + font-weight: bold; +} +#first { + font-size: 33px; + font-family: Arial, Helvetica, sans-serif; + font-weight: bold ; + text-transform: uppercase; + padding-left: 20px; +} + +#second { + font-size: 30px; + font-family: Arial, Helvetica, sans-serif; + font-style: italic; + text-transform: lowercase; +} + +#catchfrase { + display: block; + position: relative; + top: -18px; + float: right; + text-align: right; + font-size: 10px; + font-weight: normal; +} +.footer { + text-align: center; + padding-bottom: 5px; + margin-top: 20px; +} + +#progressBar { + height: 6px; + width: 90%; + margin: 0px; + margin-left: auto; + margin-right: auto; + padding: 0px; + text-align: left; +} + +* html #progressBar { + height: 8px; + he\ight: 6px; +} + +#percentageBar { + position: relative; + height: 6px; +} + +#queueTable, #historyTable { +width:100%; +} + +#row_del, #row_order, #row_mode { +width:75px; +} + +.verbosity_link{ +padding:4px; +} + +.normalheight, .doubleheight, .tripleheight, .pattern, .result, .heading1, .heading2, .heading3 {float:left; border-left:1px } +.normalheight, .doubleheight, .tripleheight, .heading1 {width:125px;} +.normalheight {} +.doubleheight {height:30px;} +.tripleheight {height:60px;} +.row{clear:left;} +.pattern, .heading2 {width:70px} +.result, .heading3 {width:125px} +#Keytable {text-align:center;} +.heading1, .heading2, .heading3{font-weight:bold; background-color:black; color:white;} + + + +/* +Son of Suckerfish Dropdowns +By Patrick Griffiths and Dan Webb. +http://htmldog.com/articles/suckerfish/dropdowns/ +*/ +#nav, #nav ul { + padding: 0; + margin: 0; + list-style: none; +} + +#nav a { + display: block; + width: 4em; + padding-bottom:0; +} + + +#nav li ul { + position: absolute; + width: 6em; + left: -999em; + background-color:white; + +} + +#nav li:hover ul { + left: auto; +} + +#nav li:hover ul, #nav li.sfhover ul { + left: auto; +} + +#nav{ +display: inline; +display: -moz-inline-box; +display: inline-block; +width:100px; + +} +/* +Son of Suckerfish Dropdowns END +*/ + +#speedbox{width:36px;} +#Keytable,#Keytable2,#Keytable3{display:none;} \ No newline at end of file diff --git a/interfaces/Classic/templates/static/stylesheets/defaultcolors.css b/interfaces/Classic/templates/static/stylesheets/defaultcolors.css new file mode 100644 index 0000000..0fe3b17 --- /dev/null +++ b/interfaces/Classic/templates/static/stylesheets/defaultcolors.css @@ -0,0 +1,138 @@ +body { + background-color: #fff; + color: #000; +} + +a { + color: #000; +} + +input, select { + +} +legend { + color: #000; +} + +fieldset.EntryFieldSet { + border-color:#3a3a3a; +} +.MainMenu a { + color: #4e4e4e; +} + +.SubMenu a { + color: #f5f5f5; +} +a:hover { + background-color: #ccc; + color:black; +} + +a.current { + color: #ccc; + background-color: #000; + +} + + +.blockWithBorder { + border-color: #b5b5b5; + background-color: #eeeeee; +} + +.MainMenu { + background-color: #f5f5f5; + +} +.SubMenu { + background-color: #000; +} + +table { + +} + +th { + background: #fff; + +} + +tr.even{ + background-color: #222222; + color:white; +} + +tr.evenLine { + background-color: #f5f5f5; +} + +tr.odd { + background-color: #222222; + color:white; +} + +tr.oddLine { + background-color: #f5f5f5; +} + +h1 { + border-bottom: 1px solid #4e4e4e; +} + +#first { + color: black; +} + +#second { + color: black; +} + +#catchfrase { + color: black; +} +.footer { + background-color: #f5f5f5; + border-top: 1px solid #000; + color:#4e4e4e; +} + +#progressBar { + background-color: #cdf; + border: 1px solid blue; +} + +#percentageBar { + background-color: #9bf; +} + +.queuelink{color:black;} + +.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ + background-color: #44577c; + color:white; +} + +th { +background-color: #333; +color:white; +} +#first, #third { +color: #44577c; +} + +a.current:hover, a:hover { + background-color: black; + color:white +} + +td > a, td > a { +color:white; +} + +a.remove { +color:black; +} + +.feedEnabled{color:green;} +.feedDisabled{color:red;} diff --git a/interfaces/Concept/README.txt b/interfaces/Concept/README.txt new file mode 100644 index 0000000..c89e314 --- /dev/null +++ b/interfaces/Concept/README.txt @@ -0,0 +1,36 @@ + +Concept 0.1 for SABnzbd+ 0.5 | Nov 28 2009 +assembled by pairofdimes - see LICENSE-CC.txt + +============== +LIBRARIES USED + +jQuery +http://jquery.com +Copyright (c) 2009 John Resig +See LICENSE-MIT & LICENSE-GPL + +Sizzle CSS Selector Engine +http://sizzlejs.com +Copyright (c) 2009 The Dojo Foundation +See LICENSE-MIT, LICENSE-BSD, & LICENSE-GPL + +jQuery Grid +http://layout.jquery-dev.net +Copyright (c) 2008 Tony Tomov +See LICENSE-MIT & LICENSE-GPL + +jQuery Layout +http://layout.jquery-dev.net +Copyright (c) 2008 Fabrizio Balliano & Kevin Dalman +See LICENSE-MIT & LICENSE-GPL + +jQuery UI +http://jqueryui.com +Copyright (c) 2009 jQuery UI authors (http://jqueryui.com/about) +See LICENSE-MIT & LICENSE-GPL + + +The images templates/static/images/logo.png,sabnzbdplus.ico were provided by inpheaux. + +All other images and stylesheets provided by jQueryUI (see notes above). diff --git a/interfaces/Concept/licenses/LICENSE-BSD.txt b/interfaces/Concept/licenses/LICENSE-BSD.txt new file mode 100644 index 0000000..b90d331 --- /dev/null +++ b/interfaces/Concept/licenses/LICENSE-BSD.txt @@ -0,0 +1,18 @@ + = Regents of the University of California + = University of California, Berkeley + = 1998 + +In the original BSD license, both occurrences of the phrase "COPYRIGHT HOLDERS AND CONTRIBUTORS" in the disclaimer read "REGENTS AND CONTRIBUTORS". + +Here is the license template: + +Copyright (c) , +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/interfaces/Concept/licenses/LICENSE-CC.txt b/interfaces/Concept/licenses/LICENSE-CC.txt new file mode 100644 index 0000000..ad5f44f --- /dev/null +++ b/interfaces/Concept/licenses/LICENSE-CC.txt @@ -0,0 +1,63 @@ +http://creativecommons.org/licenses/by/3.0/ +http://creativecommons.org/licenses/by/3.0/legalcode + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + 4. to Distribute and Publicly Perform Adaptations. + 5. + + For the avoidance of doubt: + 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. + 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/interfaces/Concept/licenses/LICENSE-GPL.txt b/interfaces/Concept/licenses/LICENSE-GPL.txt new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/interfaces/Concept/licenses/LICENSE-GPL.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/interfaces/Concept/licenses/LICENSE-MIT.txt b/interfaces/Concept/licenses/LICENSE-MIT.txt new file mode 100644 index 0000000..e9c74d0 --- /dev/null +++ b/interfaces/Concept/licenses/LICENSE-MIT.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) + +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. \ No newline at end of file diff --git a/interfaces/Concept/templates/main.tmpl b/interfaces/Concept/templates/main.tmpl new file mode 100644 index 0000000..4093a5f --- /dev/null +++ b/interfaces/Concept/templates/main.tmpl @@ -0,0 +1,114 @@ + + + + + + + SAB+ Concept + + + + + + + + + + + + + + +

Loading...

+ +
+ + + + +
+ + + + + +
+
+ +
+
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_30_cccccc_40x100.png b/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_30_cccccc_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..5473afffbc2662173f5af5c27d966c072de8039b GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`Ta z<$H)q$%zYm;;c7~Kd+Iuj%U9o62cnl7#bi-T}u42J&U%yNJ})(84RATelF{r5}E*| CoG&2& literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_50_5c5c5c_40x100.png b/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_50_5c5c5c_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..5950a8db9e64e8d00bb28726cb869947abfdc7fc GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7&<)v zy**H+ z`**vX!*n&P7dc50adyfl&Nwm{9INpTEp=t_C|dt|%9X7Z^~WTNlbGI|=7;M1& literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-bg_glass_40_ffc73d_1x400.png b/interfaces/Concept/templates/static/images/darkness/ui-bg_glass_40_ffc73d_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..35ec0d9d290646cc4e487ad973dde7e979829d00 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq`W*`978O6-=5zn*kB-V#9{8A z5YLNW97J7a98qL7IHPXurDyRjc|Mbg@8{^ExfYyF9&D2iMXXNan#^1HV2J>C;u_aS d;^%;}$C#b3amU=xZ39`u;OXk;vd$@?2>__OD+K@m literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-bg_gloss-wave_25_333333_500x100.png b/interfaces/Concept/templates/static/images/darkness/ui-bg_gloss-wave_25_333333_500x100.png new file mode 100755 index 0000000000000000000000000000000000000000..b1b03b677165b6628a426bd69f5677f125ecc43c GIT binary patch literal 1874 zcmb`IYfzI{8pmJ2>grV17G0@K0tCwr|_L4FG`cX~&a)0{{Wbe*M`mHv8AS(OX;q*z!_Z@>{1%MGiyu zR|xbXaPnOIdD+Ux{R6(br<1qK{_>6OVJiyw2cO!f{+2bo_c6Uf@ak*A-gUS0ya}i{ z;V|n10Kl4N15Q?43I?7#{{I#OKX|+gVL-*#_gjMA40sU-?0os>#q4m5zYlyNaNy0i zw^Rg@n2PM1EYnI!r8-ve`DR?E&r)g^!dw?^1cUDl{jIC0LqtYJ2-{< z^zg_cP8X>+p|zOkQCSM#xGKcaAOiy-SU^Z1WD^&VjsjU9nusJEZ09-SzK7LC5*abv z3bV0}9Jo{3#yNAHDALv}?}};!m&BKh#+>m@(WkDJjK<89uTGHg@D-UX>-ETjTK)~$ zOr)}HQ5Q=cqfulXw=zX=4D4-ulurld1T(#Bl#sa@S5 zp`alO&km=OxtEWjt&`%U^>H+i7?)HTR1x^ff5x*RW+|o>hxeK_Kj$^Ig8CR zEqR6U6p+fT895w+wE0LvO;>FXYFOy(XDztA-TA3z$n$NTg#FEvs-1liN z_Nd1G7J&@g9g}bvL8^2_2}WvrG*#cC7wK731W2GBz+jOT^+0{`PNdB!ES|*3C0zQ5 zaN3awY3wD=vgoBTW8JhS)k9-u6((jG8W5J=IvOi0csINJs#yO7^pr@JOg^2@yWSr$ z9H89a;5ALfT5P*q-ysOn-(zrTNv~mw&fses8XC-rM*OQ4w5MNgP4KJ~Bd(HLy{%0; z7gd#cTlMZ*$k+Sqt!4!>k+M1O!(%Np{^9g<`lR~Fc_pDPM+vVC=QPeD`(JRRC~er2 zCi|jkNQ@4;LqAmPTU#w?hmZF1R-aHl=em*uW2JB!U9hT&`^2=uJOOET@j`Ok0#d6 z#(L6k=6ErD*U;XUposM4a^d3L zp-T^hYj>Xmwtaag;LpHTG_dVQw4W-o!G86VCAjbROZ*&Db`T>1l~(J<&d;6s33{d9 z`^k6n9Y1mYo9(hMp0$+wN`M2(jWR#7`wh+LARzCn4N56D%KVR4-u*2}bB{fPi=Paw z6gk|PBCK5=Be17ZBA!UgCS^bmQTXUH0T|@vR`&$2%0`k{CKz4&U2QEYpeHEbxx1yMjh$T zgH4%u$59+kAz#93N7_0O1=Cc<4+g{{!VmvO`@jXnG--~=JzU@`t0Wk2^`7?Wk*WGc5TVydoVC|KVrIzB za*zX6duE2%bCs^gjG+nlgyq-B7Rgi2dP)%$N`p>Fzv0(c&);tlsH5~@w3Wa6?;|Hv zNsmEwPY{wtt{bi6qxNY>L|gaRm?0CRoQUiZ%h) zq(G*nxm^ELo_SHJGxFKNZ)BmA%i(Z}p9hp_yZ~Eg@0lwdJ2rk#AT1>$`NrEH|L$Kk CqOPR? literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-bg_highlight-soft_80_eeeeee_1x100.png b/interfaces/Concept/templates/static/images/darkness/ui-bg_highlight-soft_80_eeeeee_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..e56eefd612ae74339bd45ae91ddfc2ae2eb7092b GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l$xiDV~E7mQ98UlM literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_25_000000_1x100.png b/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_25_000000_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..3525eb9ff4c26d2c74003e7e2fdf09cccf7c9d54 GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%}VPV~E7mvV v4~LtZ8=D#sywNe@G+8Wgr}4YKCJTdvGLyysE7#8hH8FU)`njxgN@xNASlk-& literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_30_f58400_1x100.png b/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_30_f58400_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..2b6a9f92408ede5e967497f0c917d99e06a2e7f8 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l#Qp0V~E7myZwe-3<^BV`X67{ z-Q39+s_r<4W%}b;6Bcgql6WBPGHXN18AjIAtjA9+sZ48Zd&-pi=Idqi7tQ7DO<7N; RDFDr3@O1TaS?83{1OO`oCW`<7 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-icons_222222_256x240.png b/interfaces/Concept/templates/static/images/darkness/ui-icons_222222_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..ee039dc096a38a3753f92519546eee94bcfbeffa GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-icons_4b8e0b_256x240.png b/interfaces/Concept/templates/static/images/darkness/ui-icons_4b8e0b_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..fdaa72a0263f115f0268927c5aa4ad0f05dd9172 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-icons_a83300_256x240.png b/interfaces/Concept/templates/static/images/darkness/ui-icons_a83300_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..b9e3ad7c87419228390de734786ee856795d9ad4 GIT binary patch literal 4369 zcmd^?`8O2)_s3@pGmLE*`#M>&Z`mr_kcwz5Nh&g=McJ3E!;CE1E0ryV5Ro;>nvtvt zk&I==Xd;cVGZ@>q_xtnx{1u&;vfH*l%vP6i@I&54 zi}8QuLKq5}SzM61c3jh5HBKi1*LkmRsOO})L|ap2#ru-fHM#I2d*0vMO9Tnn(yztky#f#e z!9N_Uv3HLNWC1UQwZv-jvVzWj(8O3YDXFarQRan$IPYVZe2=Eft^9bOu?jd#+Yb&E zAh0Xy;;`pull9pP+o3ryrA#hmM}w$M+gs$H+-9LQ{L1TaRU^6Z_!5Y@0P!Ov7PbU> zB_;6|!31<&sBN2C0gW_Hv;f*;8={4Yr zKLwZOg@MeN3)f5J3a|*I17*y!*t9{6BP_MYhAfVV$u3 z_waOGUc_d)*d|A!y*s2y0;%}yWX`m})ESQiMpyYTsjymg8tH&TdbS=6^SQGo2KZ~b z;k+q*)g+;$LnyHulp9cB6 z)*jY<*X`tbgH#RR=ql`cQ*ORdp;Y4lT8qrLc^M~woP*k+)cD4-`w#j!SWCA{p8kA% zumoAZ?t`Qg?SZX@*-o1RmfoObQnDg2@%?P!IYdA5nMv)cktUhHfZZ?H`bn0-9Vxky zS)|_JhuBSFXsi_of)?vP02vRrw;+&r5o1Mj`}|gLm?PGQPmsS$#_hFCMLOrMJj^Rb z9H|a`kSM2tTfKZ^^9PLUyfCEqG!P<-&O;YGMPP$t-Z}(Xz2TD}M^PlYk~^;zkal$? z99r8G<$v6#Z-o-7@acWM|3JJyO?PnyE7R>J2vWJ+sv`->Y$JubkfT_5`FBU5bf%d$HKc3C!v595kpa?EUxjhFhGpDUB;8URcE48FZ6C~pM z?TsPz}E5uCqbcy;7j=%Qh`glqEA%~1X(a<)eKO5Fe|JLD-ndZ-vnW^D`@n%jaMYzj7 zX?raMEa{g1Nj)C|3n6_>`G=O&^%pa}EN%%e$?h`bRVBvCr~}e3C+?iuB1#;!vi)tNs5B&|A-m~FQY;|?)ml{2m(GmmJUV5BH^*AGgo&rM~TLrM% zI)7#e)wr@YPAuLCPSKLjn6eRMI>cP8t6Wg8#Wb_A>;B&P=Cex;@;1Wp)a+s|1G0QL(>({XvomJDEz;sJHIX z=l;@tV0P=i_K@oDC1PIi$w6U~CZ#U$aNt$;S-^HlJBv=Pdn9M%`3T&aUiinD#Uh=|lsl zKs#ijM@;p5Zs^x|%d#$Y%ZkNjF9N$L9}5hGb`GLkH$<>5oRRhnD%3g2OW4)vQv-tn z2tcm1bQJ>Y!0mTL`jc94jM-!C88d{)=r{013mk{1KyfTyWHSuF1;k{kK2-Kc*L4#TM+TiNs0G5;k{7sfJD_jGfDWVfp0G1Zt3@1F%l8iqe zB~eg!IKzidOOGe!bnb#^R+K(?B*(xrV>V{nRAF7UjU0h^v`XKIVu3c8`YI(Av6N`~ zg@;4iFaQZpaQ#6RU~iNUZD49nXqwpDpY}fKbGqZ^ZJtR}eq^A2a|iz_n-o6FTAH@q zoDLu(B(4>JHPqD!EoG}%+TD}ieGmC-0!)Cy+>_j0BB&nfsgyNsvjzSU@hD$cA{nTF zCa?p30^z>VvDjrl8?~%2+^1O@Ar9w-mIXLOt)&e%d-TOpdq^&5`lK|RrN- zUkj;x4wq03vb>_85P3_&=lkKmV{X**?#|k}{eU+->pE(^;nHrEy z_5p!?yLKtJIAu(}iUWRtyAFh9W;EMJckeDaao&_sQO0wj9(!%#QF{WccW<_z3*t#I zM5!34VHSufPC*mT<*+541vg&)&GjHHK2>>XCW@eNmf%XMX6k+d(?+y1{MQQusX%4C zJ=+wTY%}dOUqZYV|qu+5w4I z$wia55iRA{VOa2fCa*&*2UY&X_iDt9&WL_qj9zw66DZ4=FqL_n(zPp`z!Yp~PyMb1 zlqcFLC`7Z((8f((dQEnYH$GQ6UK9{d1Wu`Isp2h|*V$L%n*7p9YDjyZFB6jx|dy0CF_N$(!PtWpXW|VHymHavCPYB^nw(Hgod|I_Fu3;rKwf1hYxVrC+eOU?K*55t6rGomp<$8`G9N$1v zq?zL!;1Bmzc_^J^YaR^9+B!dAZ`a#aH@P{oHjgiKA*lqSm2xv~FDVpZZt7m}@2p6o zA3v($k9_F)+}KvZr#aRmR^$cO0dY#D;+egRuHYj^;evY^ zuclz%#Vdoa?@dU1uhSM6hHFRq((n>q(8z#WEL67Ec`A2OZv_l(rdFR&OFDcYsP4J2 zJD+OrOAf`vLupF+6SJ(3;3qT!eXd)+gFlECJ2(R5SR))RrjjU91rZRr4t7<=H= zFzuG#M)%xq`9@nV>f@unn(7OO$9#G zAN*KqGlh3t2AeaPST|k#kXxE4;DPw`rVFJ>G;52w`rTVAdk3gO0@3gz+JIl32Vo0( zt5XGA?8*7Y$eCbWO(6dwAHjAq@MyXVh|`TJ25A{}FY+6eLi`S1A(U~StQ^75MMo;8 zV^YVcSQ2%I)N)e}B`sQ|14&h6IyD8Hkd>9asm8TNTX=`J7Ty@07_6T#CWBg6V(~83 zdmB8ulj`{*f%y7QR|9*rR>+Xsnw`m9~tV;Nd7E?N<3y9TIX})&W=K z)jJsp?23tBh;j2S;Zx45q3O`u?BF1|J63c>utzbfA61tr~&AUrTIT?BkRqx~a3 zBp(}6W*;r>D!X0l)WQqnA}fZLZjU5u_{%rI`4@Jth&OVU9d@zj_6&$m-}PJieBafQ z0dz{*?NM+q?PF@(b`l~V)>%n1JnLot_Dxon8gF;Ty492Li0wqsp9O9T1>3Ki{P~gx80)vK#|s zTCs%IvA?S0`|z91n{Hw%t_XavQ*?PGDy3%7o6VY_h=%)W9P?Q}f)v+y^ExGA)&7>Y z2T04?244TjiA8wygy4(_K2+?#>%W(}6X+2lITtOsAD;HZho(5UE`_nF3QH4+s{FRW zMP+(ZfKcJw)fE$`%VYypN^}k&&QU=HzQ+m1Mmyq=nIv7=(iHA4mlX{VJxG-*pPHW|4@J8k#S86HRaVi560s}HCz9q?SAB5W??XtL0 z#wRq64kBJV`zoa|o&gqtVpn!ja--aE+M(8j5bo2$u6AUD6uOaL(vQ{!k0AEaPAQgU zXN8mC#^%;fq$q8P*-Q4eQ<8;~dfh8qyJ68P_?)4CRIHQu{x0^}fUsSqa`hy+IRN@^ znECC$;ho`GFVSp`V&}^@-nRwM$?a?arT2j^BfZ@_7ae_Gj7+YF8Dj67G;_#IZcExY9p=kxU$zG+w`CQmZ}SU7Z<>q3L{ z>frCy7;AI?vM%N|f06$rYnVA^IlE*ph&!bJh_HU8$$ILy>!5TjpXCLgfV9qnJ5i^kK z?H1%eYV@xjeQh_LZ-Hon@|TYZHw)2^Kug-t=flAqEIYd&FEV^Tfg0OB^heQv55ih7 zh2DaDA>oEZ{Vl=gD?ZY;r*;CmuiQUcTEhh!6}+jgiL9Wzj)Q#K4i?F5;q>-*7$gh% paEc1DI3`<(O3xvulR&VAkQJHZBho(m=l0{{SA7UpJl008iB z3Rqvn`1P1SiomLXkg776;)RSXXXV1Iqu_@e2%8dEPZ*NvG6-d*$oWlBXKKg zV({l@ll0gM+F;pm#SBg*2mQ!Rn_HBhT&5w_d`jyG6+_vuxMHXoKj|Yh2EGJ-B`N+E z$pmy>sA-*C0S`BfHv`&Y>Z626r?uZY8?`zzbXj7u1}` z;TS<~e1eY(jD4j)wElgyeR*V7`qdhf3S5Vcdq_R*a&F^r|9|M*i>!yeL)xMH?-6M_ zJjl&7(M|RQJ2z;fI7;E!$?Pfq$usWpjLxzlazT~K6v`ft@@P32;&o$5@b}Yj#d~r) z9^2%vhdyIgOXOGiCNOR_sjx3j8*01pUqQBn7r}I@E53HUy&DusRETO9wG~Rdfx=Ta zwD>0smtXx6l#X>f`lTc3c!pmLbwTP$Zfe7s__87<&i+s33P`Udim99RAA$T_Y7T3^ z>vV9wL8Sc0x! z_eRl4cEFZ`EXPfL3omdIIY|MS@P4-79I_Af%(!ONP=msk&*mFs^(0gOj->4HEJ}Ca zL(HZSEXEQH#fbJDfQ^RQnvtlx$kD>NeLhPB+yUp!E5O$&?fP1}JdI;l4(=H(hEfAQ zNRU;>uU@{f`2)^*UI^NA8VHraDlXrE*?OWOs z7D#P(ftiy|@ab?=t923@#mR}=S6GNj1 z?mTR4hby}vE*2>Wg7-X!KAz3vwvJ)qVMtB~**$wrQ^&0>;8UR6E7imZV-)iH?Tt~> zX-EGVhMYWVxX}dU)MQaN+jv0*8;3JBy*az#1aW|^_4%i?mlU$yRTy>-wCJJVC==P> zEx=B7cZ&E7jJ@{Z{CG+0A-lAG;ovs3FALs8|JLq?o#M-to~~wx^JI)GhP%l=X?-mS zEbfx}Nj)D74<>(1{)gt2^%v7UAlLYp6gO$gsv=`$#2)3F9ed8@mcK6i!h@mGQqU}e zyItCAfl~4IqG~(AU2lV?`)nu#S5+1BrCJv>QmoI?LyuLj8e^o>li?U6OMey{r_T(* zY8RG<@x>cK$(nNMlhy)E`{;|c6$@%L*hZEYs{mUmt$8-u8m?YV3{83m{YAwB%6Y{L z6k9V^jd0tnd%q4+xwp&Yfr#>WqoooH9K5xYM|V_s8{16~N?TcuYd@6+y1_aS;c{q^(Kyv6DZcFd zd@RkCqyC{5yX5E=oHd-`WBQ0I>9_&^<}<7793`JA=$mRuSrr}iQyzxG9T)%=Xp2g4 zkFI*p1^XIjQQE0yQNGyZNn{h@1;N1>r@)!(21u5LGg2Ob1==Thh`ZXost~Y05y+XE zrc7k%zx|Fxe^LX9HhqjcV~P|W`3AXYj%WAaFNz@uZ-xRmf!NHrNh4zKSO1WrwFL6P zXM}G=*p9v_k=mUmpg-$Y6I7Mt4@y2D+ys?c;_C@aVePnKabqAS%y%AoFzKI#JaeQxo%Il=}>GqqqxhG8cPyu>P?R=}Ol7vhvDcW{Z8i0Zn zzm^YCS5qT4m#*SycTaxzIpnMMHwFrEO>lJzqr0i6lGn6M7x;$7B7Iy)6renY$OiZc zMEFF-;Ff)@RWrYEodz{P?avD?^RtUsN$GEP>xrgxlbtd22`L1q+Vm;zyBzLIj#2fp zQZS2sUF)*%MR5S(jid&TIT<2`Js!yUdi}%lzzxkuKjf|bHvGZz#1l5%O0plla6C28K&%)=R}0F6xRI>HvM|=4x#=-to|lSN^N9P6&xIP z2dq0{CX-Xc&YJNeXXD#dn;c9feR-*P_CfUEp8(wN{z!yEZrI*MPs**fh@b|xe*S&i zHc8i5C2XFuJ)xhg7K~%2H`zsX?JhZT+>};UB5HaE$E92V@>aXAPbP zjHGY7LH_&c+;-7yblDf5tKrky!+N>Vx>?)QZi1hm1Aea(92RyRiFczw&w7)GT*KddVhT(T~0Egdo9qyLRosyG6?!=QbqPzk^x9!b!;O zjEYZ(YM2+oYg-TrJTt9??(26|bMF?&#cgl&%SzC;-tOToW%SoAmvaoExO%bz%?xjk zc(|{^J<~z4;>Loltn&Q#cD-zLlA0oFa(P1*5{sdl$v0#75<`$?CT{uv?urEF5%l#% z1*lLBO|PYH2z}OUCDP!56T6(s<{oG|TOAmiP3Z95>EKzFu=~wRiHd}%-yn`p^?J6( zih27|xpMpU0(-^Ma=J7`xm^&DhSqXkjnQt=LQjM?m_ss!!0cIcfgCXk7TijCGz5At zUKx0OZ(Pc2owm3zR5RS0N)Y#iMfl$WQCVB&sa%OY<#3FtYF&H{`S5{&n#aQKe2Se9 zB?KD>qbcT%&$2w0lfgg>hoa-{bj}D!0GrB0(o9%dP6Pxsw8y%(rU7O|*#fSHYBm2h zyytq$C(2?`j}W=ORiP$Y;41*}G=Y$(2OhqHVfd_b2NmhSboLunMtOr5!~U=jF_g7g zx!U^R$M++HtM%nJWA0HW6A->{j|_B;D@i9waP$)>{6HyW zi?%Q-uGS3xs5_COdmgZjld7Pfo4dBxil@eQDw4^F*Vcb}d)bfW?|OD#N(nd^;T^jB zZea;L9}obXL9cH4o}9qQv(@ovFw_meU5D94g#m>tZ>F(pY-+sVc~p1lWWYncfsZBD zlLUulh#8ZKbJZaXx~7T%9*9kCI?ptUWNtB6zk6wB?Esa@U>adq3-GJsAap@@buxd8 zEh*0kH65g*0pwfcCE82`98Gls@jB5(U`@lWMLxq4sPDlmq!Rv*Vp(zSX$437XGBPqZRXNva3-1V4LK`FF19js@6mZK*48gf-Z-ZNB zLM=}?fKd18YCyN<3I%#wqeFjR9^PLn0C|nbyn1-&Ph!re@O0EEp`97_ouN^T>luaA zQbRd68s2B-M1Q}bL`59M`{jC(<_`P4m+_LOgr`2Gt(Rm4y+wDaGcvik0$;t-0c3C{ zKhx0TB~7CpakFn?r9>!&+;ccIO!hd{$-sX1k+O&#=VmV@?^gOz?c=kZ*8x}L)H)dP zYzhfqNU`(IVUtd)A!)GN@5UL@&OX&+@1C?lb`+!>)>=w1JnE$X>Lw#Yjk7&t)#5>X#Cjs|&jQ!X46aWn?QOjkKm*1G ztbhAifM)AKF=tIbp&vSIPqX&9FQ`BEN|??$UXR)85VQkj*P`!)ht-9)fQ|t&EI}c) zY_Dp0Km2C(q8potDF7er6kZ;VOs*dAVznYFU=Tj)$Gq2%pheYQJdTMt)xV?d0aA0f zf!9BB;E?X!!FWTWHx>8q_1{a`32+aVn2QqF4@>>wO;ea#m&96EhNkjIR(#vwq%yr` zfH0w))fHpM%M^W;nW$_)tb@EVVvhrYi*g_wUlF^|U`HFf<~&JOeBOMX&56=R~^VwL+|j!Ca?>Tx==&$#g^C#2+mS?tyG29g?7BC;5|* zhNhNJ?*-LgdlM)3Jx?L+w7;FK4mFXC;;XzQ429NM`AD>QNUJVX`T3s9}m~hbK7csE0P(!l|C~FWjU=g#?C}12ipKQAA~kz3%msO zg2N0*dRqd|SG=WcPVM-2UAcd>w1y8d%zsl=9Z^nq83TK_9xPH=!{}}AuqY7aaFPnP l;BjQ_^4`vQQuBMqxOYB4T*@HG=I>V@U~v|0R%wcf{y(a=p27eC literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/darkness/ui-icons_ffffff_256x240.png b/interfaces/Concept/templates/static/images/darkness/ui-icons_ffffff_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..bef5178a9054c16582876bac57017f783272e750 GIT binary patch literal 4369 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 l!Q;r%?Y*7ztoF~2ao>D^xRgPV&GAM literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/logo.png b/interfaces/Concept/templates/static/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e50298ca7dd230b4f3e7e1187736ed904702c7 GIT binary patch literal 4405 zcmV-55z6j~P)4Tx0C)j~RL^S@K@|QrZmG~B2wH0nvUrdpNm;9CMbtL^5n^i$+aIn^?(HA4aZWV5ov6ELTdbo0FI&wK{O>*+w4vx20?>!`FrQsdJlnHR>OPy zcd~b_n$otK2Za4V;76L-DzNVtaSB-y0*E}{p()372;bw_^6ZZ}PI-92wGS&j#91PI zKs7DSe@(bk%_Y-7gGe}(^>I=@oY#w#*Bu9GZf3^F5WP>3rn}7Ut74&?PWBFvy`A)a zPP5)V!Xd&78LdA?xQ(9mjMYElVd13a#D+Z_7&Y|xU=_C-srWU*6kiZcC!$nw*)9$7 zn6CX+@=AhmkT}X@VSsa5NKe;HZuq)~1$`#h6R+ZTR#D-3j}vF!)ZOnz+5)dI4jl{{ z44Mr{P!L4~VVJN`K!!XTF*LGrKO?IK8z<8w`3e3jI8lUGNUta*C8 zn(P`s>{pjD=7Kek#B;Fw@hxAK%$F&Q6vg9J^Xf~4by_hu-=A!MJ3Znq&n~srbFGPs zH&&aMXZ>nO`|hf|ljc?VPhR!${AbO?W8x_>CU%PFA&Hm8F7cAsOREdwU~R_;ot1_u z(ruCYB-LPGn!NQdT|ZlRy+(fw^-+`=%+gee_kY4FWHg<*4sZI8+sFJD270UUORdLHO0nA4V) z%{fwsET5CQ>B?eK%uw4yQc~9?*JVo2}ze(;aRcp*ceL#HUJSllrgm5wQKR zQu+C;QrUh^8rFfA`ftFz{YAidi-`aL010qNS#tmY3ljhU3ljkVnw%H_01fR)L_t(& z1?5?3Y*p70p11nhj%~mjCSaSbn8lE^h%Q1Qls`>NR4TP7P^5@1Qb}92iCWY~q9H#T zB~gV4(6mBrN`yp}MP3 zpJv3oIm?`xIp3K(_gv!>5g*uZaRBY0#i4YY<7Cz4ICFh(p>pFBt zB+d^b7c^|(Hab2~#3N!%@TdaWVAt>NbF{A(zOoB{~SxoyJ zqofWc*XU;0w@Jq-m4!gv3E&pc^rx(T#}$JrTkCb5N=wDtpV`AmU@OoOtWs9s6?DyT zI-nr}rx{I@P;8)c(a$d{@~;R4-Os@qbpvqc!)n`!2H@ZUHK1c4nM{Tn zu5`y%MRby*KGZ9?@*+xr*H5WR`DQNT1Em}K~M)8q=Icr z2B3Ouk3>4py(#HF=}Y&jZ5uGIC96-y!nQJ+9@w;_v9nFmwS0nguapJ=2BFS0v%|r# zZ+dx=KN85BjOp{>LGXB~M{=j$BYAngK)~mG3aj1&GZ@x>)^u*b21EnK@UTrP=qkBk z1%tX1A@!j^XG)!?P5M!vlmt$Fqj?M1iXZ26Edizv?w8~eTs?7hZUDz6%Wp18PBT<` z!MX;`G3g#j_BV+SZh;K#7J^xxnAvvCmQX0Pc=qhs8v}s=1C|>%Zd`9|ZT&Tx?O@%g zy>SIw4~xsjB26et#=|{&G7^cbKn&l&n6cT_)pfbOy`3?1gEd~pKp;tsmFrc8ii?ZC zHFfILC3t}w9qi$seSLj@fDV0{+sL;z8f}m#Kk~>U>vrwh#V6O$s#UAXj~qGjM|8NxBnzDx zNYl~_0GS;OvKMay;II+GfemoY7!*Jp;XHAp7tOUL>A18)u=&!}62jAG5WF`to296z z2wjnAG)loWQ^0%_ZJ;%~bkmp~H*udf*j{$y>SVG}Ee#9|uu0%pLltcG%{jHBHbaAh zgWOw~`$2Z|I>y+UXk2G((4l=w=ArMa ze$Xe~Jw6$Xx$}{=dg6A#=EM=$Y}=yW@5dw*@E6g!o*vg2n$hpa+!9E&L;E3&u}pg8I1cAE z!HBEh{Gh>1BD2p$LF8O8%#jW)jrv{Ib1TZ3{^!`KjjBoaJi^lHhv*fcgvP7 zi9?4DMUNjpUKkFCkpQU-Le0O$?h{Wu5r6Z|HwWK+_uT^eu_@E;V~;&1XV0GXRA_hI zx^;pwuqspc(MKO0YW=7+QTIk&KJ`fHgON#-CYhMj5d88WQ&^_3^}yzY0&YNus^8S? zz8-P=6OtS8$vLlzrKxgIU0oq%Wo5$xATVU5($Z2sZrU}H^A!~p zLO_w>-dssZ2|I<07kj1E%(3ib>f&V;LM$QFVgrUA3>W0&R9>iy&KN$3hJAexWz{YAB7`S=; zJ9X-m5GcL`t{y=HZnnC414$PHTs)2Z5n2m ziJ?AJ?%cW4=x*M;Idd<>l!;4R**0av23gxIoq;fOiSG)&vrJk*jcJICSnylpkb#!!?F^ysW z{{3?B;6bUcuNPeXJezFrpcn&R++&gIreExt>crC{!b#N0obVWLgk-9W0A(f=_zogK_XCL7*vFgIQ8YyLa!Fr=EJswD|&O)@POxy)g|9 z@q;%z#pAqA-+a1N8!-?FUcD4-^SRDJ_d=JPJN$wB{M-uX2WwXcQ^lCRpqhlnnM*!o z@O=nOugsVO&6_tb)yVQ&Qd}a-mMxPdOL#raP6U9ui5KLho{%&(yeE0X-z8X@B5shBn|^6dnamHs6tTXuj3}wDW|V$Ca(?O3 zr6cO{8b;DJY_o)sv|OoOj`0O~;=~CyhY|14WF>rN3qGs0Yvk(HtA(tjcIijkDtQyq z+Yt429J<8z7O;pyo0!$-};mZzVWNks*yLayZCwyAnI*ZBk=9#>E{+Mj*)*;;_(AFaI5E^ZC& z(7m>8+qOlx37L~UdGaK$3+I}en#y+U*ipsx)IELr^d-EsuW#SJeG%U)+3YqnG_;{) z^&fi~)a$YC@BDIRb9V34_+ZTkwBoSU&FI*qmvR6<@v2 z{pQafFPuGPZc<);sbBWLmJo-_%*QJvj)*lnne<7V661NWGH0q^>OXYk<9=8AW72Z% zhWjeC^>NZV#uMXTxX6{@)T4pMDAa}V9&nX4&wEk_m~oe-$7$zdFb|>{Oh4Id^Ge0b zt!)?G5vdcS1aC%qmPpV(la>489!=6hwu0NijFAO-h(Y9oS%_I62srx$yr85gP_^d% zzz?@PKBacXa-?n-?!Hk6A3B&d3_lDLoIt;O0Dn|MD3qt$9655%Z9aHPUhM6Ub3=5f zfHOEU10|1##;ccUD;v<6x)bed{JI|-Z0=WqHscJ00JFX*;LH-u@PdlT{_2Nn{ont^ zPsq<8JuPXnqyKX z(3$;A12({RJ5%pY`;0^PVFRvNZrAJtzZ~@IL4&e4;sU&ATet7rrRM0&ImQ0+@&z~t z{xy-1(G6X|G`|A|G4=+^$Dy-w_V5|`RdgVJ8MFKpLn4F^azz}mKo zg~VR}z}Y|O#QU#z`8KUv9SnA~yYkz=$Gcu_2<>TX9ry=qFoOxIO17Cbb`WZta=bJV zUE8KUx%SxIY-h%mxi_!R7bA%S3b+}tesnHfoh9~GWBe7@jr4YW9RKc>9_jnjN&nW1 zR|ZaZpy(!skGiLq|5SMU0eM&N3cjm>ZfBfc6#b%BN z7FUOBx}q|4@k;DJ=o3iIV7vb5V`c+AED(GkxK<1>bCWoCvv>Qgk?d#M9!W<%j;5PA zuKFWM12!iz91&~N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-bg_flat_55_fbec88_40x100.png b/interfaces/Concept/templates/static/images/redmond/ui-bg_flat_55_fbec88_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..47acaadd737478ddb090f47f618810712163317b GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*Fsaj7L$B>N1x91EQ8x$BA993)+ za~~)OO5|O5sDCi_{N8&XlRv*c;OQ6|AR59NN?mFzWBXJVGojypu|S6~c)I$ztaD0e F0syyrGF|`x literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_75_d0e5f5_1x400.png b/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_75_d0e5f5_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..9fb564f8d0a117f17aa6b844490309dadbd94821 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq?|on978O6-=0_GYj6;7zWBfT zzjhI`OjAO{6(N>+Em!s|xjZW|^1EO|(5d{JeUmv{p6fa-GJh;t>KCH4`R~7(L8qj} Y_egNRQF(If70@^aPgg&ebxsLQ0Qgob)Bpeg literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_85_dfeffc_1x400.png b/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_85_dfeffc_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..014951529c315d6042e72febc310a4d2db5b4a82 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq?|lm978O6-<~(*YA_IRxoBVf zfAX@vsV!R#l$@#*eLnw)_Sv|_?i7P!ORnX)SxaXh+BPpZ!Fw~yjr&#G|Jw^YMHDhV X&EsZx`7bsSXc~j3tDnm{r-UW|&(SK+ literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_95_fef1ec_1x400.png b/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_95_fef1ec_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..4443fdc1a156babad4336f004eaf5ca5dfa0f9ab GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hIh978O6-<~(*YA|4MzBvER z|7}eQtdCVXoUc2b{PaWeaIKu7gJx>{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/interfaces/Concept/templates/static/images/redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png new file mode 100755 index 0000000000000000000000000000000000000000..81ecc362d50ef5abbc0420aacd5345822f1f6098 GIT binary patch literal 3457 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 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-icons_217bc0_256x240.png b/interfaces/Concept/templates/static/images/redmond/ui-icons_217bc0_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..fef3aaa3e13f6269cac6dd6ae8adcbcd95b32f03 GIT binary patch literal 4369 zcmd^?`8O2)_s3^phOrG}UnfiUEn8(9QW1?MNkxXVDEpFin2{xWrLx5kBC;k~GmPmYTG^FX}c% zlGE{DS1Q;~I7-6ze&TN@+F-xsI6sd%SwK#*O5K|pDRZqEy< zJg0Nd8F@!OxqElm`~U#piM22@u@8B<moyKE%ct`B(jysxK+1m?G)UyIFs1t0}L zemGR&?jGaM1YQblj?v&@0iXS#fi-VbR9zLEnHLP?xQ|=%Ihrc7^yPWR!tW$yH!zrw z#I2}_!JnT^(qk)VgJr`NGdPtT^dmQIZc%=6nTAyJDXk+^3}wUOilJuwq>s=T_!9V) zr1)DT6VQ2~rgd@!Jlrte3}}m~j}juCS`J4(d-5+e-3@EzzTJNCE2z)w(kJ90z*QE) zBtnV@4mM>jTrZZ*$01SnGov0&=A-JrX5Ge%Pce1Vj}=5YQqBD^W@n4KmFxxpFK`uH zP;(xKV+6VJ2|g+?_Lct7`uElL<&jzGS8Gfva2+=8A@#V+xsAj9|Dkg)vL5yhX@~B= zN2KZSAUD%QH`x>H+@Ou(D1~Pyv#0nc&$!1kI?IO01yw3jD0@80qvc?T*Nr8?-%rC8 z@5$|WY?Hqp`ixmEkzeJTz_`_wsSRi1%Zivd`#+T{Aib6-rf$}M8sz6v zb6ERbr-SniO2wbOv!M4)nb}6UVzoVZEh5kQWh_5x4rYy3c!871NeaM(_p=4(kbS6U#x<*k8Wg^KHs2ttCz<+pBxQ$Z zQMv;kVm5_fF_vH`Mzrq$Y&6u?j6~ftIV0Yg)Nw7JysIN_ z-_n*K_v1c&D}-1{NbBwS2h#m1y0a5RiEcYil+58$8IDh49bPnzE7R8In6P%V{2IZU z7#clr=V4yyrRe@oXNqbqo^^LvlLE?%8XaI&N(Np90-psU}7kqmbWk zZ;YBwJNnNs$~d!mx9oMGyT( znaBoj0d}gpQ^aRr?6nW)$4god*`@Uh2e+YpS@0(Mw{|z|6ko3NbTvDiCu3YO+)egL z>uW(^ahKFj>iJ-JF!^KhKQyPTznJa;xyHYwxJgr16&Wid_9)-%*mEwo{B_|M9t@S1 zf@T@q?b2Qgl!~_(Roe;fdK)y|XG0;ls;ZbT)w-aOVttk#daQcY7$cpY496H*`m@+L zeP#$&yRbBjFWv}B)|5-1v=(66M_;V1SWv6MHnO}}1=vby&9l+gaP?|pXwp0AFDe#L z&MRJ^*qX6wgxhA_`*o=LGZ>G_NTX%AKHPz4bO^R72ZYK}ale3lffDgM8H!Wrw{B7A z{?c_|dh2J*y8b04c37OmqUw;#;G<* z@nz@dV`;7&^$)e!B}cd5tl0{g(Q>5_7H^@bEJi7;fQ4B$NGZerH#Ae1#8WDTH`iB&) zC6Et3BYY#mcJxh&)b2C^{aLq~psFN)Q1SucCaBaBUr%5PYX{~-q{KGEh)*;n;?75k z=hq%i^I}rd;z-#YyI`8-OfMpWz5kgJE3I!3ean6=UZi!BxG7i(YBk? z02HM7wS0)Wni{dWbQMRtd-A)_Az!t>F;IwWf~!*)-Az4}yryNkz&9)w>ElA80Oc`6 zHo#9H!Y3*Qx9n@Jn)!w6G^hb;e_n8zpIyXCN`JFkPc)^Q?2MsLNFhMgrcZI-<#1ne zjH;KFf?4eAT9mQZ}ZfHLGA#d%s;SZK4p0FwZT2S^{ zQ2BG1xJsbK6?yrHTjJi|5C0u=!|r!?*4FL%y%3q#(d+e>b_2I9!*iI!30}42Ia0bq zUf`Z?LGSEvtz8s``Tg5o_CP(FbR0X$FlE0yCnB7suDPmI2=yOg^*2#cY9o`X z;NY-3VBHZjnVcGS){GZ98{e+lq~O$u6pEcgd0CrnIsWffN1MbCZDH<7c^hv+Z0Ucf0{w zSzi^qKuUHD9Dgp0EAGg@@$zr32dQx>N=ws`MESEsmzgT2&L;?MSTo&ky&!-JR3g~1 zPGTt515X)wr+Bx(G9lWd;@Y3^Vl}50Wb&6-Tiy;HPS0drF`rC}qYq22K4)G#AoD0X zYw$E+Bz@Zr^50MAwu@$?%f9$r4WHH?*2|67&FXFhXBrVFGmg)6?h3^-1?t;UzH0*I zNVf9wQLNLnG2@q>6CGm>&y|lC`iCFfYd}9i%+xkl^5oBJ?<;aneCfcHqJh7Yl5uLS z9Fx-(kMdcNyZejXh22N{mCw_rX1O!cOE&3>e(ZH81PR95wQC37En4O{w;{3q9n1t&;p)D%&Z%Nw$gSPa!nz8Slh7=ko2am)XARwOWw zpsz0~K!s{(dM$NB=(A=kkp>T(*yU6<_dwIx>cH4+LWl282hXa6-EUq>R3t?G2623< z*RwTN%-fgBmD{fu*ejNn)1@KG?Sg*8z3hYtkQJQjB6 zQ|x>wA=o$=O)+nLmgTXW3_6diA;b4EY{*i*R%6dO2EMg z@6g?M3rpbnfB@hOdUeb96=~I?OIA3@BWAGmTwiQ{x5Cqq<8c10L!P zd@Qk^BseTX%$Q7^s}5n%HB|)gKx}H$d8Sb$bBnq9-AglT2dGR2(+I;_fL|R4p$odJ zllfb0NqI)7=^z~qAm1V{(PkpxXsQ#4*NH9yYZ`Vf@)?#ueGgtCmGGY|9U#v|hRdg- zQ%0#cGIfXCd{Y)JB~qykO;KPvHu|5Ck&(Hn%DF~cct@}j+87xhs2ew;fLm5#2+mb| z8{9e*YI(u|gt|{x1G+U=DA3y)9s2w7@cvQ($ZJIA)x$e~5_3LKFV~ASci8W}jF&VeJoPDUy(BB>ExJpck;%;!`0AAo zAcHgcnT8%OX&UW_n|%{2B|<6Wp2MMGvd5`T2KKv;ltt_~H+w00x6+SlAD`{K4!9zx z*1?EpQ%Lwiik){3n{-+YNrT;fH_niD_Ng9|58@m8RsKFVF!6pk@qxa{BH-&8tsim0 zdAQ(GyC^9ane7_KW*#^vMIoeQdpJqmPp%%px3GIftbwESu#+vPyI*YTuJ6+4`z{s? zpkv~0x4c_PFH`-tqafw5)>4AuQ78SkZ!$8}INLK;Egr;2tS18hEO5=t;QDmZ-qu?I zG+=DN`nR72Xto{{bJp||`k}-2G;5#xg8E~xgz22)^_Z;=K|4@(E&5J)SY2of=olcw z5)@L)_Ntcm!*5nEy0M9v0`S33;pO4TN;>4(Z+19p_0>u#e-vE zXCU(6gAvu~I7Cw(xd%0e59MNLw^U37ZDbsBrj%eDCexw8a3G`nTcXVNL6{B7Hj@i& zbVB{;ApEtHk76q08DJ48dSxd$C(;$K6=FpU<~l9pVoT9arW^Vu{%Bcn4`eIpkOVC| z$)AKYG_`ypM{0@BUb3^9lqi_c?ONH|4UJMJWDowMVjacycX7}9g={O7swOB+{;+?; zjBo!9?+nd)ie#x5IbFW-zBOo0c4q@9wGVt5;pNt`=-~Zgcw#*`m($6ibxtZ`H=e=} zF#GZ~5$%AUn};8U#tRem0J(JTR}d4vR(dgK2ML~lZsPhayJ2h1%sD4FVst| zKF)+@`iNzLRjg4=K8@**0=5cE>%?FDc({I^+g9USk<8$&^qD~@%W0i4b|yMG*p4`N zh}I!ltTRI8Ex$+@V{02Br%xq#O?UlhO{r8WsaZnZCZq0MK9%AXU%MDLT;3=0A9(BV z9VxxxJd7jo$hw3q;3o?yBLmA=azBUrd9>-<_ANs0n3?-Ic*6&ytb@H~?0E(*d>T5n z-HiH2jsDf6uWhID%#n>SzOqrFCPDfUcu5QPd?<(=w6pv1BE#nsxS{n!UnC9qAha1< z;3cpZ9A-e$+Y)%b;w@!!YRA9p%Kf9IHGGg^{+p`mh;q8i7}&e@V3EQaMsItEMS&=X plT@$;k0WcB_jb;cn%_Idz4HO$QU*abf4}+wi?e96N>fbq{{bKGP38aq literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-icons_2e83ff_256x240.png b/interfaces/Concept/templates/static/images/redmond/ui-icons_2e83ff_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..45e8928e5284adacea3f9ec07b9b50667d2ac65f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-icons_469bdd_256x240.png b/interfaces/Concept/templates/static/images/redmond/ui-icons_469bdd_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..22952e3127c2429121e9c42a76a2289335a535c8 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-icons_6da8d5_256x240.png b/interfaces/Concept/templates/static/images/redmond/ui-icons_6da8d5_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..04db1df0f855063068f6bdcbef5e3de6a3524348 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-icons_cd0a0a_256x240.png b/interfaces/Concept/templates/static/images/redmond/ui-icons_cd0a0a_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..7930a558099bc8d92b4264eb67a0f040460f4a4f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-icons_d8e7f3_256x240.png b/interfaces/Concept/templates/static/images/redmond/ui-icons_d8e7f3_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..230aa922f7315d7671e2f8d217a60cbfd59fef24 GIT binary patch literal 5355 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 W{%j@Nkj?-5Wj;~YSF2TVi1{B6s+0%- literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/redmond/ui-icons_f9bd01_256x240.png b/interfaces/Concept/templates/static/images/redmond/ui-icons_f9bd01_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..1619b868d4613e0c8e03a226a3908ff62912ca51 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/images/sabnzbdplus.ico b/interfaces/Concept/templates/static/images/sabnzbdplus.ico new file mode 100644 index 0000000000000000000000000000000000000000..9bd8d1333f965c9b6ba145c2b5b155f4972880d9 GIT binary patch literal 1406 zcmeH{%}Z2K7{-6M$+Vhsn!d)$)W+1ZrfDXf(HwKM(aEtiC~J{Ki?k@HHf^&-3pcfh zAc{iJMK1bS1mPwU0zr_FHiZ~{5Cmb1q7S6z_MEG>nfe0)&*68T_j%8I&f&g`3znwG zgELNK!74>%!lVj?MUGaevmD7-Y}xO&ssg<@s=? zkG4tqfnRWWjOcsC$FAUhF0E+cm8o@m;o1bg7m6Q=rY`9F%<->^Pu{@wOj>mSdPX4F zK*6|tM-M!Z=J^S|m3nV))FpNlhCpq=q=HMrro93-h60X02OT%#WB}7`` z&J^QjZ&(b8hvKdX#G$4gZhr({5rk88eN(>vD3N#4L7Q|stvj0`c1TS-0*#%}|Alkv z&uP8eY3lEbdt%_H`q7`!)49Z42ma3vBoYZ`nf?O#nQ8p&p2<0WX8q$c&N~H8wVV3F z%HrbOwexn!d;M!*adK;3Ypo}&qQ;6nT357fS-815XMetbmvgXSU)K8NzN*zr=5KU- zUG=(>hGk2)Z3w#^U$lGC-asJk%HCP(_ytibvQopUp7v#x!Io4iwJ8`f|3!`M WWQ{T1u76-@Q*?_b*?;GCF8l@_M4M*- literal 0 HcmV?d00001 diff --git a/interfaces/Concept/templates/static/javascripts/concept.js b/interfaces/Concept/templates/static/javascripts/concept.js new file mode 100644 index 0000000..6fb0bd0 --- /dev/null +++ b/interfaces/Concept/templates/static/javascripts/concept.js @@ -0,0 +1,300 @@ +// assembled by pairofdimes through use of examples + + + + + // ******************************************** + // ******************************************** + // ******************************************** + // ******************************************** + // ******************************************** layout + +var PageLayout, Downloads, InnerLayout, $Tabs; + +var showResizeMsgs = false; + +var msg; + +function resizeTabLayout () { + if (!$Tabs) return; // make sure tabs are initialized + var selected = $Tabs.tabs('option', 'selected'); + // ONLY resize the layout when first tab is 'visible' + if (selected === 0) { // Tab #1 (index=1) + msg = ""; + + // now resize the outermost layout to fit the new container size... + PageLayout.resizeAll(); // ...triggers cascading resize of inner-layouts - if initialized + + // make sure all inner-layouts are initialized and 'visible' + initAppLayout(); + } +} + + function initAppLayout () { + var $Container = $('#Downloads'); + + // make sure Container element is not hidden + $Container.show(); + // if Container is still not visible, then must be INSIDE a hidden element + if ( !$Container.is(':visible') ) return; // ABORT + + // init the Layout if not already done + if (!Downloads) + Downloads = $Container.layout({ + name: "Downloads" + , resizeWithWindow: false + , triggerEventsOnLoad: false + , center__paneSelector: ".outer-center" + , west__paneSelector: ".outer-west" + , east__paneSelector: ".outer-east" + , north__paneSelector: ".outer-north" + , south__paneSelector: ".outer-south" + , contentSelector: ".ui-widget-content" + , spacing_open: 4 + , spacing_closed: 4 + , north__minSize: 20 + , north__spacing_open: 1 + , north__togglerLength_open: 0 + , north__togglerLength_close: -1 + , north__resizable: false + , north__slidable: false + , north__fxName: 'none' + , east__size: 520 + //, west__initClosed: true + , south__minSize: 5 + , south__size: 100 + //, south__size: 'auto' + , south__togglerLength_open: 0 + , south__togglerLength_close: -1 + , south__resizable: true + , south__slidable: true + , south__spacing_open: 1 + , center__onresize: "InnerLayout.resizeAll" + , onresizeall_start: function () { if (showResizeMsgs) alert( 'Downloads.onresizeall_start()' ); } + , onresizeall_end: function () { if (showResizeMsgs) alert( 'Downloads.onresizeall_end()' ); } + }); + + // now show/init the inner layout + initInnerLayout(); +} + + function initInnerLayout () { + var $Container = $('#InnerLayout'); + + // make sure Container element is not hidden + $Container.show(); + // if Container is still not visible, then must be INSIDE a hidden element + if ( !$Container.is(':visible') ) return; // ABORT + + // init the Layout if not already done + if (!InnerLayout) + InnerLayout = $Container.layout({ + name: "InnerLayout" + , triggerEventsOnLoad: false + , center__paneSelector: ".inner-center" + , west__paneSelector: ".inner-west" + , east__paneSelector: ".inner-east" + , north__paneSelector: ".inner-north" + , contentSelector: ".ui-widget-content" + , west__initClosed: true + , east__initClosed: true + //, north__initClosed: true + //, north__initHidden: true + , spacing_open: 4 + , spacing_closed: 4 + , west__size: 361 + , east__size: 400 + , east__fxSpeed: 'slow' + , north__minSize: 15 + , north__spacing_open: 2 + , north__togglerLength_open: 50 + , north__togglerLength_close: -1 + , onresizeall_start: function () { if (showResizeMsgs) alert( 'InnerLayout.onresizeall_start()' ); } + , onresizeall_end: function () { if (showResizeMsgs) alert( 'InnerLayout.onresizeall_end()' ); } + }); +} + + +$(document).ready(function () { + + // best to create the tabs first, because is 'container' for the tab-layout (Downloads) + $Tabs = $("#tabs").tabs({ + show: resizeTabLayout // resize layout EACH TIME the layout-tab becomes 'visible' + //, disabled: [4,5,6] + }); + + $cTabs = $("#footertabs").tabs({ + }); + $cTabs = $("#configtabs").tabs({ + }); + $sTabs = $("#searchtabs").tabs({ + }); + + + // use different outer-layout classNames to simplify/clarify CSS + PageLayout = $('body').layout({ + name: "PageLayout" + , triggerEventsOnLoad: false + , north__paneSelector: "#TabButtons" + , center__paneSelector: "#TabPanelsContainer" + , center__onresize: "Downloads.resizeAll" + , spacing_open: 0 + /* OLD - uses 1-pane with header & 'content' divs instead of north & center 'panes' + center__paneSelector: ".page-layout-center" + , contentSelector: "#TabPanelsContainer" + */ + }); + + // resize div.ui-layout-ui-widget-content AFTER initializing the tabs + PageLayout.resizeAll(); + + // initialize the inner-layouts - IF CONTAINER-TAB IS VISIBLE + initAppLayout(); + $('#tabs').tabs('option', 'selected', 0); + + + + + + + + // ******************************************** + // ******************************************** + // ******************************************** + // ******************************************** + // ******************************************** grid + + $.jgrid.defaults = $.extend($.jgrid.defaults,{loadui:"enable"}); + + jQuery("#queueGrid").jqGrid({ + jsonReader : { + root: "slots", + records: "noofslots", + repeatitems: false, + id: "index" + }, + datatype: function(postdata) { + jQuery.ajax({ + url: 'tapi?mode=queue&output=json&session='+apikey, + data:postdata, + dataType:"json", + complete: function(jsondata,stat){ + if(stat=="success") { + var thegrid = jQuery("#queueGrid")[0]; + var json = eval("("+jsondata.responseText+")").queue; + json.page=1; + thegrid.addJSONData(json); + + // update header stats + switch(json.status){ + case 'Downloading': $('#stat-Status').css('color','lightgreen');break; + case 'Idle': $('#stat-Status').css('color','yellow'); break; + case 'Paused': $('#stat-Status').css('color','red'); break; + }; + $('#stat-Status').html(json.status); + $('#stat-Speed').html( parseInt(json.kbpersec) ); + $('#stat-Timeleft').html(json.timeleft); + + } + } + }); + }, + colNames:['Name','%','MB Left','Size','Age','Category','Priority','Processing','Script','Status'], + colModel:[ + {name:'filename',index:'Name', width:300, editable:true}, + {name:'percentage',index:'%', width:20, sortable:false, align:"right"}, + {name:'mbleft',index:'MB Left', width:60, sortable:false, align:"right"}, + {name:'size',index:'Size', width:80, align:"right"}, + {name:'avg_age',index:'Age', width:36, align:"right"}, + {name:'cat',index:'Category', sortable:false, width:80}, + {name:'priority',index:'Priority', sortable:false, width:80}, + {name:'unpackopts',index:'Processing', width:80}, + {name:'script',index:'Script', width:80}, + {name:'status',index:'Status', width:80} + ], + rowNum:10, + rowList:[10,20,30,999], + caption: "Queue", + autowidth: true, + height: '100%', + imgpath: 'static/images/jqgrid/', + sortname: 'index', + sortorder: "asc", + viewrecords: true, + multiselect: true, + pager: jQuery('#queueGridSub') + + }); + jQuery("#queueGrid").jqGrid('navGrid','#queueGridSub',{add:false,edit:false}); + jQuery("#queueGrid").jqGrid('navButtonAdd','#queueGridSub',{ + caption: "Columns", + title: "Reorder Columns", + onClickButton : function (){ + jQuery("#queueGrid").jqGrid('columnChooser'); + } + }); + //jQuery("#queueGrid").jqGrid('gridResize'); + + + + jQuery("#historyGrid").jqGrid({ + jsonReader : { + root: "slots", + records: "noofslots", + repeatitems: false, + id: "index" + }, + datatype: function(postdata) { + jQuery.ajax({ + url: 'tapi?mode=history&output=json&session='+apikey, + data:postdata, + dataType:"json", + complete: function(jsondata,stat){ + if(stat=="success") { + var thegrid = jQuery("#historyGrid")[0]; + var json = eval("("+jsondata.responseText+")").history; + json.page=1; + thegrid.addJSONData(json); + } + } + }); + }, + colNames:['Name','Status','When'], + colModel:[ + {name:'name',index:'Name', width:300}, + {name:'status',index:'Status', width:60}, + {name:'completed',index:'When', width:100, formatter:dateFmatter} + ], + rowNum:10, + rowList:[10,20,30,999], + caption: "History", + autowidth: true, + height: '100%', + imgpath: 'static/images/jqgrid/', + sortname: 'index', + sortorder: "asc", + viewrecords: true, + multiselect: true, + pager: jQuery('#historyGridSub') + + }); + jQuery("#historyGrid").jqGrid('navGrid','#historyGridSub',{add:false,edit:false}); + jQuery("#historyGrid").jqGrid('navButtonAdd','#historyGridSub',{ + caption: "", + title: "Reorder Columns", + onClickButton : function (){ + jQuery("#historyGrid").jqGrid('columnChooser'); + } + }); + //jQuery("#historyGrid").jqGrid('gridResize'); + + + // format history 'completed' time to date + function dateFmatter (cellvalue, options, rowObject) { + var d = new Date(); + d.setTime(cellvalue*1000); + return d.toDateString(); + } + +}); + \ No newline at end of file diff --git a/interfaces/Concept/templates/static/javascripts/lib.js b/interfaces/Concept/templates/static/javascripts/lib.js new file mode 100644 index 0000000..5ed3cdf --- /dev/null +++ b/interfaces/Concept/templates/static/javascripts/lib.js @@ -0,0 +1,417 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="
";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); + + +/* + * jQuery UI 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ +jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* + * jQuery UI Draggable 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.leftthis.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.topthis.containment[3])?g:(!(g-this.offset.click.topthis.containment[2])?f:(!(f-this.offset.click.left
').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y=p&&n<=k)||(m>=p&&m<=k)||(nk))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(ec));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidthk.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/* + * jQuery UI Selectable 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.rightg||j.bottomd&&j.righth&&j.bottom=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)f&&(e+h)m[this.floating?"width":"height"])){return g}else{return(f0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.topthis.containment[3])?g:(!(g-this.offset.click.topthis.containment[2])?f:(!(f-this.offset.click.left=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/* + * jQuery UI Accordion 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Accordion + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.2",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/* + * jQuery UI Dialog 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * ui.core.js + * ui.draggable.js + * ui.resizable.js + */ +(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||" ",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("
")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("
")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("
").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||" ");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("
").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e
");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("
")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('
').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){if(!c.disabled){a(this).addClass("ui-state-hover")}},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(!c.disabled){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}else{a(this).blur()}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((this.options.values.length==2&&this.options.range===true)&&((e==0&&d>b)||(e==1&&d1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled")}else{this.handles.removeAttr("disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(cthis._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.2",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/* + * jQuery UI Tabs 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"
",spinner:"Loading…",tabTemplate:'
  • #{label}
  • '}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
    '))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$(''+appendText+"");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormatmaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?''+prevText+"":(hideIfNoPrevNext?"":''+prevText+""));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?''+nextText+"":(hideIfNoPrevNext?"":''+nextText+""));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'":"");var buttonPanel=(showButtonPanel)?'
    '+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'":"")+(isRTL?"":controls)+"
    ":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="=5?' class="ui-datepicker-week-end"':"")+'>'+dayNamesMin[day]+""}calender+=thead+"";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);tbody+='";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="
    =currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?''+printDate.getDate()+"":'=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+""))+"
    "+(isMultiMonth?""+((numMonths[0]>0&&col==numMonths[1]-1)?'
    ':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+=''+drawYear+""}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery);;/* + * jQuery UI Progressbar 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('
    ').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;/* + * jQuery UI Effects 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/ + */ +jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/* + * jQuery UI Effects Fold 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * effects.core.js + */ +(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/* + * jQuery UI Effects Highlight 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * effects.core.js + */ +(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/* + * jQuery UI Effects Pulsate 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * effects.core.js + */ +(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);; + + +/* + * jquery.layout 1.2.0 + * + * Copyright (c) 2008 + * Fabrizio Balliano (http://www.fabrizioballiano.net) + * Kevin Dalman (http://allpro.net) + * + * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) + * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. + * + * $Date: 2008-12-27 02:17:22 +0100 (sab, 27 dic 2008) $ + * $Rev: 203 $ + * + * NOTE: For best code readability, view this with a fixed-space font and tabs equal to 4-chars + */ +(function($){$.fn.layout=function(opts){var +prefix="ui-layout-",defaults={paneClass:prefix+"pane",resizerClass:prefix+"resizer",togglerClass:prefix+"toggler",togglerInnerClass:prefix+"",buttonClass:prefix+"button",contentSelector:"."+prefix+"content",contentIgnoreSelector:"."+prefix+"ignore"};var options={name:"",scrollToBookmarkOnLoad:true,defaults:{applyDefaultStyles:false,closable:true,resizable:true,slidable:true,contentSelector:defaults.contentSelector,contentIgnoreSelector:defaults.contentIgnoreSelector,paneClass:defaults.paneClass,resizerClass:defaults.resizerClass,togglerClass:defaults.togglerClass,buttonClass:defaults.buttonClass,resizerDragOpacity:1,maskIframesOnResize:true,minSize:0,maxSize:0,spacing_open:6,spacing_closed:6,togglerLength_open:50,togglerLength_closed:50,togglerAlign_open:"center",togglerAlign_closed:"center",togglerTip_open:"Close",togglerTip_closed:"Open",resizerTip:"Resize",sliderTip:"Slide Open",sliderCursor:"pointer",slideTrigger_open:"click",slideTrigger_close:"mouseout",hideTogglerOnSlide:false,togglerContent_open:"",togglerContent_closed:"",showOverflowOnHover:false,enableCursorHotkey:true,customHotkeyModifier:"SHIFT",fxName:"slide",fxSpeed:null,fxSettings:{},initClosed:false,initHidden:false},north:{paneSelector:"."+prefix+"north",size:"auto",resizerCursor:"n-resize"},south:{paneSelector:"."+prefix+"south",size:"auto",resizerCursor:"s-resize"},east:{paneSelector:"."+prefix+"east",size:200,resizerCursor:"e-resize"},west:{paneSelector:"."+prefix+"west",size:200,resizerCursor:"w-resize"},center:{paneSelector:"."+prefix+"center"}};var effects={slide:{all:{duration:"fast"},north:{direction:"up"},south:{direction:"down"},east:{direction:"right"},west:{direction:"left"}},drop:{all:{duration:"slow"},north:{direction:"up"},south:{direction:"down"},east:{direction:"right"},west:{direction:"left"}},scale:{all:{duration:"fast"}}};var config={allPanes:"north,south,east,west,center",borderPanes:"north,south,east,west",zIndex:{resizer_normal:1,pane_normal:2,mask:4,sliding:100,resizing:10000,animation:10000},resizers:{cssReq:{position:"absolute",padding:0,margin:0,fontSize:"1px",textAlign:"left",overflow:"hidden",zIndex:1},cssDef:{background:"#DDD",border:"none"}},togglers:{cssReq:{position:"absolute",display:"block",padding:0,margin:0,overflow:"hidden",textAlign:"center",fontSize:"1px",cursor:"pointer",zIndex:1},cssDef:{background:"#AAA"}},content:{cssReq:{overflow:"auto"},cssDef:{}},defaults:{cssReq:{position:"absolute",margin:0,zIndex:2},cssDef:{padding:"10px",background:"#FFF",border:"1px solid #BBB",overflow:"auto"}},north:{edge:"top",sizeType:"height",dir:"horz",cssReq:{top:0,bottom:"auto",left:0,right:0,width:"auto"}},south:{edge:"bottom",sizeType:"height",dir:"horz",cssReq:{top:"auto",bottom:0,left:0,right:0,width:"auto"}},east:{edge:"right",sizeType:"width",dir:"vert",cssReq:{left:"auto",right:0,top:"auto",bottom:"auto",height:"auto"}},west:{edge:"left",sizeType:"width",dir:"vert",cssReq:{left:0,right:"auto",top:"auto",bottom:"auto",height:"auto"}},center:{dir:"center",cssReq:{left:"auto",right:"auto",top:"auto",bottom:"auto",height:"auto",width:"auto"}}};var state={id:Math.floor(Math.random()*10000),container:{},north:{},south:{},east:{},west:{},center:{}};var +altEdge={top:"bottom",bottom:"top",left:"right",right:"left"},altSide={north:"south",south:"north",east:"west",west:"east"};var isStr=function(o){if(typeof o=="string")return true;else if(typeof o=="object"){try{var match=o.constructor.toString().match(/string/i);return(match!==null);}catch(e){}}return false;};var str=function(o){if(typeof o=="string"||isStr(o))return $.trim(o);else return o;};var min=function(x,y){return Math.min(x,y);};var max=function(x,y){return Math.max(x,y);};var transformData=function(d){var json={defaults:{fxSettings:{}},north:{fxSettings:{}},south:{fxSettings:{}},east:{fxSettings:{}},west:{fxSettings:{}},center:{fxSettings:{}}};d=d||{};if(d.effects||d.defaults||d.north||d.south||d.west||d.east||d.center)json=$.extend(json,d);else +$.each(d,function(key,val){a=key.split("__");json[a[1]?a[0]:"defaults"][a[1]?a[1]:a[0]]=val;});return json;};var setFlowCallback=function(action,pane,param){var +cb=action+","+pane+","+(param?1:0),cP,cbPane;$.each(c.borderPanes.split(","),function(i,p){if(c[p].isMoving){bindCallback(p);return false;}});function bindCallback(p,test){cP=c[p];if(!cP.doCallback){cP.doCallback=true;cP.callback=cb;}else{cpPane=cP.callback.split(",")[1];if(cpPane!=p&&cpPane!=pane)bindCallback(cpPane,true);}}};var execFlowCallback=function(pane){var cP=c[pane];c.isLayoutBusy=false;delete cP.isMoving;if(!cP.doCallback||!cP.callback)return;cP.doCallback=false;var +cb=cP.callback.split(","),param=(cb[2]>0?true:false);if(cb[0]=="open")open(cb[1],param);else if(cb[0]=="close")close(cb[1],param);if(!cP.doCallback)cP.callback=null;};var execUserCallback=function(pane,v_fn){if(!v_fn)return;var fn;try{if(typeof v_fn=="function")fn=v_fn;else if(typeof v_fn!="string")return;else if(v_fn.indexOf(",")>0){var +args=v_fn.split(","),fn=eval(args[0]);if(typeof fn=="function"&&args.length>1)return fn(args[1]);}else +fn=eval(v_fn);if(typeof fn=="function")return fn(pane,$Ps[pane],$.extend({},state[pane]),$.extend({},options[pane]),options.name);}catch(ex){}};var cssNum=function($E,prop){var +val=0,hidden=false,visibility="";if(!$.browser.msie){if($.curCSS($E[0],"display",true)=="none"){hidden=true;visibility=$.curCSS($E[0],"visibility",true);$E.css({display:"block",visibility:"hidden"});}}val=parseInt($.curCSS($E[0],prop,true),10)||0;if(hidden){$E.css({display:"none"});if(visibility&&visibility!="hidden")$E.css({visibility:visibility});}return val;};var cssW=function(e,outerWidth){var $E;if(isStr(e)){e=str(e);$E=$Ps[e];}else +$E=$(e);if(outerWidth<=0)return 0;else if(!(outerWidth>0))outerWidth=isStr(e)?getPaneSize(e):$E.outerWidth();if(!$.boxModel)return outerWidth;else +return outerWidth +-cssNum($E,"paddingLeft")-cssNum($E,"paddingRight")-($.curCSS($E[0],"borderLeftStyle",true)=="none"?0:cssNum($E,"borderLeftWidth"))-($.curCSS($E[0],"borderRightStyle",true)=="none"?0:cssNum($E,"borderRightWidth"));};var cssH=function(e,outerHeight){var $E;if(isStr(e)){e=str(e);$E=$Ps[e];}else +$E=$(e);if(outerHeight<=0)return 0;else if(!(outerHeight>0))outerHeight=(isStr(e))?getPaneSize(e):$E.outerHeight();if(!$.boxModel)return outerHeight;else +return outerHeight +-cssNum($E,"paddingTop")-cssNum($E,"paddingBottom")-($.curCSS($E[0],"borderTopStyle",true)=="none"?0:cssNum($E,"borderTopWidth"))-($.curCSS($E[0],"borderBottomStyle",true)=="none"?0:cssNum($E,"borderBottomWidth"));};var cssSize=function(pane,outerSize){if(c[pane].dir=="horz")return cssH(pane,outerSize);else +return cssW(pane,outerSize);};var getPaneSize=function(pane,inclSpace){var +$P=$Ps[pane],o=options[pane],s=state[pane],oSp=(inclSpace?o.spacing_open:0),cSp=(inclSpace?o.spacing_closed:0);if(!$P||s.isHidden)return 0;else if(s.isClosed||(s.isSliding&&inclSpace))return cSp;else if(c[pane].dir=="horz")return $P.outerHeight()+oSp;else +return $P.outerWidth()+oSp;};var setPaneMinMaxSizes=function(pane){var +d=cDims,edge=c[pane].edge,dir=c[pane].dir,o=options[pane],s=state[pane],$P=$Ps[pane],$altPane=$Ps[altSide[pane]],paneSpacing=o.spacing_open,altPaneSpacing=options[altSide[pane]].spacing_open,altPaneSize=(!$altPane?0:(dir=="horz"?$altPane.outerHeight():$altPane.outerWidth())),containerSize=(dir=="horz"?d.innerHeight:d.innerWidth),limitSize=containerSize-paneSpacing-altPaneSize-altPaneSpacing,minSize=s.minSize||0,maxSize=Math.min(s.maxSize||9999,limitSize),minPos,maxPos;switch(pane){case"north":minPos=d.offsetTop+minSize;maxPos=d.offsetTop+maxSize;break;case"west":minPos=d.offsetLeft+minSize;maxPos=d.offsetLeft+maxSize;break;case"south":minPos=d.offsetTop+d.innerHeight-maxSize;maxPos=d.offsetTop+d.innerHeight-minSize;break;case"east":minPos=d.offsetLeft+d.innerWidth-maxSize;maxPos=d.offsetLeft+d.innerWidth-minSize;break;}$.extend(s,{minSize:minSize,maxSize:maxSize,minPosition:minPos,maxPosition:maxPos});};var getPaneDims=function(){var d={top:getPaneSize("north",true),bottom:getPaneSize("south",true),left:getPaneSize("west",true),right:getPaneSize("east",true),width:0,height:0};with(d){width=cDims.innerWidth-left-right;height=cDims.innerHeight-bottom-top;top+=cDims.top;bottom+=cDims.bottom;left+=cDims.left;right+=cDims.right;}return d;};var getElemDims=function($E){var +d={},e,b,p;$.each("Left,Right,Top,Bottom".split(","),function(){e=str(this);b=d["border"+e]=cssNum($E,"border"+e+"Width");p=d["padding"+e]=cssNum($E,"padding"+e);d["offset"+e]=b+p;if($E==$Container)d[e.toLowerCase()]=($.boxModel?p:0);});d.innerWidth=d.outerWidth=$E.outerWidth();d.innerHeight=d.outerHeight=$E.outerHeight();if($.boxModel){d.innerWidth-=(d.offsetLeft+d.offsetRight);d.innerHeight-=(d.offsetTop+d.offsetBottom);}return d;};var setTimer=function(pane,action,fn,ms){var +Layout=window.layout=window.layout||{},Timers=Layout.timers=Layout.timers||{},name="layout_"+state.id+"_"+pane+"_"+action;if(Timers[name])return;else Timers[name]=setTimeout(fn,ms);};var clearTimer=function(pane,action){var +Layout=window.layout=window.layout||{},Timers=Layout.timers=Layout.timers||{},name="layout_"+state.id+"_"+pane+"_"+action;if(Timers[name]){clearTimeout(Timers[name]);delete Timers[name];return true;}else +return false;};var create=function(){initOptions();initContainer();initPanes();initHandles();initResizable();sizeContent("all");if(options.scrollToBookmarkOnLoad)with(self.location)if(hash)replace(hash);initHotkeys();$(window).resize(function(){var timerID="timerLayout_"+state.id;if(window[timerID])clearTimeout(window[timerID]);window[timerID]=null;if(true||$.browser.msie)window[timerID]=setTimeout(resizeAll,100);else +resizeAll();});};var initContainer=function(){try{if($Container[0].tagName=="BODY"){$("html").css({height:"100%",overflow:"hidden"});$("body").css({position:"relative",height:"100%",overflow:"hidden",margin:0,padding:0,border:"none"});}else{var +CSS={overflow:"hidden"},p=$Container.css("position"),h=$Container.css("height");if(!$Container.hasClass("ui-layout-pane")){if(!p||"fixed,absolute,relative".indexOf(p)<0)CSS.position="relative";if(!h||h=="auto")CSS.height="100%";}$Container.css(CSS);}}catch(ex){}cDims=state.container=getElemDims($Container);};var initHotkeys=function(){$.each(c.borderPanes.split(","),function(i,pane){var o=options[pane];if(o.enableCursorHotkey||o.customHotkey){$(document).keydown(keyDown);return false;}});};var initOptions=function(){opts=transformData(opts);if(opts.effects){$.extend(effects,opts.effects);delete opts.effects;}$.each("name,scrollToBookmarkOnLoad".split(","),function(idx,key){if(opts[key]!==undefined)options[key]=opts[key];else if(opts.defaults[key]!==undefined){options[key]=opts.defaults[key];delete opts.defaults[key];}});$.each("paneSelector,resizerCursor,customHotkey".split(","),function(idx,key){delete opts.defaults[key];});$.extend(options.defaults,opts.defaults);c.center=$.extend(true,{},c.defaults,c.center);$.extend(options.center,opts.center);var o_Center=$.extend(true,{},options.defaults,opts.defaults,options.center);$.each("paneClass,contentSelector,contentIgnoreSelector,applyDefaultStyles,showOverflowOnHover".split(","),function(idx,key){options.center[key]=o_Center[key];});var defs=options.defaults;$.each(c.borderPanes.split(","),function(i,pane){c[pane]=$.extend(true,{},c.defaults,c[pane]);o=options[pane]=$.extend(true,{},options.defaults,options[pane],opts.defaults,opts[pane]);if(!o.paneClass)o.paneClass=defaults.paneClass;if(!o.resizerClass)o.resizerClass=defaults.resizerClass;if(!o.togglerClass)o.togglerClass=defaults.togglerClass;$.each(["_open","_close",""],function(i,n){var +sName="fxName"+n,sSpeed="fxSpeed"+n,sSettings="fxSettings"+n;o[sName]=opts[pane][sName]||opts[pane].fxName||opts.defaults[sName]||opts.defaults.fxName||o[sName]||o.fxName||defs[sName]||defs.fxName||"none";var fxName=o[sName];if(fxName=="none"||!$.effects||!$.effects[fxName]||(!effects[fxName]&&!o[sSettings]&&!o.fxSettings))fxName=o[sName]="none";var +fx=effects[fxName]||{},fx_all=fx.all||{},fx_pane=fx[pane]||{};o[sSettings]=$.extend({},fx_all,fx_pane,defs.fxSettings||{},defs[sSettings]||{},o.fxSettings,o[sSettings],opts.defaults.fxSettings,opts.defaults[sSettings]||{},opts[pane].fxSettings,opts[pane][sSettings]||{});o[sSpeed]=opts[pane][sSpeed]||opts[pane].fxSpeed||opts.defaults[sSpeed]||opts.defaults.fxSpeed||o[sSpeed]||o[sSettings].duration||o.fxSpeed||o.fxSettings.duration||defs.fxSpeed||defs.fxSettings.duration||fx_pane.duration||fx_all.duration||"normal";});});};var initPanes=function(){$.each(c.allPanes.split(","),function(){var +pane=str(this),o=options[pane],s=state[pane],fx=s.fx,dir=c[pane].dir,size=o.size=="auto"||isNaN(o.size)?0:o.size,minSize=o.minSize||1,maxSize=o.maxSize||9999,spacing=o.spacing_open||0,sel=o.paneSelector,isIE6=($.browser.msie&&$.browser.version<7),CSS={},$P,$C;$Cs[pane]=false;if(sel.substr(0,1)==="#")$P=$Ps[pane]=$Container.find(sel+":first");else{$P=$Ps[pane]=$Container.children(sel+":first");if(!$P.length)$P=$Ps[pane]=$Container.children("form:first").children(sel+":first");}if(!$P.length){$Ps[pane]=false;return true;}$P.attr("pane",pane).addClass(o.paneClass+" "+o.paneClass+"-"+pane);if(pane!="center"){s.isClosed=false;s.isSliding=false;s.isResizing=false;s.isHidden=false;s.noRoom=false;c[pane].pins=[];}CSS=$.extend({visibility:"visible",display:"block"},c.defaults.cssReq,c[pane].cssReq);if(o.applyDefaultStyles)$.extend(CSS,c.defaults.cssDef,c[pane].cssDef);$P.css(CSS);CSS={};switch(pane){case"north":CSS.top=cDims.top;CSS.left=cDims.left;CSS.right=cDims.right;break;case"south":CSS.bottom=cDims.bottom;CSS.left=cDims.left;CSS.right=cDims.right;break;case"west":CSS.left=cDims.left;break;case"east":CSS.right=cDims.right;break;case"center":}if(dir=="horz"){if(size===0||size=="auto"){$P.css({height:"auto"});size=$P.outerHeight();}size=max(size,minSize);size=min(size,maxSize);size=min(size,cDims.innerHeight-spacing);CSS.height=max(1,cssH(pane,size));s.size=size;s.maxSize=maxSize;s.minSize=max(minSize,size-CSS.height+1);$P.css(CSS);}else if(dir=="vert"){if(size===0||size=="auto"){$P.css({width:"auto",float:"left"});size=$P.outerWidth();$P.css({float:"none"});}size=max(size,minSize);size=min(size,maxSize);size=min(size,cDims.innerWidth-spacing);CSS.width=max(1,cssW(pane,size));s.size=size;s.maxSize=maxSize;s.minSize=max(minSize,size-CSS.width+1);$P.css(CSS);sizeMidPanes(pane,null,true);}else if(pane=="center"){$P.css(CSS);sizeMidPanes("center",null,true);}if(o.initClosed&&o.closable){$P.hide().addClass("closed");s.isClosed=true;}else if(o.initHidden||o.initClosed){hide(pane,true);s.isHidden=true;}else +$P.addClass("open");if(o.showOverflowOnHover)$P.hover(allowOverflow,resetOverflow);if(o.contentSelector){$C=$Cs[pane]=$P.children(o.contentSelector+":first");if(!$C.length){$Cs[pane]=false;return true;}$C.css(c.content.cssReq);if(o.applyDefaultStyles)$C.css(c.content.cssDef);$P.css({overflow:"hidden"});}});};var initHandles=function(){$.each(c.borderPanes.split(","),function(){var +pane=str(this),o=options[pane],s=state[pane],rClass=o.resizerClass,tClass=o.togglerClass,$P=$Ps[pane];$Rs[pane]=false;$Ts[pane]=false;if(!$P||(!o.closable&&!o.resizable))return;var +edge=c[pane].edge,isOpen=$P.is(":visible"),spacing=(isOpen?o.spacing_open:o.spacing_closed),_pane="-"+pane,_state=(isOpen?"-open":"-closed"),$R,$T;$R=$Rs[pane]=$("");if(isOpen&&o.resizable);else if(!isOpen&&o.slidable)$R.attr("title",o.sliderTip).css("cursor",o.sliderCursor);$R.attr("id",(o.paneSelector.substr(0,1)=="#"?o.paneSelector.substr(1)+"-resizer":"")).attr("resizer",pane).css(c.resizers.cssReq).css(edge,cDims[edge]+getPaneSize(pane)).addClass(rClass+" "+rClass+_pane+" "+rClass+_state+" "+rClass+_pane+_state).appendTo($Container);if(o.applyDefaultStyles)$R.css(c.resizers.cssDef);if(o.closable){$T=$Ts[pane]=$("
    ");$T.attr("id",(o.paneSelector.substr(0,1)=="#"?o.paneSelector.substr(1)+"-toggler":"")).css(c.togglers.cssReq).attr("title",(isOpen?o.togglerTip_open:o.togglerTip_closed)).click(function(evt){toggle(pane);evt.stopPropagation();}).mouseover(function(evt){evt.stopPropagation();}).addClass(tClass+" "+tClass+_pane+" "+tClass+_state+" "+tClass+_pane+_state).appendTo($R);if(o.togglerContent_open)$(""+o.togglerContent_open+"").addClass("content content-open").css("display",s.isClosed?"none":"block").appendTo($T);if(o.togglerContent_closed)$(""+o.togglerContent_closed+"").addClass("content content-closed").css("display",s.isClosed?"block":"none").appendTo($T);if(o.applyDefaultStyles)$T.css(c.togglers.cssDef);if(!isOpen)bindStartSlidingEvent(pane,true);}});sizeHandles("all",true);};var initResizable=function(){var +draggingAvailable=(typeof $.fn.draggable=="function"),minPosition,maxPosition,edge;$.each(c.borderPanes.split(","),function(){var +pane=str(this),o=options[pane],s=state[pane];if(!draggingAvailable||!$Ps[pane]||!o.resizable){o.resizable=false;return true;}var +rClass=o.resizerClass,dragClass=rClass+"-drag",dragPaneClass=rClass+"-"+pane+"-drag",draggingClass=rClass+"-dragging",draggingPaneClass=rClass+"-"+pane+"-dragging",draggingClassSet=false,$P=$Ps[pane],$R=$Rs[pane];if(!s.isClosed)$R.attr("title",o.resizerTip).css("cursor",o.resizerCursor);$R.draggable({containment:$Container[0],axis:(c[pane].dir=="horz"?"y":"x"),delay:200,distance:1,helper:"clone",opacity:o.resizerDragOpacity,zIndex:c.zIndex.resizing,start:function(e,ui){if(false===execUserCallback(pane,o.onresize_start))return false;s.isResizing=true;clearTimer(pane,"closeSlider");$R.addClass(dragClass+" "+dragPaneClass);draggingClassSet=false;var resizerWidth=(pane=="east"||pane=="south"?o.spacing_open:0);setPaneMinMaxSizes(pane);s.minPosition-=resizerWidth;s.maxPosition-=resizerWidth;edge=(c[pane].dir=="horz"?"top":"left");$(o.maskIframesOnResize===true?"iframe":o.maskIframesOnResize).each(function(){$('
    ').css({background:"#fff",opacity:"0.001",zIndex:9,position:"absolute",width:this.offsetWidth+"px",height:this.offsetHeight+"px"}).css($(this).offset()).appendTo(this.parentNode);});},drag:function(e,ui){if(!draggingClassSet){$(".ui-draggable-dragging").addClass(draggingClass+" "+draggingPaneClass).children().css("visibility","hidden");draggingClassSet=true;if(s.isSliding)$Ps[pane].css("zIndex",c.zIndex.sliding);}if(ui.position[edge]s.maxPosition)ui.position[edge]=s.maxPosition;},stop:function(e,ui){var +dragPos=ui.position,resizerPos,newSize;$R.removeClass(dragClass+" "+dragPaneClass);switch(pane){case"north":resizerPos=dragPos.top;break;case"west":resizerPos=dragPos.left;break;case"south":resizerPos=cDims.outerHeight-dragPos.top-$R.outerHeight();break;case"east":resizerPos=cDims.outerWidth-dragPos.left-$R.outerWidth();break;}newSize=resizerPos-cDims[c[pane].edge];sizePane(pane,newSize);$("div.ui-layout-mask").remove();s.isResizing=false;}});});};var hide=function(pane,onInit){var +o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane];if(!$P||s.isHidden)return;if(false===execUserCallback(pane,o.onhide_start))return;s.isSliding=false;if($R)$R.hide();if(onInit||s.isClosed){s.isClosed=true;s.isHidden=true;$P.hide();sizeMidPanes(c[pane].dir=="horz"?"all":"center");execUserCallback(pane,o.onhide_end||o.onhide);}else{s.isHiding=true;close(pane,false);}};var show=function(pane,openPane){var +o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane];if(!$P||!s.isHidden)return;if(false===execUserCallback(pane,o.onshow_start))return;s.isSliding=false;s.isShowing=true;if($R&&o.spacing_open>0)$R.show();if(openPane===false)close(pane,true);else +open(pane);};var toggle=function(pane){var s=state[pane];if(s.isHidden)show(pane);else if(s.isClosed)open(pane);else +close(pane);};var close=function(pane,force,noAnimation){var +$P=$Ps[pane],$R=$Rs[pane],$T=$Ts[pane],o=options[pane],s=state[pane],doFX=!noAnimation&&!s.isClosed&&(o.fxName_close!="none"),edge=c[pane].edge,rClass=o.resizerClass,tClass=o.togglerClass,_pane="-"+pane,_open="-open",_sliding="-sliding",_closed="-closed",isShowing=s.isShowing,isHiding=s.isHiding;delete s.isShowing;delete s.isHiding;if(!$P||(!o.resizable&&!o.closable))return;else if(!force&&s.isClosed&&!isShowing)return;if(c.isLayoutBusy){setFlowCallback("close",pane,force);return;}if(!isShowing&&false===execUserCallback(pane,o.onclose_start))return;c[pane].isMoving=true;c.isLayoutBusy=true;s.isClosed=true;if(isHiding)s.isHidden=true;else if(isShowing)s.isHidden=false;syncPinBtns(pane,false);if(!s.isSliding)sizeMidPanes(c[pane].dir=="horz"?"all":"center");if($R){$R.css(edge,cDims[edge]).removeClass(rClass+_open+" "+rClass+_pane+_open).removeClass(rClass+_sliding+" "+rClass+_pane+_sliding).addClass(rClass+_closed+" "+rClass+_pane+_closed);if(o.resizable)$R.draggable("disable").css("cursor","default").attr("title","");if($T){$T.removeClass(tClass+_open+" "+tClass+_pane+_open).addClass(tClass+_closed+" "+tClass+_pane+_closed).attr("title",o.togglerTip_closed);}sizeHandles();}if(doFX){lockPaneForFX(pane,true);$P.hide(o.fxName_close,o.fxSettings_close,o.fxSpeed_close,function(){lockPaneForFX(pane,false);if(!s.isClosed)return;close_2();});}else{$P.hide();close_2();}function close_2(){bindStartSlidingEvent(pane,true);if(!isShowing)execUserCallback(pane,o.onclose_end||o.onclose);if(isShowing)execUserCallback(pane,o.onshow_end||o.onshow);if(isHiding)execUserCallback(pane,o.onhide_end||o.onhide);execFlowCallback(pane);}};var open=function(pane,slide,noAnimation){var +$P=$Ps[pane],$R=$Rs[pane],$T=$Ts[pane],o=options[pane],s=state[pane],doFX=!noAnimation&&s.isClosed&&(o.fxName_open!="none"),edge=c[pane].edge,rClass=o.resizerClass,tClass=o.togglerClass,_pane="-"+pane,_open="-open",_closed="-closed",_sliding="-sliding",isShowing=s.isShowing;delete s.isShowing;if(!$P||(!o.resizable&&!o.closable))return;else if(!s.isClosed&&!s.isSliding)return;if(s.isHidden&&!isShowing){show(pane,true);return;}if(c.isLayoutBusy){setFlowCallback("open",pane,slide);return;}if(false===execUserCallback(pane,o.onopen_start))return;c[pane].isMoving=true;c.isLayoutBusy=true;if(s.isSliding&&!slide)bindStopSlidingEvents(pane,false);s.isClosed=false;if(isShowing)s.isHidden=false;setPaneMinMaxSizes(pane);if(s.size>s.maxSize)$P.css(c[pane].sizeType,max(1,cssSize(pane,s.maxSize)));bindStartSlidingEvent(pane,false);if(doFX){lockPaneForFX(pane,true);$P.show(o.fxName_open,o.fxSettings_open,o.fxSpeed_open,function(){lockPaneForFX(pane,false);if(s.isClosed)return;open_2();});}else{$P.show();open_2();}function open_2(){if(!s.isSliding)sizeMidPanes(c[pane].dir=="vert"?"center":"all");if($R){$R.css(edge,cDims[edge]+getPaneSize(pane)).removeClass(rClass+_closed+" "+rClass+_pane+_closed).addClass(rClass+_open+" "+rClass+_pane+_open).addClass(!s.isSliding?"":rClass+_sliding+" "+rClass+_pane+_sliding);if(o.resizable)$R.draggable("enable").css("cursor",o.resizerCursor).attr("title",o.resizerTip);else +$R.css("cursor","default");if($T){$T.removeClass(tClass+_closed+" "+tClass+_pane+_closed).addClass(tClass+_open+" "+tClass+_pane+_open).attr("title",o.togglerTip_open);}sizeHandles("all");}sizeContent(pane);syncPinBtns(pane,!s.isSliding);execUserCallback(pane,o.onopen_end||o.onopen);if(isShowing)execUserCallback(pane,o.onshow_end||o.onshow);execFlowCallback(pane);}};var lockPaneForFX=function(pane,doLock){var $P=$Ps[pane];if(doLock){$P.css({zIndex:c.zIndex.animation});if(pane=="south")$P.css({top:cDims.top+cDims.innerHeight-$P.outerHeight()});else if(pane=="east")$P.css({left:cDims.left+cDims.innerWidth-$P.outerWidth()});}else{if(!state[pane].isSliding)$P.css({zIndex:c.zIndex.pane_normal});if(pane=="south")$P.css({top:"auto"});else if(pane=="east")$P.css({left:"auto"});}};var bindStartSlidingEvent=function(pane,enable){var +o=options[pane],$R=$Rs[pane],trigger=o.slideTrigger_open;if(!$R||!o.slidable)return;if(trigger!="click"&&trigger!="dblclick"&&trigger!="mouseover")trigger="click";$R +[enable?"bind":"unbind"](trigger,slideOpen).css("cursor",(enable?o.sliderCursor:"default")).attr("title",(enable?o.sliderTip:""));};var bindStopSlidingEvents=function(pane,enable){var +o=options[pane],s=state[pane],trigger=o.slideTrigger_close,action=(enable?"bind":"unbind"),$P=$Ps[pane],$R=$Rs[pane];s.isSliding=enable;clearTimer(pane,"closeSlider");$P.css({zIndex:(enable?c.zIndex.sliding:c.zIndex.pane_normal)});$R.css({zIndex:(enable?c.zIndex.sliding:c.zIndex.resizer_normal)});if(trigger!="click"&&trigger!="mouseout")trigger="mouseout";if(enable){$P.bind(trigger,slideClosed);$R.bind(trigger,slideClosed);if(trigger="mouseout"){$P.bind("mouseover",cancelMouseOut);$R.bind("mouseover",cancelMouseOut);}}else{$P.unbind(trigger);$R.unbind(trigger);if(trigger="mouseout"){$P.unbind("mouseover");$R.unbind("mouseover");clearTimer(pane,"closeSlider");}}function cancelMouseOut(evt){clearTimer(pane,"closeSlider");evt.stopPropagation();}};var slideOpen=function(){var pane=$(this).attr("resizer");if(state[pane].isClosed){bindStopSlidingEvents(pane,true);open(pane,true);}};var slideClosed=function(){var +$E=$(this),pane=$E.attr("pane")||$E.attr("resizer"),o=options[pane],s=state[pane];if(s.isClosed||s.isResizing)return;else if(o.slideTrigger_close=="click")close_NOW();else +setTimer(pane,"closeSlider",close_NOW,300);function close_NOW(){bindStopSlidingEvents(pane,false);if(!s.isClosed)close(pane);}};var sizePane=function(pane,size){var +edge=c[pane].edge,dir=c[pane].dir,o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane];setPaneMinMaxSizes(pane);s.minSize=max(s.minSize,o.minSize);if(o.maxSize>0)s.maxSize=min(s.maxSize,o.maxSize);size=max(size,s.minSize);size=min(size,s.maxSize);s.size=size;$R.css(edge,size+cDims[edge]);$P.css(c[pane].sizeType,max(1,cssSize(pane,size)));if(!s.isSliding)sizeMidPanes(dir=="horz"?"all":"center");sizeHandles();sizeContent(pane);execUserCallback(pane,o.onresize_end||o.onresize);};var sizeMidPanes=function(panes,overrideDims,onInit){if(!panes||panes=="all")panes="east,west,center";var d=getPaneDims();if(overrideDims)$.extend(d,overrideDims);$.each(panes.split(","),function(){if(!$Ps[this])return;var +pane=str(this),o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane],hasRoom=true,CSS={};if(pane=="center"){d=getPaneDims();CSS=$.extend({},d);CSS.width=max(1,cssW(pane,CSS.width));CSS.height=max(1,cssH(pane,CSS.height));hasRoom=(CSS.width>1&&CSS.height>1);if($.browser.msie&&(!$.boxModel||$.browser.version<7)){if($Ps.north)$Ps.north.css({width:cssW($Ps.north,cDims.innerWidth)});if($Ps.south)$Ps.south.css({width:cssW($Ps.south,cDims.innerWidth)});}}else{CSS.top=d.top;CSS.bottom=d.bottom;CSS.height=max(1,cssH(pane,d.height));hasRoom=(CSS.height>1);}if(hasRoom){$P.css(CSS);if(s.noRoom){s.noRoom=false;if(s.isHidden)return;else show(pane,!s.isClosed);}if(!onInit){sizeContent(pane);execUserCallback(pane,o.onresize_end||o.onresize);}}else if(!s.noRoom){s.noRoom=true;if(s.isHidden)return;if(onInit){$P.hide();if($R)$R.hide();}else hide(pane);}});};var sizeContent=function(panes){if(!panes||panes=="all")panes=c.allPanes;$.each(panes.split(","),function(){if(!$Cs[this])return;var +pane=str(this),ignore=options[pane].contentIgnoreSelector,$P=$Ps[pane],$C=$Cs[pane],e_C=$C[0],height=cssH($P);;$P.children().each(function(){if(this==e_C)return;var $E=$(this);if(!ignore||!$E.is(ignore))height-=$E.outerHeight();});if(height>0)height=cssH($C,height);if(height<1)$C.hide();else +$C.css({height:height}).show();});};var sizeHandles=function(panes,onInit){if(!panes||panes=="all")panes=c.borderPanes;$.each(panes.split(","),function(){var +pane=str(this),o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane],$T=$Ts[pane];if(!$P||!$R||(!o.resizable&&!o.closable))return;var +dir=c[pane].dir,_state=(s.isClosed?"_closed":"_open"),spacing=o["spacing"+_state],togAlign=o["togglerAlign"+_state],togLen=o["togglerLength"+_state],paneLen,offset,CSS={};if(spacing==0){$R.hide();return;}else if(!s.noRoom&&!s.isHidden)$R.show();if(dir=="horz"){paneLen=$P.outerWidth();$R.css({width:max(1,cssW($R,paneLen)),height:max(1,cssH($R,spacing)),left:cssNum($P,"left")});}else{paneLen=$P.outerHeight();$R.css({height:max(1,cssH($R,paneLen)),width:max(1,cssW($R,spacing)),top:cDims.top+getPaneSize("north",true)});}if($T){if(togLen==0||(s.isSliding&&o.hideTogglerOnSlide)){$T.hide();return;}else +$T.show();if(!(togLen>0)||togLen=="100%"||togLen>paneLen){togLen=paneLen;offset=0;}else{if(typeof togAlign=="string"){switch(togAlign){case"top":case"left":offset=0;break;case"bottom":case"right":offset=paneLen-togLen;break;case"middle":case"center":default:offset=Math.floor((paneLen-togLen)/2);}}else{var x=parseInt(togAlign);if(togAlign>=0)offset=x;else offset=paneLen-togLen+x;}}var +$TC_o=(o.togglerContent_open?$T.children(".content-open"):false),$TC_c=(o.togglerContent_closed?$T.children(".content-closed"):false),$TC=(s.isClosed?$TC_c:$TC_o);if($TC_o)$TC_o.css("display",s.isClosed?"none":"block");if($TC_c)$TC_c.css("display",s.isClosed?"block":"none");if(dir=="horz"){var width=cssW($T,togLen);$T.css({width:max(0,width),height:max(1,cssH($T,spacing)),left:offset});if($TC)$TC.css("marginLeft",Math.floor((width-$TC.outerWidth())/2));}else{var height=cssH($T,togLen);$T.css({height:max(0,height),width:max(1,cssW($T,spacing)),top:offset});if($TC)$TC.css("marginTop",Math.floor((height-$TC.outerHeight())/2));}}if(onInit&&o.initHidden){$R.hide();if($T)$T.hide();}});};var resizeAll=function(){var +oldW=cDims.innerWidth,oldH=cDims.innerHeight;cDims=state.container=getElemDims($Container);var +checkH=(cDims.innerHeights.maxSize)sizePane(pane,s.maxSize);}});sizeMidPanes("all");sizeHandles("all");};function keyDown(evt){if(!evt)return true;var code=evt.keyCode;if(code<33)return true;var +PANE={38:"north",40:"south",37:"west",39:"east"},isCursorKey=(code>=37&&code<=40),ALT=evt.altKey,SHIFT=evt.shiftKey,CTRL=evt.ctrlKey,pane=false,s,o,k,m,el;if(!CTRL&&!SHIFT)return true;else if(isCursorKey&&options[PANE[code]].enableCursorHotkey)pane=PANE[code];else +$.each(c.borderPanes.split(","),function(i,p){o=options[p];k=o.customHotkey;m=o.customHotkeyModifier;if((SHIFT&&m=="SHIFT")||(CTRL&&m=="CTRL")||(CTRL&&SHIFT)){if(k&&code==(isNaN(k)||k<=9?k.toUpperCase().charCodeAt(0):k)){pane=p;return false;}}});if(!pane)return true;o=options[pane];s=state[pane];if(!o.enableCursorHotkey||s.isHidden||!$Ps[pane])return true;el=evt.target||evt.srcElement;if(el&&SHIFT&&isCursorKey&&(el.tagName=="TEXTAREA"||(el.tagName=="INPUT"&&(code==37||code==39))))return true;toggle(pane);evt.stopPropagation();evt.returnValue=false;return false;};function allowOverflow(elem){if(this&&this.tagName)elem=this;var $P;if(typeof elem=="string")$P=$Ps[elem];else{if($(elem).attr("pane"))$P=$(elem);else $P=$(elem).parents("div[pane]:first");}if(!$P.length)return;var +pane=$P.attr("pane"),s=state[pane];if(s.cssSaved)resetOverflow(pane);if(s.isSliding||s.isResizing||s.isClosed){s.cssSaved=false;return;}var +newCSS={zIndex:(c.zIndex.pane_normal+1)},curCSS={},of=$P.css("overflow"),ofX=$P.css("overflowX"),ofY=$P.css("overflowY");if(of!="visible"){curCSS.overflow=of;newCSS.overflow="visible";}if(ofX&&ofX!="visible"&&ofX!="auto"){curCSS.overflowX=ofX;newCSS.overflowX="visible";}if(ofY&&ofY!="visible"&&ofY!="auto"){curCSS.overflowY=ofX;newCSS.overflowY="visible";}s.cssSaved=curCSS;$P.css(newCSS);$.each(c.allPanes.split(","),function(i,p){if(p!=pane)resetOverflow(p);});};function resetOverflow(elem){if(this&&this.tagName)elem=this;var $P;if(typeof elem=="string")$P=$Ps[elem];else{if($(elem).hasClass("ui-layout-pane"))$P=$(elem);else $P=$(elem).parents("div[pane]:first");}if(!$P.length)return;var +pane=$P.attr("pane"),s=state[pane],CSS=s.cssSaved||{};if(!s.isSliding&&!s.isResizing)$P.css("zIndex",c.zIndex.pane_normal);$P.css(CSS);s.cssSaved=false;};function getBtn(selector,pane,action){var +$E=$(selector),err="Error Adding Button \n\nInvalid ";if(!$E.length)alert(err+"selector: "+selector);else if(c.borderPanes.indexOf(pane)==-1)alert(err+"pane: "+pane);else{var btn=options[pane].buttonClass+"-"+action;$E.addClass(btn+" "+btn+"-"+pane);return $E;}return false;};function addToggleBtn(selector,pane){var $E=getBtn(selector,pane,"toggle");if($E)$E.attr("title",state[pane].isClosed?"Open":"Close").click(function(evt){toggle(pane);evt.stopPropagation();});};function addOpenBtn(selector,pane){var $E=getBtn(selector,pane,"open");if($E)$E.attr("title","Open").click(function(evt){open(pane);evt.stopPropagation();});};function addCloseBtn(selector,pane){var $E=getBtn(selector,pane,"close");if($E)$E.attr("title","Close").click(function(evt){close(pane);evt.stopPropagation();});};function addPinBtn(selector,pane){var $E=getBtn(selector,pane,"pin");if($E){var s=state[pane];$E.click(function(evt){setPinState($(this),pane,(s.isSliding||s.isClosed));if(s.isSliding||s.isClosed)open(pane);else close(pane);evt.stopPropagation();});setPinState($E,pane,(!s.isClosed&&!s.isSliding));c[pane].pins.push(selector);}};function syncPinBtns(pane,doPin){$.each(c[pane].pins,function(i,selector){setPinState($(selector),pane,doPin);});};function setPinState($Pin,pane,doPin){var updown=$Pin.attr("pin");if(updown&&doPin==(updown=="down"))return;var +root=options[pane].buttonClass,class1=root+"-pin",class2=class1+"-"+pane,UP1=class1+"-up",UP2=class2+"-up",DN1=class1+"-down",DN2=class2+"-down";$Pin.attr("pin",doPin?"down":"up").attr("title",doPin?"Un-Pin":"Pin").removeClass(doPin?UP1:DN1).removeClass(doPin?UP2:DN2).addClass(doPin?DN1:UP1).addClass(doPin?DN2:UP2);};var +$Container=$(this).css({overflow:"hidden"}),$Ps={},$Cs={},$Rs={},$Ts={},c=config,cDims=state.container;create();return{options:options,state:state,panes:$Ps,toggle:toggle,open:open,close:close,hide:hide,show:show,resizeContent:sizeContent,sizePane:sizePane,resizeAll:resizeAll,addToggleBtn:addToggleBtn,addOpenBtn:addOpenBtn,addCloseBtn:addCloseBtn,addPinBtn:addPinBtn,allowOverflow:allowOverflow,resetOverflow:resetOverflow,cssWidth:cssW,cssHeight:cssH};}})(jQuery); + + +// jqgrid.locale-en.js +(function(a){a.jgrid={defaults:{recordtext:"View {0} - {1} of {2}",emptyrecords:"No records to view",loadtext:"Loading...",pgtext:"Page {0} of {1}"},search:{caption:"Search...",Find:"Find",Reset:"Reset",odata:["equal","not equal","less","less or equal","greater","greater or equal","begins with","does not begin with","is in","is not in","ends with","does not end with","contains","does not contain"],groupOps:[{op:"AND",text:"all"},{op:"OR",text:"any"}],matchText:" match",rulesText:" rules"},edit:{addCaption:"Add Record",editCaption:"Edit Record",bSubmit:"Submit",bCancel:"Cancel",bClose:"Close",saveData:"Data has been changed! Save changes?",bYes:"Yes",bNo:"No",bExit:"Cancel",msg:{required:"Field is required",number:"Please, enter valid number",minValue:"value must be greater than or equal to ",maxValue:"value must be less than or equal to",email:"is not a valid e-mail",integer:"Please, enter valid integer value",date:"Please, enter valid date value",url:"is not a valid URL. Prefix required ('http://' or 'https://')",nodefined:" is not defined!",novalue:" return value is required!",customarray:"Custom function should return array!",customfcheck:"Custom function should be present in case of custom checking!"}},view:{caption:"View Record",bClose:"Close"},del:{caption:"Delete",msg:"Delete selected record(s)?",bSubmit:"Delete",bCancel:"Cancel"},nav:{edittext:"",edittitle:"Edit selected row",addtext:"",addtitle:"Add new row",deltext:"",deltitle:"Delete selected row",searchtext:"",searchtitle:"Find records",refreshtext:"",refreshtitle:"Reload Grid",alertcap:"Warning",alerttext:"Please, select row",viewtext:"",viewtitle:"View selected row"},col:{caption:"Select columns",bSubmit:"Ok",bCancel:"Cancel"},errors:{errcap:"Error",nourl:"No url is set",norecords:"No records to process",model:"Length of colNames <> colModel!"},formatter:{integer:{thousandsSeparator:" ",defaultValue:"0"},number:{decimalSeparator:".",thousandsSeparator:" ",decimalPlaces:2,defaultValue:"0.00"},currency:{decimalSeparator:".",thousandsSeparator:" ",decimalPlaces:2,prefix:"",suffix:"",defaultValue:"0.00"},date:{dayNames:["Sun","Mon","Tue","Wed","Thr","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],AmPm:["am","pm","AM","PM"],S:function(b){return b<11||b>13?["st","nd","rd","th"][Math.min((b-1)%10,3)]:"th"},srcformat:"Y-m-d",newformat:"d/m/Y",masks:{ISO8601Long:"Y-m-d H:i:s",ISO8601Short:"Y-m-d",ShortDate:"n/j/Y",LongDate:"l, F d, Y",FullDateTime:"l, F d, Y g:i:s A",MonthDay:"F d",ShortTime:"g:i A",LongTime:"g:i:s A",SortableDateTime:"Y-m-d\\TH:i:s",UniversalSortableDateTime:"Y-m-d H:i:sO",YearMonth:"F, Y"},reformatAfterEdit:false},baseLinkUrl:"",showAction:"",target:"",checkbox:{disabled:true},idName:"id"}}})(jQuery); + + +/* +* jqGrid 3.6.1 - jQuery Grid +* Copyright (c) 2008, Tony Tomov, tony@trirand.com +* Dual licensed under the MIT and GPL licenses +* http://www.opensource.org/licenses/mit-license.php +* http://www.gnu.org/licenses/gpl.html +* Date:2009-11-23 +* Modules: grid.base.js; jquery.fmatter.js; grid.custom.js; grid.common.js; grid.formedit.js; jquery.searchFilter.js; grid.inlinedit.js; grid.celledit.js; jqModal.js; jqDnR.js; grid.subgrid.js; grid.treegrid.js; grid.import.js; JsonXml.js; grid.setcolumns.js; grid.postext.js; grid.tbltogrid.js; grid.jqueryui.js; +*/ +(function($){$.jgrid=$.jgrid||{};$.extend($.jgrid,{htmlDecode:function(value){if(value==" "||value==" "||(value.length==1&&value.charCodeAt(0)==160)){return""}return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,'"')},htmlEncode:function(value){return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/])*>/gi;if(v){return v.replace(regexp,"")}else{return v}},stringToDoc:function(xmlString){var xmlDoc;if(typeof xmlString!=="string"){return xmlString}try{var parser=new DOMParser();xmlDoc=parser.parseFromString(xmlString,"text/xml")}catch(e){xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async=false;xmlDoc.loadXML(xmlString)}return(xmlDoc&&xmlDoc.documentElement&&xmlDoc.documentElement.tagName!="parsererror")?xmlDoc:null},parse:function(jsonString){var js=jsonString,msg;if(js.substr(0,9)=="while(1);"){js=js.substr(9)}if(js.substr(0,2)=="/*"){js=js.substr(2,js.length-4)}if(!js){js="{}"}($.jgrid.useJSON===true&&typeof(JSON)==="object"&&typeof(JSON.parse)==="function")?msg=JSON.parse(js):msg=eval("("+js+")");return msg.hasOwnProperty("d")?msg.d:msg},empty:function(){while(this.firstChild){this.removeChild(this.firstChild)}},jqID:function(sid){sid=sid+"";return sid.replace(/([\.\:\[\]])/g,"\\$1")},ajaxOptions:{},extend:function(methods){$.extend($.fn.jqGrid,methods);if(!this.no_legacy_api){$.fn.extend(methods)}}});$.fn.jqGrid=function(pin){if(typeof pin=="string"){var fn=$.fn.jqGrid[pin];if(!fn){throw ("jqGrid - No such method: "+pin)}var args=$.makeArray(arguments).slice(1);return fn.apply(this,args)}return this.each(function(){if(this.grid){return}var p=$.extend(true,{url:"",height:150,page:1,rowNum:20,records:0,pager:"",pgbuttons:true,pginput:true,colModel:[],rowList:[],colNames:[],sortorder:"asc",sortname:"",datatype:"xml",mtype:"GET",altRows:false,selarrrow:[],savedRow:[],shrinkToFit:true,xmlReader:{},jsonReader:{},subGrid:false,subGridModel:[],reccount:0,lastpage:0,lastsort:0,selrow:null,beforeSelectRow:null,onSelectRow:null,onSortCol:null,ondblClickRow:null,onRightClickRow:null,onPaging:null,onSelectAll:null,loadComplete:null,gridComplete:null,loadError:null,loadBeforeSend:null,afterInsertRow:null,beforeRequest:null,onHeaderClick:null,viewrecords:false,loadonce:false,multiselect:false,multikey:false,editurl:null,search:false,caption:"",hidegrid:true,hiddengrid:false,postData:{},userData:{},treeGrid:false,treeGridModel:"nested",treeReader:{},treeANode:-1,ExpandColumn:null,tree_root_level:0,prmNames:{page:"page",rows:"rows",sort:"sidx",order:"sord",search:"_search",nd:"nd"},forceFit:false,gridstate:"visible",cellEdit:false,cellsubmit:"remote",nv:0,loadui:"enable",toolbar:[false,""],scroll:false,multiboxonly:false,deselectAfterSort:true,scrollrows:false,autowidth:false,scrollOffset:18,cellLayout:5,subGridWidth:20,multiselectWidth:20,gridview:false,rownumWidth:25,rownumbers:false,pagerpos:"center",recordpos:"right",footerrow:false,userDataOnFooter:false,hoverrows:true,altclass:"ui-priority-secondary",viewsortcols:[false,"vertical",true],resizeclass:"",autoencode:false,remapColumns:[],ajaxGridOptions:{},direction:"ltr"},$.jgrid.defaults,pin||{});var grid={headers:[],cols:[],footers:[],dragStart:function(i,x,y){this.resizing={idx:i,startX:x.clientX,sOL:y[0]};this.hDiv.style.cursor="col-resize";this.curGbox=$("#rs_m"+p.id,"#gbox_"+p.id);this.curGbox.css({display:"block",left:y[0],top:y[1],height:y[2]});if($.isFunction(p.resizeStart)){p.resizeStart.call(this,x,i)}document.onselectstart=new Function("return false")},dragMove:function(x){if(this.resizing){var diff=x.clientX-this.resizing.startX,h=this.headers[this.resizing.idx],newWidth=p.direction==="ltr"?h.width+diff:h.width-diff,hn,nWn;if(newWidth>33){this.curGbox.css({left:this.resizing.sOL+diff});if(p.forceFit===true){hn=this.headers[this.resizing.idx+p.nv];nWn=p.direction==="ltr"?hn.width-diff:hn.width+diff;if(nWn>33){h.newWidth=newWidth;hn.newWidth=nWn}}else{this.newWidth=p.direction==="ltr"?p.tblwidth+diff:p.tblwidth-diff;h.newWidth=newWidth}}}},dragEnd:function(){this.hDiv.style.cursor="default";if(this.resizing){var idx=this.resizing.idx,nw=this.headers[idx].newWidth||this.headers[idx].width;nw=parseInt(nw);this.resizing=false;$("#rs_m"+p.id).css("display","none");p.colModel[idx].width=nw;this.headers[idx].width=nw;this.headers[idx].el.style.width=nw+"px";if(this.cols.length>0){this.cols[idx].style.width=nw+"px"}if(this.footers.length>0){this.footers[idx].style.width=nw+"px"}if(p.forceFit===true){nw=this.headers[idx+p.nv].newWidth||this.headers[idx+p.nv].width;this.headers[idx+p.nv].width=nw;this.headers[idx+p.nv].el.style.width=nw+"px";if(this.cols.length>0){this.cols[idx+p.nv].style.width=nw+"px"}if(this.footers.length>0){this.footers[idx+p.nv].style.width=nw+"px"}p.colModel[idx+p.nv].width=nw}else{p.tblwidth=this.newWidth||p.tblwidth;$("table:first",this.bDiv).css("width",p.tblwidth+"px");$("table:first",this.hDiv).css("width",p.tblwidth+"px");this.hDiv.scrollLeft=this.bDiv.scrollLeft;if(p.footerrow){$("table:first",this.sDiv).css("width",p.tblwidth+"px");this.sDiv.scrollLeft=this.bDiv.scrollLeft}}if($.isFunction(p.resizeStop)){p.resizeStop.call(this,nw,idx)}}this.curGbox=null;document.onselectstart=new Function("return true")},populateVisible:function(){if(grid.timer){clearTimeout(grid.timer)}grid.timer=null;var dh=$(grid.bDiv).height();if(!dh){return}var table=$("table:first",grid.bDiv);var rows=$("> tbody > tr:visible:first",table);var rh=rows.outerHeight()||grid.prevRowHeight;if(!rh){return}grid.prevRowHeight=rh;var rn=p.rowNum;if(rn<10){rn=parseInt(dh/rh)+1<<1;if(rn<10){rn=10}p.rowNum=rn}var scrollTop=grid.scrollTop=grid.bDiv.scrollTop;var ttop=Math.round(table.position().top)-scrollTop;var tbot=ttop+table.height();var div=rh*rn;var page,npage,empty;if(ttop<=0&&tbot=0||npage<2||p.scroll===true){page=parseInt((tbot+scrollTop)/div)+1;ttop=-1}else{ttop=1}}if(ttop>0){page=parseInt(scrollTop/div)+1;npage=parseInt((scrollTop+dh)/div)+2-page;empty=true}if(npage){if(p.lastpage&&page>p.lastpage){return}if(grid.hDiv.loading){grid.timer=setTimeout(grid.populateVisible,200)}else{p.page=page;if(empty){grid.selectionPreserver(table[0]);grid.emptyRows(grid.bDiv)}grid.populate(npage)}}},scrollGrid:function(){if(p.scroll){var scrollTop=grid.bDiv.scrollTop;if(scrollTop!=grid.scrollTop){grid.scrollTop=scrollTop;if(grid.timer){clearTimeout(grid.timer)}grid.timer=setTimeout(grid.populateVisible,200)}}grid.hDiv.scrollLeft=grid.bDiv.scrollLeft;if(p.footerrow){grid.sDiv.scrollLeft=grid.bDiv.scrollLeft}},selectionPreserver:function(ts){var p=ts.p;var sr=p.selrow,sra=p.selarrrow?$.makeArray(p.selarrrow):null;var left=ts.grid.bDiv.scrollLeft;var complete=p.gridComplete;p.gridComplete=function(){p.selrow=null;p.selarrrow=[];if(p.multiselect&&sra&&sra.length>0){for(var i=0;i
    "),ii,isMSIE=$.browser.msie?true:false,isSafari=$.browser.safari?true:false;ts=this;ts.p.direction=$.trim(ts.p.direction.toLowerCase());if($.inArray(ts.p.direction,["ltr","rtl"])==-1){ts.p.direction="ltr"}dir=ts.p.direction;$(gv).insertBefore(this);$(this).appendTo(gv).removeClass("scroll");var eg=$("
    ");$(eg).insertBefore(gv).attr({id:"gbox_"+this.id,dir:dir});$(gv).appendTo(eg).attr("id","gview_"+this.id);if(isMSIE&&$.browser.version<=6){ii=''}else{ii=""}$("
    ").append(ii).insertBefore(gv);$("
    "+this.p.loadtext+"
    ").insertBefore(gv);$(this).attr({cellSpacing:"0",cellPadding:"0",border:"0",role:"grid","aria-multiselectable":!!this.p.multiselect,"aria-labelledby":"gbox_"+this.id});var sortkeys=["shiftKey","altKey","ctrlKey"],IntNum=function(val,defval){val=parseInt(val,10);if(isNaN(val)){return defval?defval:0}else{return val}},formatCol=function(pos,rowInd){var ral=ts.p.colModel[pos].align,result='style="',clas=ts.p.colModel[pos].classes;if(ral){result+="text-align:"+ral+";"}if(ts.p.colModel[pos].hidden===true){result+="display:none;"}if(rowInd===0){result+="width: "+grid.headers[pos].width+"px;"}return result+'"'+(clas!==undefined?(' class="'+clas+'"'):"")},addCell=function(rowId,cell,pos,irow,srvr){var v,prp;v=formatter(rowId,cell,pos,srvr,"add");prp=formatCol(pos,irow);return''+v+""},formatter=function(rowId,cellval,colpos,rwdat,_act){var cm=ts.p.colModel[colpos],v;if(typeof cm.formatter!=="undefined"){var opts={rowId:rowId,colModel:cm};if($.isFunction(cm.formatter)){v=cm.formatter(cellval,opts,rwdat,_act)}else{if($.fmatter){v=$.fn.fmatter(cm.formatter,cellval,opts,rwdat,_act)}else{v=cellVal(cellval)}}}else{v=cellVal(cellval)}return v},cellVal=function(val){return val===undefined||val===null||val===""?" ":ts.p.autoencode?$.jgrid.htmlEncode(val+""):val+""},addMulti=function(rowid,pos,irow){var v='',prp=formatCol(pos,irow);return""+v+""},addRowNum=function(pos,irow,pG,rN){var v=(parseInt(pG)-1)*parseInt(rN)+1+irow,prp=formatCol(pos,irow);return'"+v+""},reader=function(datatype){var field,f=[],j=0,i;for(i=0;idiv:first",parent).css({height:"auto"}).children("div:first").css({height:0,display:"none"});parent.scrollTop=0}tBody=null},addXmlData=function(xml,t,rcnt,more,adjust){var startReq=new Date();ts.p.reccount=0;if($.isXMLDoc(xml)){if(ts.p.treeANode===-1&&!ts.p.scroll){emptyRows(t);rcnt=0}else{rcnt=rcnt>0?rcnt:0}}else{return}var i,fpos,ir=0,v,row,gi=0,si=0,ni=0,idn,getId,f=[],F,rd={},rl=ts.rows.length,xmlr,rid,rowData=[],ari=0,cn=(ts.p.altRows===true)?" "+ts.p.altclass:"",cn1;if(!ts.p.xmlReader.repeatitems){f=reader("xml")}if(ts.p.keyIndex===false){idn=ts.p.xmlReader.id}else{idn=ts.p.keyIndex}if(f.length>0&&!isNaN(idn)){if(ts.p.remapColumns&&ts.p.remapColumns.length){idn=$.inArray(idn,ts.p.remapColumns)}idn=f[idn]}if((idn+"").indexOf("[")===-1){if(f.length){getId=function(trow,k){return $(idn,trow).text()||k}}else{getId=function(trow,k){return $(ts.p.xmlReader.cell,trow).eq(idn).text()||k}}}else{getId=function(trow,k){return trow.getAttribute(idn.replace(/[\[\]]/g,""))||k}}$(ts.p.xmlReader.page,xml).each(function(){ts.p.page=this.textContent||this.text||1});$(ts.p.xmlReader.total,xml).each(function(){ts.p.lastpage=this.textContent||this.text||1});$(ts.p.xmlReader.records,xml).each(function(){ts.p.records=this.textContent||this.text||0});$(ts.p.xmlReader.userdata,xml).each(function(){ts.p.userData[this.getAttribute("name")]=this.textContent||this.text});var gxml=$(ts.p.xmlReader.root+" "+ts.p.xmlReader.row,xml),gl=gxml.length,j=0;if(gxml&&gl){var rn=parseInt(ts.p.rowNum),br=ts.p.scroll?(parseInt(ts.p.page)-1)*rn+1:1;if(adjust){rn*=adjust+1}var afterInsRow=$.isFunction(ts.p.afterInsertRow);while(j';if(ts.p.rownumbers===true){rowData[ari++]=addRowNum(0,j,ts.p.page,ts.p.rowNum);ni=1}if(ts.p.multiselect===true){rowData[ari++]=addMulti(rid,ni,j);gi=1}if(ts.p.subGrid===true){rowData[ari++]=$(ts).jqGrid("addSubGridCell",gi+ni,j+rcnt);si=1}if(ts.p.xmlReader.repeatitems){if(!F){F=orderedCols(gi+si+ni)}var cells=$(ts.p.xmlReader.cell,xmlr);$.each(F,function(k){var cell=cells[this];if(!cell){return false}v=cell.textContent||cell.text;rd[ts.p.colModel[k+gi+si+ni].name]=v;rowData[ari++]=addCell(rid,v,k+gi+si+ni,j+rcnt,xmlr)})}else{for(i=0;i";if(ts.p.gridview===false){if(ts.p.treeGrid===true){fpos=ts.p.treeANode>=-1?ts.p.treeANode:0;row=$(rowData.join(""))[0];try{$(ts).jqGrid("setTreeNode",rd,row)}catch(e){}rl===0?$("tbody:first",t).append(row):$(ts.rows[j+fpos+rcnt]).after(row)}else{$("tbody:first",t).append(rowData.join(""))}if(ts.p.subGrid===true){try{$(ts).jqGrid("addSubGrid",ts.rows[ts.rows.length-1],gi+ni)}catch(e){}}if(afterInsRow){ts.p.afterInsertRow.call(ts,rid,rd,xmlr)}rowData=[];ari=0}rd={};ir++;j++;if(ir==rn){break}}}if(ts.p.gridview===true){$("tbody:first",t).append(rowData.join(""))}ts.p.totaltime=new Date()-startReq;if(ir>0){ts.grid.cols=ts.rows[0].cells;if(ts.p.records===0){ts.p.records=gl}}rowData=null;if(!ts.p.treeGrid&&!ts.p.scroll){ts.grid.bDiv.scrollTop=0}ts.p.reccount=ir;ts.p.treeANode=-1;if(ts.p.userDataOnFooter){$(ts).jqGrid("footerData","set",ts.p.userData,true)}if(!more){updatepager(false,true)}},addJSONData=function(data,t,rcnt,more,adjust){var startReq=new Date();ts.p.reccount=0;if(data){if(ts.p.treeANode===-1&&!ts.p.scroll){emptyRows(t);rcnt=0}else{rcnt=rcnt>0?rcnt:0}}else{return}var ir=0,v,i,j,row,f=[],F,cur,gi=0,si=0,ni=0,len,drows,idn,rd={},fpos,rl=ts.rows.length,idr,rowData=[],ari=0,cn=(ts.p.altRows===true)?" "+ts.p.altclass:"",cn1;ts.p.page=data[ts.p.jsonReader.page]||1;ts.p.lastpage=data[ts.p.jsonReader.total]||1;ts.p.records=data[ts.p.jsonReader.records]||0;ts.p.userData=data[ts.p.jsonReader.userdata]||{};if(!ts.p.jsonReader.repeatitems){F=f=reader("json")}if(ts.p.keyIndex===false){idn=ts.p.jsonReader.id}else{idn=ts.p.keyIndex}if(f.length>0&&!isNaN(idn)){if(ts.p.remapColumns&&ts.p.remapColumns.length){idn=$.inArray(idn,ts.p.remapColumns)}idn=f[idn]}drows=data[ts.p.jsonReader.root];if(drows){len=drows.length,i=0;var rn=parseInt(ts.p.rowNum),br=ts.p.scroll?(parseInt(ts.p.page)-1)*rn+1:1;if(adjust){rn*=adjust+1}var afterInsRow=$.isFunction(ts.p.afterInsertRow);while(i';if(ts.p.rownumbers===true){rowData[ari++]=addRowNum(0,i,ts.p.page,ts.p.rowNum);ni=1}if(ts.p.multiselect){rowData[ari++]=addMulti(idr,ni,i);gi=1}if(ts.p.subGrid){rowData[ari++]=$(ts).jqGrid("addSubGridCell",gi+ni,i+rcnt);si=1}if(ts.p.jsonReader.repeatitems){if(ts.p.jsonReader.cell){cur=cur[ts.p.jsonReader.cell]}if(!F){F=orderedCols(gi+si+ni)}}for(j=0;j";if(ts.p.gridview===false){if(ts.p.treeGrid===true){fpos=ts.p.treeANode>=-1?ts.p.treeANode:0;row=$(rowData.join(""))[0];try{$(ts).jqGrid("setTreeNode",rd,row)}catch(e){}rl===0?$("tbody:first",t).append(row):$(ts.rows[i+fpos+rcnt]).after(row)}else{$("tbody:first",t).append(rowData.join(""))}if(ts.p.subGrid===true){try{$(ts).jqGrid("addSubGrid",ts.rows[ts.rows.length-1],gi+ni)}catch(e){}}if(afterInsRow){ts.p.afterInsertRow(idr,rd,cur)}rowData=[];ari=0}rd={};ir++;i++;if(ir==rn){break}}if(ts.p.gridview===true){$("tbody:first",t).append(rowData.join(""))}ts.p.totaltime=new Date()-startReq;if(ir>0){ts.grid.cols=ts.rows[0].cells;if(ts.p.records===0){ts.p.records=len}}}if(!ts.p.treeGrid&&!ts.p.scroll){ts.grid.bDiv.scrollTop=0}ts.p.reccount=ir;ts.p.treeANode=-1;if(ts.p.userDataOnFooter){$(ts).jqGrid("footerData","set",ts.p.userData,true)}if(!more){updatepager(false,true)}},updatepager=function(rn,dnd){var cp,last,base,bs,from,to,tot,fmt;base=(parseInt(ts.p.page)-1)*parseInt(ts.p.rowNum);to=base+ts.p.reccount;if(ts.p.scroll){var rows=$("tbody:first > tr",ts.grid.bDiv);base=to-rows.length;var rh=rows.outerHeight();if(rh){var top=base*rh;var height=parseInt(ts.p.records,10)*rh;$(">div:first",ts.grid.bDiv).css({height:height}).children("div:first").css({height:top,display:top?"":"none"})}}if(ts.p.pager){fmt=$.jgrid.formatter.integer||{};if(ts.p.loadonce){cp=last=1;ts.p.lastpage=ts.page=1;$(".selbox",ts.p.pager).attr("disabled",true)}else{cp=IntNum(ts.p.page);last=IntNum(ts.p.lastpage);$(".selbox",ts.p.pager).attr("disabled",false)}if(ts.p.pginput===true){$(".ui-pg-input",ts.p.pager).val(ts.p.page);$("#sp_1",ts.p.pager).html($.fmatter?$.fmatter.util.NumberFormat(ts.p.lastpage,fmt):ts.p.lastpage).width()}if(ts.p.viewrecords){if(ts.p.reccount===0){$(".ui-paging-info",ts.p.pager).html(ts.p.emptyrecords)}else{from=base+1;tot=ts.p.records;if($.fmatter){from=$.fmatter.util.NumberFormat(from,fmt);to=$.fmatter.util.NumberFormat(to,fmt);tot=$.fmatter.util.NumberFormat(tot,fmt)}$(".ui-paging-info",ts.p.pager).html($.jgrid.format(ts.p.recordtext,from,to,tot))}}if(ts.p.pgbuttons===true){if(cp<=0){cp=last=1}if(cp==1){$("#first, #prev",ts.p.pager).addClass("ui-state-disabled").removeClass("ui-state-hover")}else{$("#first, #prev",ts.p.pager).removeClass("ui-state-disabled")}if(cp==last){$("#next, #last",ts.p.pager).addClass("ui-state-disabled").removeClass("ui-state-hover")}else{$("#next, #last",ts.p.pager).removeClass("ui-state-disabled")}}}if(rn===true&&ts.p.rownumbers===true){$("td.jqgrid-rownum",ts.rows).each(function(i){$(this).html(base+1+i)})}if(dnd&&ts.p.jqgdnd){$(ts).jqGrid("gridDnD","updateDnD")}if($.isFunction(ts.p.gridComplete)){ts.p.gridComplete()}},populate=function(npage){if(!ts.grid.hDiv.loading){var pvis=ts.p.scroll&&npage==false;var prm={},dt,dstr,pN=ts.p.prmNames;if(pN.search!==null){prm[pN.search]=ts.p.search}if(pN.nd!=null){prm[pN.nd]=new Date().getTime()}if(pN.rows!==null){prm[pN.rows]=ts.p.rowNum}if(pN.page!==null){prm[pN.page]=ts.p.page}if(pN.sort!==null){prm[pN.sort]=ts.p.sortname}if(pN.order!==null){prm[pN.order]=ts.p.sortorder}var lc=ts.p.loadComplete;var lcf=$.isFunction(lc);if(!lcf){lc=null}var adjust=0;npage=npage||1;if(npage>1){if(pN.npage!=null){prm[pN.npage]=npage;adjust=npage-1;npage=1}else{lc=function(req){if(lcf){ts.p.loadComplete.call(ts,req)}ts.grid.hDiv.loading=false;ts.p.page++;populate(npage-1)}}}else{if(pN.npage!=null){delete ts.p.postData[pN.npage]}}$.extend(ts.p.postData,prm);var rcnt=!ts.p.scroll?0:ts.rows.length-1;if($.isFunction(ts.p.datatype)){ts.p.datatype(ts.p.postData,"load_"+ts.p.id);return}else{if($.isFunction(ts.p.beforeRequest)){ts.p.beforeRequest.call(ts)}}dt=ts.p.datatype.toLowerCase();switch(dt){case"json":case"jsonp":case"xml":case"script":$.ajax($.extend({url:ts.p.url,type:ts.p.mtype,dataType:dt,data:$.isFunction(ts.p.serializeGridData)?ts.p.serializeGridData(ts.p.postData):ts.p.postData,complete:function(req,st){if(st=="success"||(req.statusText=="OK"&&req.status=="200")){if(dt==="xml"){addXmlData(req.responseXML,ts.grid.bDiv,rcnt,npage>1,adjust)}else{addJSONData($.jgrid.parse(req.responseText),ts.grid.bDiv,rcnt,npage>1,adjust)}if(lc){lc.call(ts,req)}if(pvis){ts.grid.populateVisible()}}req=null;endReq()},error:function(xhr,st,err){if($.isFunction(ts.p.loadError)){ts.p.loadError.call(ts,xhr,st,err)}endReq();xhr=null},beforeSend:function(xhr){beginReq();if($.isFunction(ts.p.loadBeforeSend)){ts.p.loadBeforeSend.call(this,xhr)}}},$.jgrid.ajaxOptions,ts.p.ajaxGridOptions));if(ts.p.loadonce||ts.p.treeGrid){ts.p.datatype="local"}break;case"xmlstring":beginReq();addXmlData(dstr=$.jgrid.stringToDoc(ts.p.datastr),ts.grid.bDiv);ts.p.datatype="local";if(lcf){ts.p.loadComplete.call(ts,dstr)}ts.p.datastr=null;endReq();break;case"jsonstring":beginReq();if(typeof ts.p.datastr=="string"){dstr=$.jgrid.parse(ts.p.datastr)}else{dstr=ts.p.datastr}addJSONData(dstr,ts.grid.bDiv);ts.p.datatype="local";if(lcf){ts.p.loadComplete.call(ts,dstr)}ts.p.datastr=null;endReq();break;case"local":case"clientside":beginReq();ts.p.datatype="local";sortArrayData();endReq();break}}},beginReq=function(){ts.grid.hDiv.loading=true;if(ts.p.hiddengrid){return}switch(ts.p.loadui){case"disable":break;case"enable":$("#load_"+ts.p.id).show();break;case"block":$("#lui_"+ts.p.id).show();$("#load_"+ts.p.id).show();break}},endReq=function(){ts.grid.hDiv.loading=false;switch(ts.p.loadui){case"disable":break;case"enable":$("#load_"+ts.p.id).hide();break;case"block":$("#lui_"+ts.p.id).hide();$("#load_"+ts.p.id).hide();break}},sortArrayData=function(){var stripNum=/[\$,%]/g;var rows=[],col=0,st,sv,findSortKey,newDir=(ts.p.sortorder=="asc")?1:-1;$.each(ts.p.colModel,function(i,v){if(this.index==ts.p.sortname||this.name==ts.p.sortname){col=ts.p.lastsort=i;st=this.sorttype;return false}});if(st=="float"||st=="number"||st=="currency"){findSortKey=function($cell){var key=parseFloat($cell.replace(stripNum,""));return isNaN(key)?0:key}}else{if(st=="int"||st=="integer"){findSortKey=function($cell){return IntNum($cell.replace(stripNum,""))}}else{if(st=="date"){findSortKey=function($cell){var fd=ts.p.colModel[col].datefmt||"Y-m-d";return parseDate(fd,$cell).getTime()}}else{findSortKey=function($cell){return $.trim($cell.toUpperCase())}}}}$.each(ts.rows,function(index,row){try{sv=$.unformat($(row).children("td").eq(col),{colModel:ts.p.colModel[col]},col,true)}catch(_){sv=$(row).children("td").eq(col).text()}row.sortKey=findSortKey(sv);rows[index]=this});if(ts.p.treeGrid){$(ts).jqGrid("SortTree",newDir)}else{rows.sort(function(a,b){if(a.sortKeyb.sortKey){return newDir}return 0});if(rows[0]){$("td",rows[0]).each(function(k){$(this).css("width",grid.headers[k].width+"px")});ts.grid.cols=rows[0].cells}var cn="";if(ts.p.altRows){cn=ts.p.altclass}$.each(rows,function(i,row){if(cn){if(i%2==1){$(row).addClass(cn)}else{$(row).removeClass(cn)}}$("tbody",ts.grid.bDiv).append(row);row.sortKey=null})}ts.grid.bDiv.scrollTop=0},parseDate=function(format,date){var tsp={m:1,d:1,y:1970,h:0,i:0,s:0},k,hl,dM;date=date.split(/[\\\/:_;.\t\T\s-]/);format=format.split(/[\\\/:_;.\t\T\s-]/);var dfmt=$.jgrid.formatter.date.monthNames;for(k=0,hl=format.length;k11){date[k]=dM+1-12}}tsp[format[k].toLowerCase()]=parseInt(date[k],10)}tsp.m=parseInt(tsp.m,10)-1;var ty=tsp.y;if(ty>=70&&ty<=99){tsp.y=1900+tsp.y}else{if(ty>=0&&ty<=69){tsp.y=2000+tsp.y}}return new Date(tsp.y,tsp.m,tsp.d,tsp.h,tsp.i,tsp.s,0)},setPager=function(){var sep="",pgid=$(ts.p.pager).attr("id")||"pager",pginp="",pgl="",str="",pgcnt,lft,cent,rgt,twd,tdw,i,clearVals=function(onpaging){if($.isFunction(ts.p.onPaging)){ts.p.onPaging(onpaging)}ts.p.selrow=null;if(ts.p.multiselect){ts.p.selarrrow=[];$("#cb_"+$.jgrid.jqID(ts.p.id),ts.grid.hDiv).attr("checked",false)}ts.p.savedRow=[]};pgcnt="pg_"+pgid;lft=pgid+"_left";cent=pgid+"_center";rgt=pgid+"_right";$(ts.p.pager).addClass("ui-jqgrid-pager corner-bottom").append("
    ").attr("dir","ltr");if(ts.p.rowList.length>0){str="";str+=""}if(dir=="rtl"){pgl+=str}if(ts.p.pginput===true){pginp=""+$.jgrid.format(ts.p.pgtext||"","","")+""}if(ts.p.pgbuttons===true){var po=["first","prev","next","last"];if(dir=="rtl"){po.reverse()}pgl+="";pgl+="";pgl+=pginp!=""?sep+pginp+sep:"";pgl+="";pgl+=""}else{if(pginp!=""){pgl+=pginp}}if(dir=="ltr"){pgl+=str}pgl+="";if(ts.p.viewrecords===true){$("td#"+pgid+"_"+ts.p.recordpos,"#"+pgcnt).append("
    ")}$("td#"+pgid+"_"+ts.p.pagerpos,"#"+pgcnt).append(pgl);tdw=$(".ui-jqgrid").css("font-size")||"11px";$("body").append("");twd=$(pgl).clone().appendTo("#testpg").width();$("#testpg").remove();if(twd>0){if(pginp!=""){twd+=50}$("td#"+pgid+"_"+ts.p.pagerpos,"#"+pgcnt).width(twd)}ts.p._nvtd=[];ts.p._nvtd[0]=twd?Math.floor((ts.p.width-twd)/2):Math.floor(ts.p.width/3);ts.p._nvtd[1]=0;pgl=null;$(".ui-pg-selbox","#"+pgcnt).bind("change",function(){ts.p.page=Math.round(ts.p.rowNum*(ts.p.page-1)/this.value-0.5)+1;ts.p.rowNum=this.value;clearVals("records");populate();return false});if(ts.p.pgbuttons===true){$(".ui-pg-button","#"+pgcnt).hover(function(e){if($(this).hasClass("ui-state-disabled")){this.style.cursor="default"}else{$(this).addClass("ui-state-hover");this.style.cursor="pointer"}},function(e){if($(this).hasClass("ui-state-disabled")){}else{$(this).removeClass("ui-state-hover");this.style.cursor="default"}});$("#first, #prev, #next, #last",ts.p.pager).click(function(e){var cp=IntNum(ts.p.page),last=IntNum(ts.p.lastpage),selclick=false,fp=true,pp=true,np=true,lp=true;if(last===0||last===1){fp=false;pp=false;np=false;lp=false}else{if(last>1&&cp>=1){if(cp===1){fp=false;pp=false}else{if(cp>1&&cp1&&cp===0){np=false;lp=false;cp=last-1}}}if(this.id==="first"&&fp){ts.p.page=1;selclick=true}if(this.id==="prev"&&pp){ts.p.page=(cp-1);selclick=true}if(this.id==="next"&&np){ts.p.page=(cp+1);selclick=true}if(this.id==="last"&&lp){ts.p.page=last;selclick=true}if(selclick){clearVals(this.id);populate()}return false})}if(ts.p.pginput===true){$("input.ui-pg-input","#"+pgcnt).keypress(function(e){var key=e.charCode?e.charCode:e.keyCode?e.keyCode:0;if(key==13){ts.p.page=($(this).val()>0)?$(this).val():ts.p.page;clearVals("user");populate();return false}return this})}},sortData=function(index,idxcol,reload,sor){if(!ts.p.colModel[idxcol].sortable){return}var imgs,so;if(ts.p.savedRow.length>0){return}if(!reload){if(ts.p.lastsort==idxcol){if(ts.p.sortorder=="asc"){ts.p.sortorder="desc"}else{if(ts.p.sortorder=="desc"){ts.p.sortorder="asc"}}}else{ts.p.sortorder="asc"}ts.p.page=1}if(sor){if(ts.p.lastsort==idxcol&&ts.p.sortorder==sor){return}else{ts.p.sortorder=sor}}var thd=$("thead:first",ts.grid.hDiv).get(0);$("tr th:eq("+ts.p.lastsort+") span.ui-grid-ico-sort",thd).addClass("ui-state-disabled");$("tr th:eq("+ts.p.lastsort+")",thd).attr("aria-selected","false");$("tr th:eq("+idxcol+") span.ui-icon-"+ts.p.sortorder,thd).removeClass("ui-state-disabled");$("tr th:eq("+idxcol+")",thd).attr("aria-selected","true");if(!ts.p.viewsortcols[0]){if(ts.p.lastsort!=idxcol){$("tr th:eq("+ts.p.lastsort+") span.s-ico",thd).hide();$("tr th:eq("+idxcol+") span.s-ico",thd).show()}}ts.p.lastsort=idxcol;index=index.substring(5);ts.p.sortname=ts.p.colModel[idxcol].index||index;so=ts.p.sortorder;if($.isFunction(ts.p.onSortCol)){ts.p.onSortCol.call(ts,index,idxcol,so)}if(ts.p.datatype=="local"){if(ts.p.deselectAfterSort){$(ts).jqGrid("resetSelection")}}else{ts.p.selrow=null;if(ts.p.multiselect){$("#cb_"+$.jgrid.jqID(ts.p.id),ts.grid.hDiv).attr("checked",false)}ts.p.selarrrow=[];ts.p.savedRow=[];if(ts.p.scroll){emptyRows(ts.grid.bDiv,true)}}if(ts.p.subGrid&&ts.p.datatype=="local"){$("td.sgexpanded","#"+ts.p.id).each(function(){$(this).trigger("click")})}populate();if(ts.p.sortname!=index&&idxcol){ts.p.lastsort=idxcol}},setColWidth=function(){var initwidth=0,brd=ts.p.cellLayout,vc=0,lvc,scw=ts.p.scrollOffset,cw,hs=false,aw,tw=0,gw=0,cl=0,cr;if(isSafari){brd=0}$.each(ts.p.colModel,function(i){if(typeof this.hidden==="undefined"){this.hidden=false}if(this.hidden===false){initwidth+=IntNum(this.width);if(this.fixed){tw+=this.width;gw+=this.width+brd}else{vc++}cl++}});if(isNaN(ts.p.width)){ts.p.width=grid.width=initwidth}else{grid.width=ts.p.width}ts.p.tblwidth=initwidth;if(ts.p.shrinkToFit===false&&ts.p.forceFit===true){ts.p.forceFit=false}if(ts.p.shrinkToFit===true&&vc>0){aw=grid.width-brd*vc-gw;if(isNaN(ts.p.height)){}else{aw-=scw;hs=true}initwidth=0;$.each(ts.p.colModel,function(i){if(this.hidden===false&&!this.fixed){cw=Math.floor(aw/(ts.p.tblwidth-tw)*this.width);this.width=cw;initwidth+=cw;lvc=i}});cr=0;if(hs){if(grid.width-gw-(initwidth+brd*vc)!==scw){cr=grid.width-gw-(initwidth+brd*vc)-scw}}else{if(!hs&&Math.abs(grid.width-gw-(initwidth+brd*vc))!==1){cr=grid.width-gw-(initwidth+brd*vc)}}ts.p.colModel[lvc].width+=cr;ts.p.tblwidth=initwidth+cr+tw+cl*brd}},nextVisible=function(iCol){var ret=iCol,j=iCol,i;for(i=iCol+1;i");this.p.colModel.unshift({name:"cb",width:isSafari?ts.p.multiselectWidth+ts.p.cellLayout:ts.p.multiselectWidth,sortable:false,resizable:false,hidedlg:true,search:false,align:"center",fixed:true})}if(this.p.rownumbers){this.p.colNames.unshift("");this.p.colModel.unshift({name:"rn",width:ts.p.rownumWidth,sortable:false,resizable:false,hidedlg:true,search:false,align:"center",fixed:true})}ts.p.xmlReader=$.extend({root:"rows",row:"row",page:"rows>page",total:"rows>total",records:"rows>records",repeatitems:true,cell:"cell",id:"[id]",userdata:"userdata",subgrid:{root:"rows",row:"row",repeatitems:true,cell:"cell"}},ts.p.xmlReader);ts.p.jsonReader=$.extend({root:"rows",page:"page",total:"total",records:"records",repeatitems:true,cell:"cell",id:"id",userdata:"userdata",subgrid:{root:"rows",repeatitems:true,cell:"cell"}},ts.p.jsonReader);if(ts.p.scroll){ts.p.pgbuttons=false;ts.p.pginput=false;ts.p.rowList=[]}var thead="",tdc,idn,w,res,sort,td,ptr,tbody,imgs,iac="",idc="";if(ts.p.shrinkToFit===true&&ts.p.forceFit===true){for(i=ts.p.colModel.length-1;i>=0;i--){if(!ts.p.colModel[i].hidden){ts.p.colModel[i].resizable=false;break}}}if(ts.p.viewsortcols[1]=="horizontal"){iac=" ui-i-asc";idc=" ui-i-desc"}tdc=isMSIE?"class='ui-th-div-ie'":"";imgs="";for(i=0;i";idn=ts.p.colModel[i].index||ts.p.colModel[i].name;thead+="
    "+ts.p.colNames[i];if(idn==ts.p.sortname){ts.p.lastsort=i}thead+=imgs+"
    "}thead+="";$(this).append(thead);$("thead tr:first th",this).hover(function(){$(this).addClass("ui-state-hover")},function(){$(this).removeClass("ui-state-hover")});if(this.p.multiselect){var onSA=true,emp=[],chk;if(typeof ts.p.onSelectAll!=="function"){onSA=false}$("#cb_"+$.jgrid.jqID(ts.p.id),this).bind("click",function(){if(this.checked){$("[id^=jqg_]",ts.rows).attr("checked",true);$(ts.rows).each(function(i){if(!$(this).hasClass("subgrid")){$(this).addClass("ui-state-highlight").attr("aria-selected","true");ts.p.selarrrow[i]=ts.p.selrow=this.id}});chk=true;emp=[]}else{$("[id^=jqg_]",ts.rows).attr("checked",false);$(ts.rows).each(function(i){if(!$(this).hasClass("subgrid")){$(this).removeClass("ui-state-highlight").attr("aria-selected","false");emp[i]=this.id}});ts.p.selarrrow=[];ts.p.selrow=null;chk=false}if(onSA){ts.p.onSelectAll(chk?ts.p.selarrrow:emp,chk)}})}$.each(ts.p.colModel,function(i){if(!this.width){this.width=150}this.width=parseInt(this.width)});if(ts.p.autowidth===true){var pw=$(eg).innerWidth();ts.p.width=pw>0?pw:"nw"}setColWidth();$(eg).css("width",grid.width+"px").append("
     
    ");$(gv).css("width",grid.width+"px");thead=$("thead:first",ts).get(0);var tfoot="";var thr=$("tr:first",thead);ts.p.disableClick=false;$("th",thr).each(function(j){var ht=$("div",this)[0];w=ts.p.colModel[j].width;if(typeof ts.p.colModel[j].resizable==="undefined"){ts.p.colModel[j].resizable=true}if(ts.p.colModel[j].resizable){res=document.createElement("span");$(res).html(" ").addClass("ui-jqgrid-resize ui-jqgrid-resize-"+dir);!$.browser.opera?$(res).css("cursor","col-resize"):"";$(this).addClass(ts.p.resizeclass)}else{res=""}$(this).css("width",w+"px").prepend(res);if(ts.p.colModel[j].hidden){$(this).css("display","none")}grid.headers[j]={width:w,el:this};sort=ts.p.colModel[j].sortable;if(typeof sort!=="boolean"){ts.p.colModel[j].sortable=true;sort=true}var nm=ts.p.colModel[j].name;if(!(nm=="cb"||nm=="subgrid"||nm=="rn")){if(ts.p.viewsortcols[2]){$("div",this).addClass("ui-jqgrid-sortable")}}if(sort){if(ts.p.viewsortcols[0]){$("div span.s-ico",this).show();if(j==ts.p.lastsort){$("div span.ui-icon-"+ts.p.sortorder,this).removeClass("ui-state-disabled")}}else{if(j==ts.p.lastsort){$("div span.s-ico",this).show();$("div span.ui-icon-"+ts.p.sortorder,this).removeClass("ui-state-disabled")}}}tfoot+=""}).mousedown(function(e){if($(e.target).closest("th>span.ui-jqgrid-resize").length!=1){return}var ci=$.jgrid.getCellIndex(this);if(ts.p.forceFit===true){ts.p.nv=nextVisible(ci)}grid.dragStart(ci,e,getOffset(ci));return false}).click(function(e){if(ts.p.disableClick){ts.p.disableClick=false;return false}var s="th>div.ui-jqgrid-sortable",r,d;if(!ts.p.viewsortcols[2]){s="th>div>span>span.ui-grid-ico-sort"}var t=$(e.target).closest(s);if(t.length!=1){return}var ci=$.jgrid.getCellIndex(this);if(!ts.p.viewsortcols[2]){r=true,d=t.attr("sort")}sortData($("div",this)[0].id,ci,r,d);return false});if(ts.p.sortable&&$.fn.sortable){try{$(ts).jqGrid("sortableColumns",thr)}catch(e){}}tfoot+="
     
    ";tbody=document.createElement("tbody");this.appendChild(tbody);$(this).addClass("ui-jqgrid-btable");var hTable=$("
    ").append(thead),hg=(ts.p.caption&&ts.p.hiddengrid===true)?true:false,hb=$("
    ");grid.hDiv=document.createElement("div");$(grid.hDiv).css({width:grid.width+"px"}).addClass("ui-state-default ui-jqgrid-hdiv").append(hb);$(hb).append(hTable);if(hg){$(grid.hDiv).hide()}ts.p._height=0;if(ts.p.pager){if(typeof ts.p.pager=="string"){if(ts.p.pager.substr(0,1)!="#"){ts.p.pager="#"+ts.p.pager}}$(ts.p.pager).css({width:grid.width+"px"}).appendTo(eg).addClass("ui-state-default ui-jqgrid-pager");ts.p._height+=parseInt($(ts.p.pager).height(),10);if(hg){$(ts.p.pager).hide()}setPager()}if(ts.p.cellEdit===false&&ts.p.hoverrows===true){$(ts).bind("mouseover",function(e){ptr=$(e.target).closest("tr.jqgrow");if($(ptr).attr("class")!=="subgrid"){$(ptr).addClass("ui-state-hover")}return false}).bind("mouseout",function(e){ptr=$(e.target).closest("tr.jqgrow");$(ptr).removeClass("ui-state-hover");return false})}var ri,ci;$(ts).before(grid.hDiv).click(function(e){td=e.target;var scb=$(td).hasClass("cbox");ptr=$(td,ts.rows).closest("tr.jqgrow");if($(ptr).length===0){return this}var cSel=true;if($.isFunction(ts.p.beforeSelectRow)){cSel=ts.p.beforeSelectRow.call(ts,ptr[0].id,e)}if(td.tagName=="A"||((td.tagName=="INPUT"||td.tagName=="TEXTAREA"||td.tagName=="OPTION"||td.tagName=="SELECT")&&!scb)){return true}if(cSel===true){if(ts.p.cellEdit===true){if(ts.p.multiselect&&scb){$(ts).jqGrid("setSelection",ptr[0].id,true)}else{ri=ptr[0].rowIndex;ci=$.jgrid.getCellIndex(td);try{$(ts).jqGrid("editCell",ri,ci,true)}catch(_){}}}else{if(!ts.p.multikey){if(ts.p.multiselect&&ts.p.multiboxonly){if(scb){$(ts).jqGrid("setSelection",ptr[0].id,true)}else{$(ts.p.selarrrow).each(function(i,n){var ind=ts.rows.namedItem(n);$(ind).removeClass("ui-state-highlight");$("#jqg_"+$.jgrid.jqID(n),ind).attr("checked",false)});ts.p.selarrrow=[];$("#cb_"+$.jgrid.jqID(ts.p.id),ts.grid.hDiv).attr("checked",false);$(ts).jqGrid("setSelection",ptr[0].id,true)}}else{$(ts).jqGrid("setSelection",ptr[0].id,true)}}else{if(e[ts.p.multikey]){$(ts).jqGrid("setSelection",ptr[0].id,true)}else{if(ts.p.multiselect&&scb){scb=$("[id^=jqg_]",ptr).attr("checked");$("[id^=jqg_]",ptr).attr("checked",!scb)}}}}if($.isFunction(ts.p.onCellSelect)){ri=ptr[0].id;ci=$.jgrid.getCellIndex(td);ts.p.onCellSelect.call(ts,ri,ci,$(td).html(),e)}}e.stopPropagation()}).bind("reloadGrid",function(e,opts){if(ts.p.treeGrid===true){ts.p.datatype=ts.p.treedatatype}if(opts&&opts.current){ts.grid.selectionPreserver(ts)}if(ts.p.datatype=="local"){$(ts).jqGrid("resetSelection")}else{if(!ts.p.treeGrid){ts.p.selrow=null;if(ts.p.multiselect){ts.p.selarrrow=[];$("#cb_"+$.jgrid.jqID(ts.p.id),ts.grid.hDiv).attr("checked",false)}ts.p.savedRow=[];if(ts.p.scroll){emptyRows(ts.grid.bDiv)}}}if(opts&&opts.page){var page=opts.page;if(page>ts.p.lastpage){page=ts.p.lastpage}if(page<1){page=1}ts.p.page=page;if(ts.grid.prevRowHeight){ts.grid.bDiv.scrollTop=(page-1)*ts.grid.prevRowHeight*ts.p.rowNum}else{ts.grid.bDiv.scrollTop=0}}if(ts.grid.prevRowHeight&&ts.p.scroll){delete ts.p.lastpage;ts.grid.populateVisible()}else{ts.grid.populate()}return false});if($.isFunction(this.p.ondblClickRow)){$(this).dblclick(function(e){td=e.target;ptr=$(td,ts.rows).closest("tr.jqgrow");if($(ptr).length===0){return false}ri=ptr[0].rowIndex;ci=$.jgrid.getCellIndex(td);ts.p.ondblClickRow.call(ts,$(ptr).attr("id"),ri,ci,e);return false})}if($.isFunction(this.p.onRightClickRow)){$(this).bind("contextmenu",function(e){td=e.target;ptr=$(td,ts.rows).closest("tr.jqgrow");if($(ptr).length===0){return false}if(!ts.p.multiselect){$(ts).jqGrid("setSelection",ptr[0].id,true)}ri=ptr[0].rowIndex;ci=$.jgrid.getCellIndex(td);ts.p.onRightClickRow.call(ts,$(ptr).attr("id"),ri,ci,e);return false})}grid.bDiv=document.createElement("div");$(grid.bDiv).append($('
    ').append("
    ").append(this)).addClass("ui-jqgrid-bdiv").css({height:ts.p.height+(isNaN(ts.p.height)?"":"px"),width:(grid.width)+"px"}).scroll(grid.scrollGrid);$("table:first",grid.bDiv).css({width:ts.p.tblwidth+"px"});if(isMSIE){if($("tbody",this).size()==2){$("tbody:first",this).remove()}if(ts.p.multikey){$(grid.bDiv).bind("selectstart",function(){return false})}}else{if(ts.p.multikey){$(grid.bDiv).bind("mousedown",function(){return false})}}if(hg){$(grid.bDiv).hide()}grid.cDiv=document.createElement("div");var arf=ts.p.hidegrid===true?$("").addClass("ui-jqgrid-titlebar-close HeaderButton").hover(function(){arf.addClass("ui-state-hover")},function(){arf.removeClass("ui-state-hover")}).append("").css((dir=="rtl"?"left":"right"),"0px"):"";$(grid.cDiv).append(arf).append(""+ts.p.caption+"").addClass("ui-jqgrid-titlebar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix");$(grid.cDiv).insertBefore(grid.hDiv);if(ts.p.toolbar[0]){grid.uDiv=document.createElement("div");if(ts.p.toolbar[1]=="top"){$(grid.uDiv).insertBefore(grid.hDiv)}else{if(ts.p.toolbar[1]=="bottom"){$(grid.uDiv).insertAfter(grid.hDiv)}}if(ts.p.toolbar[1]=="both"){grid.ubDiv=document.createElement("div");$(grid.uDiv).insertBefore(grid.hDiv).addClass("ui-userdata ui-state-default").attr("id","t_"+this.id);$(grid.ubDiv).insertAfter(grid.hDiv).addClass("ui-userdata ui-state-default").attr("id","tb_"+this.id);ts.p._height+=IntNum($(grid.ubDiv).height());if(hg){$(grid.ubDiv).hide()}}else{$(grid.uDiv).width(grid.width).addClass("ui-userdata ui-state-default").attr("id","t_"+this.id)}ts.p._height+=IntNum($(grid.uDiv).height());if(hg){$(grid.uDiv).hide()}}if(ts.p.footerrow){grid.sDiv=$("
    ")[0];hb=$("
    ");$(grid.sDiv).append(hb).insertAfter(grid.hDiv).width(grid.width);$(hb).append(tfoot);grid.footers=$(".ui-jqgrid-ftable",grid.sDiv)[0].rows[0].cells;if(ts.p.rownumbers){grid.footers[0].className="ui-state-default jqgrid-rownum"}if(hg){$(grid.sDiv).hide()}}if(ts.p.caption){ts.p._height+=parseInt($(grid.cDiv,ts).height(),10);var tdt=ts.p.datatype;if(ts.p.hidegrid===true){$(".ui-jqgrid-titlebar-close",grid.cDiv).click(function(e){var onHdCl=$.isFunction(ts.p.onHeaderClick);if(ts.p.gridstate=="visible"){$(".ui-jqgrid-bdiv, .ui-jqgrid-hdiv","#gview_"+ts.p.id).slideUp("fast");if(ts.p.pager){$(ts.p.pager).slideUp("fast")}if(ts.p.toolbar[0]===true){if(ts.p.toolbar[1]=="both"){$(grid.ubDiv).slideUp("fast")}$(grid.uDiv).slideUp("fast")}if(ts.p.footerrow){$(".ui-jqgrid-sdiv","#gbox_"+ts.p.id).slideUp("fast")}$("span",this).removeClass("ui-icon-circle-triangle-n").addClass("ui-icon-circle-triangle-s");ts.p.gridstate="hidden";if(onHdCl){if(!hg){ts.p.onHeaderClick.call(ts,ts.p.gridstate,e)}}}else{if(ts.p.gridstate=="hidden"){$(".ui-jqgrid-hdiv, .ui-jqgrid-bdiv","#gview_"+ts.p.id).slideDown("fast");if(ts.p.pager){$(ts.p.pager).slideDown("fast")}if(ts.p.toolbar[0]===true){if(ts.p.toolbar[1]=="both"){$(grid.ubDiv).slideDown("fast")}$(grid.uDiv).slideDown("fast")}if(ts.p.footerrow){$(".ui-jqgrid-sdiv","#gbox_"+ts.p.id).slideDown("fast")}$("span",this).removeClass("ui-icon-circle-triangle-s").addClass("ui-icon-circle-triangle-n");if(hg){ts.p.datatype=tdt;populate();hg=false}ts.p.gridstate="visible";if(onHdCl){ts.p.onHeaderClick.call(ts,ts.p.gridstate,e)}}}return false});if(hg){ts.p.datatype="local";$(".ui-jqgrid-titlebar-close",grid.cDiv).trigger("click")}}}else{$(grid.cDiv).hide()}$(grid.hDiv).after(grid.bDiv).mousemove(function(e){if(grid.resizing){grid.dragMove(e);return false}});$(".ui-jqgrid-labels",grid.hDiv).bind("selectstart",function(){return false});ts.p._height+=parseInt($(grid.hDiv).height(),10);$(document).mouseup(function(e){if(grid.resizing){grid.dragEnd();return false}return true});this.updateColumns=function(){var r=this.rows[0],self=this;if(r){$("td",r).each(function(k){$(this).css("width",self.grid.headers[k].width+"px")});this.grid.cols=r.cells}return this};ts.formatCol=formatCol;ts.sortData=sortData;ts.updatepager=updatepager;ts.formatter=function(rowId,cellval,colpos,rwdat,act){return formatter(rowId,cellval,colpos,rwdat,act)};$.extend(grid,{populate:populate,emptyRows:emptyRows});this.grid=grid;ts.addXmlData=function(d){addXmlData(d,ts.grid.bDiv)};ts.addJSONData=function(d){addJSONData(d,ts.grid.bDiv)};populate();ts.p.hiddengrid=false;$(window).unload(function(){$(this).empty();this.grid=null;this.p=null})})};$.jgrid.extend({getGridParam:function(pName){var $t=this[0];if(!$t.grid){return}if(!pName){return $t.p}else{return typeof($t.p[pName])!="undefined"?$t.p[pName]:null}},setGridParam:function(newParams){return this.each(function(){if(this.grid&&typeof(newParams)==="object"){$.extend(true,this.p,newParams)}})},getDataIDs:function(){var ids=[],i=0,len;this.each(function(){len=this.rows.length;if(len&&len>0){while(i=0){if(ner>olr){scrGrid(ner,"d")}else{scrGrid(ner,"u")}}}if(!$t.p.multiselect){if($(pt).attr("class")!=="subgrid"){if($t.p.selrow){$("tr#"+$.jgrid.jqID($t.p.selrow),$t.grid.bDiv).removeClass("ui-state-highlight").attr("aria-selected","false")}$t.p.selrow=pt.id;$(pt).addClass("ui-state-highlight").attr("aria-selected","true");if($t.p.onSelectRow&&onsr){$t.p.onSelectRow($t.p.selrow,true)}}}else{$t.p.selrow=pt.id;ia=$.inArray($t.p.selrow,$t.p.selarrrow);if(ia===-1){if($(pt).attr("class")!=="subgrid"){$(pt).addClass("ui-state-highlight").attr("aria-selected","true")}stat=true;$("#jqg_"+$.jgrid.jqID($t.p.selrow),$t.rows).attr("checked",stat);$t.p.selarrrow.push($t.p.selrow);if($t.p.onSelectRow&&onsr){$t.p.onSelectRow($t.p.selrow,stat)}}else{if($(pt).attr("class")!=="subgrid"){$(pt).removeClass("ui-state-highlight").attr("aria-selected","false")}stat=false;$("#jqg_"+$.jgrid.jqID($t.p.selrow),$t.rows).attr("checked",stat);$t.p.selarrrow.splice(ia,1);if($t.p.onSelectRow&&onsr){$t.p.onSelectRow($t.p.selrow,stat)}tpsr=$t.p.selarrrow[0];$t.p.selrow=(tpsr===undefined)?null:tpsr}}function scrGrid(iR,tp){var ch=$($t.grid.bDiv)[0].clientHeight,st=$($t.grid.bDiv)[0].scrollTop,nROT=$t.rows[iR].offsetTop+$t.rows[iR].clientHeight,pROT=$t.rows[iR].offsetTop;if(tp=="d"){if(nROT>=ch){$($t.grid.bDiv)[0].scrollTop=st+nROT-pROT}}if(tp=="u"){if(pROT span:first",ind).html(vl).attr("title",$.jgrid.stripHtml(vl))}else{$("td:eq("+i+")",ind).html(vl).attr("title",$.jgrid.stripHtml(vl))}success=true}})}if(cp==="string"){$(ind).addClass(cssp)}else{if(cp==="object"){$(ind).css(cssp)}}});return success},addRowData:function(rowid,data,pos,src){if(!pos){pos="last"}var success=false,nm,row="",gi=0,si=0,ni=0,sind,i,v,prp="";if(data){this.each(function(){var t=this;if(t.p.rownumbers===true){prp=t.formatCol(ni,1);row+='0";ni=1}if(t.p.multiselect){v='';prp=t.formatCol(ni,1);row+='"+v+"";gi=1}if(t.p.subGrid===true){row+=$(t).jqGrid("addSubGridCell",gi+ni,1);si=1}if(typeof(rowid)!="undefined"){rowid=rowid+""}else{rowid=(t.p.records+1)+"";if(t.p.keyIndex!==false){var cmn=t.p.colModel[t.p.keyIndex+gi+si+ni].name;if(typeof data[cmn]!="undefined"){rowid=data[cmn]}}}for(i=gi+si+ni;i'+v+""}row=''+row+"";if(t.p.subGrid===true){row=$(row)[0];$(t).jqGrid("addSubGrid",row,gi+ni)}if(t.rows.length===0){$("table:first",t.grid.bDiv).append(row)}else{switch(pos){case"last":$(t.rows[t.rows.length-1]).after(row);break;case"first":$(t.rows[0]).before(row);break;case"after":sind=t.rows.namedItem(src);if(sind){$(t.rows[sind.rowIndex+1]).hasClass("ui-subgrid")?$(t.rows[sind.rowIndex+1]).after(row):$(sind).after(row)}break;case"before":sind=t.rows.namedItem(src);if(sind){$(sind).before(row);sind=sind.rowIndex}break}}t.p.records++;t.p.reccount++;if(!t.grid.cols||!t.grid.cols.length){t.grid.cols=t.rows[0].cells}if(pos==="first"||(pos==="before"&&sind<=1)||t.rows.length===1){t.updateColumns()}if(t.p.altRows===true){var cn=t.p.altclass;if(pos=="last"){if((t.rows.length-1)%2==1){$(t.rows[t.rows.length-1]).addClass(cn)}}else{$(t.rows).each(function(i){if(i%2==1){$(this).addClass(cn)}else{$(this).removeClass(cn)}})}}try{t.p.afterInsertRow(rowid,data)}catch(e){}t.updatepager(true,true);success=true})}return success},footerData:function(action,data,format){var nm,success=false,res={};function isEmpty(obj){for(var i in obj){return false}return true}if(typeof(action)=="undefined"){action="get"}if(typeof(format)!="boolean"){format=true}action=action.toLowerCase();this.each(function(){var t=this,vl,ind;if(!t.grid||!t.p.footerrow){return false}if(action=="set"){if(isEmpty(data)){return false}}success=true;$(this.p.colModel).each(function(i){nm=this.name;if(action=="set"){if(data[nm]!=undefined){vl=format?t.formatter("",data[nm],i,data,"edit"):data[nm];$("tr.footrow td:eq("+i+")",t.grid.sDiv).html(vl).attr("title",$.jgrid.stripHtml(vl));success=true}}else{if(action=="get"){res[nm]=$("tr.footrow td:eq("+i+")",t.grid.sDiv).html()}}})});return action=="get"?res:success},ShowHideCol:function(colname,show){return this.each(function(){var $t=this,fndh=false;if(!$t.grid){return}if(typeof colname==="string"){colname=[colname]}show=show!="none"?"":"none";var sw=show==""?true:false;$(this.p.colModel).each(function(i){if($.inArray(this.name,colname)!==-1&&this.hidden===sw){$("tr",$t.grid.hDiv).each(function(){$("th:eq("+i+")",this).css("display",show)});$($t.rows).each(function(j){$("td:eq("+i+")",$t.rows[j]).css("display",show)});if($t.p.footerrow){$("td:eq("+i+")",$t.grid.sDiv).css("display",show)}if(show=="none"){$t.p.tblwidth-=this.width}else{$t.p.tblwidth+=this.width}this.hidden=!sw;fndh=true}});if(fndh===true){$("table:first",$t.grid.hDiv).width($t.p.tblwidth);$("table:first",$t.grid.bDiv).width($t.p.tblwidth);$t.grid.hDiv.scrollLeft=$t.grid.bDiv.scrollLeft;if($t.p.footerrow){$("table:first",$t.grid.sDiv).width($t.p.tblwidth);$t.grid.sDiv.scrollLeft=$t.grid.bDiv.scrollLeft}}})},hideCol:function(colname){return this.each(function(){$(this).jqGrid("ShowHideCol",colname,"none")})},showCol:function(colname){return this.each(function(){$(this).jqGrid("ShowHideCol",colname,"")})},remapColumns:function(permutation,updateCells,keepHeader){function resortArray(a){var ac;if(a.length){ac=$.makeArray(a)}else{ac=$.extend({},a)}$.each(permutation,function(i){a[i]=ac[this]})}var ts=this.get(0);function resortRows(parent,clobj){$(">tr"+(clobj||""),parent).each(function(){var row=this;var elems=$.makeArray(row.cells);$.each(permutation,function(){var e=elems[this];if(e){row.appendChild(e)}})})}resortArray(ts.p.colModel);resortArray(ts.p.colNames);resortArray(ts.grid.headers);resortRows($("thead:first",ts.grid.hDiv),keepHeader&&":not(.ui-jqgrid-labels)");if(updateCells){resortRows($("tbody:first",ts.grid.bDiv),".jqgrow")}if(ts.p.footerrow){resortRows($("tbody:first",ts.grid.sDiv))}if(ts.p.remapColumns){if(!ts.p.remapColumns.length){ts.p.remapColumns=$.makeArray(permutation)}else{resortArray(ts.p.remapColumns)}}ts.p.lastsort=$.inArray(ts.p.lastsort,permutation);if(ts.p.treeGrid){ts.p.expColInd=$.inArray(ts.p.expColInd,permutation)}},setGridWidth:function(nwidth,shrink){return this.each(function(){var $t=this,cw,initwidth=0,brd=$t.p.cellLayout,lvc,vc=0,hs=false,scw=$t.p.scrollOffset,aw,gw=0,tw=0,cl=0,cr;if(!$t.grid){return}if(typeof shrink!="boolean"){shrink=$t.p.shrinkToFit}if(isNaN(nwidth)){return}else{nwidth=parseInt(nwidth);$t.grid.width=$t.p.width=nwidth}$("#gbox_"+$t.p.id).css("width",nwidth+"px");$("#gview_"+$t.p.id).css("width",nwidth+"px");$($t.grid.bDiv).css("width",nwidth+"px");$($t.grid.hDiv).css("width",nwidth+"px");if($t.p.pager){$($t.p.pager).css("width",nwidth+"px")}if($t.p.toolbar[0]===true){$($t.grid.uDiv).css("width",nwidth+"px");if($t.p.toolbar[1]=="both"){$($t.grid.ubDiv).css("width",nwidth+"px")}}if($t.p.footerrow){$($t.grid.sDiv).css("width",nwidth+"px")}if(shrink===false&&$t.p.forceFit==true){$t.p.forceFit=false}if(shrink===true){if($.browser.safari){brd=0}$.each($t.p.colModel,function(i){if(this.hidden===false){initwidth+=parseInt(this.width,10);if(this.fixed){tw+=this.width;gw+=this.width+brd}else{vc++}cl++}});if(vc==0){return}$t.p.tblwidth=initwidth;aw=nwidth-brd*vc-gw;if(!isNaN($t.p.height)){if($($t.grid.bDiv)[0].clientHeight<$($t.grid.bDiv)[0].scrollHeight){hs=true;aw-=scw}}initwidth=0;var cle=$t.grid.cols.length>0;$.each($t.p.colModel,function(i){var tn=this.name;if(this.hidden===false&&!this.fixed){cw=Math.floor((aw)/($t.p.tblwidth-tw)*this.width);this.width=cw;initwidth+=cw;$t.grid.headers[i].width=cw;$t.grid.headers[i].el.style.width=cw+"px";if($t.p.footerrow){$t.grid.footers[i].style.width=cw+"px"}if(cle){$t.grid.cols[i].style.width=cw+"px"}lvc=i}});cr=0;if(hs){if(nwidth-gw-(initwidth+brd*vc)!==scw){cr=nwidth-gw-(initwidth+brd*vc)-scw}}else{if(Math.abs(nwidth-gw-(initwidth+brd*vc))!==1){cr=nwidth-gw-(initwidth+brd*vc)}}$t.p.colModel[lvc].width+=cr;cw=$t.p.colModel[lvc].width;$t.grid.headers[lvc].width=cw;$t.grid.headers[lvc].el.style.width=cw+"px";if(cle){$t.grid.cols[lvc].style.width=cw+"px"}$t.p.tblwidth=initwidth+cr+tw+brd*cl;$("table:first",$t.grid.bDiv).css("width",$t.p.tblwidth+"px");$("table:first",$t.grid.hDiv).css("width",$t.p.tblwidth+"px");$t.grid.hDiv.scrollLeft=$t.grid.bDiv.scrollLeft;if($t.p.footerrow){$t.grid.footers[lvc].style.width=cw+"px";$("table:first",$t.grid.sDiv).css("width",$t.p.tblwidth+"px")}}})},setGridHeight:function(nh){return this.each(function(){var $t=this;if(!$t.grid){return}$($t.grid.bDiv).css({height:nh+(isNaN(nh)?"":"px")});$t.p.height=nh;if($t.p.scroll){$t.grid.populateVisible()}})},setCaption:function(newcap){return this.each(function(){this.p.caption=newcap;$("span.ui-jqgrid-title",this.grid.cDiv).html(newcap);$(this.grid.cDiv).show()})},setLabel:function(colname,nData,prop,attrp){return this.each(function(){var $t=this,pos=-1;if(!$t.grid){return}if(isNaN(colname)){$($t.p.colModel).each(function(i){if(this.name==colname){pos=i;return false}})}else{pos=parseInt(colname,10)}if(pos>=0){var thecol=$("tr.ui-jqgrid-labels th:eq("+pos+")",$t.grid.hDiv);if(nData){var ico=$(".s-ico",thecol);$("[id^=jqgh_]",thecol).empty().html(nData).append(ico);$t.p.colNames[pos]=nData}if(prop){if(typeof prop==="string"){$(thecol).addClass(prop)}else{$(thecol).css(prop)}}if(typeof attrp==="object"){$(thecol).attr(attrp)}}})},setCell:function(rowid,colname,nData,cssp,attrp){return this.each(function(){var $t=this,pos=-1,v;if(!$t.grid){return}if(isNaN(colname)){$($t.p.colModel).each(function(i){if(this.name==colname){pos=i;return false}})}else{pos=parseInt(colname,10)}if(pos>=0){var ind=$t.rows.namedItem(rowid);if(ind){var tcell=$("td:eq("+pos+")",ind);if(nData!==""){v=$t.formatter(rowid,nData,pos,ind,"edit");$(tcell).html(v).attr("title",$.jgrid.stripHtml(v))}if(cssp){if(typeof cssp==="string"){$(tcell).addClass(cssp)}else{$(tcell).css(cssp)}}if(typeof attrp==="object"){$(tcell).attr(attrp)}}}})},getCell:function(rowid,col){var ret=false;this.each(function(){var $t=this,pos=-1;if(!$t.grid){return}if(isNaN(col)){$($t.p.colModel).each(function(i){if(this.name===col){pos=i;return false}})}else{pos=parseInt(col,10)}if(pos>=0){var ind=$t.rows.namedItem(rowid);if(ind){try{ret=$.unformat($("td:eq("+pos+")",ind),{colModel:$t.p.colModel[pos]},pos)}catch(e){ret=$.jgrid.htmlDecode($("td:eq("+pos+")",ind).html())}}}});return ret},getCol:function(col,obj,mathopr){var ret=[],val,sum=0;obj=typeof(obj)!="boolean"?false:obj;if(typeof mathopr=="undefined"){mathopr=false}this.each(function(){var $t=this,pos=-1;if(!$t.grid){return}if(isNaN(col)){$($t.p.colModel).each(function(i){if(this.name===col){pos=i;return false}})}else{pos=parseInt(col,10)}if(pos>=0){var ln=$t.rows.length,i=0;if(ln&&ln>0){while(i0){if(l<0){n+=k;l=n.length-1}else{if(k!=="."){n=n.replace(".",k)}}while((n.length-1-l)-1)?l:n.length;var o=n.substring(l);var e=-1;for(var j=l;j>0;j--){e++;if((e%3===0)&&(j!==l)&&(!h||(j>1))){o=p+o}o=n.charAt(j-1)+o}n=o}n=(d.prefix)?d.prefix+n:n;n=(d.suffix)?n+d.suffix:n;return n}else{return f}},DateFormat:function(I,L,O,x){var m=/\\.|[dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU]/g,C=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,K=/[^-+\dA-Z]/g,J=function(j,i){j=String(j);i=parseInt(i)||2;while(j.length11){L[E]=q+1-12}}d[I[E].toLowerCase()]=parseInt(L[E],10)}d.m=parseInt(d.m)-1;var M=d.y;if(M>=70&&M<=99){d.y=1900+d.y}else{if(M>=0&&M<=69){d.y=2000+d.y}}g=new Date(d.y,d.m,d.d,d.h,d.i,d.s,0);if(O in x.masks){O=x.masks[O]}else{if(!O){O="Y-m-d"}}var t=g.getHours(),H=g.getMinutes(),F=g.getDate(),B=g.getMonth()+1,A=g.getTimezoneOffset(),y=g.getSeconds(),v=g.getMilliseconds(),r=g.getDay(),e=g.getFullYear(),l=(r+6)%7+1,p=(new Date(e,B-1,F)-new Date(e,0,1))/86400000,h={d:J(F),D:D.i18n.dayNames[r],j:F,l:D.i18n.dayNames[r+7],N:l,S:x.S(F),w:r,z:p,W:l<5?Math.floor((p+l-1)/7)+1:Math.floor((p+l-1)/7)||((new Date(e-1,0,1).getDay()+6)%7<4?53:52),F:D.i18n.monthNames[B-1+12],m:J(B),M:D.i18n.monthNames[B-1],n:B,t:"?",L:"?",o:"?",Y:e,y:String(e).substring(2),a:t<12?x.AmPm[0]:x.AmPm[1],A:t<12?x.AmPm[2]:x.AmPm[3],B:"?",g:t%12||12,G:t,h:J(t%12||12),H:J(t),i:J(H),s:J(y),u:v,e:"?",I:"?",O:(A>0?"-":"+")+J(Math.floor(Math.abs(A)/60)*100+Math.abs(A)%60,4),P:"?",T:(String(g).match(C)||[""]).pop().replace(K,""),Z:"?",c:"?",r:"?",U:Math.floor(g/1000)};return O.replace(m,function(i){return i in h?h[i]:i.substring(1)})}};c.fn.fmatter.defaultFormat=function(e,d){return(isValue(e)&&e!=="")?e:d.defaultValue?d.defaultValue:" "};c.fn.fmatter.email=function(e,d){if(!isEmpty(e)){return'
    '+e+""}else{return c.fn.fmatter.defaultFormat(e,d)}};c.fn.fmatter.checkbox=function(g,e){var h=c.extend({},e.checkbox),f;if(!isUndefined(e.colModel.formatoptions)){h=c.extend({},h,e.colModel.formatoptions)}if(h.disabled===true){f="disabled"}else{f=""}if(isEmpty(g)||isUndefined(g)){g=c.fn.fmatter.defaultFormat(g,h)}g=g+"";g=g.toLowerCase();var d=g.search(/(false|0|no|off)/i)<0?" checked='checked' ":"";return'"},c.fn.fmatter.link=function(f,d){var g={target:d.target};var e="";if(!isUndefined(d.colModel.formatoptions)){g=c.extend({},g,d.colModel.formatoptions)}if(g.target){e="target="+g.target}if(!isEmpty(f)){return"'+f+""}else{return c.fn.fmatter.defaultFormat(f,d)}};c.fn.fmatter.showlink=function(f,d){var g={baseLinkUrl:d.baseLinkUrl,showAction:d.showAction,addParam:d.addParam||"",target:d.target,idName:d.idName},e="";if(!isUndefined(d.colModel.formatoptions)){g=c.extend({},g,d.colModel.formatoptions)}if(g.target){e="target="+g.target}idUrl=g.baseLinkUrl+g.showAction+"?"+g.idName+"="+d.rowId+g.addParam;if(isString(f)){return"'+f+""}else{return c.fn.fmatter.defaultFormat(f,d)}};c.fn.fmatter.integer=function(e,d){var f=c.extend({},d.integer);if(!isUndefined(d.colModel.formatoptions)){f=c.extend({},f,d.colModel.formatoptions)}if(isEmpty(e)){return f.defaultValue}return c.fmatter.util.NumberFormat(e,f)};c.fn.fmatter.number=function(e,d){var f=c.extend({},d.number);if(!isUndefined(d.colModel.formatoptions)){f=c.extend({},f,d.colModel.formatoptions)}if(isEmpty(e)){return f.defaultValue}return c.fmatter.util.NumberFormat(e,f)};c.fn.fmatter.currency=function(e,d){var f=c.extend({},d.currency);if(!isUndefined(d.colModel.formatoptions)){f=c.extend({},f,d.colModel.formatoptions)}if(isEmpty(e)){return f.defaultValue}return c.fmatter.util.NumberFormat(e,f)};c.fn.fmatter.date=function(g,f,d,e){var h=c.extend({},f.date);if(!isUndefined(f.colModel.formatoptions)){h=c.extend({},h,f.colModel.formatoptions)}if(!h.reformatAfterEdit&&e=="edit"){return c.fn.fmatter.defaultFormat(g,f)}else{if(!isEmpty(g)){return c.fmatter.util.DateFormat(h.srcformat,g,h.newformat,h)}else{return c.fn.fmatter.defaultFormat(g,f)}}};c.fn.fmatter.select=function(k,d,e,n){k=k+"";var g=false,m=[];if(!isUndefined(d.colModel.editoptions)){g=d.colModel.editoptions.value}if(g){var q=d.colModel.editoptions.multiple===true?true:false,p=[],o;if(q){p=k.split(",");p=c.map(p,function(i){return c.trim(i)})}if(isString(g)){var f=g.split(";"),h=0;for(var l=0;l-1){m[h]=o[1];h++}}else{if(c.trim(o[0])==c.trim(k)){m[0]=o[1];break}}}}else{if(isObject(g)){if(q){m=jQuery.map(p,function(r,j){return g[r]})}else{m[0]=g[k]||""}}}}k=m.join(", ");return k==""?c.fn.fmatter.defaultFormat(k,d):k};c.unformat=function(g,n,k,e){var j,h=n.colModel.formatter,i=n.colModel.formatoptions||{},o,m=/([\.\*\_\'\(\)\{\}\+\?\\])/g;unformatFunc=n.colModel.unformat||(c.fn.fmatter[h]&&c.fn.fmatter[h].unformat);if(typeof unformatFunc!=="undefined"&&isFunction(unformatFunc)){j=unformatFunc(c(g).text(),n,g)}else{if(typeof h!=="undefined"&&isString(h)){var d=c.jgrid.formatter||{},l;switch(h){case"integer":i=c.extend({},d.integer,i);o=i.thousandsSeparator.replace(m,"\\$1");l=new RegExp(o,"g");j=c(g).text().replace(l,"");break;case"number":i=c.extend({},d.number,i);o=i.thousandsSeparator.replace(m,"\\$1");l=new RegExp(o,"g");j=c(g).text().replace(l,"").replace(i.decimalSeparator,".");break;case"currency":i=c.extend({},d.currency,i);o=i.thousandsSeparator.replace(m,"\\$1");l=new RegExp(o,"g");j=c(g).text().replace(l,"").replace(i.decimalSeparator,".").replace(i.prefix,"").replace(i.suffix,"");break;case"checkbox":var f=(n.colModel.editoptions)?n.colModel.editoptions.value.split(":"):["Yes","No"];j=c("input",g).attr("checked")?f[0]:f[1];break;case"select":j=c.unformat.select(g,n,k,e);break;default:j=c(g).text();break}}}return j?j:e===true?c(g).text():c.jgrid.htmlDecode(c(g).html())};c.unformat.select=function(h,s,n,e){var m=[];var q=c(h).text();if(e==true){return q}var l=c.extend({},s.colModel.editoptions);if(l.value){var f=l.value,r=l.multiple===true?true:false,p=[],o;if(r){p=q.split(",");p=c.map(p,function(i){return c.trim(i)})}if(isString(f)){var d=f.split(";"),g=0;for(var k=0;k-1){m[g]=o[0];g++}}else{if(c.trim(o[1])==c.trim(q)){m[0]=o[0];break}}}}else{if(isObject(f)){if(!r){p[0]=q}m=jQuery.map(p,function(j){var i;c.each(f,function(t,u){if(u==j){i=t;return false}});if(i){return i}})}}return m.join(", ")}else{return q||""}};function a(h,i,g,d,e){var f=i;if(c.fn.fmatter[h]){f=c.fn.fmatter[h](i,g,d,e)}return f}function b(d){if(window.console&&window.console.log){window.console.log(d)}}isValue=function(d){return(isObject(d)||isString(d)||isNumber(d)||isBoolean(d))};isBoolean=function(d){return typeof d==="boolean"};isNull=function(d){return d===null};isNumber=function(d){return typeof d==="number"&&isFinite(d)};isString=function(d){return typeof d==="string"};isEmpty=function(d){if(!isString(d)&&isValue(d)){return false}else{if(!isValue(d)){return true}}d=c.trim(d).replace(/\ \;/ig,"").replace(/\ \;/ig,"");return d===""};isUndefined=function(d){return typeof d==="undefined"};isObject=function(d){return(d&&(typeof d==="object"||isFunction(d)))||false};isFunction=function(d){return typeof d==="function"}})(jQuery);(function(a){a.jgrid.extend({getColProp:function(d){var b={},f=this[0];if(!f.grid){return}var e=f.p.colModel;for(var c=0;c0){a(e).each(function(m){i=this;k=h.rows.namedItem(i[c]);if(k){g=i[c];if(d===true){if(h.p.jsonReader.repeatitems===true){if(h.p.jsonReader.cell){i=i[h.p.jsonReader.cell]}for(var l=0;l span:first",k).html(j).attr("title",a.jgrid.stripHtml(j))}else{a("td:eq("+l+")",k).html(j).attr("title",a.jgrid.stripHtml(j))}}f=true;return true}}a(h.p.colModel).each(function(n){b=d===true?this.jsonmap||this.name:this.name;if(i[b]!=undefined){j=h.formatter(g,i[b],n,i,"edit");if(h.p.treeGrid===true&&b==h.p.ExpandColumn){a("td:eq("+n+") > span:first",k).html(j).attr("title",a.jgrid.stripHtml(j))}else{a("td:eq("+n+")",k).html(j).attr("title",a.jgrid.stripHtml(j))}f=true}})}})}});return f},filterGrid:function(c,b){b=a.extend({gridModel:false,gridNames:false,gridToolbar:false,filterModel:[],formtype:"horizontal",autosearch:true,formclass:"filterform",tableclass:"filtertable",buttonclass:"filterbutton",searchButton:"Search",clearButton:"Clear",enableSearch:false,enableClear:false,beforeSearch:null,afterSearch:null,beforeClear:null,afterClear:null,url:"",marksearched:true},b||{});return this.each(function(){var l=this;this.p=b;if(this.p.filterModel.length==0&&this.p.gridModel===false){alert("No filter is set");return}if(!c){alert("No target grid is set!");return}this.p.gridid=c.indexOf("#")!=-1?c:"#"+c;var d=a(this.p.gridid).jqGrid("getGridParam","colModel");if(d){if(this.p.gridModel===true){var e=a(this.p.gridid)[0];var g;a.each(d,function(o,p){var m=[];this.search=this.search===false?false:true;if(this.editrules&&this.editrules.searchhidden===true){g=true}else{if(this.hidden===true){g=false}else{g=true}}if(this.search===true&&g===true){if(l.p.gridNames===true){m.label=e.p.colNames[o]}else{m.label=""}m.name=this.name;m.index=this.index||this.name;m.stype=this.edittype||"text";if(m.stype!="select"){m.stype="text"}m.defval=this.defval||"";m.surl=this.surl||"";m.sopt=this.editoptions||{};m.width=this.width;l.p.filterModel.push(m)}})}else{a.each(l.p.filterModel,function(o,p){for(var m=0;m0?true:false;a.extend(o.p.postData,q);var s;if(l.p.url){s=a(o).jqGrid("getGridParam","url");a(o).jqGrid("setGridParam",{url:l.p.url})}a(o).jqGrid("setGridParam",{search:r}).trigger("reloadGrid",[{page:1}]);if(s){a(o).jqGrid("setGridParam",{url:s})}if(a.isFunction(l.p.afterSearch)){l.p.afterSearch()}};var k=function(){var q={},n,p=0;var o=a(l.p.gridid)[0],m;if(a.isFunction(l.p.beforeClear)){l.p.beforeClear()}a.each(l.p.filterModel,function(t,w){m=this.index;n=(this.defval)?this.defval:"";if(!this.stype){this.stype=="text"}switch(this.stype){case"select":var v;a("select[name="+m+"] option",l).each(function(x){if(x==0){this.selected=true}if(a(this).text()==n){this.selected=true;v=a(this).val();return false}});if(v){q[m]=v;if(l.p.marksearched){a("#jqgh_"+this.name,o.grid.hDiv).addClass("dirty-cell")}p++}else{if(l.p.marksearched){a("#jqgh_"+this.name,o.grid.hDiv).removeClass("dirty-cell")}try{delete o.p.postData[this.index]}catch(u){}}break;case"text":a("input[name="+m+"]",l).val(n);if(n){q[m]=n;if(l.p.marksearched){a("#jqgh_"+this.name,o.grid.hDiv).addClass("dirty-cell")}p++}else{if(l.p.marksearched){a("#jqgh_"+this.name,o.grid.hDiv).removeClass("dirty-cell")}try{delete o.p.postData[this.index]}catch(u){}}break}});var r=p>0?true:false;a.extend(o.p.postData,q);var s;if(l.p.url){s=a(o).jqGrid("getGridParam","url");a(o).jqGrid("setGridParam",{url:l.p.url})}a(o).jqGrid("setGridParam",{search:r}).trigger("reloadGrid",[{page:1}]);if(s){a(o).jqGrid("setGridParam",{url:s})}if(a.isFunction(l.p.afterClear)){l.p.afterClear()}};var i=function(){var q=document.createElement("tr");var n,s,m,o,r,p;if(l.p.formtype=="horizontal"){a(f).append(q)}a.each(l.p.filterModel,function(A,v){o=document.createElement("td");a(o).append("");r=document.createElement("td");var z=this;if(!this.stype){this.stype="text"}switch(this.stype){case"select":if(this.surl){a(r).load(this.surl,function(){if(z.defval){a("select",this).val(z.defval)}a("select",this).attr({name:z.index||z.name,id:"sg_"+z.name});if(z.sopt){a("select",this).attr(z.sopt)}if(l.p.gridToolbar===true&&z.width){a("select",this).width(z.width)}if(l.p.autosearch===true){a("select",this).change(function(E){h();return false})}})}else{if(z.sopt.value){var t=z.sopt.value;var w=document.createElement("select");a(w).attr({name:z.index||z.name,id:"sg_"+z.name}).attr(z.sopt);if(typeof t==="string"){var u=t.split(";"),D,x;for(var y=0;y");if(z.sopt){a("input",r).attr(z.sopt)}if(l.p.gridToolbar===true&&z.width){if(a.browser.msie){a("input",r).width(z.width-4)}else{a("input",r).width(z.width-2)}}if(l.p.autosearch===true){a("input",r).keypress(function(F){var E=F.charCode?F.charCode:F.keyCode?F.keyCode:0;if(E==13){h();return false}return this})}break}if(l.p.formtype=="horizontal"){if(l.p.gridToolbar===true&&l.p.gridNames===false){a(q).append(r)}else{a(q).append(o).append(r)}a(q).append(r)}else{n=document.createElement("tr");a(n).append(o).append(r);a(f).append(n)}});r=document.createElement("td");if(l.p.enableSearch===true){s="";a(r).append(s);a("input#sButton",r).click(function(){h();return false})}if(l.p.enableClear===true){m="";a(r).append(m);a("input#cButton",r).click(function(){k();return false})}if(l.p.enableClear===true||l.p.enableSearch===true){if(l.p.formtype=="horizontal"){a(q).append(r)}else{n=document.createElement("tr");a(n).append(" ").append(r);a(f).append(n)}}};var j=a("
    ");var f=a("
    ");a(j).append(f);i();a(this).append(j);this.triggerSearch=h;this.clearSearch=k})},filterToolbar:function(b){b=a.extend({autosearch:true,beforeSearch:null,afterSearch:null,beforeClear:null,afterClear:null,searchurl:""},b||{});return this.each(function(){var g=this;var c=function(){var o={},n=0,m,l;g.p.searchdata={};a.each(g.p.colModel,function(s,u){l=this.index||this.name;switch(this.stype){case"select":m=a("select[name="+l+"]",g.grid.hDiv).val();if(m){o[l]=m;n++}else{try{delete g.p.postData[l]}catch(t){}}break;case"text":m=a("input[name="+l+"]",g.grid.hDiv).val();if(m){o[l]=m;n++}else{try{delete g.p.postData[l]}catch(t){}}break}});var p=n>0?true:false;a.extend(g.p.postData,o);var r;if(g.p.searchurl){r=g.p.url;a(g).jqGrid("setGridParam",{url:g.p.searchurl})}var q=false;if(a.isFunction(b.beforeSearch)){q=b.beforeSearch.call(g)}if(!q){a(g).jqGrid("setGridParam",{search:p}).trigger("reloadGrid",[{page:1}])}if(r){a(g).jqGrid("setGridParam",{url:r})}if(a.isFunction(b.afterSearch)){b.afterSearch()}};var j=function(){var o={},m,n=0,l;a.each(g.p.colModel,function(s,v){m=(this.searchoptions&&this.searchoptions.defaultValue)?this.searchoptions.defaultValue:"";l=this.index||this.name;switch(this.stype){case"select":var u;a("select[name="+l+"] option",g.grid.hDiv).each(function(w){if(w==0){this.selected=true}if(a(this).text()==m){this.selected=true;u=a(this).val();return false}});if(u){o[l]=u;n++}else{try{delete g.p.postData[l]}catch(t){}}break;case"text":a("input[name="+l+"]",g.grid.hDiv).val(m);if(m){o[l]=m;n++}else{try{delete g.p.postData[l]}catch(t){}}break}});var q=n>0?true:false;a.extend(g.p.postData,o);var r;if(g.p.searchurl){r=g.p.url;a(g).jqGrid("setGridParam",{url:g.p.searchurl})}var p=false;if(a.isFunction(b.beforeClear)){p=b.beforeClear.call(g)}if(!p){a(g).jqGrid("setGridParam",{search:q}).trigger("reloadGrid",[{page:1}])}if(r){a(g).jqGrid("setGridParam",{url:r})}if(a.isFunction(b.afterClear)){b.afterClear()}};var k=function(){var l=a("tr.ui-search-toolbar",g.grid.hDiv);if(l.css("display")=="none"){l.show()}else{l.hide()}};function f(l,n){var m=a(l);if(m[0]!=null){jQuery.each(n,function(){if(this.data!=null){m.bind(this.type,this.data,this.fn)}else{m.bind(this.type,this.fn)}})}}var h=a(""),d,i,e;a.each(g.p.colModel,function(t,p){var v=this;d=a("");i=a("
    ");if(this.hidden===true){a(d).css("display","none")}this.search=this.search===false?false:true;if(typeof this.stype=="undefined"){this.stype="text"}e=a.extend({},this.searchoptions||{});if(this.search){switch(this.stype){case"select":var l=this.surl||e.dataUrl;if(l){var y=i;a.ajax(a.extend({url:l,dataType:"html",complete:function(z,n){if(e.buildSelect!=null){var A=e.buildSelect(z);if(A){a(y).append(A)}}else{a(y).append(z.responseText)}if(e.defaultValue){a("select",y).val(e.defaultValue)}a("select",y).attr({name:v.index||v.name,id:"gs_"+v.name});if(e.attr){a("select",y).attr(e.attr)}a("select",y).css({width:"100%"});if(e.dataInit!=null){e.dataInit(a("select",y)[0])}if(e.dataEvents!=null){f(a("select",y)[0],e.dataEvents)}if(b.autosearch===true){a("select",y).change(function(B){c();return false})}}},a.jgrid.ajaxOptions,g.p.ajaxSelectOptions||{}))}else{var m;if(v.searchoptions&&v.searchoptions.value){m=v.searchoptions.value}else{if(v.editoptions&&v.editoptions.value){m=v.editoptions.value}}if(m){var r=document.createElement("select");r.style.width="100%";a(r).attr({name:v.index||v.name,id:"gs_"+v.name});if(typeof m==="string"){var o=m.split(";"),x,q;for(var s=0;s");if(e.attr){a("input",i).attr(e.attr)}if(e.dataInit!=null){e.dataInit(a("input",i)[0])}if(e.dataEvents!=null){f(a("input",i)[0],e.dataEvents)}if(b.autosearch===true){a("input",i).keypress(function(z){var n=z.charCode?z.charCode:z.keyCode?z.keyCode:0;if(n==13){c();return false}return this})}break}}a(d).append(i);a(h).append(d)});a("table thead",g.grid.hDiv).append(h);this.triggerToolbar=c;this.clearToolbar=j;this.toggleToolbar=k})}})})(jQuery);var showModal=function(a){a.w.show()};var closeModal=function(a){a.w.hide().attr("aria-hidden","true");if(a.o){a.o.remove()}};var createModal=function(l,g,b,n,q,o){var k=document.createElement("div"),a;a=jQuery(b.gbox).attr("dir")=="rtl"?true:false;k.className="ui-widget ui-widget-content ui-corner-all ui-jqdialog";k.id=l.themodal;var d=document.createElement("div");d.className="ui-jqdialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix";d.id=l.modalhead;jQuery(d).append(""+b.caption+"");var m=jQuery("").hover(function(){m.addClass("ui-state-hover")},function(){m.removeClass("ui-state-hover")}).append("");jQuery(d).append(m);if(a){k.dir="rtl";jQuery(".ui-jqdialog-title",d).css("float","right");jQuery(".ui-jqdialog-titlebar-close",d).css("left",0.3+"em")}else{k.dir="ltr";jQuery(".ui-jqdialog-title",d).css("float","left");jQuery(".ui-jqdialog-titlebar-close",d).css("right",0.3+"em")}var i=document.createElement("div");jQuery(i).addClass("ui-jqdialog-content ui-widget-content").attr("id",l.modalcontent);jQuery(i).append(g);k.appendChild(i);jQuery(k).prepend(d);if(o===true){jQuery("body").append(k)}else{jQuery(k).insertBefore(n)}if(typeof b.jqModal==="undefined"){b.jqModal=true}var c={};if(jQuery.fn.jqm&&b.jqModal===true){if(b.left==0&&b.top==0){var h=[];h=findPos(q);b.left=h[0]+4;b.top=h[1]+4}c.top=b.top+"px";c.left=b.left}else{if(b.left!=0||b.top!=0){c.left=b.left;c.top=b.top+"px"}}jQuery("a.ui-jqdialog-titlebar-close",d).click(function(r){var p=jQuery("#"+l.themodal).data("onClose")||b.onClose;var s=jQuery("#"+l.themodal).data("gbox")||b.gbox;hideModal("#"+l.themodal,{gb:s,jqm:b.jqModal,onClose:p});return false});if(b.width==0||!b.width){b.width=300}if(b.height==0||!b.height){b.height=200}if(!b.zIndex){b.zIndex=950}var j=0;if(a&&c.left&&!o){j=jQuery(b.gbox).width()-(!isNaN(b.width)?parseInt(b.width):0)-8;c.left=parseInt(c.left)+parseInt(j)}if(c.left){c.left+="px"}jQuery(k).css(jQuery.extend({width:isNaN(b.width)?"auto":b.width+"px",height:isNaN(b.height)?"auto":b.height+"px",zIndex:b.zIndex,overflow:"hidden"},c)).attr({tabIndex:"-1",role:"dialog","aria-labelledby":l.modalhead,"aria-hidden":"true"});if(typeof b.drag=="undefined"){b.drag=true}if(typeof b.resize=="undefined"){b.resize=true}if(b.drag){jQuery(d).css("cursor","move");if(jQuery.fn.jqDrag){jQuery(k).jqDrag(d)}else{try{jQuery(k).draggable({handle:jQuery("#"+d.id)})}catch(f){}}}if(b.resize){if(jQuery.fn.jqResize){jQuery(k).append("
    ");jQuery("#"+l.themodal).jqResize(".jqResize",l.scrollelm?"#"+l.scrollelm:false)}else{try{jQuery(k).resizable({handles:"se, sw",alsoResize:l.scrollelm?"#"+l.scrollelm:false})}catch(f){}}}if(b.closeOnEscape===true){jQuery(k).keydown(function(r){if(r.which==27){var p=jQuery("#"+l.themodal).data("onClose")||b.onClose;hideModal(this,{gb:b.gbox,jqm:b.jqModal,onClose:p})}})}};var viewModal=function(a,c){c=jQuery.extend({toTop:true,overlay:10,modal:false,onShow:showModal,onHide:closeModal,gbox:"",jqm:true,jqM:true},c||{});if(jQuery.fn.jqm&&c.jqm==true){if(c.jqM){jQuery(a).attr("aria-hidden","false").jqm(c).jqmShow()}else{jQuery(a).attr("aria-hidden","false").jqmShow()}}else{if(c.gbox!=""){jQuery(".jqgrid-overlay:first",c.gbox).show();jQuery(a).data("gbox",c.gbox)}jQuery(a).show().attr("aria-hidden","false");try{jQuery(":input:visible",a)[0].focus()}catch(b){}}};var hideModal=function(a,d){d=jQuery.extend({jqm:true,gb:""},d||{});if(d.onClose){var b=d.onClose(a);if(typeof b=="boolean"&&!b){return}}if(jQuery.fn.jqm&&d.jqm===true){jQuery(a).attr("aria-hidden","true").jqmHide()}else{if(d.gb!=""){try{jQuery(".jqgrid-overlay:first",d.gb).hide()}catch(c){}}jQuery(a).hide().attr("aria-hidden","true")}};function info_dialog(n,h,b,m){var k={width:290,height:"auto",dataheight:"auto",drag:true,resize:false,caption:""+n+"",left:250,top:170,zIndex:1000,jqModal:true,closeOnEscape:true,align:"center",buttonalign:"center",buttons:[]};jQuery.extend(k,m||{});var c=k.jqModal;if(jQuery.fn.jqm&&!c){c=false}var f="";if(k.buttons.length>0){for(var d=0;d"+k.buttons[d].text+""}}var j=isNaN(k.dataheight)?k.dataheight:k.dataheight+"px",l="text-align:"+k.align+";";var a="
    ";a+="
    "+h+"
    ";a+=b?"
    "+b+""+f+"
    ":"";a+="
    ";try{if(jQuery("#info_dialog").attr("aria-hidden")=="false"){hideModal("#info_dialog",{jqm:c})}jQuery("#info_dialog").remove()}catch(g){}createModal({themodal:"info_dialog",modalhead:"info_head",modalcontent:"info_content",scrollelm:"infocnt"},a,k,"","",true);if(f){jQuery.each(k.buttons,function(e){jQuery("#"+this.id,"#info_id").bind("click",function(){k.buttons[e].onClick.call(jQuery("#info_dialog"));return false})})}jQuery("#closedialog","#info_id").click(function(i){hideModal("#info_dialog",{jqm:c});return false});jQuery(".fm-button","#info_dialog").hover(function(){jQuery(this).addClass("ui-state-hover")},function(){jQuery(this).removeClass("ui-state-hover")});viewModal("#info_dialog",{onHide:function(e){e.w.hide().remove();if(e.o){e.o.remove()}},modal:true,jqm:c})}function findPos(a){var b=curtop=0;if(a.offsetParent){do{b+=a.offsetLeft;curtop+=a.offsetTop}while(a=a.offsetParent)}return[b,curtop]}function isArray(a){if(a.constructor.toString().indexOf("Array")==-1){return false}else{return true}}function createEl(d,f,s,j,q){var r="";if(f.defaultValue){delete f.defaultValue}function k(i,e){if(jQuery.isFunction(e.dataInit)){i.id=e.id;e.dataInit(i);delete e.id;delete e.dataInit}if(e.dataEvents){jQuery.each(e.dataEvents,function(){if(this.data!=null){jQuery(i).bind(this.type,this.data,this.fn)}else{jQuery(i).bind(this.type,this.fn)}});delete e.dataEvents}return e}switch(d){case"textarea":r=document.createElement("textarea");if(j){if(!f.cols){jQuery(r).css({width:"98%"})}}else{if(!f.cols){f.cols=20}}if(!f.rows){f.rows=2}if(s==" "||s==" "||(s.length==1&&s.charCodeAt(0)==160)){s=""}r.value=s;f=k(r,f);jQuery(r).attr(f);break;case"checkbox":r=document.createElement("input");r.type="checkbox";if(!f.value){var u=s.toLowerCase();if(u.search(/(false|0|no|off|undefined)/i)<0&&u!==""){r.checked=true;r.defaultChecked=true;r.value=s}else{r.value="on"}jQuery(r).attr("offval","off")}else{var m=f.value.split(":");if(s===m[0]){r.checked=true;r.defaultChecked=true}r.value=m[0];jQuery(r).attr("offval",m[1]);try{delete f.value}catch(p){}}f=k(r,f);jQuery(r).attr(f);break;case"select":r=document.createElement("select");var b,g=[];if(f.multiple===true){b=true;r.multiple="multiple"}else{b=false}if(f.dataUrl!=null){jQuery.ajax(jQuery.extend({url:f.dataUrl,type:"GET",complete:function(x,w){try{delete f.dataUrl;delete f.value}catch(y){}var v;if(f.buildSelect!=null){var i=f.buildSelect(x);v=jQuery(i).html();delete f.buildSelect}else{v=jQuery(x.responseText).html()}if(v){jQuery(r).append(v);f=k(r,f);if(typeof f.size==="undefined"){f.size=b?3:1}if(b){g=s.split(",");g=jQuery.map(g,function(e){return jQuery.trim(e)})}else{g[0]=s}jQuery(r).attr(f);setTimeout(function(){jQuery("option",r).each(function(e){if(e==0){this.selected=""}if(jQuery.inArray(jQuery(this).text(),g)>-1||jQuery.inArray(jQuery(this).val(),g)>-1){this.selected="selected";if(!b){return false}}})},0)}}},q||{}))}else{if(f.value){var n;if(b){g=s.split(",");g=jQuery.map(g,function(e){return jQuery.trim(e)});if(typeof f.size==="undefined"){f.size=3}}else{f.size=1}if(typeof f.value==="function"){f.value=f.value()}if(typeof f.value==="string"){var o=f.value.split(";"),l,h;for(n=0;n-1||jQuery.inArray(l[0],g)>-1)){h.selected="selected"}r.appendChild(h)}}else{if(typeof f.value==="object"){var c=f.value;for(var t in c){h=document.createElement("option");h.value=t;h.innerHTML=c[t];if(!b&&(t==s||c[t]==s)){h.selected="selected"}if(b&&(jQuery.inArray(c[t],g)>-1||jQuery.inArray(t,g)>-1)){h.selected="selected"}r.appendChild(h)}}}f=k(r,f);try{delete f.value}catch(p){}jQuery(r).attr(f)}}break;case"text":case"password":case"button":r=document.createElement("input");r.type=d;r.value=jQuery.jgrid.htmlDecode(s);f=k(r,f);if(d!="button"){if(j){if(!f.size){jQuery(r).css({width:"98%"})}}else{if(!f.size){f.size=20}}}jQuery(r).attr(f);break;case"image":case"file":r=document.createElement("input");r.type=d;f=k(r,f);jQuery(r).attr(f);break;case"custom":r=document.createElement("span");try{if(jQuery.isFunction(f.custom_element)){var a=f.custom_element.call(this,s,f);if(a){a=jQuery(a).addClass("customelement").attr({id:f.id,name:f.name});jQuery(r).empty().append(a)}else{throw"e2"}}else{throw"e1"}}catch(p){if(p=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_element' "+jQuery.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose)}if(p=="e2"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_element' "+jQuery.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,p.message,jQuery.jgrid.edit.bClose)}}break}return r}function checkValues(c,m,j){var f,h,n;if(typeof(m)=="string"){for(h=0,len=j.p.colModel.length;h=0){f=j.p.colModel[m].editrules}}if(f){if(!n){n=j.p.colNames[m]}if(f.required===true){if(c.match(/^s+$/)||c==""){return[false,n+": "+jQuery.jgrid.edit.msg.required,""]}}var d=f.required===false?false:true;if(f.number===true){if(!(d===false&&isEmpty(c))){if(isNaN(c)){return[false,n+": "+jQuery.jgrid.edit.msg.number,""]}}}if(typeof f.minValue!="undefined"&&!isNaN(f.minValue)){if(parseFloat(c)parseFloat(f.maxValue)){return[false,n+": "+jQuery.jgrid.edit.msg.maxValue+" "+f.maxValue,""]}}var a;if(f.email===true){if(!(d===false&&isEmpty(c))){a=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;if(!a.test(c)){return[false,n+": "+jQuery.jgrid.edit.msg.email,""]}}}if(f.integer===true){if(!(d===false&&isEmpty(c))){if(isNaN(c)){return[false,n+": "+jQuery.jgrid.edit.msg.integer,""]}if((c%1!=0)||(c.indexOf(".")!=-1)){return[false,n+": "+jQuery.jgrid.edit.msg.integer,""]}}}if(f.date===true){if(!(d===false&&isEmpty(c))){var b=j.p.colModel[m].datefmt||"Y-m-d";if(!checkDate(b,c)){return[false,n+": "+jQuery.jgrid.edit.msg.date+" - "+b,""]}}}if(f.time===true){if(!(d===false&&isEmpty(c))){if(!checkTime(c)){return[false,n+": "+jQuery.jgrid.edit.msg.date+" - hh:mm (am/pm)",""]}}}if(f.url===true){if(!(d===false&&isEmpty(c))){a=/^(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;if(!a.test(c)){return[false,n+": "+jQuery.jgrid.edit.msg.url,""]}}}if(f.custom===true){if(!(d===false&&isEmpty(c))){if(jQuery.isFunction(f.custom_func)){var k=f.custom_func.call(j,c,n);if(jQuery.isArray(k)){return k}else{return[false,jQuery.jgrid.edit.msg.customarray,""]}}else{return[false,jQuery.jgrid.edit.msg.customfcheck,""]}}}}return[true,"",""]}function checkDate(l,c){var e={},n;l=l.toLowerCase();if(l.indexOf("/")!=-1){n="/"}else{if(l.indexOf("-")!=-1){n="-"}else{if(l.indexOf(".")!=-1){n="."}else{n="/"}}}l=l.split(n);c=c.split(n);if(c.length!=3){return false}var f=-1,m,g=-1,d=-1;for(var h=0;h12){return false}}if(g===-1){return false}else{k=e[l[g]].toString();if(k.length<1||e[l[g]]<1||e[l[g]]>31||(e[l[d]]==2&&e[l[g]]>daysInFebruary(e[l[f]]))||e[l[g]]>a[e[l[d]]]){return false}}return true}function daysInFebruary(a){return(((a%4==0)&&((!(a%100==0))||(a%400==0)))?29:28)}function DaysArray(b){for(var a=1;a<=b;a++){this[a]=31;if(a==4||a==6||a==9||a==11){this[a]=30}if(a==2){this[a]=29}}return this}function isEmpty(a){if(a.match(/^s+$/)||a==""){return true}else{return false}}function checkTime(c){var b=/^(\d{1,2}):(\d{2})([ap]m)?$/,a;if(!isEmpty(c)){a=c.match(b);if(a){if(a[3]){if(a[1]<1||a[1]>12){return false}}else{if(a[1]>23){return false}}if(a[2]>59){return false}}else{return false}}return true};(function(b){var a=null;b.jgrid.extend({searchGrid:function(c){c=b.extend({recreateFilter:false,drag:true,sField:"searchField",sValue:"searchString",sOper:"searchOper",sFilter:"filters",beforeShowSearch:null,afterShowSearch:null,onInitializeSearch:null,closeAfterSearch:false,closeOnEscape:false,multipleSearch:false,sopt:null,onClose:null},b.jgrid.search,c||{});return this.each(function(){var l=this;if(!l.grid){return}if(b.fn.searchFilter){var g="fbox_"+l.p.id;if(c.recreateFilter===true){b("#"+g).remove()}if(b("#"+g).html()!=null){if(b.isFunction(c.beforeShowSearch)){c.beforeShowSearch(b("#"+g))}f();if(b.isFunction(c.afterShowSearch)){c.afterShowSearch(b("#"+g))}}else{var n=[],v=b("#"+l.p.id).jqGrid("getGridParam","colNames"),s=b("#"+l.p.id).jqGrid("getGridParam","colModel"),u=["eq","ne","lt","le","gt","ge","bw","bn","in","ni","ew","en","cn","nc"],i,r,h,p;p=jQuery.fn.searchFilter.defaults.operators;if(c.sopt!=null){p=[];h=0;for(i=0;i0){for(i=0;i0){b("").insertBefore("#gview_"+l.p.id);b("#"+g).searchFilter(n,{groupOps:c.groupOps,operators:p,onClose:d,resetText:c.Reset,searchText:c.Find,windowTitle:c.caption,rulesText:c.rulesText,matchText:c.matchText,onSearch:t,onReset:m,stringResult:c.multipleSearch,ajaxSelectOptions:b.extend({},b.jgrid.ajaxOptions,l.p.ajaxSelectOptions||{})});b(".ui-widget-overlay","#"+g).remove();if(l.p.direction=="rtl"){b(".ui-closer","#"+g).css("float","left")}if(c.drag===true){b("#"+g+" table thead tr:first td:first").css("cursor","move");if(jQuery.fn.jqDrag){b("#"+g).jqDrag(b("#"+g+" table thead tr:first td:first"))}else{try{b("#"+g).draggable({handle:b("#"+g+" table thead tr:first td:first")})}catch(o){}}}if(c.multipleSearch===false){b(".ui-del, .ui-add, .ui-del, .ui-add-last, .matchText, .rulesText","#"+g).hide();b("select[name='groupOp']","#"+g).hide()}if(b.isFunction(c.onInitializeSearch)){c.onInitializeSearch(b("#"+g))}if(b.isFunction(c.beforeShowSearch)){c.beforeShowSearch(b("#"+g))}f();if(b.isFunction(c.afterShowSearch)){c.afterShowSearch(b("#"+g))}if(c.closeOnEscape===true){b("#"+g).keydown(function(j){if(j.which==27){d(b("#"+g))}})}}}}function t(w){var e=(w!==undefined),k=b("#"+l.p.id),j={};if(c.multipleSearch===false){j[c.sField]=w.rules[0].field;j[c.sValue]=w.rules[0].data;j[c.sOper]=w.rules[0].op}else{j[c.sFilter]=w}k[0].p.search=e;b.extend(k[0].p.postData,j);k.trigger("reloadGrid",[{page:1}]);if(c.closeAfterSearch){d(b("#"+g))}}function m(w){var e=(w!==undefined),k=b("#"+l.p.id),j=[];k[0].p.search=e;if(c.multipleSearch===false){j[c.sField]=j[c.sValue]=j[c.sOper]=""}else{j[c.sFilter]=""}b.extend(k[0].p.postData,j);k.trigger("reloadGrid",[{page:1}])}function d(e){if(c.onClose){var j=c.onClose(e);if(typeof j=="boolean"&&!j){return}}e.hide();b(".jqgrid-overlay:first","#gbox_"+l.p.id).hide()}function f(){var k=b(".ui-searchFilter").length;if(k>1){var j=b("#"+g).css("zIndex");b("#"+g).css({zIndex:parseInt(j)+k})}b("#"+g).show();b(".jqgrid-overlay:first","#gbox_"+l.p.id).show();try{b(":input:visible","#"+g)[0].focus()}catch(e){}}})},editGridRow:function(c,d){d=b.extend({top:0,left:0,width:300,height:"auto",dataheight:"auto",modal:false,drag:true,resize:true,url:null,mtype:"POST",clearAfterAdd:true,closeAfterEdit:false,reloadAfterSubmit:true,onInitializeForm:null,beforeInitData:null,beforeShowForm:null,afterShowForm:null,beforeSubmit:null,afterSubmit:null,onclickSubmit:null,afterComplete:null,onclickPgButtons:null,afterclickPgButtons:null,editData:{},recreateForm:false,jqModal:true,closeOnEscape:false,addedrow:"first",topinfo:"",bottominfo:"",saveicon:[],closeicon:[],savekey:[false,13],navkeys:[false,38,40],checkOnSubmit:false,checkOnUpdate:false,_savedData:{},onClose:null,ajaxEditOptions:{},serializeEditData:null},b.jgrid.edit,d||{});a=d;return this.each(function(){var e=this;if(!e.grid||!c){return}var C=e.p.id,y="FrmGrid_"+C,u="TblGrid_"+C,i={themodal:"editmod"+C,modalhead:"edithd"+C,modalcontent:"editcnt"+C,scrollelm:y},D=b.isFunction(a.beforeShowForm)?a.beforeShowForm:false,O=b.isFunction(a.afterShowForm)?a.afterShowForm:false,N=b.isFunction(a.beforeInitData)?a.beforeInitData:false,o=b.isFunction(a.onInitializeForm)?a.onInitializeForm:false,I=null,J=1,q=0,v,E,F,R,H,B;if(c=="new"){c="_empty";d.caption=d.addCaption}else{d.caption=d.editCaption}if(d.recreateForm===true&&b("#"+i.themodal).html()!=null){b("#"+i.themodal).remove()}var k=true;if(d.checkOnUpdate&&d.jqModal&&!d.modal){k=false}if(b("#"+i.themodal).html()!=null){b(".ui-jqdialog-title","#"+i.modalhead).html(d.caption);b("#FormError","#"+u).hide();if(a.topinfo){b(".topinfo","#"+u+"_2").html(a.topinfo);b(".tinfo","#"+u+"_2").show()}else{b(".tinfo","#"+u+"_2").hide()}if(a.bottominfo){b(".bottominfo","#"+u+"_2").html(a.bottominfo);b(".binfo","#"+u+"_2").show()}else{b(".binfo","#"+u+"_2").hide()}if(N){N(b("#"+y))}n(c,e,y);if(c=="_empty"){b("#pData, #nData","#"+u+"_2").hide()}else{b("#pData, #nData","#"+u+"_2").show()}if(d.processing===true){d.processing=false;b("#sData","#"+u+"_2").removeClass("ui-state-active")}if(b("#"+y).data("disabled")===true){b(".confirm","#"+i.themodal).hide();b("#"+y).data("disabled",false)}if(D){D(b("#"+y))}b("#"+i.themodal).data("onClose",a.onClose);viewModal("#"+i.themodal,{gbox:"#gbox_"+C,jqm:d.jqModal,jqM:false,closeoverlay:k,modal:d.modal});if(!k){b(".jqmOverlay").click(function(){if(!g()){return false}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false})}if(O){O(b("#"+y))}}else{b(e.p.colModel).each(function(Y){var Z=this.formoptions;J=Math.max(J,Z?Z.colpos||0:0);q=Math.max(q,Z?Z.rowpos||0:0)});var r=isNaN(d.dataheight)?d.dataheight:d.dataheight+"px";var M,U=b("
    ").data("disabled",false),A=b("
    ");b(U).append(A);M=b("");M[0].rp=0;b(A).append(M);M=b(""+a.topinfo+"");M[0].rp=0;b(A).append(M);if(N){N(b("#"+y))}var f=e.p.direction=="rtl"?true:false,T=f?"nData":"pData",V=f?"pData":"nData",z=s(c,e,A,J),l="",m="",h=""+d.bSubmit+"",t=""+d.bCancel+"";var Q="";Q+="";Q+="
    "+h+t+"
    ";if(q>0){var x=[];b.each(b(A)[0].rows,function(Y,Z){x[Y]=Z});x.sort(function(Z,Y){if(Z.rp>Y.rp){return 1}if(Z.rp
    ").append(U).append(Q);createModal(i,P,d,"#gview_"+e.p.id,b("#gview_"+e.p.id)[0]);if(f){b("#pData, #nData","#"+u+"_2").css("float","right");b(".EditButton","#"+u+"_2").css("text-align","left")}if(a.topinfo){b(".tinfo","#"+u+"_2").show()}if(a.bottominfo){b(".binfo","#"+u+"_2").show()}P=null;Q=null;b("#"+i.themodal).keydown(function(Y){var Z=Y.target;if(b("#"+y).data("disabled")===true){return false}if(a.savekey[0]===true&&Y.which==a.savekey[1]){if(Z.tagName!="TEXTAREA"){b("#sData","#"+u+"_2").trigger("click");return false}}if(Y.which===27){if(!g()){return false}if(p){hideModal(this,{gb:d.gbox,jqm:d.jqModal,onClose:a.onClose})}return false}if(a.navkeys[0]===true){if(b("#id_g","#"+u).val()=="_empty"){return true}if(Y.which==a.navkeys[1]){b("#pData","#"+u+"_2").trigger("click");return false}if(Y.which==a.navkeys[2]){b("#nData","#"+u+"_2").trigger("click");return false}}});if(d.checkOnUpdate){b("a.ui-jqdialog-titlebar-close span","#"+i.themodal).removeClass("jqmClose");b("a.ui-jqdialog-titlebar-close","#"+i.themodal).unbind("click").click(function(){if(!g()){return false}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false})}d.saveicon=b.extend([true,"left","ui-icon-disk"],d.saveicon);d.closeicon=b.extend([true,"left","ui-icon-close"],d.closeicon);if(d.saveicon[0]==true){b("#sData","#"+u+"_2").addClass(d.saveicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(d.closeicon[0]==true){b("#cData","#"+u+"_2").addClass(d.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(a.checkOnSubmit||a.checkOnUpdate){h=""+d.bYes+"";m=""+d.bNo+"";t=""+d.bExit+"";var G,w=d.zIndex||999;w++;if(b.browser.msie&&b.browser.version==6){G=''}else{G=""}b("
    "+d.saveData+"

    "+h+m+t+"
    ").insertAfter("#"+y);b("#sNew","#"+i.themodal).click(function(){j();b("#"+y).data("disabled",false);b(".confirm","#"+i.themodal).hide();return false});b("#nNew","#"+i.themodal).click(function(){b(".confirm","#"+i.themodal).hide();b("#"+y).data("disabled",false);setTimeout(function(){b(":input","#"+y)[0].focus()},0);return false});b("#cNew","#"+i.themodal).click(function(){b(".confirm","#"+i.themodal).hide();b("#"+y).data("disabled",false);hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false})}if(o){o(b("#"+y))}if(c=="_empty"){b("#pData,#nData","#"+u+"_2").hide()}else{b("#pData,#nData","#"+u+"_2").show()}if(D){D(b("#"+y))}b("#"+i.themodal).data("onClose",a.onClose);viewModal("#"+i.themodal,{gbox:"#gbox_"+C,jqm:d.jqModal,closeoverlay:k,modal:d.modal});if(!k){b(".jqmOverlay").click(function(){if(!g()){return false}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false})}if(O){O(b("#"+y))}b(".fm-button","#"+i.themodal).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});b("#sData","#"+u+"_2").click(function(Y){E={};R={};b("#FormError","#"+u).hide();W();if(E.id=="_empty"){j()}else{if(d.checkOnSubmit===true){H=b.extend({},E,R);B=K(H,a._savedData);if(B){b("#"+y).data("disabled",true);b(".confirm","#"+i.themodal).show()}else{j()}}else{j()}}return false});b("#cData","#"+u+"_2").click(function(Y){if(!g()){return false}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false});b("#nData","#"+u+"_2").click(function(Y){if(!g()){return false}b("#FormError","#"+u).hide();var Z=X();Z[0]=parseInt(Z[0]);if(Z[0]!=-1&&Z[1][Z[0]+1]){if(b.isFunction(d.onclickPgButtons)){d.onclickPgButtons("next",b("#"+y),Z[1][Z[0]])}n(Z[1][Z[0]+1],e,y);b(e).jqGrid("setSelection",Z[1][Z[0]+1]);if(b.isFunction(d.afterclickPgButtons)){d.afterclickPgButtons("next",b("#"+y),Z[1][Z[0]+1])}L(Z[0]+1,Z[1].length-1)}return false});b("#pData","#"+u+"_2").click(function(Z){if(!g()){return false}b("#FormError","#"+u).hide();var Y=X();if(Y[0]!=-1&&Y[1][Y[0]-1]){if(b.isFunction(d.onclickPgButtons)){d.onclickPgButtons("prev",b("#"+y),Y[1][Y[0]])}n(Y[1][Y[0]-1],e,y);b(e).jqGrid("setSelection",Y[1][Y[0]-1]);if(b.isFunction(d.afterclickPgButtons)){d.afterclickPgButtons("prev",b("#"+y),Y[1][Y[0]-1])}L(Y[0]-1,Y[1].length-1)}return false})}var S=X();L(S[0],S[1].length-1);function L(Z,aa,Y){if(Z==0){b("#pData","#"+u+"_2").addClass("ui-state-disabled")}else{b("#pData","#"+u+"_2").removeClass("ui-state-disabled")}if(Z==aa){b("#nData","#"+u+"_2").addClass("ui-state-disabled")}else{b("#nData","#"+u+"_2").removeClass("ui-state-disabled")}}function X(){var Z=b(e).jqGrid("getDataIDs"),Y=b("#id_g","#"+u).val(),aa=b.inArray(Y,Z);return[aa,Z]}function g(){var Y=true;b("#FormError","#"+u).hide();if(a.checkOnUpdate){E={};R={};W();H=b.extend({},E,R);B=K(H,a._savedData);if(B){b("#"+y).data("disabled",true);b(".confirm","#"+i.themodal).show();Y=false}}return Y}function W(){b(".FormElement","#"+u).each(function(aa){var ad=b(".customelement",this);if(ad.length){var ab=ad[0],Y=ab.name;b.each(e.p.colModel,function(ae,ag){if(this.name==Y&&this.editoptions&&b.isFunction(this.editoptions.custom_value)){try{E[Y]=this.editoptions.custom_value(b("#"+Y,"#"+u),"get");if(E[Y]===undefined){throw"e1"}}catch(af){if(af=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+b.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,af.message,jQuery.jgrid.edit.bClose)}}return true}})}else{switch(b(this).get(0).type){case"checkbox":if(b(this).attr("checked")){E[this.name]=b(this).val()}else{var Z=b(this).attr("offval");E[this.name]=Z}break;case"select-one":E[this.name]=b("option:selected",this).val();R[this.name]=b("option:selected",this).text();break;case"select-multiple":E[this.name]=b(this).val();if(E[this.name]){E[this.name]=E[this.name].join(",")}else{E[this.name]=""}var ac=[];b("option:selected",this).each(function(ae,af){ac[ae]=b(af).text()});R[this.name]=ac.join(",");break;case"password":case"text":case"textarea":case"button":E[this.name]=b(this).val();E[this.name]=!e.p.autoencode?E[this.name]:b.jgrid.htmlEncode(E[this.name]);break}}});return true}function s(ab,ah,ae,am){var Y,Z,aj,ak=0,ao,ap,ai,an=[],af=false,ag,aa,ac="  ",ad="";for(var al=1;al<=am;al++){ad+=ac}if(ab!="_empty"){af=b(ah).jqGrid("getInd",ab)}b(ah.p.colModel).each(function(au){Y=this.name;if(this.editrules&&this.editrules.edithidden==true){Z=false}else{Z=this.hidden===true?true:false}ap=Z?"style='display:none'":"";if(Y!=="cb"&&Y!=="subgrid"&&this.editable===true&&Y!=="rn"){if(af===false){ao=""}else{if(Y==ah.p.ExpandColumn&&ah.p.treeGrid===true){ao=b("td:eq("+au+")",ah.rows[af]).text()}else{try{ao=b.unformat(b("td:eq("+au+")",ah.rows[af]),{colModel:this},au)}catch(ar){ao=b("td:eq("+au+")",ah.rows[af]).html()}}}var at=b.extend({},this.editoptions||{},{id:Y,name:Y});frmopt=b.extend({},{elmprefix:"",elmsuffix:"",rowabove:false,rowcontent:""},this.formoptions||{}),ag=parseInt(frmopt.rowpos)||ak+1,aa=parseInt((parseInt(frmopt.colpos)||1)*2);if(ab=="_empty"&&at.defaultValue){ao=b.isFunction(at.defaultValue)?at.defaultValue():at.defaultValue}if(!this.edittype){this.edittype="text"}ai=createEl(this.edittype,at,ao,false,b.extend({},b.jgrid.ajaxOptions,ah.p.ajaxSelectOptions||{}));if(ao==""&&this.edittype=="checkbox"){ao=b(ai).attr("offval")}if(a.checkOnSubmit||a.checkOnUpdate){a._savedData[Y]=ao}b(ai).addClass("FormElement");aj=b(ae).find("tr[rowpos="+ag+"]");if(frmopt.rowabove){var av=b(""+frmopt.rowcontent+"");b(ae).append(av);av[0].rp=ag}if(aj.length==0){aj=b("").addClass("FormData").attr("id","tr_"+Y);b(aj).append(ad);b(ae).append(aj);aj[0].rp=ag}b("td:eq("+(aa-2)+")",aj[0]).html(typeof frmopt.label==="undefined"?ah.p.colNames[au]:frmopt.label);b("td:eq("+(aa-1)+")",aj[0]).append(frmopt.elmprefix).append(ai).append(frmopt.elmsuffix);an[ak]=au;ak++}});if(ak>0){var aq=b("");aq[0].rp=ak+999;b(ae).append(aq);if(a.checkOnSubmit||a.checkOnUpdate){a._savedData.id=ab}}return an}function n(Z,af,ab){var ak,ah,ac=0,ag,ae,Y,ad,ai;if(a.checkOnSubmit||a.checkOnUpdate){a._savedData={};a._savedData.id=Z}var aj=af.p.colModel;if(Z=="_empty"){b(aj).each(function(al){ak=this.name;Y=b.extend({},this.editoptions||{});ae=b("#"+b.jgrid.jqID(ak),"#"+ab);if(ae[0]!=null){ad="";if(Y.defaultValue){ad=b.isFunction(Y.defaultValue)?Y.defaultValue():Y.defaultValue;if(ae[0].type=="checkbox"){ai=ad.toLowerCase();if(ai.search(/(false|0|no|off|undefined)/i)<0&&ai!==""){ae[0].checked=true;ae[0].defaultChecked=true;ae[0].value=ad}else{ae.attr({checked:"",defaultChecked:""})}}else{ae.val(ad)}}else{if(ae[0].type=="checkbox"){ae[0].checked=false;ae[0].defaultChecked=false;ad=b(ae).attr("offval")}else{if(ae[0].type.substr(0,6)=="select"){ae[0].selectedIndex=0}else{ae.val(ad)}}}if(a.checkOnSubmit===true||a.checkOnUpdate){a._savedData[ak]=ad}}});b("#id_g","#"+ab).val("_empty");return}var aa=b(af).jqGrid("getInd",Z,true);if(!aa){return}b("td",aa).each(function(an){ak=aj[an].name;if(ak!=="cb"&&ak!=="subgrid"&&ak!=="rn"&&aj[an].editable===true){if(ak==af.p.ExpandColumn&&af.p.treeGrid===true){ag=b(this).text()}else{try{ag=b.unformat(this,{colModel:aj[an]},an)}catch(am){ag=b(this).html()}}if(a.checkOnSubmit===true||a.checkOnUpdate){a._savedData[ak]=ag}ak=b.jgrid.jqID(ak);switch(aj[an].edittype){case"password":case"text":case"button":case"image":ag=b.jgrid.htmlDecode(ag);b("#"+ak,"#"+ab).val(ag);break;case"textarea":if(ag==" "||ag==" "||(ag.length==1&&ag.charCodeAt(0)==160)){ag=""}b("#"+ak,"#"+ab).val(ag);break;case"select":var al=ag.split(",");al=b.map(al,function(aq){return b.trim(aq)});b("#"+ak+" option","#"+ab).each(function(aq){if(!aj[an].editoptions.multiple&&(al[0]==b(this).text()||al[0]==b(this).val())){this.selected=true}else{if(aj[an].editoptions.multiple){if(b.inArray(b(this).text(),al)>-1||b.inArray(b(this).val(),al)>-1){this.selected=true}else{this.selected=false}}else{this.selected=false}}});break;case"checkbox":ag=ag+"";ag=ag.toLowerCase();if(ag.search(/(false|0|no|off|undefined)/i)<0&&ag!==""){b("#"+ak,"#"+ab).attr("checked",true);b("#"+ak,"#"+ab).attr("defaultChecked",true)}else{b("#"+ak,"#"+ab).attr("checked",false);b("#"+ak,"#"+ab).attr("defaultChecked","")}break;case"custom":try{if(aj[an].editoptions&&b.isFunction(aj[an].editoptions.custom_value)){var ap=aj[an].editoptions.custom_value(b("#"+ak,"#"+ab),"set",ag)}else{throw"e1"}}catch(ao){if(ao=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+b.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,ao.message,jQuery.jgrid.edit.bClose)}}break}ac++}});if(ac>0){b("#id_g","#"+u).val(Z)}}function j(){var ac,aa=[true,"",""],Z={};if(b.isFunction(a.beforeCheckValues)){var Y=a.beforeCheckValues(E,b("#"+y),E.id=="_empty"?"add":"edit");if(Y&&typeof(Y)==="object"){E=Y}}for(var ab in E){aa=checkValues(E[ab],ab,e);if(aa[0]==false){break}}if(aa[0]){if(b.isFunction(a.onclickSubmit)){Z=a.onclickSubmit(a,E)||{}}if(b.isFunction(a.beforeSubmit)){aa=a.beforeSubmit(E,b("#"+y))}}v=a.url?a.url:b(e).jqGrid("getGridParam","editurl");if(aa[0]){if(!v){aa[0]=false;aa[1]+=" "+b.jgrid.errors.nourl}}if(aa[0]===false){b("#FormError>td","#"+u).html(aa[1]);b("#FormError","#"+u).show();return}if(!d.processing){d.processing=true;b("#sData","#"+u+"_2").addClass("ui-state-active");E.oper=E.id=="_empty"?"add":"edit";E=b.extend(E,a.editData,Z);b.ajax(b.extend({url:v,type:a.mtype,data:b.isFunction(a.serializeEditData)?a.serializeEditData(E):E,complete:function(ae,ad){if(ad!="success"){aa[0]=false;if(b.isFunction(a.errorTextFormat)){aa[1]=a.errorTextFormat(ae)}else{aa[1]=ad+" Status: '"+ae.statusText+"'. Error code: "+ae.status}}else{if(b.isFunction(a.afterSubmit)){aa=a.afterSubmit(ae,E)}}if(aa[0]===false){b("#FormError>td","#"+u).html(aa[1]);b("#FormError","#"+u).show()}else{b.each(e.p.colModel,function(ag,ai){if(R[this.name]&&this.formatter&&this.formatter=="select"){try{delete R[this.name]}catch(ah){}}});E=b.extend(E,R);if(E.id=="_empty"){if(!aa[2]){aa[2]=parseInt(e.p.records)+1}E.id=aa[2];if(a.closeAfterAdd){if(a.reloadAfterSubmit){b(e).trigger("reloadGrid")}else{b(e).jqGrid("addRowData",aa[2],E,d.addedrow);b(e).jqGrid("setSelection",aa[2])}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose})}else{if(a.clearAfterAdd){if(a.reloadAfterSubmit){b(e).trigger("reloadGrid")}else{b(e).jqGrid("addRowData",aa[2],E,d.addedrow)}n("_empty",e,y)}else{if(a.reloadAfterSubmit){b(e).trigger("reloadGrid")}else{b(e).jqGrid("addRowData",aa[2],E,d.addedrow)}}}}else{if(a.reloadAfterSubmit){b(e).trigger("reloadGrid");if(!a.closeAfterEdit){setTimeout(function(){b(e).jqGrid("setSelection",E.id)},1000)}}else{if(e.p.treeGrid===true){b(e).jqGrid("setTreeRow",E.id,E)}else{b(e).jqGrid("setRowData",E.id,E)}}if(a.closeAfterEdit){hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose})}}if(b.isFunction(a.afterComplete)){ac=ae;setTimeout(function(){a.afterComplete(ac,E,b("#"+y));ac=null},500)}}d.processing=false;if(a.checkOnSubmit||a.checkOnUpdate){b("#"+y).data("disabled",false);if(a._savedData.id!="_empty"){a._savedData=E}}b("#sData","#"+u+"_2").removeClass("ui-state-active");try{b(":input:visible","#"+y)[0].focus()}catch(af){}},error:function(af,ad,ae){b("#FormError>td","#"+u).html(ad+" : "+ae);b("#FormError","#"+u).show();d.processing=false;b("#"+y).data("disabled",false);b("#sData","#"+u+"_2").removeClass("ui-state-active")}},b.jgrid.ajaxOptions,a.ajaxEditOptions))}}function K(ab,Y){var Z=false,aa;for(aa in ab){if(ab[aa]!=Y[aa]){Z=true;break}}return Z}})},viewGridRow:function(c,d){d=b.extend({top:0,left:0,width:0,height:"auto",dataheight:"auto",modal:false,drag:true,resize:true,jqModal:true,closeOnEscape:false,labelswidth:"30%",closeicon:[],navkeys:[false,38,40],onClose:null},b.jgrid.view,d||{});return this.each(function(){var x=this;if(!x.grid||!c){return}if(!d.imgpath){d.imgpath=x.p.imgpath}var r=x.p.id,A="ViewGrid_"+r,s="ViewTbl_"+r,j={themodal:"viewmod"+r,modalhead:"viewhd"+r,modalcontent:"viewcnt"+r,scrollelm:A},h=1,f=0;if(b("#"+j.themodal).html()!=null){b(".ui-jqdialog-title","#"+j.modalhead).html(d.caption);b("#FormError","#"+s).hide();m(c,x);viewModal("#"+j.themodal,{gbox:"#gbox_"+r,jqm:d.jqModal,jqM:false,modal:d.modal});k()}else{b(x.p.colModel).each(function(F){var G=this.formoptions;h=Math.max(h,G?G.colpos||0:0);f=Math.max(f,G?G.rowpos||0:0)});var y=isNaN(d.dataheight)?d.dataheight:d.dataheight+"px";var w,C=b("
    "),l=b("
    ");b(C).append(l);var v=n(c,x,l,h),z=x.p.direction=="rtl"?true:false,E=z?"nData":"pData",g=z?"pData":"nData",t="",u="",D=""+d.bClose+"";if(f>0){var e=[];b.each(b(l)[0].rows,function(F,G){e[F]=G});e.sort(function(G,F){if(G.rp>F.rp){return 1}if(G.rp").append(C).append("
    "+D+"
    ");createModal(j,B,d,"#gview_"+x.p.id,b("#gview_"+x.p.id)[0]);if(z){b("#pData, #nData","#"+s+"_2").css("float","right");b(".EditButton","#"+s+"_2").css("text-align","left")}B=null;b("#"+j.themodal).keydown(function(F){if(F.which===27){if(q){hideModal(this,{gb:d.gbox,jqm:d.jqModal,onClose:d.onClose})}return false}if(d.navkeys[0]===true){if(F.which===d.navkeys[1]){b("#pData","#"+s+"_2").trigger("click");return false}if(F.which===d.navkeys[2]){b("#nData","#"+s+"_2").trigger("click");return false}}});d.closeicon=b.extend([true,"left","ui-icon-close"],d.closeicon);if(d.closeicon[0]==true){b("#cData","#"+s+"_2").addClass(d.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}viewModal("#"+j.themodal,{gbox:"#gbox_"+r,jqm:d.jqModal,modal:d.modal});b(".fm-button:not(.ui-state-disabled)","#"+s+"_2").hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});k();b("#cData","#"+s+"_2").click(function(F){hideModal("#"+j.themodal,{gb:"#gbox_"+r,jqm:d.jqModal,onClose:d.onClose});return false});b("#nData","#"+s+"_2").click(function(F){b("#FormError","#"+s).hide();var G=i();G[0]=parseInt(G[0]);if(G[0]!=-1&&G[1][G[0]+1]){if(b.isFunction(d.onclickPgButtons)){d.onclickPgButtons("next",b("#"+A),G[1][G[0]])}m(G[1][G[0]+1],x);b(x).jqGrid("setSelection",G[1][G[0]+1]);if(b.isFunction(d.afterclickPgButtons)){d.afterclickPgButtons("next",b("#"+A),G[1][G[0]+1])}o(G[0]+1,G[1].length-1)}k();return false});b("#pData","#"+s+"_2").click(function(G){b("#FormError","#"+s).hide();var F=i();if(F[0]!=-1&&F[1][F[0]-1]){if(b.isFunction(d.onclickPgButtons)){d.onclickPgButtons("prev",b("#"+A),F[1][F[0]])}m(F[1][F[0]-1],x);b(x).jqGrid("setSelection",F[1][F[0]-1]);if(b.isFunction(d.afterclickPgButtons)){d.afterclickPgButtons("prev",b("#"+A),F[1][F[0]-1])}o(F[0]-1,F[1].length-1)}k();return false})}function k(){if(d.closeOnEscape===true||d.navkeys[0]===true){setTimeout(function(){b(".ui-jqdialog-titlebar-close","#"+j.modalhead).focus()},0)}}var p=i();o(p[0],p[1].length-1);function o(G,H,F){if(G==0){b("#pData","#"+s+"_2").addClass("ui-state-disabled")}else{b("#pData","#"+s+"_2").removeClass("ui-state-disabled")}if(G==H){b("#nData","#"+s+"_2").addClass("ui-state-disabled")}else{b("#nData","#"+s+"_2").removeClass("ui-state-disabled")}}function i(){var G=b(x).jqGrid("getDataIDs"),F=b("#id_g","#"+s).val(),H=b.inArray(F,G);return[H,G]}function n(L,R,P,X){var H,K,S,aa,F,V=0,Z,ab,Y=[],Q=false,N="  ",O="",I="  ",M=["integer","number","currency"],U=0,T=0,J,G;for(var W=1;W<=X;W++){O+=W==1?N:I}b(R.p.colModel).each(function(ad){if(this.editrules&&this.editrules.edithidden===true){K=false}else{K=this.hidden===true?true:false}if(!K&&this.align==="right"){if(this.formatter&&b.inArray(this.formatter,M)!==-1){U=Math.max(U,parseInt(this.width,10))}else{T=Math.max(T,parseInt(this.width,10))}}});J=U!==0?U:T!==0?T:0;Q=b(R).jqGrid("getInd",L);b(R.p.colModel).each(function(ae){H=this.name;G=false;if(this.editrules&&this.editrules.edithidden===true){K=false}else{K=this.hidden===true?true:false}ab=K?"style='display:none'":"";if(H!=="cb"&&H!=="subgrid"&&H!=="rn"){if(Q===false){Z=""}else{if(H==R.p.ExpandColumn&&R.p.treeGrid===true){Z=b("td:eq("+ae+")",R.rows[Q]).text()}else{Z=b("td:eq("+ae+")",R.rows[Q]).html()}}G=this.align==="right"&&J!==0?true:false;var ad=b.extend({},this.editoptions||{},{id:H,name:H}),ai=b.extend({},{rowabove:false,rowcontent:""},this.formoptions||{}),af=parseInt(ai.rowpos)||V+1,ah=parseInt((parseInt(ai.colpos)||1)*2);if(ai.rowabove){var ag=b(""+ai.rowcontent+"");b(P).append(ag);ag[0].rp=af}S=b(P).find("tr[rowpos="+af+"]");if(S.length==0){S=b("").addClass("FormData").attr("id","trv_"+H);b(S).append(O);b(P).append(S);S[0].rp=af}b("td:eq("+(ah-2)+")",S[0]).html(""+(typeof ai.label==="undefined"?R.p.colNames[ae]:ai.label)+"");b("td:eq("+(ah-1)+")",S[0]).append(""+Z+"").attr("id","v_"+H);if(G){b("td:eq("+(ah-1)+") span",S[0]).css({"text-align":"right",width:J+"px"})}Y[V]=ae;V++}});if(V>0){var ac=b("");ac[0].rp=V+99;b(P).append(ac)}return Y}function m(J,L){var F,M,I=0,H,G,K;K=b(L).jqGrid("getInd",J,true);if(!K){return}b("td",K).each(function(N){F=L.p.colModel[N].name;if(L.p.colModel[N].editrules&&L.p.colModel[N].editrules.edithidden===true){M=false}else{M=L.p.colModel[N].hidden===true?true:false}if(F!=="cb"&&F!=="subgrid"&&F!=="rn"){if(F==L.p.ExpandColumn&&L.p.treeGrid===true){H=b(this).text()}else{H=b(this).html()}G=b.extend({},L.p.colModel[N].editoptions||{});F=b.jgrid.jqID("v_"+F);b("#"+F+" span","#"+s).html(H);if(M){b("#"+F,"#"+s).parents("tr:first").hide()}I++}});if(I>0){b("#id_g","#"+s).val(J)}}})},delGridRow:function(c,d){d=b.extend({top:0,left:0,width:240,height:"auto",dataheight:"auto",modal:false,drag:true,resize:true,url:"",mtype:"POST",reloadAfterSubmit:true,beforeShowForm:null,afterShowForm:null,beforeSubmit:null,onclickSubmit:null,afterSubmit:null,jqModal:true,closeOnEscape:false,delData:{},delicon:[],cancelicon:[],onClose:null,ajaxDelOptions:{},serializeDelData:null},b.jgrid.del,d||{});a=d;return this.each(function(){var l=this;if(!l.grid){return}if(!c){return}var m=typeof d.beforeShowForm==="function"?true:false,g=typeof d.afterShowForm==="function"?true:false,e=l.p.id,f={},j="DelTbl_"+e,h={themodal:"delmod"+e,modalhead:"delhd"+e,modalcontent:"delcnt"+e,scrollelm:j};if(isArray(c)){c=c.join()}if(b("#"+h.themodal).html()!=null){b("#DelData>td","#"+j).text(c);b("#DelError","#"+j).hide();if(d.processing===true){d.processing=false;b("#dData","#"+j).removeClass("ui-state-active")}if(m){d.beforeShowForm(b("#"+j))}viewModal("#"+h.themodal,{gbox:"#gbox_"+e,jqm:d.jqModal,jqM:false,modal:d.modal});if(g){d.afterShowForm(b("#"+j))}}else{var n=isNaN(d.dataheight)?d.dataheight:d.dataheight+"px";var k="
    ";k+="";k+="";k+="";k+='";k+="
    '+d.msg+"
     
    ";var i=""+d.bSubmit+"",o=""+d.bCancel+"";k+="
    "+i+" "+o+"
    ";d.gbox="#gbox_"+e;createModal(h,k,d,"#gview_"+l.p.id,b("#gview_"+l.p.id)[0]);b(".fm-button","#"+j+"_2").hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});d.delicon=b.extend([true,"left","ui-icon-scissors"],d.delicon);d.cancelicon=b.extend([true,"left","ui-icon-cancel"],d.cancelicon);if(d.delicon[0]==true){b("#dData","#"+j+"_2").addClass(d.delicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(d.cancelicon[0]==true){b("#eData","#"+j+"_2").addClass(d.cancelicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}b("#dData","#"+j+"_2").click(function(s){var q=[true,""];f={};var r=b("#DelData>td","#"+j).text();if(typeof d.onclickSubmit==="function"){f=d.onclickSubmit(a)||{}}if(typeof d.beforeSubmit==="function"){q=d.beforeSubmit(r)}if(q[0]){var p=a.url?a.url:b(l).jqGrid("getGridParam","editurl");if(!p){q[0]=false;q[1]+=" "+b.jgrid.errors.nourl}}if(q[0]===false){b("#DelError>td","#"+j).html(q[1]);b("#DelError","#"+j).show()}else{if(!d.processing){d.processing=true;b(this).addClass("ui-state-active");var t=b.extend({oper:"del",id:r},a.delData,f);b.ajax(b.extend({url:p,type:d.mtype,data:b.isFunction(d.serializeDelData)?d.serializeDelData(t):t,complete:function(x,v){if(v!="success"){q[0]=false;if(b.isFunction(a.errorTextFormat)){q[1]=a.errorTextFormat(x)}else{q[1]=v+" Status: '"+x.statusText+"'. Error code: "+x.status}}else{if(typeof a.afterSubmit==="function"){q=a.afterSubmit(x,r)}}if(q[0]===false){b("#DelError>td","#"+j).html(q[1]);b("#DelError","#"+j).show()}else{if(a.reloadAfterSubmit){if(l.p.treeGrid){b(l).jqGrid("setGridParam",{treeANode:0,datatype:l.p.treedatatype})}b(l).trigger("reloadGrid")}else{var u=[];u=r.split(",");if(l.p.treeGrid===true){try{b(l).jqGrid("delTreeNode",u[0])}catch(y){}}else{for(var w=0;wtd","#"+j).html(u+" : "+v);b("#DelError","#"+j).show();d.processing=false;b("#dData","#"+j+"_2").removeClass("ui-state-active")}},b.jgrid.ajaxOptions,d.ajaxDelOptions))}}return false});b("#eData","#"+j+"_2").click(function(p){hideModal("#"+h.themodal,{gb:"#gbox_"+e,jqm:d.jqModal,onClose:a.onClose});return false});if(m){d.beforeShowForm(b("#"+j))}viewModal("#"+h.themodal,{gbox:"#gbox_"+e,jqm:d.jqModal,modal:d.modal});if(g){d.afterShowForm(b("#"+j))}}if(d.closeOnEscape===true){setTimeout(function(){b(".ui-jqdialog-titlebar-close","#"+h.modalhead).focus()},0)}})},navGrid:function(f,h,e,g,d,c,i){h=b.extend({edit:true,editicon:"ui-icon-pencil",add:true,addicon:"ui-icon-plus",del:true,delicon:"ui-icon-trash",search:true,searchicon:"ui-icon-search",refresh:true,refreshicon:"ui-icon-refresh",refreshstate:"firstpage",view:false,viewicon:"ui-icon-document",position:"left",closeOnEscape:true,afterRefresh:null},b.jgrid.nav,h||{});return this.each(function(){var j={themodal:"alertmod",modalhead:"alerthd",modalcontent:"alertcnt"},n=this,m,s,o,k;if(!n.grid){return}if(b("#"+j.themodal).html()==null){if(typeof window.innerWidth!="undefined"){m=window.innerWidth,s=window.innerHeight}else{if(typeof document.documentElement!="undefined"&&typeof document.documentElement.clientWidth!="undefined"&&document.documentElement.clientWidth!=0){m=document.documentElement.clientWidth,s=document.documentElement.clientHeight}else{m=1024;s=768}}createModal(j,"
    "+h.alerttext+"
    ",{gbox:"#gbox_"+n.p.id,jqModal:true,drag:true,resize:true,caption:h.alertcap,top:s/2-25,left:m/2-100,width:200,height:"auto",closeOnEscape:h.closeOnEscape},"","",true)}var p,q=b(""),r="",l=b(n.p.pager).attr("id")||"pager";if(n.p.direction=="rtl"){b(q).attr("dir","rtl").css("float","right")}if(h.add){g=g||{};p=b("");b(p).append("
    "+h.addtext+"
    ");b("tr",q).append(p);b(p,q).attr({title:h.addtitle||"",id:g.id||"add_"+n.p.id}).click(function(){if(typeof h.addfunc=="function"){h.addfunc()}else{b(n).jqGrid("editGridRow","new",g)}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.edit){p=b("");e=e||{};b(p).append("
    "+h.edittext+"
    ");b("tr",q).append(p);b(p,q).attr({title:h.edittitle||"",id:e.id||"edit_"+n.p.id}).click(function(){var t=n.p.selrow;if(t){if(typeof h.editfunc=="function"){h.editfunc(t)}else{b(n).jqGrid("editGridRow",t,e)}}else{viewModal("#"+j.themodal,{gbox:"#gbox_"+n.p.id,jqm:true});b("#jqg_alrt").focus()}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.view){p=b("");i=i||{};b(p).append("
    "+h.viewtext+"
    ");b("tr",q).append(p);b(p,q).attr({title:h.viewtitle||"",id:i.id||"view_"+n.p.id}).click(function(){var t=n.p.selrow;if(t){b(n).jqGrid("viewGridRow",t,i)}else{viewModal("#"+j.themodal,{gbox:"#gbox_"+n.p.id,jqm:true});b("#jqg_alrt").focus()}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.del){p=b("");d=d||{};b(p).append("
    "+h.deltext+"
    ");b("tr",q).append(p);b(p,q).attr({title:h.deltitle||"",id:d.id||"del_"+n.p.id}).click(function(){var t;if(n.p.multiselect){t=n.p.selarrrow;if(t.length==0){t=null}}else{t=n.p.selrow}if(t){b(n).jqGrid("delGridRow",t,d)}else{viewModal("#"+j.themodal,{gbox:"#gbox_"+n.p.id,jqm:true});b("#jqg_alrt").focus()}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.add||h.edit||h.del||h.view){b("tr",q).append(r)}if(h.search){p=b("");c=c||{};b(p).append("
    "+h.searchtext+"
    ");b("tr",q).append(p);b(p,q).attr({title:h.searchtitle||"",id:c.id||"search_"+n.p.id}).click(function(){b(n).jqGrid("searchGrid",c);return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.refresh){p=b("");b(p).append("
    "+h.refreshtext+"
    ");b("tr",q).append(p);b(p,q).attr({title:h.refreshtitle||"",id:"refresh_"+n.p.id}).click(function(){n.p.search=false;try{var t=n.p.id;b("#fbox_"+t).searchFilter().reset()}catch(u){}switch(h.refreshstate){case"firstpage":b(n).trigger("reloadGrid",[{page:1}]);break;case"current":b(n).trigger("reloadGrid",[{current:true}]);break}if(b.isFunction(h.afterRefresh)){h.afterRefresh()}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}k=b(".ui-jqgrid").css("font-size")||"11px";b("body").append("");o=b(q).clone().appendTo("#testpg2").width();b("#testpg2").remove();b("#"+l+"_"+h.position,"#"+l).append(q);if(n.p._nvtd){if(o>n.p._nvtd[0]){b("#"+l+"_"+h.position,"#"+l).width(o);n.p._nvtd[0]=o}n.p._nvtd[1]=o}})},navButtonAdd:function(c,d){d=b.extend({caption:"newButton",title:"",buttonicon:"ui-icon-newwin",onClickButton:null,position:"last",cursor:"pointer"},d||{});return this.each(function(){if(!this.grid){return}if(c.indexOf("#")!=0){c="#"+c}var e=b(".navtable",c)[0],g=this;if(e){var f=b("");b(f).addClass("ui-pg-button ui-corner-all").append("
    "+d.caption+"
    ");if(d.id){b(f).attr("id",d.id)}if(d.position=="first"){if(e.rows[0].cells.length===0){b("tr",e).append(f)}else{b("tr td:eq(0)",e).before(f)}}else{b("tr",e).append(f)}b(f,e).attr("title",d.title||"").click(function(h){if(b.isFunction(d.onClickButton)){d.onClickButton.call(g,h)}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")}).css("cursor",d.cursor?d.cursor:"normal")}})},navSeparatorAdd:function(c,d){d=b.extend({sepclass:"ui-separator",sepcontent:""},d||{});return this.each(function(){if(!this.grid){return}if(c.indexOf("#")!=0){c="#"+c}var f=b(".navtable",c)[0];if(f){var e=""+d.sepcontent+"";b("tr",f).append(e)}})},GridToForm:function(c,d){return this.each(function(){var g=this;if(!g.grid){return}var f=b(g).jqGrid("getRowData",c);if(f){for(var e in f){if(b("[name="+e+"]",d).is("input:radio")||b("[name="+e+"]",d).is("input:checkbox")){b("[name="+e+"]",d).each(function(){if(b(this).val()==f[e]){b(this).attr("checked","checked")}else{b(this).attr("checked","")}})}else{b("[name="+e+"]",d).val(f[e])}}}})},FormToGrid:function(d,e,f,c){return this.each(function(){var i=this;if(!i.grid){return}if(!f){f="set"}if(!c){c="first"}var g=b(e).serializeArray();var h={};b.each(g,function(j,k){h[k.name]=k.value});if(f=="add"){b(i).jqGrid("addRowData",d,h,c)}else{if(f=="set"){b(i).jqGrid("setRowData",d,h)}}})}})})(jQuery);jQuery.fn.searchFilter=function(a,c){function b(j,p,g){this.$=j;this.add=function(z){if(z==null){j.find(".ui-add-last").click()}else{j.find(".sf:eq("+z+") .ui-add").click()}return this};this.del=function(z){if(z==null){j.find(".sf:last .ui-del").click()}else{j.find(".sf:eq("+z+") .ui-del").click()}return this};this.search=function(z){j.find(".ui-search").click();return this};this.reset=function(z){j.find(".ui-reset").click();return this};this.close=function(){j.find(".ui-closer").click();return this};if(p!=null){function v(){jQuery(this).toggleClass("ui-state-hover");return false}function i(z){jQuery(this).toggleClass("ui-state-active",(z.type=="mousedown"));return false}function e(z,A){return""}function s(B,z,A){return""}function w(z,B){var A=j.find("tr.sf td.data "+z);if(A[0]!=null){B(A)}}function q(z,B){var A=j.find("tr.sf td.data "+z);if(A[0]!=null){jQuery.each(B,function(){if(this.data!=null){A.bind(this.type,this.data,this.fn)}else{A.bind(this.type,this.fn)}})}}var n=jQuery.extend({},jQuery.fn.searchFilter.defaults,g);var y=-1;var x="";jQuery.each(n.groupOps,function(){x+=e(this.op,this.text)});x="";j.html("").addClass("ui-searchFilter").append("
     
    "+n.windowTitle+"
     
    "+n.resetText+""+n.searchText+""+n.matchText+" "+x+" "+n.rulesText+" 
    ");var k=j.find("tr.sf");var h=k.find("td.fields");var f=k.find("td.ops");var o=k.find("td.data");var r="";jQuery.each(n.operators,function(){r+=e(this.op,this.text)});r=s("default",r,true);f.append(r);var l="";o.append(l);var u="";var t=false;var d=false;jQuery.each(p,function(C){var B=C;u+=e(this.itemval,this.text);if(this.ops!=null){t=true;var z="";jQuery.each(this.ops,function(){z+=e(this.op,this.text)});z=s("field"+B,z,true);f.append(z)}if(this.dataUrl!=null){if(C>y){y=C}d=true;var F=this.dataEvents;var D=this.dataInit;var A=this.buildSelect;jQuery.ajax(jQuery.extend({url:this.dataUrl,complete:function(H){var G;if(A!=null){G=jQuery("
    ").append(A(H))}else{G=jQuery("
    ").append(H.responseText)}G.find("select").addClass("field"+B).hide();o.append(G.html());if(D){w(".field"+C,D)}if(F){q(".field"+C,F)}if(C==y){j.find("tr.sf td.fields select[name='field']").change()}}},n.ajaxSelectOptions))}else{if(this.dataValues!=null){d=true;var E="";jQuery.each(this.dataValues,function(){E+=e(this.value,this.text)});E=s("field"+B,E,true);o.append(E)}else{if(this.dataEvents!=null||this.dataInit!=null){d=true;var E="";o.append(E)}}}if(this.dataInit!=null&&C!=y){w(".field"+C,this.dataInit)}if(this.dataEvents!=null&&C!=y){q(".field"+C,this.dataEvents)}});u="";h.append(u);var m=h.find("select[name='field']");if(t){m.change(function(B){var A=B.target.selectedIndex;var C=jQuery(B.target).parents("tr.sf").find("td.ops");C.find("select").removeAttr("name").hide();var z=C.find(".field"+A);if(z[0]==null){z=C.find(".default")}z.attr("name","op").show()})}else{f.find(".default").attr("name","op").show()}if(d){m.change(function(B){var A=B.target.selectedIndex;var C=jQuery(B.target).parents("tr.sf").find("td.data");C.find("select,input").removeClass("vdata").hide();var z=C.find(".field"+A);if(z[0]==null){z=C.find(".default")}z.show().addClass("vdata")})}else{o.find(".default").show().addClass("vdata")}if(t||d){m.change()}j.find(".ui-state-default").hover(v,v).mousedown(i).mouseup(i);j.find(".ui-closer").click(function(z){n.onClose(jQuery(j.selector));return false});j.find(".ui-del").click(function(z){var A=jQuery(z.target).parents(".sf");if(A.siblings(".sf").length>0){if(n.datepickerFix===true&&jQuery.fn.datepicker!==undefined){A.find(".hasDatepicker").datepicker("destroy")}A.remove()}else{A.find("select[name='field']")[0].selectedIndex=0;A.find("select[name='op']")[0].selectedIndex=0;A.find(".data input").val("");A.find(".data select").each(function(){this.selectedIndex=0});A.find("select[name='field']").change()}return false});j.find(".ui-add").click(function(C){var D=jQuery(C.target).parents(".sf");var B=D.clone(true).insertAfter(D);B.find(".ui-state-default").removeClass("ui-state-hover ui-state-active");if(n.clone){B.find("select[name='field']")[0].selectedIndex=D.find("select[name='field']")[0].selectedIndex;var A=(B.find("select[name='op']")[0]==null);if(!A){B.find("select[name='op']").focus()[0].selectedIndex=D.find("select[name='op']")[0].selectedIndex}var z=B.find("select.vdata");if(z[0]!=null){z[0].selectedIndex=D.find("select.vdata")[0].selectedIndex}}else{B.find(".data input").val("");B.find("select[name='field']").focus()}if(n.datepickerFix===true&&jQuery.fn.datepicker!==undefined){D.find(".hasDatepicker").each(function(){var E=jQuery.data(this,"datepicker").settings;B.find("#"+this.id).unbind().removeAttr("id").removeClass("hasDatepicker").datepicker(E)})}B.find("select[name='field']").change();return false});j.find(".ui-search").click(function(C){var B=jQuery(j.selector);var z;var A=B.find("select[name='groupOp'] :selected").val();if(!n.stringResult){z={groupOp:A,rules:[]}}else{z='{"groupOp":"'+A+'","rules":['}B.find(".sf").each(function(D){var G=jQuery(this).find("select[name='field'] :selected").val();var F=jQuery(this).find("select[name='op'] :selected").val();var E=jQuery(this).find("input.vdata,select.vdata :selected").val();if(!n.stringResult){z.rules.push({field:G,op:F,data:E})}else{if(D>0){z+=","}z+='{"field":"'+G+'",';z+='"op":"'+F+'",';z+='"data":"'+E+'"}'}});if(n.stringResult){z+="]}"}n.onSearch(z);return false});j.find(".ui-reset").click(function(A){var z=jQuery(j.selector);z.find(".ui-del").click();z.find("select[name='groupOp']")[0].selectedIndex=0;n.onReset();return false});j.find(".ui-add-last").click(function(){var A=jQuery(j.selector+" .sf:last");var z=A.clone(true).insertAfter(A);z.find(".ui-state-default").removeClass("ui-state-hover ui-state-active");z.find(".data input").val("");z.find("select[name='field']").focus();if(n.datepickerFix===true&&jQuery.fn.datepicker!==undefined){A.find(".hasDatepicker").each(function(){var B=jQuery.data(this,"datepicker").settings;z.find("#"+this.id).unbind().removeAttr("id").removeClass("hasDatepicker").datepicker(B)})}z.find("select[name='field']").change();return false})}}return new b(this,a,c)};jQuery.fn.searchFilter.version="1.2.9";jQuery.fn.searchFilter.defaults={clone:true,datepickerFix:true,onReset:function(a){alert("Reset Clicked. Data Returned: "+a)},onSearch:function(a){alert("Search Clicked. Data Returned: "+a)},onClose:function(a){a.hide()},groupOps:[{op:"AND",text:"all"},{op:"OR",text:"any"}],operators:[{op:"eq",text:"is equal to"},{op:"ne",text:"is not equal to"},{op:"lt",text:"is less than"},{op:"le",text:"is less or equal to"},{op:"gt",text:"is greater than"},{op:"ge",text:"is greater or equal to"},{op:"in",text:"is in"},{op:"ni",text:"is not in"},{op:"bw",text:"begins with"},{op:"bn",text:"does not begin with"},{op:"ew",text:"ends with"},{op:"en",text:"does not end with"},{op:"cn",text:"contains"},{op:"nc",text:"does not contain"}],matchText:"match",rulesText:"rules",resetText:"Reset",searchText:"Search",stringResult:true,windowTitle:"Search Rules",ajaxSelectOptions:{}};(function(a){a.jgrid.extend({editRow:function(c,i,h,j,b,e,d,f,g){return this.each(function(){var n=this,s,o,l,m=0,r=null,q={},k,p;if(!n.grid){return}k=a(n).jqGrid("getInd",c,true);if(k==false){return}l=a(k).attr("editable")||"0";if(l=="0"&&!a(k).hasClass("not-editable-row")){p=n.p.colModel;a("td",k).each(function(w){s=p[w].name;var v=n.p.treeGrid===true&&s==n.p.ExpandColumn;if(v){o=a("span:first",this).html()}else{try{o=a.unformat(this,{colModel:p[w]},w)}catch(t){o=a(this).html()}}if(s!="cb"&&s!="subgrid"&&s!="rn"){q[s]=o;if(p[w].editable===true){if(r===null){r=w}if(v){a("span:first",this).html("")}else{a(this).html("")}var u=a.extend({},p[w].editoptions||{},{id:c+"_"+s,name:s});if(!p[w].edittype){p[w].edittype="text"}var x=createEl(p[w].edittype,u,o,true,a.extend({},a.jgrid.ajaxOptions,n.p.ajaxSelectOptions||{}));a(x).addClass("editable");if(v){a("span:first",this).append(x)}else{a(this).append(x)}if(p[w].edittype=="select"&&p[w].editoptions.multiple===true&&a.browser.msie){a(x).width(a(x).width())}m++}}});if(m>0){q.id=c;n.p.savedRow.push(q);a(k).attr("editable","1");a("td:eq("+r+") input",k).focus();if(i===true){a(k).bind("keydown",function(t){if(t.keyCode===27){a(n).jqGrid("restoreRow",c,g)}if(t.keyCode===13){a(n).jqGrid("saveRow",c,j,b,e,d,f,g);return false}t.stopPropagation()})}if(a.isFunction(h)){h(c)}}}})},saveRow:function(h,g,e,f,d,c,b){return this.each(function(){var o=this,u,p={},l={},j,r,q,i;if(!o.grid){return}i=a(o).jqGrid("getInd",h,true);if(i==false){return}j=a(i).attr("editable");e=e?e:o.p.editurl;if(j==="1"&&e){var t;a("td",i).each(function(v){t=o.p.colModel[v];u=t.name;if(u!="cb"&&u!="subgrid"&&t.editable===true&&u!="rn"){switch(t.edittype){case"checkbox":var k=["Yes","No"];if(t.editoptions){k=t.editoptions.value.split(":")}p[u]=a("input",this).attr("checked")?k[0]:k[1];break;case"text":case"password":case"textarea":case"button":p[u]=!o.p.autoencode?a("input, textarea",this).val():a.jgrid.htmlEncode(a("input, textarea",this).val());break;case"select":if(!t.editoptions.multiple){p[u]=a("select>option:selected",this).val();l[u]=a("select>option:selected",this).text()}else{var w=a("select",this),y=[];p[u]=a(w).val();if(p[u]){p[u]=p[u].join(",")}else{p[u]=""}a("select > option:selected",this).each(function(z,A){y[z]=a(A).text()});l[u]=y.join(",")}if(t.formatter&&t.formatter=="select"){l={}}break;case"custom":try{if(t.editoptions&&a.isFunction(t.editoptions.custom_value)){p[u]=t.editoptions.custom_value(a(".customelement",this),"get");if(p[u]===undefined){throw"e2"}}else{throw"e1"}}catch(x){if(x=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose)}if(x=="e2"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,x.message,jQuery.jgrid.edit.bClose)}}break}q=checkValues(p[u],v,o);if(q[0]===false){q[1]=p[u]+" "+q[1];return false}}});if(q[0]===false){try{info_dialog(a.jgrid.errors.errcap,q[1],a.jgrid.edit.bClose)}catch(s){alert(q[1])}return}if(p){p.id=h;if(f){p=a.extend({},p,f)}}if(!o.grid.hDiv.loading){o.grid.hDiv.loading=true;a("div.loading",o.grid.hDiv).fadeIn("fast");if(e=="clientArray"){p=a.extend({},p,l);var n=a(o).jqGrid("setRowData",h,p);a(i).attr("editable","0");for(var m=0;m=0){o.p.savedRow.splice(r,1)}if(a.isFunction(d)){d(h,n)}}else{a.ajax(a.extend({url:e,data:a.isFunction(o.p.serializeRowData)?o.p.serializeRowData(p):p,type:"POST",complete:function(x,y){if(y==="success"){var w;if(a.isFunction(g)){w=g(x)}else{w=true}if(w===true){p=a.extend({},p,l);a(o).jqGrid("setRowData",h,p);a(i).attr("editable","0");for(var v=0;v=0){o.p.savedRow.splice(r,1)}if(a.isFunction(d)){d(h,x)}}else{a(o).jqGrid("restoreRow",h,b)}}},error:function(k,v){if(a.isFunction(c)){c(h,k,v)}else{alert("Error Row: "+h+" Result: "+k.status+":"+k.statusText+" Status: "+v)}}},a.jgrid.ajaxOptions,o.p.ajaxRowOptions||{}))}o.grid.hDiv.loading=false;a("div.loading",o.grid.hDiv).fadeOut("fast");a(i).unbind("keydown")}}})},restoreRow:function(c,b){return this.each(function(){var i=this,d,g;if(!i.grid){return}g=a(i).jqGrid("getInd",c,true);if(g==false){return}for(var f=0;f=0){if(a.isFunction(a.fn.datepicker)){try{a("input.hasDatepicker","#"+g.id).datepicker("hide")}catch(h){}}a(i).jqGrid("setRowData",c,i.p.savedRow[d]);a(g).attr("editable","0").unbind("keydown");i.p.savedRow.splice(d,1)}if(a.isFunction(b)){b(c)}})}})})(jQuery);(function(a){a.jgrid.extend({editCell:function(d,c,b){return this.each(function(){var j=this,m,k,g;if(!j.grid||j.p.cellEdit!==true){return}c=parseInt(c,10);j.p.selrow=j.rows[d].id;if(!j.p.knv){a(j).jqGrid("GridNav")}if(j.p.savedRow.length>0){if(b===true){if(d==j.p.iRow&&c==j.p.iCol){return}}var h=a("td:eq("+j.p.savedRow[0].ic+")>#"+j.p.savedRow[0].id+"_"+a.jgrid.jqID(j.p.savedRow[0].name),j.rows[j.p.savedRow[0].id]).val();if(j.p.savedRow[0].v!=h){a(j).jqGrid("saveCell",j.p.savedRow[0].id,j.p.savedRow[0].ic)}else{a(j).jqGrid("restoreCell",j.p.savedRow[0].id,j.p.savedRow[0].ic)}}else{window.setTimeout(function(){a("#"+j.p.knv).attr("tabindex","-1").focus()},0)}m=j.p.colModel[c].name;if(m=="subgrid"||m=="cb"||m=="rn"){return}g=a("td:eq("+c+")",j.rows[d]);if(j.p.colModel[c].editable===true&&b===true&&!g.hasClass("not-editable-cell")){if(parseInt(j.p.iCol)>=0&&parseInt(j.p.iRow)>=0){a("td:eq("+j.p.iCol+")",j.rows[j.p.iRow]).removeClass("edit-cell ui-state-highlight");a(j.rows[j.p.iRow]).removeClass("selected-row ui-state-hover")}a(g).addClass("edit-cell ui-state-highlight");a(j.rows[d]).addClass("selected-row ui-state-hover");try{k=a.unformat(g,{colModel:j.p.colModel[c]},c)}catch(l){k=a(g).html()}if(!j.p.colModel[c].edittype){j.p.colModel[c].edittype="text"}j.p.savedRow.push({id:d,ic:c,name:m,v:k});if(a.isFunction(j.p.formatCell)){var i=j.p.formatCell(j.rows[d].id,m,k,d,c);if(i!=undefined){k=i}}var f=a.extend({},j.p.colModel[c].editoptions||{},{id:d+"_"+m,name:m});var e=createEl(j.p.colModel[c].edittype,f,k,true,a.extend({},a.jgrid.ajaxOptions,j.p.ajaxSelectOptions||{}));if(a.isFunction(j.p.beforeEditCell)){j.p.beforeEditCell(j.rows[d].id,m,k,d,c)}a(g).html("").append(e).attr("tabindex","0");window.setTimeout(function(){a(e).focus()},0);a("input, select, textarea",g).bind("keydown",function(n){if(n.keyCode===27){if(a("input.hasDatepicker",g).length>0){if(a(".ui-datepicker").is(":hidden")){a(j).jqGrid("restoreCell",d,c)}else{a("input.hasDatepicker",g).datepicker("hide")}}else{a(j).jqGrid("restoreCell",d,c)}}if(n.keyCode===13){a(j).jqGrid("saveCell",d,c)}if(n.keyCode==9){if(n.shiftKey){a(j).jqGrid("prevCell",d,c)}else{a(j).jqGrid("nextCell",d,c)}}n.stopPropagation()});if(a.isFunction(j.p.afterEditCell)){j.p.afterEditCell(j.rows[d].id,m,k,d,c)}}else{if(parseInt(j.p.iCol)>=0&&parseInt(j.p.iRow)>=0){a("td:eq("+j.p.iCol+")",j.rows[j.p.iRow]).removeClass("edit-cell ui-state-highlight");a(j.rows[j.p.iRow]).removeClass("selected-row ui-state-hover")}g.addClass("edit-cell ui-state-highlight");a(j.rows[d]).addClass("selected-row ui-state-hover");if(a.isFunction(j.p.onSelectCell)){k=g.html().replace(/\ \;/ig,"");j.p.onSelectCell(j.rows[d].id,m,k,d,c)}}j.p.iCol=c;j.p.iRow=d})},saveCell:function(c,b){return this.each(function(){var k=this,m;if(!k.grid||k.p.cellEdit!==true){return}if(k.p.savedRow.length>=1){m=0}else{m=null}if(m!=null){var h=a("td:eq("+b+")",k.rows[c]),s,p,r=k.p.colModel[b],t=r.name,g=a.jgrid.jqID(t);switch(r.edittype){case"select":if(!r.editoptions.multiple){s=a("#"+c+"_"+g+">option:selected",k.rows[c]).val();p=a("#"+c+"_"+g+">option:selected",k.rows[c]).text()}else{var d=a("#"+c+"_"+g,k.rows[c]),f=[];s=a(d).val();if(s){s.join(",")}else{s=""}a("option:selected",d).each(function(e,u){f[e]=a(u).text()});p=f.join(",")}if(r.formatter){p=s}break;case"checkbox":var i=["Yes","No"];if(r.editoptions){i=r.editoptions.value.split(":")}s=a("#"+c+"_"+g,k.rows[c]).attr("checked")?i[0]:i[1];p=s;break;case"password":case"text":case"textarea":case"button":s=!k.p.autoencode?a("#"+c+"_"+g,k.rows[c]).val():a.jgrid.htmlEncode(a("#"+c+"_"+g,k.rows[c]).val());p=s;break;case"custom":try{if(r.editoptions&&a.isFunction(r.editoptions.custom_value)){s=r.editoptions.custom_value(a(".customelement",h),"get");if(s===undefined){throw"e2"}else{p=s}}else{throw"e1"}}catch(n){if(n=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose)}if(n=="e2"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,n.message,jQuery.jgrid.edit.bClose)}}break}if(p!=k.p.savedRow[m].v){if(a.isFunction(k.p.beforeSaveCell)){var q=k.p.beforeSaveCell(k.rows[c].id,t,s,c,b);if(q){s=q}}var j=checkValues(s,b,k);if(j[0]===true){var l={};if(a.isFunction(k.p.beforeSubmitCell)){l=k.p.beforeSubmitCell(k.rows[c].id,t,s,c,b);if(!l){l={}}}if(p==""){p=" "}if(a("input.hasDatepicker",h).length>0){a("input.hasDatepicker",h).datepicker("hide")}if(k.p.cellsubmit=="remote"){if(k.p.cellurl){var o={};o[t]=s;o.id=k.rows[c].id;o=a.extend(l,o);a.ajax(a.extend({url:k.p.cellurl,data:a.isFunction(k.p.serializeCellData)?k.p.serializeCellData(o):o,type:"POST",complete:function(e,v){if(v=="success"){if(a.isFunction(k.p.afterSubmitCell)){var u=k.p.afterSubmitCell(e,o.id,t,s,c,b);if(u[0]===true){a(h).empty();a(k).jqGrid("setCell",k.rows[c].id,b,p);a(h).addClass("dirty-cell");a(k.rows[c]).addClass("edited");if(a.isFunction(k.p.afterSaveCell)){k.p.afterSaveCell(k.rows[c].id,t,s,c,b)}k.p.savedRow.splice(0,1)}else{info_dialog(a.jgrid.errors.errcap,u[1],a.jgrid.edit.bClose);a(k).jqGrid("restoreCell",c,b)}}else{a(h).empty();a(k).jqGrid("setCell",k.rows[c].id,b,p);a(h).addClass("dirty-cell");a(k.rows[c]).addClass("edited");if(a.isFunction(k.p.afterSaveCell)){k.p.afterSaveCell(k.rows[c].id,t,s,c,b)}k.p.savedRow.splice(0,1)}}},error:function(e,u){if(a.isFunction(k.p.errorCell)){k.p.errorCell(e,u);a(k).jqGrid("restoreCell",c,b)}else{info_dialog(a.jgrid.errors.errcap,e.status+" : "+e.statusText+"
    "+u,a.jgrid.edit.bClose);a(k).jqGrid("restoreCell",c,b)}}},a.jgrid.ajaxOptions,k.p.ajaxCellOptions||{}))}else{try{info_dialog(a.jgrid.errors.errcap,a.jgrid.errors.nourl,a.jgrid.edit.bClose);a(k).jqGrid("restoreCell",c,b)}catch(n){}}}if(k.p.cellsubmit=="clientArray"){a(h).empty();a(k).jqGrid("setCell",k.rows[c].id,b,p);a(h).addClass("dirty-cell");a(k.rows[c]).addClass("edited");if(a.isFunction(k.p.afterSaveCell)){k.p.afterSaveCell(k.rows[c].id,t,s,c,b)}k.p.savedRow.splice(0,1)}}else{try{window.setTimeout(function(){info_dialog(a.jgrid.errors.errcap,s+" "+j[1],a.jgrid.edit.bClose)},100);a(k).jqGrid("restoreCell",c,b)}catch(n){}}}else{a(k).jqGrid("restoreCell",c,b)}}if(a.browser.opera){a("#"+k.p.knv).attr("tabindex","-1").focus()}else{window.setTimeout(function(){a("#"+k.p.knv).attr("tabindex","-1").focus()},0)}})},restoreCell:function(c,b){return this.each(function(){var h=this,d;if(!h.grid||h.p.cellEdit!==true){return}if(h.p.savedRow.length>=1){d=0}else{d=null}if(d!=null){var g=a("td:eq("+b+")",h.rows[c]);if(a.isFunction(a.fn.datepicker)){try{a("input.hasDatepicker",g).datepicker("hide")}catch(f){}}a(g).empty().attr("tabindex","-1");a(h).jqGrid("setCell",h.rows[c].id,b,h.p.savedRow[d].v);h.p.savedRow.splice(0,1)}window.setTimeout(function(){a("#"+h.p.knv).attr("tabindex","-1").focus()},0)})},nextCell:function(c,b){return this.each(function(){var f=this,e=false;if(!f.grid||f.p.cellEdit!==true){return}for(var d=b+1;d0){a(f).jqGrid("saveCell",c,b)}}})},prevCell:function(c,b){return this.each(function(){var f=this,e=false;if(!f.grid||f.p.cellEdit!==true){return}for(var d=b-1;d>=0;d--){if(f.p.colModel[d].editable===true){e=d;break}}if(e!==false){a(f).jqGrid("editCell",c,e,true)}else{if(f.p.savedRow.length>0){a(f).jqGrid("saveCell",c,b)}}})},GridNav:function(){return this.each(function(){var g=this;if(!g.grid||g.p.cellEdit!==true){return}g.p.knv=g.p.id+"_kn";var f=a(""),d,c;a(f).insertBefore(g.grid.cDiv);a("#"+g.p.knv).focus().keydown(function(h){c=h.keyCode;if(g.p.direction=="rtl"){if(c==37){c=39}else{if(c==39){c=37}}}switch(c){case 38:if(g.p.iRow-1>=0){e(g.p.iRow-1,g.p.iCol,"vu");a(g).jqGrid("editCell",g.p.iRow-1,g.p.iCol,false)}break;case 40:if(g.p.iRow+1<=g.rows.length-1){e(g.p.iRow+1,g.p.iCol,"vd");a(g).jqGrid("editCell",g.p.iRow+1,g.p.iCol,false)}break;case 37:if(g.p.iCol-1>=0){d=b(g.p.iCol-1,"lft");e(g.p.iRow,d,"h");a(g).jqGrid("editCell",g.p.iRow,d,false)}break;case 39:if(g.p.iCol+1<=g.p.colModel.length-1){d=b(g.p.iCol+1,"rgt");e(g.p.iRow,d,"h");a(g).jqGrid("editCell",g.p.iRow,d,false)}break;case 13:if(parseInt(g.p.iCol,10)>=0&&parseInt(g.p.iRow,10)>=0){a(g).jqGrid("editCell",g.p.iRow,g.p.iCol,true)}break}return false});function e(p,n,o){if(o.substr(0,1)=="v"){var h=a(g.grid.bDiv)[0].clientHeight,q=a(g.grid.bDiv)[0].scrollTop,r=g.rows[p].offsetTop+g.rows[p].clientHeight,l=g.rows[p].offsetTop;if(o=="vd"){if(r>=h){a(g.grid.bDiv)[0].scrollTop=a(g.grid.bDiv)[0].scrollTop+g.rows[p].clientHeight}}if(o=="vu"){if(l=k+parseInt(j)){a(g.grid.bDiv)[0].scrollLeft=a(g.grid.bDiv)[0].scrollLeft+g.rows[p].cells[n].clientWidth}else{if(m=0;j--){if(g.p.colModel[j].hidden!==true){k=j;break}}}if(h=="rgt"){k=l-1;for(j=l;j0)?v:3000;var f=d("
    ").css({height:"100%",width:"100%",position:"fixed",left:0,top:0,"z-index":v-1,opacity:q.overlay/100});if(p.a){return l}p.t=A;p.a=true;p.w.css("z-index",v);if(q.modal){if(!a[0]){setTimeout(function(){i("bind")},1)}a.push(B)}else{if(q.overlay>0){if(q.closeoverlay){p.w.jqmAddClose(f)}}else{f=l}}p.o=(f)?f.addClass(q.overlayClass).prependTo("body"):l;if(c){d("html,body").css({height:"100%",width:"100%"});if(f){f=f.css({position:"absolute"})[0];for(var w in {Top:1,Left:1}){f.style.setExpression(w.toLowerCase(),"(_=(document.documentElement.scroll"+w+" || document.body.scroll"+w+"))+'px'")}}}if(q.ajax){var e=q.target||p.w,x=q.ajax;e=(typeof e=="string")?d(e,p.w):d(e);x=(x.substr(0,1)=="@")?d(A).attr(x.substring(1)):x;e.html(q.ajaxText).load(x,function(){if(q.onLoad){q.onLoad.call(this,p)}if(m){p.w.jqmAddClose(d(m,p.w))}h(p)})}else{if(m){p.w.jqmAddClose(d(m,p.w))}}if(q.toTop&&p.o){p.w.before('').insertAfter(p.o)}(q.onShow)?q.onShow(p):p.w.show();h(p);return l},close:function(f){var e=k[f];if(!e.a){return l}e.a=l;if(a[0]){a.pop();if(!a[0]){i("unbind")}}if(e.c.toTop&&e.o){d("#jqmP"+e.w[0]._jqm).after(e.w).remove()}if(e.c.onHide){e.c.onHide(e)}else{e.w.hide();if(e.o){e.o.remove()}}return l},params:{}};var n=0,k=d.jqm.hash,a=[],c=d.browser.msie&&(d.browser.version=="6.0"),l=false,h=function(f){var e=d('').css({opacity:0});if(c){if(f.o){f.o.html('

    ').prepend(e)}else{if(!d("iframe.jqm",f.w)[0]){f.w.prepend(e)}}}g(f)},g=function(f){try{d(":input:visible",f.w)[0].focus()}catch(e){}},i=function(e){d()[e]("keypress",b)[e]("keydown",b)[e]("mousedown",b)},b=function(o){var f=k[a[a.length-1]],m=(!d(o.target).parents(".jqmID"+f.s)[0]);if(m){g(f)}return !m},j=function(e,f,m){return e.each(function(){var o=this._jqm;d(f).each(function(){if(!this[m]){this[m]=[];d(this).click(function(){for(var p in {jqmShow:1,jqmHide:1}){for(var q in this[p]){if(k[this[p][q]]){k[this[p][q]].w[p](this)}}}return l})}this[m].push(o)})})}})(jQuery);(function(g){g.fn.jqDrag=function(f){return c(this,f,"d")};g.fn.jqResize=function(i,f){return c(this,i,"r",f)};g.jqDnR={dnr:{},e:0,drag:function(f){if(h.k=="d"){e.css({left:h.X+f.pageX-h.pX,top:h.Y+f.pageY-h.pY})}else{e.css({width:Math.max(f.pageX-h.pX+h.W,0),height:Math.max(f.pageY-h.pY+h.H,0)});if(M1){a.css({width:Math.max(f.pageX-M1.pX+M1.W,0),height:Math.max(f.pageY-M1.pY+M1.H,0)})}}return false},stop:function(){g().unbind("mousemove",b.drag).unbind("mouseup",b.stop)}};var b=g.jqDnR,h=b.dnr,e=b.e,a,c=function(l,j,i,f){return l.each(function(){j=(j)?g(j,l):l;j.bind("mousedown",{e:l,k:i},function(k){var o=k.data,n={};e=o.e;a=f?g(f):false;if(e.css("position")!="relative"){try{e.position(n)}catch(m){}}h={X:n.left||d("left")||0,Y:n.top||d("top")||0,W:d("width")||e[0].scrollWidth||0,H:d("height")||e[0].scrollHeight||0,pX:k.pageX,pY:k.pageY,k:o.k};if(a&&o.k!="d"){M1={X:n.left||f1("left")||0,Y:n.top||f1("top")||0,W:a[0].offsetWidth||f1("width")||0,H:a[0].offsetHeight||f1("height")||0,pX:k.pageX,pY:k.pageY,k:o.k}}else{M1=false}g().mousemove(g.jqDnR.drag).mouseup(g.jqDnR.stop);return false})})},d=function(f){return parseInt(e.css(f))||false};f1=function(f){return parseInt(a.css(f))||false}})(jQuery);(function(a){a.jgrid.extend({setSubGrid:function(){return this.each(function(){var c=this,b;c.p.colNames.unshift("");c.p.colModel.unshift({name:"subgrid",width:a.browser.safari?c.p.subGridWidth+c.p.cellLayout:c.p.subGridWidth,sortable:false,resizable:false,hidedlg:true,search:false,fixed:true});b=c.p.subGridModel;if(b[0]){b[0].align=a.extend([],b[0].align||[]);for(i=0;i"}else{return""}},addSubGrid:function(b,c){return this.each(function(){var m=this;if(!m.grid){return}var n,o,p,j,k,g,h;a("td:eq("+c+")",b).click(function(q){if(a(this).hasClass("sgcollapsed")){p=m.p.id;n=a(this).parent();j=c>=1?" ":"";o=a(n).attr("id");h=true;if(a.isFunction(m.p.subGridBeforeExpand)){h=m.p.subGridBeforeExpand(p+"_"+o,o)}if(h===false){return false}k=0;a.each(m.p.colModel,function(s,r){if(this.hidden===true||this.name=="rn"||this.name=="cb"){k++}});g=""+j+"

    ";a(this).parent().after(g+"
    ");if(a.isFunction(m.p.subGridRowExpanded)){m.p.subGridRowExpanded(p+"_"+o,o)}else{l(n)}a(this).html("").removeClass("sgcollapsed").addClass("sgexpanded")}else{if(a(this).hasClass("sgexpanded")){h=true;if(a.isFunction(m.p.subGridRowColapsed)){n=a(this).parent();o=a(n).attr("id");h=m.p.subGridRowColapsed(p+"_"+o,o)}if(h===false){return false}a(this).parent().next().remove(".ui-subgrid");a(this).html("").removeClass("sgexpanded").addClass("sgcollapsed")}}return false});var l=function(u){var t,q,v,s,r;q=a(u).attr("id");v={id:q,nd_:(new Date().getTime())};if(!m.p.subGridModel[0]){return false}if(m.p.subGridModel[0].params){for(r=0;r").html(q);a(r).append(s)};var d=function(v,t){var x,u,w,q,s=a("
    "),r=a("");for(u=0;u");a(x).html(m.p.subGridModel[0].name[u]);a(x).width(m.p.subGridModel[0].width[u]);a(r).append(x)}a(s).append(r);if(v){q=m.p.xmlReader.subgrid;a(q.root+" "+q.row,v).each(function(){r=a("");if(q.repeatitems===true){a(q.cell,this).each(function(A){e(r,a(this).text()||" ",A)})}else{var z=m.p.subGridModel[0].mapping||m.p.subGridModel[0].name;if(z){for(u=0;u"),r=a("");for(v=0;v");a(z).html(m.p.subGridModel[0].name[v]);a(z).width(m.p.subGridModel[0].width[v]);a(r).append(z)}a(s).append(r);if(x){q=m.p.jsonReader.subgrid;B=x[q.root];if(typeof B!=="undefined"){for(v=0;v");if(q.repeatitems===true){if(q.cell){y=y[q.cell]}for(var t=0;t";d+="
    ";if(parseInt(b[e],10)!==parseInt(g.p.tree_root_level,10)){if(!a(g).jqGrid("isVisibleNode",c)){a(c).css("display","none")}}a("td:eq("+j+")",c).wrapInner("").prepend(d);a(".treeclick",c).bind("click",function(o){var n=o.target||o.srcElement;var m=a(n,g.rows).parents("tr.jqgrow")[0].rowIndex;if(!g.rows[m].isLeaf){if(g.rows[m].expanded){a(g).jqGrid("collapseRow",g.rows[m]);a(g).jqGrid("collapseNode",g.rows[m])}else{a(g).jqGrid("expandRow",g.rows[m]);a(g).jqGrid("expandNode",g.rows[m])}}return false});if(g.p.ExpandColClick===true){a("span",c).css("cursor","pointer").bind("click",function(o){var n=o.target||o.srcElement;var m=a(n,g.rows).parents("tr.jqgrow")[0].rowIndex;if(!g.rows[m].isLeaf){if(g.rows[m].expanded){a(g).jqGrid("collapseRow",g.rows[m]);a(g).jqGrid("collapseNode",g.rows[m])}else{a(g).jqGrid("expandRow",g.rows[m]);a(g).jqGrid("expandNode",g.rows[m])}}a(g).jqGrid("setSelection",g.rows[m].id);return false})}})},setTreeGrid:function(){return this.each(function(){var e=this,d=0,b;if(!e.p.treeGrid){return}if(!e.p.treedatatype){a.extend(e.p,{treedatatype:e.p.datatype})}e.p.subGrid=false;e.p.altRows=false;e.p.pgbuttons=false;e.p.pginput=false;e.p.multiselect=false;e.p.rowList=[];b="ui-icon-triangle-1-"+(e.p.direction=="rtl"?"w":"e");e.p.treeIcons=a.extend({plus:b,minus:"ui-icon-triangle-1-s",leaf:"ui-icon-radio-off"},e.p.treeIcons||{});if(e.p.treeGridModel=="nested"){e.p.treeReader=a.extend({level_field:"level",left_field:"lft",right_field:"rgt",leaf_field:"isLeaf",expanded_field:"expanded"},e.p.treeReader)}else{if(e.p.treeGridModel=="adjacency"){e.p.treeReader=a.extend({level_field:"level",parent_id_field:"parent",leaf_field:"isLeaf",expanded_field:"expanded"},e.p.treeReader)}}for(var c in e.p.colModel){if(e.p.colModel[c].name==e.p.ExpandColumn){e.p.expColInd=d;break}d++}if(!e.p.expColInd){e.p.expColInd=0}a.each(e.p.treeReader,function(f,g){if(g){e.p.colNames.push(g);e.p.colModel.push({name:g,width:1,hidden:true,sortable:false,resizable:false,hidedlg:true,editable:true,search:false})}})})},expandRow:function(b){this.each(function(){var d=this;if(!d.grid||!d.p.treeGrid){return}var c=a(d).jqGrid("getNodeChildren",b);a(c).each(function(e){a(this).css("display","");if(this.expanded){a(d).jqGrid("expandRow",this)}})})},collapseRow:function(b){this.each(function(){var d=this;if(!d.grid||!d.p.treeGrid){return}var c=a(d).jqGrid("getNodeChildren",b);a(c).each(function(e){a(this).css("display","none");if(this.expanded){a(d).jqGrid("collapseRow",this)}})})},getRootNodes:function(){var b=[];this.each(function(){var d=this;if(!d.grid||!d.p.treeGrid){return}switch(d.p.treeGridModel){case"nested":var c=d.p.treeReader.level_field;a(d.rows).each(function(e){if(parseInt(this[c],10)===parseInt(d.p.tree_root_level,10)){b.push(this)}});break;case"adjacency":a(d.rows).each(function(e){if(this.parent_id==null||this.parent_id.toLowerCase()=="null"){b.push(this)}});break}});return b},getNodeDepth:function(c){var b=null;this.each(function(){var d=this;if(!this.grid||!this.p.treeGrid){return}switch(d.p.treeGridModel){case"nested":b=parseInt(c.level,10)-parseInt(this.p.tree_root_level,10);break;case"adjacency":b=a(d).jqGrid("getNodeAncestors",c).length;break}});return b},getNodeParent:function(c){var b=null;this.each(function(){var g=this;if(!g.grid||!g.p.treeGrid){return}switch(g.p.treeGridModel){case"nested":var e=parseInt(c.lft,10),d=parseInt(c.rgt,10),f=parseInt(c.level,10);a(this.rows).each(function(){if(parseInt(this.level,10)===f-1&&parseInt(this.lft)d){b=this;return false}});break;case"adjacency":a(this.rows).each(function(){if(this.id==c.parent_id){b=this;return false}});break}});return b},getNodeChildren:function(c){var b=[];this.each(function(){var g=this;if(!g.grid||!g.p.treeGrid){return}switch(g.p.treeGridModel){case"nested":var e=parseInt(c.lft,10),d=parseInt(c.rgt,10),f=parseInt(c.level,10);a(this.rows).each(function(h){if(parseInt(this.level,10)===f+1&&parseInt(this.lft,10)>e&&parseInt(this.rgt,10)=f&&parseInt(this.lft,10)>=e&&parseInt(this.lft,10)<=d){b.push(this)}});break;case"adjacency":b.push(c);a(this.rows).each(function(h){len=b.length;for(h=0;h0){b=true}else{b=false}}});return b},expandNode:function(b){return this.each(function(){if(!this.grid||!this.p.treeGrid){return}if(!b.expanded){if(a(this).jqGrid("isNodeLoaded",b)){b.expanded=true;a("div.treeclick",b).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus")}else{b.expanded=true;a("div.treeclick",b).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus");this.p.treeANode=b.rowIndex;this.p.datatype=this.p.treedatatype;if(this.p.treeGridModel=="nested"){a(this).jqGrid("setGridParam",{postData:{nodeid:b.id,n_left:b.lft,n_right:b.rgt,n_level:b.level}})}else{a(this).jqGrid("setGridParam",{postData:{nodeid:b.id,parentid:b.parent_id,n_level:b.level}})}a(this).trigger("reloadGrid");if(this.p.treeGridModel=="nested"){a(this).jqGrid("setGridParam",{postData:{nodeid:"",n_left:"",n_right:"",n_level:""}})}else{a(this).jqGrid("setGridParam",{postData:{nodeid:"",parentid:"",n_level:""}})}}}})},collapseNode:function(b){return this.each(function(){if(!this.grid||!this.p.treeGrid){return}if(b.expanded){b.expanded=false;a("div.treeclick",b).removeClass(this.p.treeIcons.minus+" tree-minus").addClass(this.p.treeIcons.plus+" tree-plus")}})},SortTree:function(b){return this.each(function(){if(!this.grid||!this.p.treeGrid){return}var f,c,g,e=[],h=this,d=a(this).jqGrid("getRootNodes");d.sort(function(j,i){if(j.sortKeyi.sortKey){return b}return 0});if(d[0]){a("td",d[0]).each(function(i){a(this).css("width",h.grid.headers[i].width+"px")});h.grid.cols=d[0].cells}for(f=0,c=d.length;fi.sortKey){return c}return 0});for(g=0,e=f.length;g0){for(var c=0;cgrid",data:"roots>rows"},jsonGrid:{config:"grid",data:"data"}},b||{});return this.each(function(){var f=this;var d=function(h,m){var g=a(m.xmlGrid.config,h)[0];var l=a(m.xmlGrid.data,h)[0];if(xmlJsonClass.xml2json&&a.jgrid.parse){var n=xmlJsonClass.xml2json(g," ");var n=a.jgrid.parse(n);for(var i in n){var j=n[i]}if(l){var k=n.grid.datatype;n.grid.datatype="xmlstring";n.grid.datastr=h;a(f).jqGrid(j).jqGrid("setGridParam",{datatype:k})}else{a(f).jqGrid(j)}n=null;j=null}else{alert("xml2json or parse are not present")}};var e=function(h,k){if(h&&typeof h=="string"){var g=a.jgrid.parse(h);var l=g[k.jsonGrid.config];var i=g[k.jsonGrid.data];if(i){var j=l.datatype;l.datatype="jsonstring";l.datastr=i;a(f).jqGrid(l).jqGrid("setGridParam",{datatype:j})}else{a(f).jqGrid(l)}}};switch(b.imptype){case"xml":a.ajax({url:b.impurl,type:b.mtype,data:b.impData,dataType:"xml",complete:function(g,h){if(h=="success"){d(g.responseXML,b);if(a.isFunction(b.importComplete)){b.importComplete(g)}}g=null}});break;case"xmlstring":if(b.impstring&&typeof b.impstring=="string"){var c=a.jgrid.stringToDoc(b.impstring);if(c){d(c,b);if(a.isFunction(b.importComplete)){b.importComplete(c)}b.impstring=null}c=null}break;case"json":a.ajax({url:b.impurl,type:b.mtype,data:b.impData,dataType:"json",complete:function(g,h){if(h=="success"){e(g.responseText,b);if(a.isFunction(b.importComplete)){b.importComplete(g)}}g=null}});break;case"jsonstring":if(b.impstring&&typeof b.impstring=="string"){e(b.impstring,b);if(a.isFunction(b.importComplete)){b.importComplete(b.impstring)}b.impstring=null}break}})},jqGridExport:function(c){c=a.extend({exptype:"xmlstring",root:"grid",ident:"\t"},c||{});var b=null;this.each(function(){if(!this.grid){return}var e=a(this).jqGrid("getGridParam");if(e.rownumbers){e.colNames.splice(0);e.colModel.splice(0)}if(e.multiselect){e.colNames.splice(0);e.colModel.splice(0)}if(e.subgrid){e.colNames.splice(0);e.colModel.splice(0)}if(e.treeGrid){for(var d in e.treeReader){e.colNames.splice(e.colNames.length-1);e.colModel.splice(e.colModel.length-1)}}switch(c.exptype){case"xmlstring":b="<"+c.root+">"+xmlJsonClass.json2xml(e,c.ident)+"";break;case"jsonstring":b="{"+xmlJsonClass.toJson(e,c.root,c.ident)+"}";break}});return b}})})(jQuery);var xmlJsonClass={xml2json:function(b,d){if(b.nodeType===9){b=b.documentElement}var a=this.removeWhite(b);var e=this.toObj(a);var c=this.toJson(e,b.nodeName,"\t");return"{\n"+d+(d?c.replace(/\t/g,d):c.replace(/\t|\n/g,""))+"\n}"},json2xml:function(d,c){var e=function(q,f,h){var o="";var l,g;if(q instanceof Array){if(q.length===0){o+=h+"<"+f+">__EMPTY_ARRAY_\n"}else{for(l=0,g=q.length;l":"/>";if(k){for(j in q){if(q.hasOwnProperty(j)){if(j==="#text"){o+=q[j]}else{if(j==="#cdata"){o+=""}else{if(j.charAt(0)!=="@"){o+=e(q[j],j,h+"\t")}}}}}o+=(o.charAt(o.length-1)==="\n"?h:"")+""}}else{if(typeof(q)==="function"){o+=h+"<"+f+">"}else{if(q.toString()==='""'||q.toString().length===0){o+=h+"<"+f+">__EMPTY_STRING_"}else{o+=h+"<"+f+">"+q.toString()+""}}}}return o};var b="";var a;for(a in d){if(d.hasOwnProperty(a)){b+=e(d[a],a,"")}}return c?b.replace(/\t/g,c):b.replace(/\t|\n/g,"")},toObj:function(b){var g={};var f=/function/i;if(b.nodeType===1){if(b.attributes.length){var e;for(e=0;e1){g=this.escape(this.innerXml(b))}else{for(h=b.firstChild;h;h=h.nextSibling){if(f.test(b.firstChild.nodeValue)){g=b.firstChild.nodeValue;break}else{g["#cdata"]=this.escape(h.nodeValue)}}}}}}}if(!b.attributes.length&&!b.firstChild){g=null}}else{if(b.nodeType===9){g=this.toObj(b.documentElement)}else{alert("unhandled node type: "+b.nodeType)}}return g},toJson:function(b,a,d){var l=a?('"'+a+'"'):"";if(b==="[]"){l+=(a?":[]":"[]")}else{if(b instanceof Array){var c,h,f=[];for(h=0,c=b.length;h1?("\n"+d+"\t"+f.join(",\n"+d+"\t")+"\n"+d):f.join(""))+"]"}else{if(b===null){l+=(a&&":")+"null"}else{if(typeof(b)==="object"){var j=[];var e;for(e in b){if(b.hasOwnProperty(e)){j[j.length]=this.toJson(b[e],e,d+"\t")}}l+=(a?":{":"{")+(j.length>1?("\n"+d+"\t"+j.join(",\n"+d+"\t")+"\n"+d):j.join(""))+"}"}else{if(typeof(b)==="string"){var k=/(^-?\d+\.?\d*$)/;var p=/function/i;var g=b.toString();if(k.test(g)||p.test(g)||g==="false"||g==="true"){l+=(a&&":")+g}else{l+=(a&&":")+'"'+b+'"'}}else{l+=(a&&":")+b.toString()}}}}}return l},innerXml:function(d){var b="";if("innerHTML" in d){b=d.innerHTML}else{var a=function(j){var g="",f;if(j.nodeType===1){g+="<"+j.nodeName;for(f=0;f"}else{g+="/>"}}else{if(j.nodeType===3){g+=j.nodeValue}else{if(j.nodeType===4){g+=""}}}return g};for(var e=d.firstChild;e;e=e.nextSibling){b+=a(e)}}return b},escape:function(a){return a.replace(/[\\]/g,"\\\\").replace(/[\"]/g,'\\"').replace(/[\n]/g,"\\n").replace(/[\r]/g,"\\r")},removeWhite:function(b){b.normalize();var c;for(c=b.firstChild;c;){if(c.nodeType===3){if(!c.nodeValue.match(/[^ \f\n\r\t\v]/)){var a=c.nextSibling;b.removeChild(c);c=a}else{c=c.nextSibling}}else{if(c.nodeType===1){this.removeWhite(c);c=c.nextSibling}else{c=c.nextSibling}}}return b}};(function(a){a.jgrid.extend({setColumns:function(b){b=a.extend({top:0,left:0,width:200,height:"auto",dataheight:"auto",modal:false,drag:true,beforeShowForm:null,afterShowForm:null,afterSubmitForm:null,closeOnEscape:true,ShrinkToFit:false,jqModal:false,saveicon:[true,"left","ui-icon-disk"],closeicon:[true,"left","ui-icon-close"],onClose:null,colnameview:true,closeAfterSubmit:true,updateAfterCheck:false},a.jgrid.col,b||{});return this.each(function(){var j=this;if(!j.grid){return}var k=typeof b.beforeShowForm==="function"?true:false;var d=typeof b.afterShowForm==="function"?true:false;var e=typeof b.afterSubmitForm==="function"?true:false;var c=j.p.id,h="ColTbl_"+c,f={themodal:"colmod"+c,modalhead:"colhd"+c,modalcontent:"colcnt"+c,scrollelm:h};if(a("#"+f.themodal).html()!=null){if(k){b.beforeShowForm(a("#"+h))}viewModal("#"+f.themodal,{gbox:"#gbox_"+c,jqm:b.jqModal,jqM:false,modal:b.modal});if(d){b.afterShowForm(a("#"+h))}}else{var l=isNaN(b.dataheight)?b.dataheight:b.dataheight+"px";var m="
    ";m+="";for(i=0;i"}}m+="
    ";var g=!b.updateAfterCheck?""+b.bSubmit+"":"",n=""+b.bCancel+"";m+="
    "+g+" "+n+"
    ";b.gbox="#gbox_"+c;createModal(f,m,b,"#gview_"+j.p.id,a("#gview_"+j.p.id)[0]);if(b.saveicon[0]==true){a("#dData","#"+h+"_2").addClass(b.saveicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(b.closeicon[0]==true){a("#eData","#"+h+"_2").addClass(b.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(!b.updateAfterCheck){a("#dData","#"+h+"_2").click(function(p){for(i=0;i0;var g=!d&&h.length>0;var j=d||g;var i=p.attr("name")||h.attr("name");var l=[];var o=[];$("th",$(this)).each(function(){if(l.length==0&&j){l.push({name:"__selection__",index:"__selection__",width:0,hidden:true});o.push("__selection__")}else{l.push({name:$(this).attr("id")||$(this).html(),index:$(this).attr("id")||$(this).html(),width:$(this).width()||150});o.push($(this).html())}});var f=[];var e=[];var m=[];$("tbody > tr",$(this)).each(function(){var r={};var q=0;$("td",$(this)).each(function(){if(q==0&&j){var s=$("input",$(this));var t=s.attr("value");e.push(t||f.length);if(s.attr("checked")){m.push(t)}r[l[q].name]=s.attr("value")}else{r[l[q].name]=$(this).html()}q++});if(q>0){f.push(r)}});$(this).empty();$(this).addClass("scroll");$(this).jqGrid($.extend({datatype:"local",width:n,colNames:o,colModel:l,multiselect:d},b||{}));for(var k=0;k0){c=e[k];if(c&&c.replace){c=encodeURIComponent(c).replace(/[.\-%]/g,"_")}}if(c==null){c=k+1}$(this).jqGrid("addRowData",c,f[k])}for(var k=0;kth:not(:has(#jqgh_cb,#jqgh_rn,#jqgh_subgrid),:hidden)",placeholder:{element:function(item){var el=$(document.createElement(item[0].nodeName)).addClass(item[0].className+" ui-sortable-placeholder ui-state-highlight").removeClass("ui-sortable-helper")[0];return el},update:function(self,p){p.height(self.currentItem.innerHeight()-parseInt(self.currentItem.css("paddingTop")||0,10)-parseInt(self.currentItem.css("paddingBottom")||0,10));p.width(self.currentItem.innerWidth()-parseInt(self.currentItem.css("paddingLeft")||0,10)-parseInt(self.currentItem.css("paddingRight")||0,10))}},update:function(event,ui){var p=$(ui.item).parent();var th=$(">th",p);var colModel=ts.p.colModel;var cmMap={};$.each(colModel,function(i){cmMap[this.name]=i});var permutation=[];th.each(function(i){var id=$(">div",this).get(0).id.replace(/^jqgh_/,"");if(id in cmMap){permutation.push(cmMap[id])}});$(ts).jqGrid("remapColumns",permutation,true,true);if($.isFunction(ts.p.sortable.update)){ts.p.sortable.update(permutation)}setTimeout(function(){ts.p.disableClick=false},50)}};if(ts.p.sortable.options){$.extend(sortable_opts,ts.p.sortable.options)}else{if($.isFunction(ts.p.sortable)){ts.p.sortable={update:ts.p.sortable}}}if(sortable_opts.start){var s=sortable_opts.start;sortable_opts.start=function(e,ui){start();s.call(this,e,ui)}}else{sortable_opts.start=start}if(ts.p.sortable.exclude){sortable_opts.items+=":not("+ts.p.sortable.exclude+")"}tblrow.sortable(sortable_opts).data("sortable").floating=true})},columnChooser:function(opts){var self=this;var selector=$('
    ');var select=$("select",selector);opts=$.extend({width:420,height:240,classname:null,done:function(perm){if(perm){self.jqGrid("remapColumns",perm,true)}},msel:"multiselect",dlog:"dialog",dlog_opts:function(opts){var buttons={};buttons[opts.bSubmit]=function(){opts.apply_perm();opts.cleanup(false)};buttons[opts.bCancel]=function(){opts.cleanup(true)};return{buttons:buttons,close:function(){opts.cleanup(true)},modal:false,resizable:false,width:opts.width+20}},apply_perm:function(){$("option",select).each(function(i){if(this.selected){self.jqGrid("showCol",colModel[this.value].name)}else{self.jqGrid("hideCol",colModel[this.value].name)}});var perm=fixedCols.slice(0);$("option[selected]",select).each(function(){perm.push(parseInt(this.value))});$.each(perm,function(){delete colMap[colModel[this].name]});$.each(colMap,function(){perm.push(parseInt(this))});if(opts.done){opts.done.call(self,perm)}},cleanup:function(calldone){call(opts.dlog,selector,"destroy");call(opts.msel,select,"destroy");selector.remove();if(calldone&&opts.done){opts.done.call(self)}}},$.jgrid.col,opts||{});if(opts.caption){selector.attr("title",opts.caption)}if(opts.classname){selector.addClass(classname);select.addClass(classname)}if(opts.width){$(">div",selector).css({width:opts.width,margin:"0 auto"});select.css("width",opts.width)}if(opts.height){$(">div",selector).css("height",opts.height);select.css("height",opts.height-10)}var colModel=self.jqGrid("getGridParam","colModel");var colNames=self.jqGrid("getGridParam","colNames");var colMap={},fixedCols=[];select.empty();$.each(colModel,function(i){colMap[this.name]=i;if(this.hidedlg){if(!this.hidden){fixedCols.push(i)}return}select.append("")});function call(fn,obj){if(!fn){return}if(typeof fn=="string"){if($.fn[fn]){$.fn[fn].apply(obj,$.makeArray(arguments).slice(2))}}else{if($.isFunction(fn)){fn.apply(obj,$.makeArray(arguments).slice(2))}}}var dopts=$.isFunction(opts.dlog_opts)?opts.dlog_opts.call(self,opts):opts.dlog_opts;call(opts.dlog,selector,dopts);var mopts=$.isFunction(opts.msel_opts)?opts.msel_opts.call(self,opts):opts.msel_opts;call(opts.msel,select,opts.msel_opts)},sortableRows:function(opts){return this.each(function(){var $t=this;if(!$t.grid){return}if($t.p.treeGrid){return}if($.fn.sortable){opts=$.extend({cursor:"move",axis:"y",items:".jqgrow"},opts||{});if(opts.start&&$.isFunction(opts.start)){opts._start_=opts.start;delete opts.start}else{opts._start_=false}if(opts.update&&$.isFunction(opts.update)){opts._update_=opts.update;delete opts.update}else{opts._update_=false}opts.start=function(ev,ui){$(ui.item).css("border-width","0px");$("td",ui.item).each(function(i){this.style.width=$t.grid.cols[i].style.width});if($t.p.subGrid){var subgid=$(ui.item).attr("id");try{$($t).jqGrid("collapseSubGridRow",subgid)}catch(e){}}if(opts._start_){opts._start_.apply(this,[ev,ui])}};opts.update=function(ev,ui){$(ui.item).css("border-width","");$t.updateColumns();if(opts._update_){opts._update_.apply(this,[ev,ui])}};$("tbody:first",$t).sortable(opts)}})},gridDnD:function(opts){return this.each(function(){var $t=this;if(!$t.grid){return}if($t.p.treeGrid){return}if(!$.fn.draggable||!$.fn.droppable){return}function updateDnD(){var datadnd=$.data($t,"dnd");$("tr.jqgrow:not(.ui-draggable)",$t).draggable($.isFunction(datadnd.drag)?datadnd.drag.call($($t),datadnd):datadnd.drag)}var appender="
    ";if($("#jqgrid_dnd").html()==null){$("body").append(appender)}if(typeof opts=="string"&&opts=="updateDnD"&&$t.p.jqgdnd==true){updateDnD();return}opts=$.extend({drag:function(opts){return $.extend({start:function(ev,ui){if($t.p.subGrid){var subgid=$(ui.helper).attr("id");try{$($t).jqGrid("collapseSubGridRow",subgid)}catch(e){}}for(var i=0;iÄlteste→Neuste +sortAgeDesc Sortieren nach Alter Neuste→Älteste +sortNameAsc Sortieren nach Name A→Z +sortNameDesc Sortieren nach Name Z→A +sortSizeAsc Sortieren nach Grösse Kleinste→Grösste +sortSizeDesc Sortieren nach Grösse Grösste→Kleiste diff --git a/interfaces/Mobile/language/fr-fr.txt b/interfaces/Mobile/language/fr-fr.txt new file mode 100644 index 0000000..042a944 --- /dev/null +++ b/interfaces/Mobile/language/fr-fr.txt @@ -0,0 +1,42 @@ +# -*- coding: latin-1 -*- +# France # Français +# Mobile + +# misc +button-prev Préc. +button-next Suiv. +button-first Premier +button-last Dernier +button-refresh Rafraîchir +button-close Fermer +button-options Options +page Page +confirm-delete Etes-vous sûr de vouloir supprimer ? +warnings Avertissements +button-purgeQ Vider la Queue +confirm-purgeQ Vider la Queue ? +button-purgeH Vider l'Historique +confirm-purgeH Vider l'Historique ? +left Rest. +rename Renommer + +# pause interval +button-pauseInterval Entrer Durée Pause +pauseInterval Pause Interval +pause5m Pause pour 5 minutes +pause15m Pause pour 15 minutes +pause30m Pause pour 30 minutes +pause1h Pause pour 1 heure +pause3h Pause pour 3 heures +pause6h Pause pour 6 heures +pause12h Pause pour 12 heures +pause24h Pause pour 24 heures + +# queue sort +sort Trier +sortAgeAsc Trier par Age Moins récent→Plus récent +sortAgeDesc Trier par Age Plus récent→Moins récent +sortNameAsc Trier par Nom A→Z +sortNameDesc Trier par Nom Z→A +sortSizeAsc Trier par Taille Plus petit→Plus gros +sortSizeDesc Trier par Taille Plus gros→Plus petit diff --git a/interfaces/Mobile/language/nl-du.txt b/interfaces/Mobile/language/nl-du.txt new file mode 100644 index 0000000..c7c56a5 --- /dev/null +++ b/interfaces/Mobile/language/nl-du.txt @@ -0,0 +1,42 @@ +# -*- coding: UTF-8 -*- +# Netherlandss # Nederlands +# Mobile + +# misc +button-prev Vorige +button-next Volgende +button-first Eerste +button-last Laatste +button-refresh Ververs +button-close Sluiten +button-options Opties +page Pagina +confirm-delete Weet u zeker dat u wilt verwijderen +warnings Meldingen +button-purgeQ Verwijder uit de Wachtrij +confirm-purgeQ Verwijder uit de Wachtrij? +button-purgeH Wis de volledige geschiedenis +confirm-purgeH Wis de volledige geschiedenis? +left Over +rename Naam + +# pause interval +button-pauseInterval Set Pauze Interval +pauseInterval Pauze Interval +pause5m Pauzeer 5 minuten +pause15m Pauzeer 15 minuten +pause30m Pauzeer 30 minuten +pause1h Pauzeer 1 uur +pause3h Pauzeer 3 uur +pause6h Pauzeer 6 uur +pause12h Pauzeer 12 uur +pause24h Pauzeer 24 uur + +# queue sort +sort Sorteren +sortAgeAsc Sorteer op Leeftijd Oud→Nieuw +sortAgeDesc Sorteer op Leeftijd Nieuw→Oud +sortNameAsc Sorteer op Naam A→Z +sortNameDesc Sorteer op Naam Z→A +sortSizeAsc Sorteer op Omvang Klein→Groot +sortSizeDesc Sorteer op Omvang Groot→Klein diff --git a/interfaces/Mobile/language/sv-se.txt b/interfaces/Mobile/language/sv-se.txt new file mode 100644 index 0000000..06df66c --- /dev/null +++ b/interfaces/Mobile/language/sv-se.txt @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Sverige # Svenska +# Translation by "Kristoffer (Malmis) Malmström" +# Mobile + +# misc +button-prev FöregÃ¥ende +button-next Nästa +button-refresh Uppdatera +button-close Stäng +button-options Alternativ +page Sida +confirm-delete Är du säker pÃ¥ att du vill ta bort +warnings Varningar +button-purgeQ Töm kö +confirm-purgeQ Vill du verkligen tömma kön? +button-purgeH Töm historik +confirm-purgeH Vill du verkligen tömma historiken? +left Vänster + +# pause interval +button-pauseInterval Sätt pausintervall +pauseInterval Pausintervall +pause5m Pausa 5 minuter +pause15m Pause 15 minuter +pause30m Pausa 30 minuter +pause1h Pausa 1 timme +pause3h Pausa 3 timmar +pause6h Pausa 6 timmar +pause12h Pausa 12 timmar +pause24h Pausa 24 timmar + +# queue sort +sort Sortera +sortAgeAsc Sortera efter Ã¥lder Äldst→Nyast +sortAgeDesc Sortera efter Ã¥lder Nyast→Äldst +sortNameAsc Sortera efter namn A→Z +sortNameDesc Sortera efter namn Z→A +sortSizeAsc Sortera efter storlek Minst→Störst +sortSizeDesc Sortera efter storlek Störst→Minst diff --git a/interfaces/Mobile/language/us-en.txt b/interfaces/Mobile/language/us-en.txt new file mode 100644 index 0000000..e3f9372 --- /dev/null +++ b/interfaces/Mobile/language/us-en.txt @@ -0,0 +1,42 @@ +# -*- coding: latin-1 -*- +# United States # English +# Mobile + +# misc +button-prev Prev +button-next Next +button-first First +button-last Last +button-refresh Refresh +button-close Close +button-options Options +page Page +confirm-delete Are you sure you want to delete +warnings Warnings +button-purgeQ Purge Queue +confirm-purgeQ Purge the Queue? +button-purgeH Purge History +confirm-purgeH Purge the History? +left Left +rename Rename + +# pause interval +button-pauseInterval Set Pause Interval +pauseInterval Pause Interval +pause5m Pause for 5 minutes +pause15m Pause for 15 minutes +pause30m Pause for 30 minutes +pause1h Pause for 1 hour +pause3h Pause for 3 hours +pause6h Pause for 6 hours +pause12h Pause for 12 hours +pause24h Pause for 24 hours + +# queue sort +sort Sort +sortAgeAsc Sort by Age Oldest→Newest +sortAgeDesc Sort by Age Newest→Oldest +sortNameAsc Sort by Name A→Z +sortNameDesc Sort by Name Z→A +sortSizeAsc Sort by Size Smallest→Largest +sortSizeDesc Sort by Size Largest→Smallest diff --git a/interfaces/Mobile/licenses/LICENSE-BSD.txt b/interfaces/Mobile/licenses/LICENSE-BSD.txt new file mode 100644 index 0000000..b90d331 --- /dev/null +++ b/interfaces/Mobile/licenses/LICENSE-BSD.txt @@ -0,0 +1,18 @@ + = Regents of the University of California + = University of California, Berkeley + = 1998 + +In the original BSD license, both occurrences of the phrase "COPYRIGHT HOLDERS AND CONTRIBUTORS" in the disclaimer read "REGENTS AND CONTRIBUTORS". + +Here is the license template: + +Copyright (c) , +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/interfaces/Mobile/licenses/LICENSE-CC.txt b/interfaces/Mobile/licenses/LICENSE-CC.txt new file mode 100644 index 0000000..ad5f44f --- /dev/null +++ b/interfaces/Mobile/licenses/LICENSE-CC.txt @@ -0,0 +1,63 @@ +http://creativecommons.org/licenses/by/3.0/ +http://creativecommons.org/licenses/by/3.0/legalcode + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + 4. to Distribute and Publicly Perform Adaptations. + 5. + + For the avoidance of doubt: + 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. + 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/interfaces/Mobile/licenses/LICENSE-GPL.txt b/interfaces/Mobile/licenses/LICENSE-GPL.txt new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/interfaces/Mobile/licenses/LICENSE-GPL.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/interfaces/Mobile/licenses/LICENSE-MIT.txt b/interfaces/Mobile/licenses/LICENSE-MIT.txt new file mode 100644 index 0000000..e9c74d0 --- /dev/null +++ b/interfaces/Mobile/licenses/LICENSE-MIT.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) + +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. \ No newline at end of file diff --git a/interfaces/Mobile/templates/main.tmpl b/interfaces/Mobile/templates/main.tmpl new file mode 100644 index 0000000..dba7993 --- /dev/null +++ b/interfaces/Mobile/templates/main.tmpl @@ -0,0 +1,304 @@ + + + + + + SAB+ Mobile + + + + + + + + + + + +
    +
    +

    + SAB+ MobileB/s +      + +

    + $T('Mobile-button-refresh') +
    + + +
    + + + + + +
    +
    +

    $T('Mobile-button-options')

    + $T('Mobile-button-close') +
    + +

    $T('onQueueFinish'):

    +
      +
    • + +
    • +
    + +
    + + + + + + + + +
    +
    +

    $T('menu-queue') NZB

    + $T('button-back') + $T('Mobile-rename') +
    +
    + +
    + +
      + +
    • $T('remainTotal') ⁄  $T('MB') %
    • +
    • $T('eta')
    • +
    • $T('Mobile-left')
    • +
    • $T('nzo-age')
    • + +
    • $T('link-pause') NZB
    • + +
    • $T('order')
    • +
    • + +
    • $T('category')
    • +
    • + +
    • $T('priority')
    • +
    • + +
    • $T('pp')
    • +
    • + +
    • $T('script')
    • +
    • + +
    • $T('nzo-delete') NZB
    • + +
    + +
    +
    + + + + + +
    +
    +

    $T('Mobile-button-options')

    + $T('Mobile-button-close') +
    + +
    + + +
    +
    +

    $T('menu-history') NZB

    + $T('button-back') +
    +
    + +
    +
    +
    + +
      +
    • $T('status')
    • +
    • $T('size')
    • +
    • $T('completed')
    • +
    • $T('category')
    • +
    + +
      +
    • $T('connections')
    • +
    + +
      + +
        +
      • $T('catFolderPath')
      • +
      • +
      + + + +
      +
      + + +
      +
      +

      $T('script')

      + $T('Mobile-button-close') +
      +
      +
      + + +
      +
      +

      $T('add') NZB

      + $T('button-back') +
      +
        +
      • +
      + + + + + +
      + + +
      +
      +

      $T('Mobile-warnings')

      + $T('button-back') + $T('button-clear') +
      +
      + +
      + + + + diff --git a/interfaces/Mobile/templates/static/images/dark/back_button.png b/interfaces/Mobile/templates/static/images/dark/back_button.png new file mode 100644 index 0000000000000000000000000000000000000000..9873901c0e74ba89d1399acfee2a7066601bd6fb GIT binary patch literal 3756 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 Hu0mjf-jO>3 literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/dark/button.png b/interfaces/Mobile/templates/static/images/dark/button.png new file mode 100644 index 0000000000000000000000000000000000000000..52cc7e279723b94d969ca54a8db3ce7e921dc804 GIT binary patch literal 3315 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 literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/dark/button_clicked.png b/interfaces/Mobile/templates/static/images/dark/button_clicked.png new file mode 100644 index 0000000000000000000000000000000000000000..25d478fc8fcd7bc94bdf26cd2e857c26ec228200 GIT binary patch literal 3283 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 RN&Nr-002ovPDHLkV1iWTX0iYP literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/dark/chevron.png b/interfaces/Mobile/templates/static/images/dark/chevron.png new file mode 100644 index 0000000000000000000000000000000000000000..5bdaa46de7995267a392da77bfeacacbe2004f49 GIT binary patch literal 3074 zcma)8c{CL68vcevBUy?>jf7IR355|cj3v@srl^$3KK6Yq(a4f9t&Ao%p5Rgb3z&$^i`x$6oG8yZYs!i+7wA5U~riNF(4yc zSU_t&Dz70b^UPzx6URIoy7*s~oQaOmF4=$ta7j;3NMFX#dFdj-R7RbO`+8B`x|+kA zKPkbQKo482`#PckVtY++ISPnfxhxMmhi8XkPKUA+v=ZgGiK{Qzz{K{_;yg>;WIHg? z;i?6I+u(u7N!6W4=;N(Fpg{64$R#xmAwf1DQ1lX1IH$yZ@Z|&5J2EkMsr+t4AT@2;}|4JR1(zvL&e%7(NT|8EdbIW!uX|*yllix^Z}`2 z{tBeveB_`84t#YSC=sLR%b#54U-5{)Q( z@el*JKxmUV(Exe|MQ$;*y=3~BEOE2tel~0iruIAqB`>bgqLIyeLN7!|GhMh*(=I}%=*6N2(9Mo(C6;rag@3f216!yQD+5Lg@#F*`d{D;v%;K8O)hYG+Gk{m zzwC)vo3;|`w`_%0;LmR=ruJ+FO4in|5s#UG%)#kZxrg$N+*JV#Q5(I?OEk^Q5| zrds*wC$m#BEh&dhY57hVvjWjeEd&q^hmA7tzP^4;4dmrY*#}k>_PLyMFHV!w1cz|+6kHlP3CMYj<#w| zQxa_FX%A$mF>Dy>g7MMspjN2tQe@7ZoZBMR6gy5@1^zLW*%W?Fq4=$OwK-qd|uqkOYO=#%DN&EBHPNHxK%1V{vzp% zK2)9s(P*EXGdWWI7y6yLt8>=0MF-Ya>|^PA0H7}ph%n0My%X63uaC?h%Qxs;;g>F0Vz-s4T&b~$D-7!Ow-t{hx> zB4o^cgM<>gB%~r|7;o9;)AlBQ;4NC_Tp^~=sj#p=ubf)m6iD&?raYxQfa}Ix>RA|s zyVSaRxrn&@by2JMRKZapSD`R(JU{jO@{sRva0R~fTX9kOqlxrM_((=WM#rRzzKni` zP5E@kT>IQ!kGZk?n?0|{wZltK?Y$1{fKh)U@t$BlDn7d`X)IOZF3)6$Ky{LoLQ5SC$ zsq5{`HRaV~{{8-%ON#3P0et~Hfp-Hb0bk^m%-P{J9hG~bo&*Te+|Bv%w8;BWG+(pkMJ8wAS7`o+=9xSe2_lDt0ThWiOY#}i<&{Z67wmaDM`)>G z0zy_QIz~kc#PJ5hLt6zl}X?* zEl1ssY90?DRzyWM!=}8Ju%-H50n6xU{ZrD~yS~?Bt{^A4tv2EJz2~ww z?$GNS{ZW(Ap>Yry-nW_Wu34>_g$8Q}eEQXQv2X;s1~nI2FFIt=gU&XURH&x*2mfC1 z4fl=l9s5No8n55;F3H>UA_g0xzJ4)%FgN3VvOa&u-dbllazXKD={-?H(Hv2C_vKNa zbj!LcA8Q|Zw=fuToAFa}MIYox1M{u*nipKlTw7i1;y%T_8@XQLKDt+Op`3ZE{DyDO zk+D<1@U>&-hXaBW2Hw-g0&9%?9t}zidE?z1=nN6+>*(O@V72Yke!T&|kha~5dK1d~ z?1i3?xji~NKPQ5DkNJz236pi!5+(C|ej;$>-gf6kO}}0;t?qhCZp>#7i-66c4dVE? zrhrfOuJnfEG;i+Jc~u(X*634Z1vi+hq3fLMGw0uGn%n+C$w4C}Vy=%yA2lxOt{Ha3 z+EE-S&>PoNIG|3JaA_UdTaWn7+u592GsI8t3f7$6Y3ANL-su~NPpzNzTxyc~ zVDv@7Tj7JHXMOkROt0_!IZE1dUv<2Sm2cH>V8_~>yWiSV%?31z(&{FIrW>#Cb;x{R zj54bmps!K&#&N`(?4N%Urv7~KG>gh{>IP{^_LIQ)HGcs{Z&xEZ&ABB zX2P%6G@r-_-^ni%gKWlvn$k+M;9eP;q@^!F#}wD!l$L-ss?BaM-P9(NPn*)OM+M%>Fe?eSA!u|V{53Zjo})w z!D1D$1h(7&(Fg6-c!dYXBltf8>Bjx|Kk}c$x9N341jVZHx@4d0~9(dvQWZ-ZF9G+z!zVly$tGg}EKHz^Cb{NYoECVn^ LndrVpVjuq-_e0dN literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/dark/chevron_circle.png b/interfaces/Mobile/templates/static/images/dark/chevron_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..b477e7c9540a8ca98961e2a4a2f16db825e9097f GIT binary patch literal 1243 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 Gi~ldihm0Tq literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/dark/rowhead.png b/interfaces/Mobile/templates/static/images/dark/rowhead.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fa8f67b012f2c5eb7965fc7b401e13bce2d8aa GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!31P*e0{tR#3^x&C<)F_D=AMbN@Z|N$xljE z@XSq2PYp^6;7*cV|x66~SK|z4!c-aBgM}ba1CVUK)tNFe~ct^#G zlAx&$ky=XxQg05`M?I SqL~?JFoUP7pUXO@geCyCj6Bx> literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/dark/toggle.png b/interfaces/Mobile/templates/static/images/dark/toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..3b62ebf26eaf8b21e341d413a6bd7cebcf5e7075 GIT binary patch literal 2815 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 literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/dark/whiteButton.png b/interfaces/Mobile/templates/static/images/dark/whiteButton.png new file mode 100644 index 0000000000000000000000000000000000000000..5514b270053a41039e9e96ef8591796521ee0312 GIT binary patch literal 978 zcmV;@11}R*8aG1*L?d1O->_T@+D~u1Y}!yL0VI=|WL) zUB!jV?nDqFVEqcjNU7Q;7-O1A(q?8dlX-96yZ5-5q-Ly5=jDGlkNe*5{m(h~zIU$B ztvpZh0>hld-kwYNkqy3Ko}K-V%D(G)Z`(9CN35XDjL&xuH$Mh_XF(}UB(Tw%lJL(m|<1LC)=R9eoc+{eJ zNQwFm3ZOo%tAYib`a=Ya6#-N=4JiO(J0G^!!{zGLYx*)_QJi=^gsb6jQm_J=B!6wD zD%0-bC{8`;0(Q9FGD%w0qhLC5rQirtj;nGAUq!X!Dqd2rt6&lNPuJ>g7pqvn zrLC}dJQx&>lhnC-)EE`H)reg0T)izKV$|3W#Z{x-uG+(BCOFiFCeuK~FK_qmdcCS1 z>8qPuMY7^&mwW$}US2j%`m-B`MG8c7zyGk_Te#n^&tIcWp2Z*u%VSYOaGhsH3-(@~ zmGI-aXiXaBcJ0@|xe~1jq8+&sKXGKh9t>WX-&ip>B{%Tf)t#qUx1u_4ei+87UrHDfl6dXpw%k7!k~_oku06C3S8F^@(Qf&-L}LBUh<3`S518 zHslKoXby|rLrF-aMbk8j+ef37#cK7AgI*>xK3*KI+wDGQqnw)Edn!H~2Jv7#l+-p> zSL68q&WJ!JQ!W>a*5>p3XLojzq*mM7in|*4KU7;ZTp6~iyZ`_I07*qoM6N<$f;?{4 AHUIzs literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/light/backButton.png b/interfaces/Mobile/templates/static/images/light/backButton.png new file mode 100644 index 0000000000000000000000000000000000000000..935f914ea2672151083594dab0215c8ed1555c56 GIT binary patch literal 783 zcmV+q1MvKbP)VGsr2dAHlrMxhic zAO(@DAcA1I$8eDlA@TCT|ER&lps6A;L=!ZU2xti2h*6YqODMG6w!7QyJ2MKR1`FTX z<;nR0lXFJgdol~hOC}SuGta+%`5cYxK(+``T~mK`aHPEA8~~_9498geu@ZVX9;m8s z?;Xka`XEb~Xmfq#(Sz}h?!I7GpGrh zCjBL)DltI@O^Z!Ep6DF9SzHoO6onW_B4m$nIP-lat=+?mZ|7CaSiv-miTih(g4YU* z$_asxAUC|evTu0QA52e$%Fkc&msLq5$SvV=7ySPR%b%8XiyP{ikr`1!jyYWJLmlYJ z#OqftI|lC{J1|Xb0_1q#7 z01WmbWc9_f$v{K5a5xVNu)hPZzrvtA(hN8W2|cBZjSf37MkvKe03noJO~2kB)T5is z3@1TBBujFCXQLk55(4ZFfWi!>C5wuD^_9hDGI|0X@V;1FZ)vJMty*@G8}PeR zx&}GMgzh}2!Wn)&M6mUON9fWrAeYjX;rA8nt&o|mZEc|EGU{PWryw_&+0?=PQ>1o{_%6ycWDlXV%!C$R?QE^HSg6Ony+quOCP#-lJ}iG1>xvbKoZ zomcAjwgrO(BBCW#=Hqut6a2G$37eJC1 zL6jIkkr_sy8b+TQNTnJ{ryEPG98R(wN1Gi_wH;8m9Z|X-OQs%7s2)_n9#p{}Rl^@v z#UEG3Aw!5EM2R9qhayFZB464gM~)*%kR)Q>CrXbeWZx)Cjwn*4DpRK}PK_>U;4fOR zFlyj4ZQwa@;X!xfLwMsxdgDlGuSsvbO@HK6gymI&z*vXoS%~IaiRNI9=VXuQXOie{ zi?eTqv2l&Fa)_mKiKTOkymODWb&jxhkFa)+v3i!di=fGsp0SywyPT-NrL)GTwa4zB zu!H~r0J=#;K~xyijmXy$!9W;>;SV7zS{9M$y@u#r5MA#7g3PRw{bw9_&fXWkf9`}J z1UhHm$9o*K`Xixl1;=mfRA;%_3Y(>)9#FT}61$1aVkKFm!Dj@AF(nLS9U==pBsfww zkwRiXBoOZsal{%#3|fuQz{&)Jk|Pu-Ch=p0=?EiFM-h38D55||>5ox0_qa}&ZhXto+2n%b?bJ&~1lBv41sCu<^TcbQd%6WH^KYEFCb>M6lGmBCgZF_RMP;g_&g!eAw8+>M~{e^us?&19oxF zesu1f-zQziO$!7&@4IwANODeU)>*x*Rn^qtPS=tAh0|PL2=Z@Q!F+ZRSJaYqUMAhQ zG`Dhu3(aFX@_xb(O9venU+*Q2KNu!0^l!Yucs8g@r!jItQ`$kM_RelF{r G5}E+j-eN=m literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/light/grayButton.png b/interfaces/Mobile/templates/static/images/light/grayButton.png new file mode 100644 index 0000000000000000000000000000000000000000..0ce6a30d4b5f6d9b2b13a2414f76c344e4991a1a GIT binary patch literal 943 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 N002ovPDHLkV1i-QPa^;T literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/light/loading.gif b/interfaces/Mobile/templates/static/images/light/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..8522ddf1a6ebd07d999926dd018f2f8af62ee804 GIT binary patch literal 1435 zcmZ?wbhEHblw=TL*v!E2|NsAAzyH4d^yk6LUzhIxIC|~-w$oo%9{MtS$EUvaAL^I9 zFPi-}dEy(7x);_Z&w+{+|8x7fh6Fo12DlpO889<4Ffb_oWMSoE;AhZbU|?bp073?q z!Vf2(zc4I)b=|F);X=UdD-6xT9p_e zCjY=i7V9oLHAd}acT3oj)KbHCm(8mkPDu2;o^i>?_7x^ixw#O)RJ+hp(Kxs+)tAi39 za;jZxp54$8HAJBiUK>rCWijd-DIDhAwEt7^~-0}%C6b<+tBH~2-*)}A8^?ECDXvxQbA5DuV zJ)NXk+a}SbQ#{AR`iT3rD=P!HiLeDQvAJUPN;c4BiN!y5stQl?m~6>0UB%z1BeK{e zU3r1X=8n!JMHf>MA$H}11wJyohno*fGO-YGcTBuuvM#jiP=bcax*I)71_CmRX0SOn zI-1G*a~j+*uv*3B@JaDRnizu@e?W#XGlRHtCPR*7Umb?eKnWHUb5V;Uj8=-Azq7T% zi_xpo*zRakWZ$WXQ;MS7uAI54C?Rp2wYb1D$?(FX0tO}7Q%sEw7QQ^(OTKQblv$u~ zB=JMR4Gwiig^w%VIq-cg;NWLybKB9#u*?O;yUf6J2}&rDA5LCZNiI73x8V4hgSiT2 z6@62@e81{&q^eB5yhhsTh>V@;yo();8d)uqCnUCo%xy87p8MfJAwz@9B8R1-7Mu)8 z1_3r1i`lj*6$nh=W^lVu$I~Qz{jfq0ifypm7!CB?oW&9MuFp!5z7`|9yk*McQol!u zvr`Sbr)Ws7k*Vm@)R$j6QG-jJw`J2eNdtp*iHr;{e7Txh)EE>h*t(7`{1CvyCv^0( zo5Gc>_Alb-WeSL_OtK7Q7f(IKdl@3W!G2jAW(#RHc*FD*#te{9~? z?$B`JhnW2FMGYH6oBF4#6c*TV^d}vB5GY|%x58Rl|sI%aUEiXevud?ZKCqKVvP5$7W!A>HrElaOmP+;?T zxNb$|4hgpIzDEu=MpIpresys1cRXUcK4GtlgxjI2j87_jhaPUM(-Fu&H7Bq3fmfNa Is33zi04%B!Q2+n{ literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/light/on_off.png b/interfaces/Mobile/templates/static/images/light/on_off.png new file mode 100644 index 0000000000000000000000000000000000000000..62325a8232cb4512e806fad9568b5a438a108475 GIT binary patch literal 2634 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 NgQu&X%Q~loCIB>$9?k#& literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/light/selection.png b/interfaces/Mobile/templates/static/images/light/selection.png new file mode 100644 index 0000000000000000000000000000000000000000..537e3f0b13ea422a5ac5487317872414d51574c1 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiX1&%978x{Sr2X$Jj5WtvT?p{@1r}0Gc6VGKL6Qv;l%Dc zTgw%X}gxBOXmxAbz1ds%&OUSwBY#<9&n!x%hW{an^L HB{Ts5+CMp^ literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/light/thumb.png b/interfaces/Mobile/templates/static/images/light/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..81495a09287fd57a2e3ab5372c4e976ca8b8929e GIT binary patch literal 2834 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 LNkvXXu0mjf9G~Ji literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/light/toolbar.png b/interfaces/Mobile/templates/static/images/light/toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..2159c7dd0cd5efb3a64f2653ea60e0c9564197b4 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf-!2~4D97_9ulw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlA}>!D$B>F!zCDV34Gsd#v;Y3TJ|TmJseIn)i>a4+H5bh+ zbJ_UTea>|bh33daK%zl0UMIIXm_ Q6=*7hr>mdKI;Vst0L2kLjsO4v literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/light/whiteButton.png b/interfaces/Mobile/templates/static/images/light/whiteButton.png new file mode 100644 index 0000000000000000000000000000000000000000..5514b270053a41039e9e96ef8591796521ee0312 GIT binary patch literal 978 zcmV;@11}R*8aG1*L?d1O->_T@+D~u1Y}!yL0VI=|WL) zUB!jV?nDqFVEqcjNU7Q;7-O1A(q?8dlX-96yZ5-5q-Ly5=jDGlkNe*5{m(h~zIU$B ztvpZh0>hld-kwYNkqy3Ko}K-V%D(G)Z`(9CN35XDjL&xuH$Mh_XF(}UB(Tw%lJL(m|<1LC)=R9eoc+{eJ zNQwFm3ZOo%tAYib`a=Ya6#-N=4JiO(J0G^!!{zGLYx*)_QJi=^gsb6jQm_J=B!6wD zD%0-bC{8`;0(Q9FGD%w0qhLC5rQirtj;nGAUq!X!Dqd2rt6&lNPuJ>g7pqvn zrLC}dJQx&>lhnC-)EE`H)reg0T)izKV$|3W#Z{x-uG+(BCOFiFCeuK~FK_qmdcCS1 z>8qPuMY7^&mwW$}US2j%`m-B`MG8c7zyGk_Te#n^&tIcWp2Z*u%VSYOaGhsH3-(@~ zmGI-aXiXaBcJ0@|xe~1jq8+&sKXGKh9t>WX-&ip>B{%Tf)t#qUx1u_4ei+87UrHDfl6dXpw%k7!k~_oku06C3S8F^@(Qf&-L}LBUh<3`S518 zHslKoXby|rLrF-aMbk8j+ef37#cK7AgI*>xK3*KI+wDGQqnw)Edn!H~2Jv7#l+-p> zSL68q&WJ!JQ!W>a*5>p3XLojzq*mM7in|*4KU7;ZTp6~iyZ`_I07*qoM6N<$f;?{4 AHUIzs literal 0 HcmV?d00001 diff --git a/interfaces/Mobile/templates/static/images/sab.png b/interfaces/Mobile/templates/static/images/sab.png new file mode 100644 index 0000000000000000000000000000000000000000..2c629000630096dd5d40024416156703104cb533 GIT binary patch literal 2745 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.data;i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)}else delete t[p]}i=c(a.target).closest(f,a.currentTarget); +n=0;for(l=i.length;n)[^>]*$|^#([\w-]+)$/,Pa=/^.[^:#\[\.,]*$/,Qa=/\S/, +Ra=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Sa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],M,ca=Object.prototype.toString,da=Object.prototype.hasOwnProperty,ea=Array.prototype.push,R=Array.prototype.slice,V=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Oa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Sa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])]; +c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=ua([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return U.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a)}else return!b||b.jquery?(b||U).find(a):c(b).find(a);else if(c.isFunction(a))return U.ready(a);if(a.selector!==w){this.selector=a.selector; +this.context=a.context}return c.isArray(a)?this.setArray(a):c.makeArray(a,this)},selector:"",jquery:"1.4",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){a=c(a||null);a.prevObject=this;a.context=this.context;if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;else if(b)a.selector=this.selector+"."+b+"("+d+")";return a},setArray:function(a){this.length= +0;ea.apply(this,a);return this},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject|| +c(null)},push:ea,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
      a";var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!i)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length, +htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(i.getAttribute("style")),hrefNormalized:i.getAttribute("href")==="/a",opacity:/^0.55$/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(j){}a.insertBefore(b, +a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function o(){c.support.noCloneEvent=false;d.detachEvent("onclick",o)});d.cloneNode(true).fireEvent("onclick")}c(function(){var o=s.createElement("div");o.style.width=o.style.paddingLeft="1px";s.body.appendChild(o);c.boxModel=c.support.boxModel=o.offsetWidth===2;s.body.removeChild(o).style.display="none"});a=function(o){var p=s.createElement("div");o="on"+o;var n=o in +p;if(!n){p.setAttribute(o,"return;");n=typeof p[o]==="function"}return n};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=i=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var H="jQuery"+K(),Ta=0,ya={},Ua={};c.extend({cache:{},expando:H,noData:{embed:true,object:true,applet:true},data:function(a, +b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?ya:a;var f=a[H],e=c.cache;if(!b&&!f)return null;f||(f=++Ta);if(typeof b==="object"){a[H]=f;e=e[f]=c.extend(true,{},b)}else e=e[f]?e[f]:typeof d==="undefined"?Ua:(e[f]={});if(d!==w){a[H]=f;e[b]=d}return typeof b==="string"?e[b]:e}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?ya:a;var d=a[H],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{try{delete a[H]}catch(i){a.removeAttribute&& +a.removeAttribute(H)}delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,a,b)})},removeData:function(a){return this.each(function(){c.removeData(this, +a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this, +a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var za=/[\n\t]/g,fa=/\s+/,Va=/\r/g,Wa=/href|src|style/,Xa=/(button|input)/i,Ya=/(button|input|object|select|textarea)/i,Za=/^(a|area)$/i,Aa=/radio|checkbox/;c.fn.extend({attr:function(a, +b){return $(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(p){var n=c(this);n.addClass(a.call(this,p,n.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(fa),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var i=b?d:0;for(d=b?d+1:e.length;i=0;else if(c.nodeName(this,"select")){var z=c.makeArray(t);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),z)>=0});if(!z.length)this.selectedIndex= +-1}else this.value=t}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var i=Wa.test(b);if(b in a&&f&&!i){if(e){if(b==="type"&&Xa.test(a.nodeName)&&a.parentNode)throw"type property can't be changed";a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue; +if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Ya.test(a.nodeName)||Za.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var $a=function(a){return a.replace(/[^\w\s\.\|`]/g,function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType=== +3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;if(!d.guid)d.guid=c.guid++;if(f!==w){d=c.proxy(d);d.data=f}var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;if(!i){j=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):w};i=c.data(a,"handle",j)}if(i){i.elem=a;b=b.split(/\s+/);for(var o,p=0;o=b[p++];){var n=o.split(".");o=n.shift();d.type=n.slice(0).sort().join(".");var t=e[o],z=this.special[o]||{};if(!t){t=e[o]={}; +if(!z.setup||z.setup.call(a,f,n,d)===false)if(a.addEventListener)a.addEventListener(o,i,false);else a.attachEvent&&a.attachEvent("on"+o,i)}if(z.add)if((n=z.add.call(a,d,f,n,t))&&c.isFunction(n)){n.guid=n.guid||d.guid;d=n}t[d.guid]=d;this.global[o]=true}a=null}}},global:{},remove:function(a,b,d){if(!(a.nodeType===3||a.nodeType===8)){var f=c.data(a,"events"),e,i,j;if(f){if(b===w||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{if(b.type){d=b.handler;b=b.type}b=b.split(/\s+/); +for(var o=0;i=b[o++];){var p=i.split(".");i=p.shift();var n=!p.length,t=c.map(p.slice(0).sort(),$a);t=new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.)?")+"(\\.|$)");var z=this.special[i]||{};if(f[i]){if(d){j=f[i][d.guid];delete f[i][d.guid]}else for(var B in f[i])if(n||t.test(f[i][B].type))delete f[i][B];z.remove&&z.remove.call(a,p,j);for(e in f[i])break;if(!e){if(!z.teardown||z.teardown.call(a,p)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+ +i,c.data(a,"handle"));e=null;delete f[i]}}}}for(e in f)break;if(!e){if(B=c.data(a,"handle"))B.elem=null;c.removeData(a,"events");c.removeData(a,"handle")}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[H]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();this.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType=== +8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;var i=c.data(d,"handle");i&&i.apply(d,b);var j,o;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){j=d[e];o=d["on"+e]}}catch(p){}i=c.nodeName(d,"a")&&e==="click";if(!f&&j&&!a.isDefaultPrevented()&&!i){this.triggered=true;try{d[e]()}catch(n){}}else if(o&&d["on"+e].apply(d,b)===false)a.result=false;this.triggered=false;if(!a.isPropagationStopped())(d=d.parentNode||d.ownerDocument)&&c.event.trigger(a,b,d,true)}, +handle:function(a){var b,d;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;d=a.type.split(".");a.type=d.shift();b=!d.length&&!a.exclusive;var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");d=(c.data(this,"events")||{})[a.type];for(var e in d){var i=d[e];if(b||f.test(i.type)){a.handler=i;a.data=i.data;i=i.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}return a.result}, +props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[H])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement|| +s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&& +a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a,b){c.extend(a,b||{});a.guid+=b.selector+b.live;c.event.add(this,b.live,qa,b)},remove:function(a){if(a.length){var b=0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");c.each(c.data(this,"events").live||{},function(){d.test(this.type)&&b++});b<1&&c.event.remove(this,a[0],qa)}},special:{}},beforeunload:{setup:function(a, +b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=K();this[H]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ba;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped= +ba;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ba;this.stopPropagation()},isDefaultPrevented:aa,isPropagationStopped:aa,isImmediatePropagationStopped:aa};var Ba=function(a){for(var b=a.relatedTarget;b&&b!==this;)try{b=b.parentNode}catch(d){break}if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}},Ca=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover", +mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ca:Ba,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ca:Ba)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(a,b,d){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="submit"||i==="image")&&c(e).closest("form").length)return pa("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit."+ +d.guid,function(f){var e=f.target,i=e.type;if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return pa("submit",this,arguments)})}else return false},remove:function(a,b){c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));c.event.remove(this,"keypress.specialSubmit"+(b?"."+b.guid:""))}};if(!c.support.changeBubbles){var ga=/textarea|input|select/i;function Da(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex> +-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d}function ha(a,b){var d=a.target,f,e;if(!(!ga.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Da(d);if(e!==f){if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",e);if(d.type!=="select"&&(f!=null||e)){a.type="change";return c.event.trigger(a,b,this)}}}}c.event.special.change={filters:{focusout:ha,click:function(a){var b=a.target,d=b.type;if(d=== +"radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ha.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ha.call(this,a)},beforeactivate:function(a){a=a.target;a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Da(a))}},setup:function(a,b,d){for(var f in W)c.event.add(this,f+".specialChange."+d.guid,W[f]);return ga.test(this.nodeName)}, +remove:function(a,b){for(var d in W)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),W[d]);return ga.test(this.nodeName)}};var W=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d, +f,e){if(typeof d==="object"){for(var i in d)this[b](i,f,d[i],e);return this}if(c.isFunction(f)){thisObject=e;e=f;f=w}var j=b==="one"?c.proxy(e,function(o){c(this).unbind(o,j);return e.apply(this,arguments)}):e;return d==="unload"&&b!=="one"?this.one(d,f,e,thisObject):this.each(function(){c.event.add(this,d,j,f)})}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault){for(var d in a)this.unbind(d,a[d]);return this}return this.each(function(){c.event.remove(this,a,b)})},trigger:function(a, +b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},toggle:function(a){for(var b=arguments,d=1;d0){y=u;break}}u=u[g]}m[r]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,i=Object.prototype.toString,j=false,o=true;[0,0].sort(function(){o=false;return 0});var p=function(g,h,k,m){k=k||[];var r=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return k;for(var q=[],v,u,y,S,I=true,N=x(h),J=g;(f.exec(""),v=f.exec(J))!==null;){J=v[3];q.push(v[1]);if(v[2]){S=v[3];break}}if(q.length>1&&t.exec(g))if(q.length===2&&n.relative[q[0]])u=ia(q[0]+q[1],h);else for(u=n.relative[q[0]]?[h]:p(q.shift(),h);q.length;){g=q.shift();if(n.relative[g])g+=q.shift(); +u=ia(g,u)}else{if(!m&&q.length>1&&h.nodeType===9&&!N&&n.match.ID.test(q[0])&&!n.match.ID.test(q[q.length-1])){v=p.find(q.shift(),h,N);h=v.expr?p.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:q.pop(),set:B(m)}:p.find(q.pop(),q.length===1&&(q[0]==="~"||q[0]==="+")&&h.parentNode?h.parentNode:h,N);u=v.expr?p.filter(v.expr,v.set):v.set;if(q.length>0)y=B(u);else I=false;for(;q.length;){var E=q.pop();v=E;if(n.relative[E])v=q.pop();else E="";if(v==null)v=h;n.relative[E](y,v,N)}}else y=[]}y||(y=u);if(!y)throw"Syntax error, unrecognized expression: "+ +(E||g);if(i.call(y)==="[object Array]")if(I)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&F(h,y[g])))k.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&k.push(u[g]);else k.push.apply(k,y);else B(y,k);if(S){p(S,r,k,m);p.uniqueSort(k)}return k};p.uniqueSort=function(g){if(D){j=o;g.sort(D);if(j)for(var h=1;h":function(g,h){var k=typeof h==="string";if(k&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,r=g.length;m=0))k||m.push(v);else if(k)h[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,k,m,r,q){h=g[1].replace(/\\/g,"");if(!q&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,k,m,r){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=p(g[3],null,null,h);else{g=p.filter(g[3],h,k,true^r);k||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,k){return!!p(k[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,k,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,k){return hk[3]-0},nth:function(g,h,k){return k[3]-0===h},eq:function(g,h,k){return k[3]-0===h}},filter:{PSEUDO:function(g,h,k,m){var r=h[1],q=n.filters[r];if(q)return q(g,k,h,m);else if(r==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(r==="not"){h= +h[3];k=0;for(m=h.length;k=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var k=h[1];g=n.attrHandle[k]?n.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);k=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?k===h:m==="*="?k.indexOf(h)>=0:m==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:m==="!="?k!==h:m==="^="?k.indexOf(h)===0:m==="$="?k.substr(k.length-h.length)===h:m==="|="?k===h||k.substr(0,h.length+1)===h+"-":false},POS:function(g,h,k,m){var r=n.setFilters[h[2]];if(r)return r(g,k,h,m)}}},t=n.match.POS;for(var z in n.match){n.match[z]=new RegExp(n.match[z].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[z]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[z].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var B=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){B=function(g,h){h=h||[];if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var k=0,m=g.length;k";var k=s.documentElement;k.insertBefore(g,k.firstChild);if(s.getElementById(h)){n.find.ID=function(m,r,q){if(typeof r.getElementById!=="undefined"&&!q)return(r=r.getElementById(m[1]))?r.id===m[1]||typeof r.getAttributeNode!=="undefined"&& +r.getAttributeNode("id").nodeValue===m[1]?[r]:w:[]};n.filter.ID=function(m,r){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===r}}k.removeChild(g);k=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,k){k=k.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;k[m];m++)k[m].nodeType===1&&h.push(k[m]);k=h}return k};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=p,h=s.createElement("div");h.innerHTML="

      ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){p=function(m,r,q,v){r=r||s;if(!v&&r.nodeType===9&&!x(r))try{return B(r.querySelectorAll(m),q)}catch(u){}return g(m,r,q,v)};for(var k in g)p[k]=g[k];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
      ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,k,m){if(typeof k.getElementsByClassName!=="undefined"&&!m)return k.getElementsByClassName(h[1])};g=null}}})();var F=s.compareDocumentPosition?function(g,h){return g.compareDocumentPosition(h)&16}:function(g, +h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ia=function(g,h){var k=[],m="",r;for(h=h.nodeType?[h]:h;r=n.match.PSEUDO.exec(g);){m+=r[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;r=0;for(var q=h.length;r=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var i=d;i0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,i= +{},j;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:j,elem:f});delete i[j]}}f=f.parentNode}}return d}var p=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,t){for(;t&&t.ownerDocument&&t!==b;){if(p?p.index(t)>-1:c(t).is(a))return t;t=t.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(sa(a[0])||sa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);ab.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||cb.test(f))&&bb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ga=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,db=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/"},G={option:[1,""], +legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]};G.optgroup=G.option;G.tbody=G.tfoot=G.colgroup=G.caption=G.thead;G.th=G.td;if(!c.support.htmlSerialize)G._default=[1,"div
      ","
      "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this); +return d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.getText(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&& +this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this, +"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ga,"").replace(Y,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ta(this,b);ta(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType=== +1?this[0].innerHTML.replace(Ga,""):null;else if(typeof a==="string"&&!/ + + + + #if $color_scheme and $color_scheme != "plush-default.css" and $color_scheme != "default.css"# + + #end if# + + + + + + + + + + +
      +
      diff --git a/interfaces/Plush/templates/config_newzbin.tmpl b/interfaces/Plush/templates/config_newzbin.tmpl new file mode 100644 index 0000000..481a413 --- /dev/null +++ b/interfaces/Plush/templates/config_newzbin.tmpl @@ -0,0 +1,94 @@ + + + + +
      + + +
      +
      + + Newzbin $T('accountInfo') + + $T('explain-newzbin') + +

      + $T('opt-username_newzbin'):
      + $T('explain-username_newzbin')
      + + +

      + $T('opt-password_newzbin'):
      + $T('explain-password_newzbin')
      + + +
      +
      + +
      +
      + +   Newzbin $T('newzbinBookmarks') + +
      + + + + + + + +

      + 0 then "checked=1" else ""#--> /> + $T('opt-newzbin_bookmarks')
      + $T('explain-newzbin_bookmarks')
      + +
      + 0 then "checked=1" else ""#--> /> + $T('opt-newzbin_unbookmark')
      + $T('explain-newzbin_unbookmark')
      + +
      + $T('opt-bookmark_rate'):
      + $T('explain-bookmark_rate')
      + + +
      +
      + +
      +
      + +   $T('processedBM') + + + $msgid
      + + +
      +
      + + +
      +
      +
      + + NzbMatrix $T('accountInfo') + $T('explain-nzbmatrix') + +

      + $T('opt-username_matrix'):
      + $T('explain-username_matrix')
      + + +

      + $T('opt-apikey_matrix'):
      + $T('explain-apikey_matrix')
      + + +
      +
      + +
      + + diff --git a/interfaces/Plush/templates/config_rss.tmpl b/interfaces/Plush/templates/config_rss.tmpl new file mode 100644 index 0000000..2a40c37 --- /dev/null +++ b/interfaces/Plush/templates/config_rss.tmpl @@ -0,0 +1,227 @@ + + + + +
      + + +
      +
      +  $T('newFeedURI') + + + +
      + +
      + +
      +

      $T('explain-RSS')

      + + +
      +
      + + +
      +
      + /> $feed + +

      + + + +      + + + + + + + + + + +      + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      $T('rss-order')$T('rss-type')$T('rss-filter')$T('pp')
      + + + + + + + + + + + +
      + + + +
      + + + + + + + + + + + + + +
      + + + + +
      +
      + +
      +
      + + + + diff --git a/interfaces/Plush/templates/config_scheduling.tmpl b/interfaces/Plush/templates/config_scheduling.tmpl new file mode 100644 index 0000000..a380c3e --- /dev/null +++ b/interfaces/Plush/templates/config_scheduling.tmpl @@ -0,0 +1,103 @@ + + + + +
      + + +
      +
      + +   $T('addSchedule') +<%import time +t = time.localtime() +hour = t[3] +if hour != 23: + hour += 1 +else: + hour = 0 %> + + + + + + + + + + + + +
      +
      $T('hour').capitalize()/$T('minute').capitalize():
      +
      +  :  +
      +
      $T('sch-frequency'):
      +
      + +
      +
      $T('sch-action'):
      +
      + +
      +
      $T('sch-arguments'):
      +
      + +
      + +
      +
      + + + +
      + +
      + + +
      +
      +   $T('currentSchedules') + + + + + + + + + + + + + + + +
      $taskinfo[$schednum][1]:$taskinfo[$schednum][2]$taskinfo[$schednum][3]$taskinfo[$schednum][4]
      +
      +
      + + + diff --git a/interfaces/Plush/templates/config_server.tmpl b/interfaces/Plush/templates/config_server.tmpl new file mode 100644 index 0000000..c7a9839 --- /dev/null +++ b/interfaces/Plush/templates/config_server.tmpl @@ -0,0 +1,123 @@ + + + + +
      + +
      + + +
      + +   $T('addServer') + + + + + + + +
      $T('srv-host'):
      $T('srv-port'):
       
      $T('srv-username'):
      $T('srv-password'):
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      # $T('srv-connections'):
      $T('srv-timeout'):
       $T('second')
       
      />

      + + +        +
      + +
      +
      + + + + + + + +
      + + +
      + +   $server + + + + + + + +
      $T('srv-host'):
      $T('srv-port'):
       
      $T('srv-username'):
      $T('srv-password'):
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      # $T('srv-connections'):
      $T('srv-timeout'):
       seconds
       
      />
      />
      />
      />
      + +
      +
      + + + +        +
      + +
      +
      + + +
      + + diff --git a/interfaces/Plush/templates/config_sorting.tmpl b/interfaces/Plush/templates/config_sorting.tmpl new file mode 100644 index 0000000..f9e4baf --- /dev/null +++ b/interfaces/Plush/templates/config_sorting.tmpl @@ -0,0 +1,476 @@ + + + + + + + + +
      + + +
      + +
      +  $T('seriesSorting') + + + 0 then "checked=1" else ""#--> /> $T('opt-tvsort') +

      + $T('affectedCat'): + +

      +  ± $T('sort-legenda')  +

      + + + + + + + + + + + + +
      $T('sortString'): + + +
      $T('presetSort'): + + + + +
      $T('example'):
      + +
      + +
      + +
      +  $T('genericSort') + + 0 then "checked=1" else ""#--> /> $T('opt-movieSort') +
      + 0 then "checked=1" else ""#--> /> $T('opt-movieExtra') +
      + $T('affectedCat'): + +

      +  ± $T('sort-legenda')  +

      + + + + + + + + + + + + + + + +
      $T('sortString'): + + +
      $T('multiPartLabel'): + + +
      $T('presetSort'): + + +
      $T('example'):
      +
      + +
      + +
      +  $T('dateSorting') + + 0 then "checked=1" else ""#--> /> $T('opt-dateSort') +
      + $T('affectedCat'): + +

      +  ± $T('sort-legenda')  +

      + + + + + + + + + + + + +
      $T('sortString'): + +
      $T('presetSort'): + + + +
      $T('example'):
      + +
      + +
      + +
      + + diff --git a/interfaces/Plush/templates/config_switches.tmpl b/interfaces/Plush/templates/config_switches.tmpl new file mode 100644 index 0000000..f0ad999 --- /dev/null +++ b/interfaces/Plush/templates/config_switches.tmpl @@ -0,0 +1,225 @@ + + + + +
      + + +
      +
      + +   $T('processingSwitches') + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      $T('opt-quick_check'):
      0 then "checked=1" else ""#--> />$T('explain-quick_check')
      $T('opt-enable_unrar'):
      0 then "checked=1" else ""#--> />$T('explain-enable_unrar')
      $T('opt-enable_unzip'):
      0 then "checked=1" else ""#--> />$T('explain-enable_unzip')
      $T('opt-enable_filejoin'):
      0 then "checked=1" else ""#--> />$T('explain-enable_filejoin')
      $T('opt-enable_tsjoin'):
      0 then "checked=1" else ""#--> />$T('explain-ts_join')
      $T('opt-enable_par_cleanup'):
      0 then "checked=1" else ""#--> />$T('explain-enable_par_cleanup')
      $T('opt-fail_on_crc'):
      0 then "checked=1" else ""#--> />$T('explain-fail_on_crc')
      $T('opt-safe_postproc'):
      0 then "checked=1" else ""#--> />$T('explain-safe_postproc')
      $T('opt-no_dupes'):
      0 then "checked=1" else ""#--> />$T('explain-no_dupes')
      $T('opt-top_only'):
      0 then "checked=1" else ""#--> />$T('explain-top_only')
      $T('opt-par2_multicore'):
      0 then "checked=1" else ""#--> />$T('explain-par2_multicore')
      + +
      + + + + + + + + +
      + + $T('opt-dirscan_priority'):
      + $T('explain-dirscan_priority')
      + + +
      + + $T('opt-dirscan_opts'):
      + $T('explain-dirscan_opts')
      + + +
      + + $T('opt-dirscan_script'):
      + $T('explain-dirscan_script')
      + + +
       
      + + $T('opt-par_option'):
      + $T('explain-par_option')
      + + +
      + + + $T('opt-nice'):
      + $T('explain-nice')
      + + + +
      + + + $T('opt-ionice'):
      + $T('explain-ionice')
      + + + +
      + + +
      + +
      + +   $T('otherSwitches') + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      $T('opt-check_new_rel'):
      0 then "checked=1" else ""#--> />$T('explain-check_new_rel')
      $T('opt-auto_browser'):
      0 then "checked=1" else ""#--> />$T('explain-auto_browser')
      $T('opt-auto_disconnect'):
      0 then "checked=1" else ""#--> />$T('explain-auto_disconnect')
      $T('opt-send_group'):
      0 then "checked=1" else ""#--> />$T('explain-send_group')
      $T('opt-auto_sort'):
      0 then "checked=1" else ""#--> />$T('explain-auto_sort')
      $T('opt-replace_spaces'):
      0 then "checked=1" else ""#--> />$T('explain-replace_spaces')
      $T('opt-replace_illegal'):
      0 then "checked=1" else ""#--> />$T('explain-replace_illegal')
      $T('opt-pause_on_post_processing'):
      0 then "checked=1" else ""#--> />$T('explain-pause_on_post_processing')
      + +
      + + + + + + + +
      + $T('opt-ignore_samples'):
      + $T('explain-ignore_samples')
      + +
      +       + + $T('opt-ssl_type'):
      + $T('explain-ssl_type')
      + +
      + +
      +
      + +
      + + diff --git a/interfaces/Plush/templates/connection_info.tmpl b/interfaces/Plush/templates/connection_info.tmpl new file mode 100644 index 0000000..281a4de --- /dev/null +++ b/interfaces/Plush/templates/connection_info.tmpl @@ -0,0 +1,58 @@ + + + + +
      + $T('version'): $version ⋅ $T('uptime'): $uptime ⋅ + $T('link-showLog') ⋅ + $T('link-showWeblog') ⋅ + $T('logging'): + $msg +
      + + + +
      + +   + $server[0]:$server[1]:$server[2] + + ($T('server-blocked')) +   $server[6] + + +
        + +
      1. ⇒ $thrd[1]
        ⇒ $thrd[2]
        ⇒ $thrd[3]
      2. + +
      $T('none')
      +
      + + + + +
      + $T('emailResult') + $lastmail +
      + + + +
      + +   + $T('lastWarnings') ($T('clearWarnings')) + +
        + +
      1. $warn
      2. + +
        +
      + + + diff --git a/interfaces/Plush/templates/history.tmpl b/interfaces/Plush/templates/history.tmpl new file mode 100644 index 0000000..5fd4342 --- /dev/null +++ b/interfaces/Plush/templates/history.tmpl @@ -0,0 +1,80 @@ +<% import datetime %> + + + + + + + + + + + + + + + + + + +
      +  
      Loadedmain_sprite_container sprite_hv_errormain_sprite_container sprite_hv_star"> 
      +
      + $line.name + + + +

      https://www.newzbin.com/browse/post/$line.report'> 
      +
      + +
       
      + + + +
       
      +
      + +
       
      + + +

      $T('category'): $line.category

      $T('Plush-path'):


      $T('Plush-storage'):
      '> 
      + +
       
      + + + + +
       
      +
      + + +

      + + + +

      '> 
      + + + +

      » $line.action_line 

      + + +

      » $line.fail_message 

      + +
      + + <% d = datetime.datetime.fromtimestamp(float(line['completed'])) %> + $d +
       
      + +
      + diff --git a/interfaces/Plush/templates/main.tmpl b/interfaces/Plush/templates/main.tmpl new file mode 100644 index 0000000..d574d0b --- /dev/null +++ b/interfaces/Plush/templates/main.tmpl @@ -0,0 +1,292 @@ + + + + + + + SABnzbd+ Plush + + + + + + + + + + + + + + + + + + + +
      + + + +
      +
      + + +
      +

       

      +
      +
      +
      +
      + + +
      +
      + + +
      +

      $T('menu-history').upper()

      +
      +
        +
      • +
      • +
      +
      +
      +
      + + +
      +

       

      +
      +
      +
      +
      + + +
      +
       
      +
      + +
      + +
      +
      +
      +
      + +
      + + + diff --git a/interfaces/Plush/templates/nzo.tmpl b/interfaces/Plush/templates/nzo.tmpl new file mode 100644 index 0000000..8614826 --- /dev/null +++ b/interfaces/Plush/templates/nzo.tmpl @@ -0,0 +1,121 @@ + + + + SABnzbd+ $version - $T('queued'): $mbleft $T('MB') + + + + + + + + + + + + + + + + + + +
      + + + + +
      + + + + + + + + + + +
      + +
      + + +
      + + + + + +
      +
      + + + + + + + active"> + + + + + + +
      $T('Plush-progress')$T('nzo-filename')/$T('nzo-subject')$T('nzo-age')
      > +
      +
      px -347px"> +
      $file.mbleft $T('Plush-left')
      +
      $file.mb $T('MB')
      +
      +
      +
      $file.filename$file.age
      + +
      +
      + +
      + + + + diff --git a/interfaces/Plush/templates/queue.tmpl b/interfaces/Plush/templates/queue.tmpl new file mode 100644 index 0000000..7042198 --- /dev/null +++ b/interfaces/Plush/templates/queue.tmpl @@ -0,0 +1,106 @@ + + + + + + + + class="alt"> + + + + + + + + + + + + + +
      +  
      main_sprite_container sprite_ql_grip_pausedmain_sprite_container sprite_ql_grip_activemain_sprite_container sprite_ql_grip_queued"> 
      +
      + $slot.filename + +
      +
      px -347px"> +
       $T('Plush-left')
      +
       $T('MB')
      +
      +
      +
      + + $slot.timeleft $T('Plush-left')
      $slot.eta + +  
        + +
      + + + + + + + + +
       
      +
      diff --git a/interfaces/Plush/templates/static/images/plush-default-split.tar.gz b/interfaces/Plush/templates/static/images/plush-default-split.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..73c7c4acd882bf524d6bd3e5c3df02556d4b24df GIT binary patch literal 83082 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%0A_EBini)b{CcrdNhQN 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¥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

      qAORaQ6_tbpA;+5 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

      9qj1`PM+6>G&o}XnO>dYq2$m zUKA9;cemzy!m6JoX=){k2?)8+Q7xJf_~-CKhwhqa)Gf8ZBJNwetR3?*IUtluRV+AZ zRaKo%5h{#YTo+od_|jI8>cu*F;4f#diP6H#FkXV-#cPyOXc1#;{_?*yr<-c4L` zHwF*a2HMfu=Pf%yn-4dvX>D~4xwAvU&U{_s>xy!YAU9Op4k|1nIW6^B&>Re#9ZMUH z>83n0aMl0GbasqbI*lO_x6eD4#s%LUBl!1dDZ}OZ>Rwo1x?*!>}-fdH<)?D9h#@F7T zmJ2KC7Lxil7T@<;22Z}_JO_?tS>w$a({==W@WF<1mDMP56nk=?PbNmgROoq52eNW) zgjEUvIxWPI4GGMBc3Tzg7-GfG5 zQteGBkV@%y7d<8D%87;^aJiu~!3@oC?JY#POt6;9J3OZk4) zCWa9Vjs)F}r_9%6!Qk8`X&c4Q%ysXR%)%V!bn@nWNTVlbB8Cr=CkkbT#&5D6V|>ok z_A~q4-^{)YNRjIP8o#XP62;kNi3O;)lX&OPH$z}Po#aIsQ@{=tadYgIUHe?xffB8` zzR!^2k95)a@NYO_*^D{Z16oEnBZ`)5M=<*?O2+e2@AwGT0~vHrHBWe4=EekkaJdN` zlF%MZ!V}xZyGZ@JV8?0Aj^EpD>=%V_e-A!=yq@Y`eG_Xm3U^EH;b-P+{D#|FH%7OB z5X-?|yqk+|Pwa3JN5cO|G12)zcGMsF$GBJl2Dzf}mmVzXe6E;3A0K{zZ;M@r@#*X7 zxJ8gFx94uZbo1`!v$sHUa=)l(U+7b12B4z;H83!6vieMLet+6B@np>% zyVI&tVy^Xus?5W2*xL*oWKpa`3EOd9a`-zB8@-Xxb{~2|gcuUzCg96oXFo~5OjPET zD^0?!6q>o3&qzNGpc(qWmZcsVFt5*^#s$2%H|yr|!|QVenSh@%k^3jO)kxtxV;>Ue z4_?`cC(FI#Gs`qJwM2ADb@GX2(A6SSxj)t9UozAo;^Cxjl=C+CG(?+Se&wM{7P~e} z_yGam7o}2LF zB0jYIHx32EdGyr1#Ko0*CKVZU#o#pJ zYa$UfTm5c!qdP2@@N;rTK6GnwF)l3o2k@U(r7O~-Qe=9~NuRI1q6{2@ZTb4_qSGe_ z%I;Gw8}U($Ynv!#e+`C=4k8d^h;Uck#>%fYs*;?7Y0v@~z_4(z0j>nS+}C8Pdtf1j zPbsDq_kXm?UJnrS!$<`z4q^hAgJrS6{rOizKy{Ehn5=V~$g#rcBFme*K-@=RDP@)P z;_B?>eC3L0BB0ylV337YodOTBYLxo+?@XP3&X8d{ZD2O$lqDTCu_c+{YkQ{Bx0>GY zx-ScT1*#bfuEN}cG>=YkA1hF|WuvtYZ0YuRE@jDXIFurF$y1G4pr7!|fqf(u+?Nbx z(rAJ}S1U_Rk;mW}fS=a=RMkqOEF(=;HxQ_~)DN2VxFf=k!*$-`qa2gRT<2n-WnZbv=st}cF;Wp|bvZSc?0b%$ z%@^oc;YSZk*2dZ=|E{IA@c|zm?787r@r?jGPV|PZ^V@7;O&i^1@z>fnL7)9Kf{j8i zrN2&Jy#`>;ZO3&46ez`)OP%1}mYJpxgM&|>oh$8?Ys@4xqlqeavrenk)v(m|LgO8- zpsIrjyC~&t|JA(vfx2;O3qT4nGrrY>Y1h{e?NeMk{heDSQvY6C9aWDw?)=CeGN$-0 zn*MU;yK$o8OXHcxQq3DUAKejqdW8SLI5fX=fsBccmaqA#5+&`6EeRrCpR*$>LEUjMF5hwrw|Gqu@s;69h0UUK9I=(_F= z$$P^e8C%?iyc_c)mN=U$!{#_TgV@9bFXPF95|6zjoMK;+MlVYbl|pnH1-htAMldTo zq$@-o?*CHj&9cqhigw{3+ij=eww(m;VmJ{;a+p=I&^NP4?ve_{WVbik54f4%<*T7>1^K1QZYWRqvtI4h#>H^4^Sx0C!DWG zJUF2Q{G9D{>>VT&=y}Pn8Z?$xr=py%pS^mnlKHT~KpiTu8c4k>^`qwj=Nk20x?%1d zOi21)p#%JX3*88K1>6jh&c>V{06Tp`Ut0;_Ww6d@UVYj(Niifno&kxYqLLviGM35n z23G7619X~g?jJf#@BV%Sm>VwWv}Kzhg5qOo5tqoHB|JOdZg(r0^8?0F0$|mL&*XGQ zH=pSO*(k(KUOj+Q7#>5tGD35#z?diq0RrSv#aDI--@S;fWnot|G6jWiY+uEi_oq$h z@56YOP3<6OOz&uqHmSNa9UXzp$JlH;OHKZ#v;kPsM!$83&9fD2|BzX2Uv;@glEmH zRS=;*M0yUi?-HVQ>n=p}#JQ&jweBNx9~vR?4FEE#+EiT$ohBsJlB`Vp1LB|UWEQTM zdBY>UF^bxi@S-hA2gy&yIwS{NH~$}}=VDCoCM*gZkEu5eh|-V<#e^OSB5TI+2K}{N z^k#@c3Z5`En_^bXY}6?bKcZ`dh2g3tl#5YkJf47r_(5CH69@}VpTn@u9yY$F5zw(9 zjw_B2wlu30)r?>IR;rG!OAm+?6&9YKiU=A+@$*}6=6E_q-Zob zDQv8*e*$VeL_&%GYJaUW96f5!>+Iw=s{$y82K?E~$dE7;Auz9c9lgJY+q7A|#|Y2T zUOgeEBf+^S%y}ZZN{fzzq;ZPd88oXuC73*4Y2;>Sdx3>zrfJ!lnTRMueQOxHb=rv# z4>y;h90V#)P^aMumqnDU@v8>>gW(j#~ zT1A@LP`b&1dfRGiaF6H^om{nU^~8^nHt!^sAvDA*KlSxJ?Roi1RFPFNBW2T<2 zO)K0JAGc5L{l>`m$^9+%Nvh=YI67YL@u7zSnt31ju&M_`Nak&F!z!Ta7rem3{F~XD zT}0KI%zubG8*irrvl+G*m!5DWT4S#bA)V$9Xl!`ErUhhpCycTI{P@n;w)$0N367!zdC;X^uR3QKS3iL>R*h zEdBhbc6D@7T1;U*%c85%t1;=<^5O_x=R}huluk1?zat#kt~g$T{#hYEjkAIsuDkX{ z+`Yh=e>M4#trcD3HsyT)2ArqARaNrFR&=Qg^b3GF->kuR{bJJE=1q*?boAK2FjAc- zd8LNoSbv_U#H)!hZ($ z#KJW0DF~I|MoXDG_8|8qHX1;zrB6lrygZwho0Li(c?l2N=MsO?KS2(HLpM@V&%RN`D)Ju?N@dnjU<5qU`rOmlRz)#-iW;iFSD4RD5Iyjf{G}fTqgVB$W(Vt1y z)acafw#qR13wi{0ViF>vO*(;EMM81$oi+#Q&tn%Eo4&IO#n*2OykOr?wWsGO7y7eT z6_%X?+oXMx)j*ECozFlbU_bbOQgCU{t?=mPre-79Rr`M9J=X;!{E>Uj^dVS@?eszA z9BsY0I~aYoJ(=O;BpC}4Z?r&Tm8g!+n3kFBrD~e-r?&Rl=3y64eQfcM9A0;)SvbL7 z1O8rF>|dTQl4ie{^Q!n4lXYC_J6hJadan~Ozm5$>s;MAyGv#M*Bx*a02Op=Vq5lh0DoJFVkTV>)hy#44sM~nFd^b>4GwvL{9k(mmHm@KCgmD&DeZ_z)evpQJ87VE7AzE{99(ZK3 zA88oM!pc9WXL)aly7uN^1x*v*{CT9c=a%8s+Go-M-rrT>SJb?Eh2wcu^r6UHZjZTR zcaF7(ib^J>(iQX^KEk&SslN!FJVXjGO@p{nojs>|u>*Es&wLtqmUBMr+|V|?vBqS}CLMI&n literal 0 HcmV?d00001 diff --git a/interfaces/Plush/templates/static/images/plush-default/sabnzbdplus.ico b/interfaces/Plush/templates/static/images/plush-default/sabnzbdplus.ico new file mode 100644 index 0000000000000000000000000000000000000000..9bd8d1333f965c9b6ba145c2b5b155f4972880d9 GIT binary patch literal 1406 zcmeH{%}Z2K7{-6M$+Vhsn!d)$)W+1ZrfDXf(HwKM(aEtiC~J{Ki?k@HHf^&-3pcfh zAc{iJMK1bS1mPwU0zr_FHiZ~{5Cmb1q7S6z_MEG>nfe0)&*68T_j%8I&f&g`3znwG zgELNK!74>%!lVj?MUGaevmD7-Y}xO&ssg<@s=? zkG4tqfnRWWjOcsC$FAUhF0E+cm8o@m;o1bg7m6Q=rY`9F%<->^Pu{@wOj>mSdPX4F zK*6|tM-M!Z=J^S|m3nV))FpNlhCpq=q=HMrro93-h60X02OT%#WB}7`` z&J^QjZ&(b8hvKdX#G$4gZhr({5rk88eN(>vD3N#4L7Q|stvj0`c1TS-0*#%}|Alkv z&uP8eY3lEbdt%_H`q7`!)49Z42ma3vBoYZ`nf?O#nQ8p&p2<0WX8q$c&N~H8wVV3F z%HrbOwexn!d;M!*adK;3Ypo}&qQ;6nT357fS-815XMetbmvgXSU)K8NzN*zr=5KU- zUG=(>hGk2)Z3w#^U$lGC-asJk%HCP(_ytibvQopUp7v#x!Io4iwJ8`f|3!`M WWQ{T1u76-@Q*?_b*?;GCF8l@_M4M*- literal 0 HcmV?d00001 diff --git a/interfaces/Plush/templates/static/images/plush-default/spinner.gif b/interfaces/Plush/templates/static/images/plush-default/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ff08c960181ddbdfd4b273b3f8a3b0708ca7a5c GIT binary patch literal 1169 zcmZ?wbhEHb6krfw_{_lY|NsBpyLXqDm#3wrb#!!uhK9PhxXhe6)7aQ})v8qt7(nqq zx1VcBu(M-;tC5}oGb2!e;!hSrgL&0n(abXkZ^qt`T%tHH)<`5`Qp8~{9OZ*EDdGfRdri#v%oFCAgaC!5IIgCvHq8=aS9rb2Gb{iwmOn#uLt^y}G z1@=nx2R6*)oX`_oz@j9eqERa0uG$)@D`+8bUa9lq%tP+iX7f0;^&fTjF3_`U44EK# zk;$@)-@!pPN%7f})7nf*m?nb*l#^#~vIn=ou9Fi&4m8S47GP*itGuMa5oK8GsmE$! z5$C{_=)v)$!kvE#KgK3BMaOmh)l5dkhzUUB1)i9s&Hg&GX-V#E7CtAP&aW-Y zXDrAOlab&)r1Cz=pd?}oCsTrkM2dw3BrNfnkrUhZOtp{?gVENSW0FDh7BmS zc!JHhXg>0Ni;D-VCxb%h#Dpc8tnDk$MsN3G3*c#PJ2$uMNy5x2Sx!m{4l^d?O`gyr zyoX~Q)5*`9n&qrDob@gm->Yjoq{4(NaD?_=4V!7g>$#!vkw{uJI}7{rs%wh=3)D}l zF59i;_NQg;hB8TxB3bUFAO?7WdAh&XJ>ijq;R9f`EUw@hL8%|e8-a_2F&MADst`M T%9-4>Nn4PkuHld_6N5DXh*@sI literal 0 HcmV?d00001 diff --git a/interfaces/Plush/templates/static/images/plush-default/sprite-config.png b/interfaces/Plush/templates/static/images/plush-default/sprite-config.png new file mode 100644 index 0000000000000000000000000000000000000000..9333eec07d3e7ce7064caf4a5a41ce06c9507609 GIT binary patch literal 29590 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%0AtrSRoNFiIx@1&dK)y#%FR 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 literal 0 HcmV?d00001 diff --git a/interfaces/Plush/templates/static/images/plush-default/sprite-jq-colorbox.png b/interfaces/Plush/templates/static/images/plush-default/sprite-jq-colorbox.png new file mode 100755 index 0000000000000000000000000000000000000000..41e0238f83b202cc7ddc1633e4bfc79f790e9628 GIT binary patch literal 991 zcmV<510ei~P)<>K+r@9*#U`1tty^Uu%E>+9?3^xH5nFsZ4jqS0fw+lRj2 zlfAvYlgdli*Vmk!oM2#J!^6YW>bDRO5TBo)aBy((_~+l>-}3VE&E~7H*n82@(NIuO zkB^VGwzjXYuioC?n$1_DqN3aF!yq6av3!VZ0008wNkld7A5Jj~l@d_Ah zYy)r+aa>0* zo~)MW?@Mbx?qXDr;YLrKKd}|(5MFSCu9F;HIIm3-|Lf3su_Ngm(xFg#W7qQH35vr>o@fGsk0w zap)r7l5_#-nJVftj^pdLjZ{P>3HLOei7Ggvi*+`L{-)qox97IX9ene(0y>YwG`$nz zdpbBxL%=OvbobNOy>xMQjADAiDEj(-`Zn*Qcfh4u4MESd0dpUnbV?8er)w{&$R}*D zf#(pf>A`4_=k@5x8wV_WG9@)=Bmo+F51qY{baZ_?+m8lR79cD3(OK5v2eN}t*V*3l zv)h)AcxunOPoKb!US3{aUS2<~84hnAvklv%>4weH6fRE65XRHREBgCT*^j#zmJ_(q ziHAti**B|+Cojt)|mCQ1Ht=yJXx=@Qass;KugO|RQFQ4y6S-P2Sis^Ew&7qdb1 zR|U7aJ-5}|!Ixhvpz}CP(<>>zr-Rd!1l-bPbw7R4OP71cD5fWjqA%{JZ{~gU3b<6O zBOJ>EUFM=k@5x8wV_WFeQ~}Bq17l51qY|baZ_y z+m8}d79uP5(b=rR4`c$p7yxKbEXC{-_h|qC N002ovPDHLkV1h&X{LlaZ literal 0 HcmV?d00001 diff --git a/interfaces/Plush/templates/static/images/plush-default/sprite-main.png b/interfaces/Plush/templates/static/images/plush-default/sprite-main.png new file mode 100644 index 0000000000000000000000000000000000000000..6f29b85c78ab215f01e43d81f87a1d81ce32dfbe GIT binary patch literal 28659 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 Cuu$Fr literal 0 HcmV?d00001 diff --git a/interfaces/Plush/templates/static/images/plush-default/viewmag.png b/interfaces/Plush/templates/static/images/plush-default/viewmag.png new file mode 100644 index 0000000000000000000000000000000000000000..359fd7d58be4d9ff7f70ed2a9869c57b74cf25dd GIT binary patch literal 1457 zcmV;i1y1^jP)4Tx0C)j~RL^S@K@|QrZmG~B2wH0nvUrdpNm;9C zMbtL^5n^i$+aIn^?(HA4aZWV5ov6ELTdbo0FI&wK{O>*+w4vx z20?>!`FrQsdJlnHR>OPycd~b_n$otK2Za4V;76L-DzNVtaSB-y0*E}{p()372;bw_ z^6ZZ}PI-92wGS&j#91PIKs7DSe@(bk%_Y-7gGe}(^>I=@oY#w#*Bu9GZf3^F5WP>3 zrn}7Ut74&?PWBFvy`A)aPP5)V!Xd&78LdA?xQ(9mjMYElVd13a#D+Z_7&Y|xU=_C- zsrWU*6kiZcC!$nw*)9$7n6CX+@=AhmkT}X@VSsa5NKe;HZuq)~1$`#h6R+ZTR#D-3 zj}vF!)ZOnz+5)dI4jl{{44Mr{P!L4~VVJN`K!!XTF*LGrKO?IK8z z<8w`3e3jI8lUGNUta*C8n(P`s>{pjD=7Kek#B;Fw@hxAK%$F&Q6vg9J^Xf~4by_hu z-=A!MJ3Znq&n~srbFGPsH&&aMXZ>nO`|hf|ljc?VPhR!${AbO?W8x_>CU%PFA&Hm8 zF7cAsOREdwU~R_;ot1_u(ruCYB-LPGn!NQdT|ZlRy+(fw^-+`=%+gee_kY4FWHg<* z4sZI8+sFJD270UUORdLHO0nA4V)%{fwsET5CQ>B?eK%uw4yQc~9?*JVo2}ze(;aRc zp*ceL#HUJSllrgm5wQKRQu+C;QrUh^8rFfA`ftFz{YAidi-`aL010qNS#tmY3ljhU z3ljkVnw%H_00LP_L_t(I5o7%S|33pIfCX7|Z=t29f|5d+pqQi?BO?>br+05|ynFL{ zT4K%CnaJvp*^Dq3Oe(R?HL$ShmD4a`6_eItU}9!rc>VMS!^0aV86MoaI(O6AP3fyv z{r`)s8N_A+5lyMOt~w@W6J=EmSp`KE8JJnv7#NwD8Tf@|7!))u7!=iYli6R26oS;E z1F!+|@^UqNf?|yS8U8bT`S60_)BC3kpWZ!T`10`u!=GP282E(58LX^y3d9&0dC(02 zhXKEku<_qNzZt%N`M~h^_b-NDKfi+2{r&Tc;pg`+48MPVXONJQmgeVYPy;;e_kfDEm|72igV`pFjdWnIVfgM>hhz<6_yVq|nvUBn>aPbN< z{QLVCY%9p-e}DflaB}l8aPx^UJbn1!{quJW_s|UhyI{xm6CHBODjT%S+!?s}MHzkr zT>(lRtZbYN99(=1_pTmg*s}fXyf6R%zeG0x?1I%N-fx`Rzo_-j#X~^nvoZ*X$}=Z0O+#QtiR5evJn3$Pa9^HHRZ1?_~ z3zX#flnQFAbxD$QA&}>54NbwWR4k zzkF!&|MPo$en(pig~RlqXod-5qeWR64C~^wo?SXP>HnEsoxdY21QI~%h&BMESb&v5 zzcO0=;l=$E{@2B8-y_)okOmP}2BSa|zU{I+3=tqcN+7}mh6DxxGF4C^5O4X*00000 LNkvXXu0mjfFf6+R literal 0 HcmV?d00001 diff --git a/interfaces/Plush/templates/static/javascripts/config.js b/interfaces/Plush/templates/static/javascripts/config.js new file mode 100644 index 0000000..2ce52cd --- /dev/null +++ b/interfaces/Plush/templates/static/javascripts/config.js @@ -0,0 +1,223 @@ +// ***************************************************************** +// Plush Config code as follows, by pairofdimes (see LICENSE-CC.txt) + +jQuery(document).ready(function($){ + + // rounding + if ($.browser.safari) { // slow down rounding just a hair for Safari or it spazzes out + setTimeout (function(){ + $('.config_nav li a').corner("round tl bl"); + $('#config_container').corner("round"); + $('#config_content legend').corner("round"); + $('#force_disconnect, #save, #sabnzbd_restart, #test_email, #help').corner("round"); + }, 50); + } else { // the slight delay lags on Firefox, so don't run otherwise + $('.config_nav li a').corner("round tl bl"); + $('#config_container').corner("round"); + $('#config_content legend').corner("round"); + $('#force_disconnect, #save, #sabnzbd_restart, #test_email, #help').corner("round"); + } + + // Confirm user exits without saving changes first + if (config_pane != 'NZO') { + $(':input','form').change(function(){ + window.onbeforeunload = function(){return confirmWithoutSavingPrompt;} + }); + $('form').submit(function(){ + window.onbeforeunload = null; + }); + } + + switch(config_pane) { + + // not a config page, rather queued nzb file listing page + case 'NZO': + $('#nzo_reload').click(function(){ document.location.reload(); }); + + // operations + $('#nzo_delete').click(function(){ + $('#action_key').val('Delete'); + $('#bulk_operation').submit(); + }); + $('#nzo_top').click(function(){ + $('#action_key').val('Top'); + $('#bulk_operation').submit(); + }); + $('#nzo_up').click(function(){ + $('#action_key').val('Up'); + $('#bulk_operation').submit(); + }); + $('#nzo_down').click(function(){ + $('#action_key').val('Down'); + $('#bulk_operation').submit(); + }); + $('#nzo_bottom').click(function(){ + $('#action_key').val('Bottom'); + $('#bulk_operation').submit(); + }); + + // selections + $("#nzo_select_all").click(function(){ + $("INPUT[type='checkbox']").attr('checked', true).trigger('change'); + }); + var last1, last2; + $("#nzo_select_range").click(function(){ + if (last1 && last2 && last1 < last2) + $("INPUT[type='checkbox']").slice(last1,last2).attr('checked', true).trigger('change'); + else if (last1 && last2) + $("INPUT[type='checkbox']").slice(last2,last1).attr('checked', true).trigger('change'); + }); + $("#nzo_select_invert").click(function(){ + $("INPUT[type='checkbox']").each( function() { + $(this).attr('checked', !$(this).attr('checked')).trigger('change'); + }); + }); + $("#nzo_select_none").click(function(){ + $("INPUT[type='checkbox']").attr('checked', false).trigger('change'); + }); + + // click filenames to select + $('#config_content .nzoTable .nzf_row').click(function(event) { + $('#box-'+$(event.target).parent().attr('id')).attr('checked', !$('#box-'+$(event.target).parent().attr('id')).attr('checked')).trigger('change'); + + // range event interaction -- see further above + if (last1) last2 = last1; + last1 = $(event.target).parent()[0].rowIndex ? $(event.target).parent()[0].rowIndex : $(event.target).parent().parent()[0].rowIndex; + }); + + // + $('#config_content .nzoTable .nzf_row input').change(function(e){ + if ($(e.target).attr('checked')) + $(e.target).parent().parent().addClass("nzo_highlight"); + else + $(e.target).parent().parent().removeClass("nzo_highlight"); + }); + + // set highlighted property for checked rows upon reload + $('#config_content .nzoTable .nzf_row input:checked').parent().parent().addClass("nzo_highlight"); + + return; // skip the rest of the config methods + break; + + + case 'Connections': + $('#logging_level').change(function(event){ + window.location = './change_loglevel?loglevel='+$(event.target).val()+'&session='+apikey; + }); + break; + + case 'General': + $('#apikey').click(function(){ $('#apikey').select() }); + $('#generate_new_apikey').click(function(){ + $.ajax({ + type: "POST", + url: "../../tapi", + data: {mode:'config', name:'set_apikey', apikey: $('#apikey').val()}, + success: function(msg){ + $('#apikey').val(msg); + $('#hiddenSession').val(msg); + } + }); + }); + $('#sabnzbd_restart').click(function(){ + if (confirm($('#sabnzbd_restart').attr('rel'))) { + $('#sabnzbd_restart').html($('#sabnzbd_restart').attr('rel2')); + $.post('../../tapi', {mode: 'restart', session: apikey} ); + } + }); + break; + + case 'Servers': + $('form .testServer').click(function(event){ // test server + $(event.target).next('span').addClass('loading'); + $.ajax({ + type: "POST", + url: "../../tapi", + data: "mode=config&name=test_server&"+ $(event.target).parents('form:first').serialize() +"&apikey="+$('#apikey').val(), + success: function(msg){ + alert(msg); + $(event.target).next('span').removeClass('loading'); + } + }); + }); + $('form .delServer').click(function(event){ // delete server + if(confirm($(event.target).attr('rel'))) + $(event.target).parents('form:first').attr('action','delServer').submit(); + return false; + }); + break; + + case 'Categories': + $(':button').click(function(event){ // delete category + window.location="delete/?name="+$(event.target).attr('name')+'&session='+apikey; + }); + break; + + case 'RSS': + $(':checkbox').click(function(event){ // toggle feed + $(event.target).parents('form:first').attr('action','toggle_rss_feed').submit(); + return false; + }); + $('#config_content .EntryFieldSet .preview_feed').click(function(event){ + $.fn.colorbox({ + href:'test_rss_feed?'+$(event.target).parents('form:first').serialize(), + width:"80%", height:"80%", initialWidth:"80%", initialHeight:"80%", speed:0, opacity:0.7 + }); + return false; + }); + $().bind('cbox_complete', function(){ + $('#cboxLoadedContent input').hide(); // hide back button + $('#cboxLoadedContent h3').append('

      '); // add spacing to header + $('#cboxLoadedContent a').click(function(event){ + if( $(event.target).attr('target') != '_blank' ) { + $.ajax({ url: $(event.target).attr('href') }); // ajax downloads + $(event.target).replaceWith('Download'); + return false; + } + }); + }); + $('#config_content .EntryFieldSet .download_feed').click(function(event){ + if(confirm($(event.target).attr('rel'))) { + $.fn.colorbox({ + href:'download_rss_feed?'+$(event.target).parents('form:first').serialize(), + width:"80%", height:"80%", initialWidth:"80%", initialHeight:"80%", speed:0, opacity:0.7 + }); + } + return false; + }); + $('#config_content .EntryFieldSet .delete_feed').click(function(event){ + if(confirm($(event.target).attr('rel'))) + $(event.target).parents('form:first').attr('action','del_rss_feed').submit(); + return false; + }); + $('#config_content .EntryFieldSet .filter_order').change(function(event){ // update filter order + window.onbeforeunload = null; + window.location = $(event.target).val()+'&session='+apikey; + }); + break; + + case 'Email': + $('#test_email').click(function(){ + return confirm($('#test_email').attr('rel')); + }); + break; + + case 'Index Sites': + $('#getBookmarks').click(function(){ window.location='getBookmarks?session='+apikey; }); + $('#hideBookmarks').click(function(){ window.location='hideBookmarks?session='+apikey; }); + $('#showBookmarks').click(function(){ window.location='showBookmarks?session='+apikey; }); + break; + + case 'Sorting': + previewtv(); previewmovie(); previewdate(); // display sorting previews -- these functions are defined below + break; + + }; + + // page's save button for those pages that use it + $('#save').click(function(){ + window.onbeforeunload = null; + $('form').submit(); + }); + +}); // end Plush code diff --git a/interfaces/Plush/templates/static/javascripts/lib.js b/interfaces/Plush/templates/static/javascripts/lib.js new file mode 100644 index 0000000..e75b7fe --- /dev/null +++ b/interfaces/Plush/templates/static/javascripts/lib.js @@ -0,0 +1,407 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
      a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

      ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
      ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
      ","
      "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
      ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
      "; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); + + +/* ColorBox v1.3.6 - a full featured, light-weight, customizable lightbox based on jQuery 1.3 */ +(function(c){function r(b,d){d=d==="x"?m.width():m.height();return typeof b==="string"?Math.round(b.match(/%/)?d/100*parseInt(b,10):parseInt(b,10)):b}function M(b){b=c.isFunction(b)?b.call(i):b;return a.photo||b.match(/\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i)}function Y(){for(var b in a)if(c.isFunction(a[b])&&b.substring(0,2)!=="on")a[b]=a[b].call(i);a.rel=a.rel||i.rel;a.href=a.href||i.href;a.title=a.title||i.title}function Z(b){i=b;a=c(i).data(q);Y();if(a.rel&&a.rel!=="nofollow"){g= c(".cboxElement").filter(function(){return(c(this).data(q).rel||this.rel)===a.rel});j=g.index(i);if(j<0){g=g.add(i);j=g.length-1}}else{g=c(i);j=0}if(!B){C=B=n;N=i;N.blur();c(document).bind("keydown.cbox_close",function(d){if(d.keyCode===27){d.preventDefault();e.close()}}).bind("keydown.cbox_arrows",function(d){if(g.length>1)if(d.keyCode===37){d.preventDefault();D.click()}else if(d.keyCode===39){d.preventDefault();E.click()}});a.overlayClose&&s.css({cursor:"pointer"}).one("click",e.close);c.event.trigger(aa); a.onOpen&&a.onOpen.call(i);s.css({opacity:a.opacity}).show();a.w=r(a.initialWidth,"x");a.h=r(a.initialHeight,"y");e.position(0);O&&m.bind("resize.cboxie6 scroll.cboxie6",function(){s.css({width:m.width(),height:m.height(),top:m.scrollTop(),left:m.scrollLeft()})}).trigger("scroll.cboxie6")}P.add(D).add(E).add(t).add(Q).hide();R.html(a.close).show();e.slideshow();e.load()}var q="colorbox",F="hover",n=true,e,x=!c.support.opacity,O=x&&!window.XMLHttpRequest,aa="cbox_open",H="cbox_load",S="cbox_complete", T="resize.cbox_resize",s,k,u,p,U,V,W,X,g,m,l,I,J,K,Q,P,t,E,D,R,y,z,v,w,i,N,j,a,B,C,$={transition:"elastic",speed:350,width:false,height:false,innerWidth:false,innerHeight:false,initialWidth:"400",initialHeight:"400",maxWidth:false,maxHeight:false,scalePhotos:n,scrolling:n,inline:false,html:false,iframe:false,photo:false,href:false,title:false,rel:false,opacity:0.9,preloading:n,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",open:false,overlayClose:n,slideshow:false, slideshowAuto:n,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:false,onLoad:false,onComplete:false,onCleanup:false,onClosed:false};e=c.fn.colorbox=function(b,d){var h=this;if(!h.length)if(h.selector===""){h=c("");b.open=n}else return this;h.each(function(){var f=c.extend({},c(this).data(q)?c(this).data(q):$,b);c(this).data(q,f).addClass("cboxElement");if(d)c(this).data(q).onComplete=d});b&&b.open&&Z(h);return this};e.init=function(){function b(d){return c('
      ')}m=c(window);k=c('
      ');s=b("Overlay").hide();u=b("Wrapper");p=b("Content").append(l=b("LoadedContent").css({width:0,height:0}),J=b("LoadingOverlay"),K=b("LoadingGraphic"),Q=b("Title"),P=b("Current"),t=b("Slideshow"),E=b("Next"),D=b("Previous"),R=b("Close"));u.append(c("
      ").append(b("TopLeft"),U=b("TopCenter"),b("TopRight")),c("
      ").append(V=b("MiddleLeft"),p,W=b("MiddleRight")),c("
      ").append(b("BottomLeft"),X=b("BottomCenter"),b("BottomRight"))).children().children().css({"float":"left"}); I=c("
      ");c("body").prepend(s,k.append(u,I));if(x){k.addClass("cboxIE");O&&s.css("position","absolute")}p.children().bind("mouseover mouseout",function(){c(this).toggleClass(F)}).addClass(F);y=U.height()+X.height()+p.outerHeight(n)-p.height();z=V.width()+W.width()+p.outerWidth(n)-p.width();v=l.outerHeight(n);w=l.outerWidth(n);k.css({"padding-bottom":y,"padding-right":z}).hide();E.click(e.next);D.click(e.prev);R.click(e.close);p.children().removeClass(F); c(".cboxElement").live("click",function(d){if(d.button!==0&&typeof d.button!=="undefined")return n;else{Z(this);return false}})};e.position=function(b,d){function h(A){U[0].style.width=X[0].style.width=p[0].style.width=A.style.width;K[0].style.height=J[0].style.height=p[0].style.height=V[0].style.height=W[0].style.height=A.style.height}var f=m.height();f=Math.max(f-a.h-v-y,0)/2+m.scrollTop();var o=Math.max(document.documentElement.clientWidth-a.w-w-z,0)/2+m.scrollLeft();b=k.width()===a.w+w&&k.height()=== a.h+v?0:b;u[0].style.width=u[0].style.height="9999px";k.dequeue().animate({width:a.w+w,height:a.h+v,top:f,left:o},{duration:b,complete:function(){h(this);C=false;u[0].style.width=a.w+w+z+"px";u[0].style.height=a.h+v+y+"px";d&&d()},step:function(){h(this)}})};e.resize=function(b){function d(){a.w=a.w||l.width();a.w=a.mw&&a.mw");l.show();Q.show().html(a.title);if(g.length>1){P.html(a.current.replace(/\{current\}/,j+1).replace(/\{total\}/,g.length)).show();E.html(a.next).show();D.html(a.previous).show();a.slideshow&&t.show()}J.hide();K.hide();c.event.trigger(S);a.onComplete&&a.onComplete.call(i);a.transition==="fade"&&k.fadeTo(L,1,function(){x&&k[0].style.removeAttribute("filter")}); m.bind(T,function(){e.position(0)})}})}if(B){var o,A,L=a.transition==="none"?0:a.speed;m.unbind(T);if(b){l.remove();l=c('
      ').html(b);l.hide().appendTo(I).css({width:d(),overflow:a.scrolling?"auto":"hidden"}).css({height:h()}).prependTo(p);c("#cboxPhoto").css({cssFloat:"none"});O&&c("select:not(#colorbox select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("cbox_cleanup",function(){this.style.visibility="inherit"});a.transition=== "fade"&&k.fadeTo(L,0,function(){f(0)})||f(L);if(a.preloading&&g.length>1){b=j>0?g[j-1]:g[g.length-1];o=j").attr("src",o);M(b)&&c("").attr("src",b)}}else setTimeout(function(){var G=l.wrapInner("
      ").children();a.h=G.height();l.css({height:a.h});G.replaceWith(G.children());e.position(L)},1)}};e.load=function(){var b,d,h,f=e.resize;C=n;i=g[j];a=c(i).data(q);Y();c.event.trigger(H); a.onLoad&&a.onLoad.call(i);a.h=a.height?r(a.height,"y")-v-y:a.innerHeight?r(a.innerHeight,"y"):false;a.w=a.width?r(a.width,"x")-w-z:a.innerWidth?r(a.innerWidth,"x"):false;a.mw=a.w;a.mh=a.h;if(a.maxWidth){a.mw=r(a.maxWidth,"x")-w-z;a.mw=a.w&&a.w').hide().insertBefore(c(b)[0]).bind(H+" cbox_cleanup",function(){c(this).replaceWith(l.children())}); f(c(b))}else if(a.iframe)f(" ");else if(a.html)f(a.html);else if(M(b)){d=new Image;d.onload=function(){var o;d.onload=null;d.id="cboxPhoto";c(d).css({margin:"auto",border:"none",display:"block",cssFloat:"left"});if(a.scalePhotos){h=function(){d.height-=d.height*o;d.width-=d.width*o};if(a.mw&&d.width>a.mw){o=(d.width-a.mw)/d.width;h()}if(a.mh&&d.height>a.mh){o=(d.height-a.mh)/d.height;h()}}if(a.h)d.style.marginTop=Math.max(a.h-d.height,0)/2+"px";f(d);g.length>1&&c(d).css({cursor:"pointer"}).click(e.next); if(x)d.style.msInterpolationMode="bicubic"};d.src=b}else c("
      ").appendTo(I).load(b,function(o,A){A==="success"?f(this):f(c("

      Request unsuccessful.

      "))})};e.next=function(){if(!C){j=j0?j-1:g.length-1;e.load()}};e.slideshow=function(){function b(){t.text(a.slideshowStop).bind(S,function(){h=setTimeout(e.next,a.slideshowSpeed)}).bind(H,function(){clearTimeout(h)}).one("click",function(){d();c(this).removeClass(F)});k.removeClass(f+ "off").addClass(f+"on")}var d,h,f="cboxSlideshow_";t.bind("cbox_closed",function(){t.unbind();clearTimeout(h);k.removeClass(f+"off "+f+"on")});d=function(){clearTimeout(h);t.text(a.slideshowStart).unbind(S+" "+H).one("click",function(){b();h=setTimeout(e.next,a.slideshowSpeed);c(this).removeClass(F)});k.removeClass(f+"on").addClass(f+"off")};if(a.slideshow&&g.length>1)a.slideshowAuto?b():d()};e.close=function(){c.event.trigger("cbox_cleanup");a.onCleanup&&a.onCleanup.call(i);B=false;c(document).unbind("keydown.cbox_close keydown.cbox_arrows"); m.unbind(T+" resize.cboxie6 scroll.cboxie6");s.css({cursor:"auto"}).fadeOut("fast");k.stop(n,false).fadeOut("fast",function(){c("#colorbox iframe").attr("src","about:blank");l.remove();k.css({opacity:1});try{N.focus()}catch(b){}c.event.trigger("cbox_closed");a.onClosed&&a.onClosed.call(i)})};e.element=function(){return c(i)};e.settings=$;c(e.init)})(jQuery); + + +/** + * jQuery Cookie plugin 1.0 + * + * Copyright (c) 2006 Klaus Hartl (stilbuero.de) + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('o.5=B(9,b,2){6(h b!=\'E\'){2=2||{};6(b===n){b=\'\';2.3=-1}4 3=\'\';6(2.3&&(h 2.3==\'j\'||2.3.k)){4 7;6(h 2.3==\'j\'){7=w u();7.t(7.q()+(2.3*r*l*l*x))}m{7=2.3}3=\'; 3=\'+7.k()}4 8=2.8?\'; 8=\'+(2.8):\'\';4 a=2.a?\'; a=\'+(2.a):\'\';4 c=2.c?\'; c\':\'\';d.5=[9,\'=\',C(b),3,8,a,c].y(\'\')}m{4 e=n;6(d.5&&d.5!=\'\'){4 g=d.5.A(\';\');s(4 i=0;i35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';(n($){8 X=(n(){b(!$.1F.1G)5 18;8 A=13.15(\'A\');1W{A.k.1a(\'4\',\'0+0\')}1Z(e){5 18}5 29})();n Z(1U,p){5 x($.r(1U,p))||0};n N(s){8 s=x(s).28(16);5(s.1h<2)?\'0\'+s:s};n 1A(y){19(;y&&y.1X.1g()!=\'26\';y=y.J){8 v=$.r(y,\'1k\');b(v==\'22(0, 0, 0, 0)\')27;b(v.21(\'E\')>=0){8 E=v.F(/\\d+/g);5\'#\'+N(E[0])+N(E[1])+N(E[2])}b(v&&v!=\'1d\')5 v}5\'#2c\'};n 1R(K,i,4){25(K){a\'h\':5 7.h(4*(1-7.C(7.U(i/4))));a\'1m\':5 7.h(4*(1+7.C(7.U(i/4))));a\'1v\':5 7.h(4*(1-7.C(7.20(i/4))));a\'1f\':5 7.h(4*(7.C(7.U((4-i-1)/4))));a\'1u\':5 7.h(4*(7.1M(i,4/i)));a\'1w\':5 7.h(4*(7.1M(4,(4-i-1))));a\'1x\':5 7.h(4*(7.23(i)));a\'1y\':5 7.h(4*(7.C(i)));a\'1s\':5 7.h(4*(7.24(i)));a\'1r\':5 7.h(4*(7.1Y(i)));a\'1C\':5 7.h(4*(7.1V((4-i-1),4)));a\'1n\':5(i&1)?(i+1):4;a\'1p\':5(i&2)?(i+1):4;a\'1q\':5(i&3)?(i+1):4;a\'1t\':5(i%2)*4;a\'1c\':5 4;a\'1b\':5 i+1}};$.1E.Q=n(o){b(6.1h==0){b(!$.2a&&6.1j){8 s=6.1j,c=6.2b;$(n(){$(s,c).Q(o)})}5 6}o=(o||"").1g();8 W=/W/.G(o);8 Y=((o.F(/Y:(#[0-1e-f]+)/)||[])[1]);8 V=((o.F(/V:(#[0-1e-f]+)/)||[])[1]);8 4=x((o.F(/(\\d+)m/)||[])[1])||10;8 1o=/h|1b|1c|1f|1m|1v|1u|1w|1x|1y|1t|1s|1C|1r|1q|1p|1n/;8 K=((o.F(1o)||[\'h\'])[0]);8 12={T:0,B:1};8 l={M:/S|2e/.G(o),H:/S|2D/.G(o),O:/14|2F/.G(o),P:/14|2B/.G(o)};b(!l.M&&!l.H&&!l.O&&!l.P)l={M:1,H:1,O:1,P:1};8 u=13.15(\'A\');u.k.2A=\'2z\';u.k.1z=\'2y\';u.k.1k=V||\'1d\';u.k.1Q=\'11\';5 6.2w(n(2x){8 q={T:x($.r(6,\'2C\'))||0,R:x($.r(6,\'2G\'))||0,B:x($.r(6,\'2E\'))||0,L:x($.r(6,\'2u\'))||0};b(2j 6.k.1i!=2k)6.k.1i=1;b(!W)6.k.2d=\'D\';u.k.2h=Y||1A(6.J);8 1P=$.2v(6,\'1z\');19(8 j 2f 12){8 t=12[j];b((t&&(l.O||l.P))||(!t&&(l.M||l.H))){u.k.1Q=\'D \'+(l[j+\'R\']?\'11\':\'D\')+\' D \'+(l[j+\'L\']?\'11\':\'D\');8 d=13.15(\'A\');$(d).2g(\'1l-Q\');8 9=d.k;t?6.1T(d):6.1S(d,6.1O);b(t&&1P!=\'2l\'){b($.r(6,\'z\')==\'1D\')6.k.z=\'1B\';9.z=\'1H\';9.14=9.1N=9.1L=9.17=\'0\';b(X)9.1a(\'4\',\'6.J.1K\');I 9.4=\'1I%\'}I b(!t&&$.1F.1G){b($.r(6,\'z\')==\'1D\')6.k.z=\'1B\';9.z=\'1H\';9.S=9.1N=9.2m=9.1L=9.17=\'0\';b(X){8 1J=Z(6,\'2s\')+Z(6,\'2t\');9.1a(\'4\',\'6.J.1K - \'+1J+\'+ "m"\')}I 9.4=\'1I%\'}I{9.17=!t?\'-\'+q.T+\'m -\'+q.R+\'m \'+(q.T-4)+\'m -\'+q.L+\'m\':(q.B-4)+\'m -\'+q.R+\'m -\'+q.B+\'m -\'+q.L+\'m\'}19(8 i=0;i<4;i++){8 w=7.2r(0,1R(K,i,4));8 e=u.2q(18);e.k.2n=\'0 \'+(l[j+\'R\']?w:0)+\'m 0 \'+(l[j+\'L\']?w:0)+\'m\';t?d.1T(e):d.1S(e,d.1O)}}}})};$.1E.2o=n(){$(\'A.1l-Q\',6).2p();5 6}})(2i);',62,167,'||||width|return|this|Math|var|ds|case|if||||||round|||style|opts|px|function|||pad|css||bot|strip|||parseInt|node|position|div||cos|none|rgb|match|test|TR|else|parentNode|fx||TL|hex2|BL|BR|corner||top||asin|sc|keep|expr|cc|sz||solid|edges|document|bottom|createElement||margin|false|for|setExpression|bevel|notch|transparent|9a|bite|toLowerCase|length|zoom|selector|backgroundColor|jquery|cool|dog|re|dog2|dog3|long|wicked|fray|slide|sharp|jut|curl|tear|height|gpc|relative|sculpt|static|fn|browser|msie|absolute|100|bw|offsetWidth|padding|atan2|left|firstChild|cssHeight|borderStyle|getWidth|insertBefore|appendChild|el|log|try|nodeName|sqrt|catch|acos|indexOf|rgba|atan|tan|switch|html|continue|toString|true|isReady|context|ffffff|border|tl|in|addClass|borderColor|jQuery|typeof|undefined|auto|right|borderWidth|uncorner|remove|cloneNode|max|borderLeftWidth|borderRightWidth|paddingLeft|curCSS|each|index|1px|hidden|overflow|br|paddingTop|tr|paddingBottom|bl|paddingRight'.split('|'),0,{})) + + +/** +* jQuery hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+ +* +* +* @param f onMouseOver function || An object with configuration options +* @param g onMouseOut function || Nothing (use configuration options object) +* @author Brian Cherne +*/ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(6($){$.J.K=6(f,g){8 5={y:7,l:I,H:0};5=$.u(5,g?{v:f,z:g}:f);8 d,b,k,i;8 h=6(3){d=3.G;b=3.B};8 m=6(3,2){2.4=o(2.4);9((w.x(k-d)+w.x(i-b))<5.y){$(2).D("n",h);2.j=1;c 5.v.t(2,[3])}E{k=d;i=b;2.4=r(6(){m(3,2)},5.l)}};8 C=6(3,2){2.4=o(2.4);2.j=0;c 5.z.t(2,[3])};8 q=6(e){8 p=(e.A=="s"?e.N:e.U)||e.T;R(p&&p!=a){S{p=p.O}P(e){p=a}}9(p==a){c Q}8 3=F.u({},e);8 2=a;9(2.4){2.4=o(2.4)}9(e.A=="s"){k=3.G;i=3.B;$(2).M("n",h);9(2.j!=1){2.4=r(6(){m(3,2)},5.l)}}E{$(2).D("n",h);9(2.j==1){2.4=r(6(){C(3,2)},5.H)}}};c a.s(q).L(q)}})(F);',57,57,'||ob|ev|hoverIntent_t|cfg|function||var|if|this|cY|return|cX||||track|pY|hoverIntent_s|pX|interval|compare|mousemove|clearTimeout||handleHover|setTimeout|mouseover|apply|extend|over|Math|abs|sensitivity|out|type|pageY|delay|unbind|else|jQuery|pageX|timeout|100|fn|hoverIntent|mouseout|bind|fromElement|parentNode|catch|false|while|try|relatedTarget|toElement'.split('|'),0,{})) + + +/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) + * Dual licensed under the MIT (MIT_LICENSE.txt) + * and GPL Version 2 (GPL_LICENSE.txt) licenses. + * + * Version: 1.1.1 + * Requires jQuery 1.3+ + * Docs: http://docs.jquery.com/Plugins/livequery + */ + +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(5($){$.I($.4,{3:5(6,4,8){g s=2,q;9($.K(6))8=4,4=6,6=A;$.d($.3.c,5(i,7){9(s.e==7.e&&s.f==7.f&&6==7.6&&(!4||4.$b==7.4.$b)&&(!8||8.$b==7.8.$b))k(q=7)&&t});q=q||Q $.3(2.e,2.f,6,4,8);q.u=t;q.m();k 2},10:5(6,4,8){g s=2;9($.K(6))8=4,4=6,6=A;$.d($.3.c,5(i,7){9(s.e==7.e&&s.f==7.f&&(!6||6==7.6)&&(!4||4.$b==7.4.$b)&&(!8||8.$b==7.8.$b)&&!2.u)$.3.w(7.a)});k 2}});$.3=5(e,f,6,4,8){2.e=e;2.f=f;2.6=6;2.4=4;2.8=8;2.l=[];2.u=t;2.a=$.3.c.D(2)-1;4.$b=4.$b||$.3.F++;9(8)8.$b=8.$b||$.3.F++;k 2};$.3.W={w:5(){g 7=2;9(2.6)2.l.Z(2.6,2.4);B 9(2.8)2.l.d(5(i,j){7.8.z(j)});2.l=[];2.u=H},m:5(){9(2.u)k;g 7=2;g o=2.l,v=$(2.e,2.f),E=v.U(o);2.l=v;9(2.6){E.R(2.6,2.4);9(o.p>0)$.d(o,5(i,j){9($.x(j,v)<0)$.S.G(j,7.6,7.4)})}B{E.d(5(){7.4.z(2)});9(2.8&&o.p>0)$.d(o,5(i,j){9($.x(j,v)<0)7.8.z(j)})}}};$.I($.3,{F:0,c:[],h:[],y:t,C:1e,J:5(){9($.3.y&&$.3.h.p){g p=$.3.h.p;1c(p--)$.3.c[$.3.h.1a()].m()}},14:5(){$.3.y=t},N:5(){$.3.y=H;$.3.m()},L:5(){$.d(M,5(i,n){9(!$.4[n])k;g O=$.4[n];$.4[n]=5(){g r=O.z(2,M);$.3.m();k r}})},m:5(a){9(a!=A){9($.x(a,$.3.h)<0)$.3.h.D(a)}B $.d($.3.c,5(a){9($.x(a,$.3.h)<0)$.3.h.D(a)});9($.3.C)Y($.3.C);$.3.C=16($.3.J,17)},w:5(a){9(a!=A)$.3.c[a].w();B $.d($.3.c,5(a){$.3.c[a].w()})}});$.3.L(\'19\',\'1d\',\'13\',\'1b\',\'1f\',\'15\',\'T\',\'P\',\'12\',\'V\',\'11\',\'G\',\'X\');$(5(){$.3.N()})})(18);',62,78,'||this|livequery|fn|function|type|query|fn2|if|id|lqguid|queries|each|selector|context|var|queue||el|return|elements|run||oEls|length|||self|false|stopped|els|stop|inArray|running|apply|undefined|else|timeout|push|nEls|guid|remove|true|extend|checkQueue|isFunction|registerPlugin|arguments|play|old|addClass|new|bind|event|removeAttr|not|toggleClass|prototype|html|clearTimeout|unbind|expire|empty|removeClass|after|pause|attr|setTimeout|20|jQuery|append|shift|before|while|prepend|null|wrap'.split('|'),0,{})) + + + + +/** + * Pagination jQuery plugin -- with modifications by pairofdimes, where noted + * + * @author Gabriel Birke (birke *at* d-scribe *dot* de) + * @version 1.2 + */ +jQuery.fn.pagination = function(maxentries, opts){ + opts = jQuery.extend({ + items_per_page:10, + num_display_entries:10, + current_page:0, + num_edge_entries:0, + link_to:"#", + prev_text:"Prev", + next_text:"Next", + ellipse_text:"...", + prev_show_always:true, + next_show_always:true, + callback:function(){return false;} + },opts||{}); + + return this.each(function() { + /** + * Calculate the maximum number of pages + */ + function numPages() { + return Math.ceil(maxentries/opts.items_per_page); + } + + /** + * Calculate start and end point of pagination links depending on + * current_page and num_display_entries. + * @return {Array} + */ + function getInterval() { + var ne_half = Math.ceil(opts.num_display_entries/2); + var np = numPages(); + var upper_limit = np-opts.num_display_entries; + var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0; + var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np); + return [start,end]; + } + + /** + * This is the event handling function for the pagination links. + * @param {int} page_id The new page number + */ + function pageSelected(page_id, evt){ + current_page = page_id; + drawLinks(); + var continuePropagation = opts.callback(page_id, panel); + if (!continuePropagation) { + if (evt.stopPropagation) { + evt.stopPropagation(); + } + else { + evt.cancelBubble = true; + } + } + return continuePropagation; + } + + /** + * This function inserts the pagination links into the container element + */ + function drawLinks() { + panel.empty(); + var interval = getInterval(); + var np = numPages(); + // This helper function returns a handler function that calls pageSelected with the right page_id + var getClickHandler = function(page_id) { + return function(evt){ return pageSelected(page_id,evt); } + } + // Helper function for generating a single link (or a span tag if it's the current page) + var appendItem = function(page_id, appendopts){ + page_id = page_id<0?0:(page_id"+(appendopts.text)+""); // modification by pairofdimes + } + else + { + var lnk = jQuery(""+(appendopts.text)+"") + .bind("click", getClickHandler(page_id)) + ; //.attr('href', opts.link_to.replace(/__id__/,page_id)); // modification by pairofdimes + + + } + if(appendopts.classes){lnk.addClass(appendopts.classes);} + panel.append(lnk); + } + // Generate "Previous"-Link + if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){ + appendItem(current_page-1,{text:opts.prev_text, classes:"prev"}); + } + // Generate starting points + if (interval[0] > 0 && opts.num_edge_entries > 0) + { + var end = Math.min(opts.num_edge_entries, interval[0]); + for(var i=0; i"+opts.ellipse_text+"").appendTo(panel); + } + } + // Generate interval links + for(var i=interval[0]; i 0) + { + if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text) + { + jQuery(""+opts.ellipse_text+"").appendTo(panel); + } + var begin = Math.max(np-opts.num_edge_entries, interval[1]); + for(var i=begin; i 0) { + pageSelected(current_page - 1); + return true; + } + else { + return false; + } + } + this.nextPage = function(){ + if(current_page < numPages()-1) { + pageSelected(current_page+1); + return true; + } + else { + return false; + } + } + // When all initialisation is done, draw the links + drawLinks(); + // call callback function + //opts.callback(current_page, this); // modification by pairofdimes + }); +} + + +/* + * Superfish v1.4.8 - jQuery menu widget + * Copyright (c) 2008 Joel Birch + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';(3($){$.h.F=3(b){8 2=$.h.F,c=2.c,$S=$([\' s;\'].f(\'\')),t=3(){8 $$=$(4),9=z($$);X(9.y);$$.10().1u().q()},I=3(){8 $$=$(4),9=z($$),o=2.b;X(9.y);9.y=1v(3(){o.x=($.1y($$[0],o.$k)>-1);$$.q();p(o.$k.G&&$$.J([\'d.\',o.g].f(\'\')).G<1){t.e(o.$k)}},o.1g)},z=3($9){8 9=$9.J([\'5.\',c.C,\':N\'].f(\'\'))[0];2.b=2.o[9.W];l 9},R=3($a){$a.u(c.M).1q($S.1i())};l 4.j(3(){8 s=4.W=2.o.G;8 o=$.12({},2.Y,b);o.$k=$(\'d.\'+o.B,4).1l(0,o.K).j(3(){$(4).u([o.g,c.D].f(\' \')).1n(\'d:T(5)\').Z(o.B)});2.o[s]=2.b=o;$(\'d:T(5)\',4)[($.h.P&&!o.13)?\'P\':\'1o\'](t,I).j(3(){p(o.1d)R($(\'>a:N-1M\',4))}).m(\'.\'+c.D).q();8 $a=$(\'a\',4);$a.j(3(i){8 $d=$a.U(i).J(\'d\');$a.U(i).1N(3(){t.e($d)}).1J(3(){I.e($d)})});o.14.e(4)}).j(3(){E=[c.C];p(2.b.A&&!($.n.V&&$.n.L<7))E.1D(c.r);$(4).u(E.f(\' \'))})};8 2=$.h.F;2.o=[];2.b={};2.H=3(){8 o=2.b;p($.n.V&&$.n.L>6&&o.A&&o.v.1f!=1G)4.1z(2.c.r+\'-15\')};2.c={D:\'2-1I\',C:\'2-1E-1B\',M:\'2-1O-5\',O:\'2-1p-1m\',r:\'2-1k\'};2.Y={g:\'1w\',B:\'1r\',K:1,1g:1A,v:{1f:\'1F\'},17:\'1H\',1d:w,A:w,13:11,14:3(){},19:3(){},18:3(){},1e:3(){}};$.h.12({q:3(){8 o=2.b,m=(o.x===w)?o.$k:\'\';o.x=11;8 $5=$([\'d.\',o.g].f(\'\'),4).1C(4).m(m).Z(o.g).16(\'>5\').1K().1c(\'1a\',\'1b\');o.1e.e($5);l 4},10:3(){8 o=2.b,1L=2.c.r+\'-15\',$5=4.u(o.g).16(\'>5:1b\').1c(\'1a\',\'1j\');2.H.e($5);o.19.e($5);$5.1x(o.v,o.17,3(){2.H.e($5);o.18.e($5)});l 4}})})(1h);',62,113,'||sf|function|this|ul|||var|menu||op||li|call|join|hoverClass|fn||each|path|return|not|browser||if|hideSuperfishUl|shadowClass||over|addClass|animation|true|retainPath|sfTimer|getMenu|dropShadows|pathClass|menuClass|bcClass|menuClasses|superfish|length|IE7fix|out|parents|pathLevels|version|anchorClass|first|arrowClass|hoverIntent|span|addArrow|arrow|has|eq|msie|serial|clearTimeout|defaults|removeClass|showSuperfishUl|false|extend|disableHI|onInit|off|find|speed|onShow|onBeforeShow|visibility|hidden|css|autoArrows|onHide|opacity|delay|jQuery|clone|visible|shadow|slice|indicator|filter|hover|sub|append|overideThisToUse|187|class|siblings|setTimeout|sfHover|animate|inArray|toggleClass|800|enabled|add|push|js|show|undefined|normal|breadcrumb|blur|hide|sh|child|focus|with'.split('|'),0,{})) + + +/** + * TableDnD plug-in for JQuery, allows you to drag and drop table rows + * You can set up various options to control how the system will work + * Copyright (c) Denis Howlett + * Licensed like jQuery, see http://docs.jquery.com/License. + * + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1.3={j:f,h:f,G:f,F:0,1x:a(1p){8.z(a(){8.k=1.1A({1m:f,1r:f,v:"1C",12:f,t:f,w:5,15:/[^\\-]*$/,1N:f,N:f},1p||{});1.3.O(8)});1(g).1s(\'V\',1.3.V).1s(\'Z\',1.3.Z);9 8},O:a(c){4 7=c.k;6(c.k.N){4 1u=1("1J."+c.k.N,c);1u.z(a(){1(8).1l(a(b){1.3.h=8.Y;1.3.j=c;1.3.G=1.3.Q(8,b);6(7.t){7.t(c,8)}9 L})})}m{4 l=1("1H",c);l.z(a(){4 d=1(8);6(!d.1t("1K")){d.1l(a(b){6(b.P.1F=="1E"){1.3.h=8;1.3.j=c;1.3.G=1.3.Q(8,b);6(7.t){7.t(c,8)}9 L}}).11("1M","1L")}})}},1D:a(){8.z(a(){6(8.k){1.3.O(8)}})},U:a(b){6(b.1k||b.1h){9{x:b.1k,y:b.1h}}9{x:b.1z+g.o.1B-g.o.1w,y:b.1y+g.o.S-g.o.1G}},Q:a(P,b){b=b||q.23;4 X=8.C(P);4 p=8.U(b);9{x:p.x-X.x,y:p.y-X.y}},C:a(e){4 K=0;4 I=0;6(e.E==0){e=e.M}21(e.1f){K+=e.1e;I+=e.1g;e=e.1f}K+=e.1e;I+=e.1g;9{x:K,y:I}},V:a(b){6(1.3.h==f){9}4 D=1(1.3.h);4 7=1.3.j.k;4 p=1.3.U(b);4 y=p.y-1.3.G.y;4 u=q.27;6(g.26){6(18 g.17!=\'1b\'&&g.17!=\'24\'){u=g.T.S}m 6(18 g.o!=\'1b\'){u=g.o.S}}6(p.y-u<7.w){q.1v(0,-7.w)}m{4 1j=q.1a?q.1a:g.T.W?g.T.W:g.o.W;6(1j-(p.y-u)<7.w){q.1v(0,7.w)}}6(y!=1.3.F){4 R=y>1.3.F;1.3.F=y;6(7.v){D.1X(7.v)}m{D.11(7.1m)}4 r=1.3.1o(D,y);6(r){6(R&&1.3.h!=r){1.3.h.Y.1q(1.3.h,r.1W)}m 6(!R&&1.3.h!=r){1.3.h.Y.1q(1.3.h,r)}}}9 L},1o:a(16,y){4 l=1.3.j.l;1d(4 i=0;iB-H)&&(y<(B+H))){6(d==16){9 f}4 7=1.3.j.k;6(7.1i){6(7.1i(16,d)){9 d}m{9 f}}m{4 13=1(d).1t("13");6(!13){9 d}m{9 f}}9 d}}9 f},Z:a(e){6(1.3.j&&1.3.h){4 A=1.3.h;4 7=1.3.j.k;6(7.v){1(A).1V(7.v)}m{1(A).11(7.1r)}1.3.h=f;6(7.12){7.12(1.3.j,A)}1.3.j=f}},1Y:a(){6(1.3.j){9 1.3.14(1.3.j)}m{9"1U: 1T 1P J 19, 1Q 1R 20 19 1S J 1Z 28 c 25 1O d"}},14:a(c){4 n="";4 1c=c.J;4 l=c.l;1d(4 i=0;i0)n+="&";4 s=l[i].J;6(s&&s&&c.k&&c.k.15){s=s.22(c.k.15)[0]}n+=1c+\'[]=\'+s}9 n},1I:a(){4 n="";8.z(a(){n+=1.3.14(8)});9 n}}',62,133,'|jQuery||tableDnD|var||if|config|this|return|function|ev|table|row||null|document|dragObject||currentTable|tableDnDConfig|rows|else|result|body|mousePos|window|currentRow|rowId|onDragStart|yOffset|onDragClass|scrollAmount|||each|droppedRow|rowY|getPosition|dragObj|offsetHeight|oldY|mouseOffset|rowHeight|top|id|left|false|firstChild|dragHandle|makeDraggable|target|getMouseOffset|movingDown|scrollTop|documentElement|mouseCoords|mousemove|clientHeight|docPos|parentNode|mouseup|length|css|onDrop|nodrop|serializeTable|serializeRegexp|draggedRow|compatMode|typeof|set|innerHeight|undefined|tableId|for|offsetLeft|offsetParent|offsetTop|pageY|onAllowDrop|windowHeight|pageX|mousedown|onDragStyle|parseInt|findDropTargetRow|options|insertBefore|onDropStyle|bind|hasClass|cells|scrollBy|clientLeft|build|clientY|clientX|extend|scrollLeft|tDnD_whileDrag|updateTables|TD|tagName|clientTop|tr|serializeTables|td|nodrag|move|cursor|serializeParamName|every|Table|you|need|an|No|Error|removeClass|nextSibling|addClass|serialize|on|to|while|match|event|BackCompat|and|all|pageYOffset|your'.split('|'),0,{})) +jQuery.fn.extend({ tableDnD: jQuery.tableDnD.build, tableDnDUpdate: jQuery.tableDnD.updateTables, tableDnDSerialize: jQuery.tableDnD.serializeTables }); + + +/** +* +* AJAX IFRAME METHOD (AIM) +* http://www.webtoolkit.info/ +* +* Copyright (c) 2006-2008 www.webtoolkit.info +* Licensed under Gnu Public Licence V3 or higher. +* http://www.gnu.org/licenses/gpl.html +**/ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('6={h:0(c){1 n=\'f\'+k.z(k.w()*u);1 d=3.y(\'C\');d.e=\'\';3.j.A(d);1 i=3.m(n);2(c&&a(c.4)==\'0\'){i.4=c.4}5 n},l:0(f,8){f.J(\'K\',8)},I:0(f,c){6.l(f,6.h(c));2(c&&a(c.b)==\'0\'){5 c.b()}9{5 E}},p:0(7){1 i=3.m(7);2(i.q){1 d=i.q}9 2(i.r){1 d=i.r.3}9{1 d=G.L[7].3}2(d.F.H=="g:s"){5}2(a(i.4)==\'0\'){i.4(d.j.e)}}}',48,48,'function|var|if|document|onComplete|return|AIM|id|name|else|typeof|onStart|||innerHTML||about|frame||body|Math|form|getElementById||iframe|loaded|contentDocument|contentWindow|blank|none|99999|onload|random|src|createElement|floor|appendChild|style|DIV|display|true|location|window|href|submit|setAttribute|target|frames'.split('|'),0,{})) diff --git a/interfaces/Plush/templates/static/javascripts/plush.js b/interfaces/Plush/templates/static/javascripts/plush.js new file mode 100644 index 0000000..2fd9251 --- /dev/null +++ b/interfaces/Plush/templates/static/javascripts/plush.js @@ -0,0 +1,815 @@ +// *************************************************************** +// Plush main code as follows, by pairofdimes (see LICENSE-CC.txt) + +jQuery(function($){ + + $.plush = { + + // *************************************************************** + // Plush defaults + + refreshRate: $.cookie('refreshRate') ? $.cookie('refreshRate') : 30, // refresh rate in seconds + queuePerPage: $.cookie('queuePerPage') ? $.cookie('queuePerPage') : 10, // pagination - nzbs per page + histPerPage: $.cookie('histPerPage') ? $.cookie('histPerPage') : 10, // pagination - nzbs per page + confirmDeleteQueue: $.cookie('confirmDeleteQueue') == 0 ? false : true, // confirm queue nzb removal + confirmDeleteHistory: $.cookie('confirmDeleteHistory') == 0 ? false : true, // confirm history nzb removal + blockRefresh: $.cookie('blockRefresh') == 0 ? false : true, // prevent refreshing when hovering queue + + + // *************************************************************** + // $.plush.Init() -- initialize all the UI events + + Init : function() { + $.plush.InitAddNZB(); + $.plush.InitMainMenu(); + $.plush.InitQueue(); + $.plush.InitHistory(); + $.plush.InitTooltips(); + }, // end $.plush.Init() + + + // *************************************************************** + // $.plush.InitAddNZB() -- "Add NZB" Methods + + InitAddNZB : function() { + // Fetch NZB by URL/Newzbin Report ID + $('#addID').click(function(){ // also works when hitting enter because of
      + if ($('#addID_input').val()!='URL') { + $.ajax({ + type: "POST", + url: "tapi", + data: { + mode: 'addid', + name: $("#addID_input").val(), + pp: $("#addID_pp").val(), + script: $("#addID_script").val(), + cat: $("#addID_cat").val(), + priority: $("#addID_priority").val(), + apikey: $.plush.apikey + }, + success: $.plush.RefreshQueue + }); + $("#addID_input").val(''); + } + return false; // aborts submission + }); + $('#addID_input').val('URL') + .focus( function(){ + if ($(this).val()=="URL") + $(this).val(''); + }).blur( function(){ + if (!$(this).val()) + $(this).val('URL'); + }); + + // Upload NZB ajax with webtoolkit + $('#uploadNZBFile').change( function(){ $('#uploadNZBForm').submit(); }); + $('#uploadNZBForm').submit( function(){ + return AIM.submit(this, {'onComplete': $.plush.RefreshQueue}) + }); + + // Fetch Newzbin Bookmarks + $('#fetch_newzbin_bookmarks').click(function(){ + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'newzbin', name:'get_bookmarks', apikey: $.plush.apikey}, + success: function(result){ + $.plush.RefreshQueue(); + } + }); + }); + + }, // end $.plush.InitAddNZB() + + + // *************************************************************** + // $.plush.InitMainMenu() -- Main Menu Events + + InitMainMenu : function() { + + // Main menu -- uses jQuery hoverIntent + $("#main_menu ul.sf-menu").superfish({ + autoArrows: true, + dropShadows: false + }); + $("#queue-buttons ul").superfish({ + autoArrows: false, + dropShadows: false + }); + + // Max Speed main menu input -- don't change value on refresh when focused + $("#maxSpeed-option").focus(function(){ $.plush.focusedOnSpeedChanger = true; }) + .blur(function(){ $.plush.focusedOnSpeedChanger = false; }); + $("#maxSpeed-option").change( function() { // works with hitting enter + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'config', name:'set_speedlimit', value: $(this).val(), apikey: $.plush.apikey} + }); + }); + + // Refresh rate + $("#refreshRate-option").val($.plush.refreshRate).change( function() { + $.plush.refreshRate = $("#refreshRate-option").val(); + $.cookie('refreshRate', $.plush.refreshRate, { expires: 365 }); + $.plush.Refresh(); + }); + + // Confirm Queue Deletions toggle + $("#confirmDeleteQueue").attr('checked', $.plush.confirmDeleteQueue ).change( function() { + $.plush.confirmDeleteQueue = $("#confirmDeleteQueue").attr('checked'); + $.cookie('confirmDeleteQueue', $.plush.confirmDeleteQueue ? 1 : 0, { expires: 365 }); + }); + + // Confirm History Deletions toggle + $("#confirmDeleteHistory").attr('checked', $.plush.confirmDeleteHistory ).change( function() { + $.plush.confirmDeleteHistory = $("#confirmDeleteHistory").attr('checked'); + $.cookie('confirmDeleteHistory', $.plush.confirmDeleteHistory ? 1 : 0, { expires: 365 }); + }); + + // Block Refreshes on Hover toggle + $("#blockRefresh").attr('checked', $.plush.blockRefresh ).change( function() { + $.plush.blockRefresh = $("#blockRefresh").attr('checked'); + $.cookie('blockRefresh', $.plush.blockRefresh ? 1 : 0, { expires: 365 }); + }); + + // Sabnzbd shutdown + $('#shutdown_sabnzbd').click( function(){ + if(confirm($('#shutdown_sabnzbd').attr('rel'))) + window.location='shutdown?session='+$.plush.apikey; + }); + + // Queue "Upon Completion" script + $("#onQueueFinish-option").change( function() { + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'queue', name:'change_complete_action', value: $(this).val(), apikey: $.plush.apikey} + }); + }); + + // Queue purge + $('#queue_purge').click(function(event) { + if(confirm($('#queue_purge').attr('rel'))){ + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'queue', name:'delete', value:'all', apikey: $.plush.apikey}, + success: $.plush.RefreshQueue + }); + } + }); + + // Queue sort (6-in-1) + $('#queue_sort_list .queue_sort').click(function(event) { + var sort, dir; + switch ($(this).attr('id')) { + case 'sortAgeAsc': sort='avg_age'; dir='asc'; break; + case 'sortAgeDesc': sort='avg_age'; dir='desc'; break; + case 'sortNameAsc': sort='name'; dir='asc'; break; + case 'sortNameDesc': sort='name'; dir='desc'; break; + case 'sortSizeAsc': sort='size'; dir='asc'; break; + case 'sortSizeDesc': sort='size'; dir='desc'; break; + } + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'queue', name:'sort', sort: sort, dir: dir, apikey: $.plush.apikey}, + success: $.plush.RefreshQueue + }); + }); + + // Queue pause intervals + $('#set_pause_list .set_pause').click(function(event) { + var minutes = $(event.target).attr('rel'); + if (minutes == "custom") + minutes = prompt($(event.target).attr('title')); + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'config', name:'set_pause', value: minutes, apikey: $.plush.apikey}, + success: $.plush.RefreshQueue + }); + }); + + // Manual refresh + $('#manual_refresh_wrapper').click(function(e){ + // prevent button text highlighting + e.target.onselectstart = function() { return false; }; + e.target.unselectable = "on"; + e.target.style.MozUserSelect = "none"; + //e.target.style.cursor = "default"; + + $.plush.Refresh(true); + }); + + }, // end $.plush.InitMainMenu() + + + // *************************************************************** + // $.plush.InitTooltips() -- title tootlips on hover + + InitTooltips : function() { + + /* + jQuery FlipTip (with modifications by pairofdimes) + http://learningjquery.com + Copyright (c) 2010 Karl Swedberg + See http://creativecommons.org/licenses/by-sa/2.5/ + */ + var $liveTip = $('
      ').hide().appendTo('body'); + var $win = $(window), tipTitle = ''; + + var tipPosition = function(event) { + var winWidth = $win.width(), + winBottom = $win.scrollTop() + $win.height(), + tipWidth = $liveTip.outerWidth(), + tipHeight = $liveTip.outerHeight(), + pageX = event.pageX, + pageY = event.pageY; + if (pageX + tipWidth + 12 > winWidth) + pageX += 12 - (pageX + tipWidth + 12 - winWidth); + else + pageX += 12; + if (pageY + tipHeight + 12 > winBottom) + pageY -= (tipHeight + 12); + else + pageY += 12; + $liveTip.css({ + top: pageY, + left: pageX + }); + }; + + // make these work: #time-left, #have_warnings, #explain-blockRefresh, #uploadTip, #fetch_newzbin_bookmarks, #pauseForPrompt, + $('#pause_resume, #hist_purge, #queueTable td.download-title a, #queueTable td.options .icon_nzb_remove, #historyTable td.options .icon_nzb_remove, #historyTable td div.icon_history_verbose').live('mouseover mouseout mousemove', function(event) { + var $link = $(event.target); + if (!$link.length) { return; } + var link = $link[0]; + var coords = {left: '-1000em'}; + + switch(event.type){ + case 'mouseover': + $link.data('tipActive', true); + tipTitle = link.title; + link.title = ''; + if (!tipTitle) { return; } + $liveTip.html('
      '+tipTitle+'
      ').show() + tipPosition(event); + break; + + case 'mouseout': + $link.removeData('tipActive'); + $liveTip.hide(); + link.title = tipTitle || link.title; + break; + + case 'mousemove': + if ($link.data('tipActive')) + tipPosition(event); + break; + }; + }); + }, + + + // *************************************************************** + // $.plush.InitQueue() - Queue Events + + InitQueue : function() { + + // Pause/resume toggle (queue) + $('#pause_resume').click(function(event) { + if ( $(event.target).hasClass('sprite_q_pause_on') ) { + $('#pause_resume').removeClass('sprite_q_pause_on').addClass('sprite_q_pause'); + $('#pause_int').html(""); + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'resume', apikey: $.plush.apikey} + }); + } else { + $('#pause_resume').removeClass('sprite_q_pause').addClass('sprite_q_pause_on'); + $('#pause_int').html(""); + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'pause', apikey: $.plush.apikey} + }); + } + }); + + // Set queue per-page preference + $("#queue-pagination-perpage").val($.plush.queuePerPage); + $.plush.queuecurpage = 0; // default 1st page + + // Pagination per-page selection + $("#queue-pagination-perpage").change(function(event){ + $.plush.queuecurpage = Math.floor($.plush.queuecurpage * $.plush.queuePerPage / $(event.target).val() ); + $.plush.queuePerPage = $(event.target).val(); + $.cookie('queuePerPage', $.plush.queuePerPage, { expires: 365 }); + $.plush.queueforcerepagination = true; + $.plush.RefreshQueue(); + }); + + // Skip queue refresh on mouseover + $('#queue').hover( + function(){ $.plush.skipRefresh=true; }, // over + function(){ $.plush.skipRefresh=false; } // out + ); + + // refresh on mouseout after deletion + $('#queue').hover( // $.mouseout was triggering too often + function(){}, // over + function(){ // out + if ($.plush.pendingQueueRefresh) { + $.plush.pendingQueueRefresh = false; + $.plush.RefreshQueue(); + } + } + ); + + // NZB pause/resume individual toggle + $('#queueTable .nzb_status').live('click',function(event){ + var pid = $(this).parent().parent().attr('id'); + if ($(this).hasClass('sprite_ql_grip_queued_on')) { + $(this).toggleClass('sprite_ql_grip_queued_on').toggleClass('sprite_ql_grip_paused_on'); + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'queue', name:'pause', value: pid, apikey: $.plush.apikey} + }); + } else if ($(this).hasClass('sprite_ql_grip_active')) { + $(this).toggleClass('sprite_ql_grip_active').toggleClass('sprite_ql_grip_paused_on'); + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'queue', name:'pause', value: pid, apikey: $.plush.apikey} + }); + } else { + $(this).toggleClass('sprite_ql_grip_queued_on').toggleClass('sprite_ql_grip_paused_on'); + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'queue', name:'resume', value: pid, apikey: $.plush.apikey} + }); + } + }); + + // NZB individual deletion + $('#queue .sprite_ql_cross').live('click', function(event) { + if (!$.plush.confirmDeleteQueue || confirm($.plush.Tconfirmation)){ + delid = $(event.target).parent().parent().attr('id'); + $('#'+delid).fadeTo('normal',0.25); + $.plush.pendingQueueRefresh = true; + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'queue', name:'delete', value: delid, apikey: $.plush.apikey}, + success: function(){ + if ( $("#queueTable tr:visible").length - 1 < 1 ) { // don't leave stranded on non-page + $.plush.skipRefresh = false; + $.plush.queueforcerepagination = true; + $.plush.RefreshQueue($.plush.queuecurpage-1); + } + } + }); + } + }); + + // NZB change priority + $('#queueTable .options .proc_priority').live('change',function(){ + var nzbid = $(this).parent().parent().attr('id'); + var oldPos = $('#'+nzbid)[0].rowIndex + $.plush.queuecurpage * $.plush.queuePerPage; + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'queue', name:'priority', value: nzbid, value2: $(this).val(), apikey: $.plush.apikey}, + success: function(newPos){ + // reposition the nzb if necessary (new position is returned by the API) + if (parseInt(newPos) < $.plush.queuecurpage * $.plush.queuePerPage + || ($.plush.queuecurpage + 1) * $.plush.queuePerPage < parseInt(newPos)) { + $.plush.skipRefresh = false; + $.plush.RefreshQueue(); + } else if (oldPos < newPos) + $('#'+nzbid).insertAfter($('#queueTable tr:eq('+ (newPos - $.plush.queuecurpage * $.plush.queuePerPage) +')')); + else if (oldPos > newPos) + $('#'+nzbid).insertBefore($('#queueTable tr:eq('+ (newPos - $.plush.queuecurpage * $.plush.queuePerPage) +')')); + } + }); + }); + + // 3-in-1 change nzb [category + processing + script] + $('#queueTable .options .change_cat, #queueTable .options .change_opts, #queueTable .options .change_script').live('change',function(e){ + var val = $(this).parent().parent().attr('id'); + var cval = $(this).attr('class').split(" ")[0]; // ignore added "hovering" class + $.ajax({ + type: "POST", + url: "tapi", + data: {mode: cval, value: val, value2: $(this).val(), apikey: $.plush.apikey}, + success: function(resp){ + // each category can define different priority/processing/script -- must be accounted for + if (cval=="change_cat") { + $.plush.skipRefresh = false; + $.plush.RefreshQueue(); // this is not ideal, but the API does not yet offer a nice way of refreshing just one nzb + } + } + }); + }); + + // NZB icon hover states -- done here rather than in CSS:hover due to sprites + $('#queueTable tr').live('mouseover mouseout', function(event) { + if (event.type == 'mouseover') { + $(this).find('td .icon_nzb_remove').addClass('sprite_ql_cross'); + $(this).find('td .sprite_ql_grip_queued').toggleClass('sprite_ql_grip_queued').toggleClass('sprite_ql_grip_queued_on'); + $(this).find('td .sprite_ql_grip_paused').toggleClass('sprite_ql_grip_paused').toggleClass('sprite_ql_grip_paused_on'); + } else { + $(this).find('td .icon_nzb_remove').removeClass('sprite_ql_cross'); + $(this).find('td .sprite_ql_grip_queued_on').toggleClass('sprite_ql_grip_queued').toggleClass('sprite_ql_grip_queued_on'); + $(this).find('td .sprite_ql_grip_paused_on').toggleClass('sprite_ql_grip_paused').toggleClass('sprite_ql_grip_paused_on'); + } + }); + $('#queueTable tr td .icon_nzb_remove').live('mouseover mouseout', function(event) { + if (event.type == 'mouseover') { + $(this).addClass('sprite_ql_cross_on'); + } else { + $(this).removeClass('sprite_ql_cross_on'); + } + }); + + // Styling that is broken in IE (IE8 auto-closes select menus if defined) + if (!$.browser.msie) { + $('#queueTable tr').live('mouseover mouseout', function(event) { + if (event.type == 'mouseover') { + $(this).find('td.options select').addClass('hovering'); + } else { + $(this).find('td.options select').removeClass('hovering'); + } + }); + } + + // Sustained binding of events for elements added to DOM + // Same idea as jQuery live(), but use jQuery livequery() plugin for functions/events not supported by live() + $('#queueTable').livequery(function() { + + // Build pagination only when needed + if ( ( $.plush.queueforcerepagination && $.plush.queuenoofslots > $.plush.queuePerPage) || $.plush.queuenoofslots > $.plush.queuePerPage && + Math.ceil($.plush.queueprevslots/$.plush.queuePerPage) != + Math.ceil($.plush.queuenoofslots/$.plush.queuePerPage) ) { + + $.plush.queueforcerepagination = false; + if ( $("#queueTable tr:visible").length - 1 < 1 ) // don't leave stranded on non-page + $.plush.queuecurpage--; + $("#queue-pagination").pagination( $.plush.queuenoofslots , { + current_page: $.plush.queuecurpage, + items_per_page: $.plush.queuePerPage, + num_display_entries: 8, + num_edge_entries: 1, + prev_text: "« "+$.plush.Tprev, // translation + next_text: $.plush.Tnext+" »", // translation + callback: $.plush.RefreshQueue + }); + $('#queue-pagination span').removeClass('loading'); // hide spinner graphic + } else if ($.plush.queuenoofslots <= $.plush.queuePerPage) { + $("#queue-pagination").html(''); // remove pages if history empty + } + $.plush.queueprevslots = $.plush.queuenoofslots; // for the next refresh + + // Drag and drop sorting + $("#queueTable").tableDnD({ + onDrop: function(table, row) { + if (table.tBodies[0].rows.length < 2) + return false; + // determine which position the repositioned row is at now + var val2; + for ( var i=0; i < table.tBodies[0].rows.length; i++ ) { + if (table.tBodies[0].rows[i].id == row.id) { + val2 = (i + $.plush.queuecurpage * $.plush.queuePerPage); + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'switch', value: row.id, value2: val2, apikey: $.plush.apikey}, + success: function(result){ + // change priority of the nzb if necessary (priority is returned by API) + var newPriority = result.split(' '); + newPriority = parseInt(newPriority[1]); + if (newPriority != $('#'+row.id+' .options .proc_priority').val()) + $('#'+row.id+' .options .proc_priority').val(newPriority); // must be int, not string + } + }); + return false; + } + } + } + }); + + }); // end livequery + + }, // end $.plush.InitQueue() + + + // *************************************************************** + // $.plush.InitHistory() -- History Events + + InitHistory : function() { + + // Search + $('#historySearchForm').submit(function(){ + $.plush.histcurpage = 0; + $.plush.RefreshHistory(); + return false; + }); + + // Purge + $('#hist_purge').click(function(event) { + if (confirm( $.plush.TconfirmPurgeH )) { + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'history', name:'delete', value:'all', apikey: $.plush.apikey}, + success: $.plush.RefreshHistory + }); + } + }); + + // refresh on mouseout after deletion + $('#history').hover( // $.mouseout was triggering too often + function(){}, // over + function(){ // out + if ($.plush.pendingHistoryRefresh) { + $.plush.pendingHistoryRefresh = false; + $.plush.RefreshHistory(); + } + } + ); + + // colorbox event bindings - so history doesn't refresh when viewing modal (thereby breaking rel prev/next) + $().bind('cbox_open', function(){ $.plush.modalOpen=true; }); + $().bind('cbox_closed', function(){ $.plush.modalOpen=false; }); + $().bind('cbox_complete', function(){ + $('#cboxLoadedContent input').hide(); // hide back button + $('#cboxLoadedContent h3').append('

      '); // add spacing to header + }); + + // Set history per-page preference + $("#history-pagination-perpage").val($.plush.histPerPage); + $.plush.histcurpage = 0; // default 1st page + + // Pagination per-page selection + $("#history-pagination-perpage").change(function(event){ + $.plush.histcurpage = Math.floor($.plush.histcurpage * $.plush.histPerPage / $(event.target).val() ); + $.plush.histPerPage = $(event.target).val(); + $.cookie('histPerPage', $.plush.histPerPage, { expires: 365 }); + $.plush.histforcerepagination = true; + if ($.plush.histPerPage=="1") + $("#history-pagination").html(''); // pagination rebuild not triggered on blank history (disabled) + $.plush.RefreshHistory(); + }); + + // NZB individual removal + $('#history .sprite_ql_cross').live('click', function(event) { + if (!$.plush.confirmDeleteHistory || confirm($.plush.Tconfirmation)){ + delid = $(event.target).parent().parent().attr('id'); + $('#'+delid).fadeTo('normal',0.25); + $.plush.pendingHistoryRefresh = true; + $.ajax({ + type: "POST", + url: "tapi", + data: {mode:'history', name:'delete', value: delid, apikey: $.plush.apikey}, + success: function(){ + if ( $("#historyTable tr:visible").length - 1 < 1 ) { // don't leave stranded on non-page + $.plush.histforcerepagination = true; + $.plush.RefreshHistory($.plush.histcurpage-1); + } + } + }); + } + }); + + // Remove NZB hover states -- done here rather than in CSS:hover due to sprites + $('#historyTable tr').live('mouseover mouseout', function(event) { + if (event.type == 'mouseover') { + $(this).find('.icon_nzb_remove').addClass('sprite_ql_cross'); + } else { + $(this).find('.icon_nzb_remove').removeClass('sprite_ql_cross'); + } + }); + $('#historyTable tr td .icon_nzb_remove').live('mouseover mouseout', function(event) { + if (event.type == 'mouseover') { + $(this).addClass('sprite_ql_cross_on'); + } else { + $(this).removeClass('sprite_ql_cross_on'); + } + }); + + // Sustained binding of events for elements added to DOM + $('#historyTable').livequery(function() { + + // modal for viewing script logs + $('#historyTable .modal').colorbox({ width:"80%", height:"80%", initialWidth:"80%", initialHeight:"80%", speed:0, opacity:0.7 }); + + // Build pagination only when needed + if ($.plush.histPerPage=="1") // disabled history + $("#history-pagination").html(''); // remove pages if history empty + else if ( ( $.plush.histforcerepagination && $.plush.histnoofslots > $.plush.histPerPage) || $.plush.histnoofslots > $.plush.histPerPage && + Math.ceil($.plush.histprevslots/$.plush.histPerPage) != + Math.ceil($.plush.histnoofslots/$.plush.histPerPage) ) { + + $.plush.histforcerepagination = false; + if ( $("#historyTable tr:visible").length - 1 < 1 ) // don't leave stranded on non-page + $.plush.histcurpage--; + $("#history-pagination").pagination( $.plush.histnoofslots , { + current_page: $.plush.histcurpage, + items_per_page: $.plush.histPerPage, + num_display_entries: 8, + num_edge_entries: 1, + prev_text: "« "+$.plush.Tprev, // translation + next_text: $.plush.Tnext+" »", // translation + callback: $.plush.RefreshHistory + }); + $('#history-pagination span').removeClass('loading'); // hide spinner graphic + } else if ($.plush.histnoofslots <= $.plush.histPerPage) + $("#history-pagination").html(''); // remove pages if history empty + $.plush.histprevslots = $.plush.histnoofslots; // for the next refresh + + }); // end livequery + + }, // end $.plush.InitHistory() + + + // *************************************************************** + // $.plush.Refresh() + + Refresh : function(force) { + + clearTimeout($.plush.timeout); // prevent back-to-back refreshes + + if (force || $.plush.refreshRate > 0) { + $.plush.RefreshQueue(); + $.plush.RefreshHistory(); + $.plush.timeout = setTimeout("$.plush.Refresh()", $.plush.refreshRate*1000); // loop + } else if (!$('#history_stats').html()) { + // Initial load if refresh rate saved as "Disabled" + $.plush.RefreshQueue(); + $.plush.RefreshHistory(); + } + }, // end $.plush.Refresh() + + + // *************************************************************** + // $.plush.RefreshQueue() -- fetch HTML data from queue.tmpl (AHAH) + + RefreshQueue : function(page) { + + // Skip refresh if cursor hovers queue, to prevent UI annoyance + if ($.plush.blockRefresh && $.plush.skipRefresh) + return $('#manual_refresh_wrapper').addClass('refresh_skipped'); + + // no longer a need for a pending queue refresh (associated with nzb deletions) + $.plush.pendingQueueRefresh = false; + + // Deal with pagination for start/limit + if (typeof( page ) == 'undefined' || page == "ok\n" || page < 0 ) + page = $.plush.queuecurpage; + else if (page != $.plush.queuecurpage) + $.plush.queuecurpage = page; + + // Refresh state notification + $('#manual_refresh_wrapper').removeClass('refresh_skipped').addClass('refreshing'); + + // Fetch updated content from queue.tmpl + $.ajax({ + type: "POST", + url: "queue/", + data: {start: ( page * $.plush.queuePerPage ), limit: $.plush.queuePerPage}, + success: function(result){ + $('#queue').html(result); // Replace queue contents with queue.tmpl + $('#queue-pagination span').removeClass('loading'); // Remove spinner graphic from pagination + $('#manual_refresh_wrapper').removeClass('refreshing'); // Refresh state notification + }, + error: function() { + $('#manual_refresh_wrapper').addClass('refresh_skipped'); // Failed refresh notification + } + }); + + }, // end $.plush.RefreshQueue() + + + // *************************************************************** + // $.plush.RefreshHistory() -- fetch HTML data from history.tmpl (AHAH) + + RefreshHistory : function(page) { + + // Skip refreshing when modal is open, which destroys colorbox rel prev/next + if ($.plush.modalOpen) + return; + + // no longer a need for a pending history refresh (associated with nzb deletions) + $.plush.pendingHistoryRefresh = false; + + // Deal with pagination for start/limit + if (typeof( page ) == 'undefined') + page = $.plush.histcurpage; + else if (page != $.plush.histcurpage) + $.plush.histcurpage = page; + + if ($('#historySearchBox').val() && $.plush.histPerPage == "1") // history disabled + var data = {start: 0, limit: 0, search: $('#historySearchBox').val() }; + else if ($('#historySearchBox').val()) + var data = {start: ( page * $.plush.histPerPage ), limit: $.plush.histPerPage, search: $('#historySearchBox').val() }; + else + var data = {start: ( page * $.plush.histPerPage ), limit: $.plush.histPerPage}; + + $.ajax({ + type: "POST", + url: "history/", + data: data, + success: function(result){ + $('#history').html(result); // Replace history contents with history.tmpl + $('#history-pagination span').removeClass('loading'); // Remove spinner graphic from pagination + } + }); + + }, // end $.plush.RefreshHistory() + + + // *************************************************************** + // $.plush.SetQueueStats(str) -- called from queue.tmpl + SetQueueStats : function(str) { + $('#queue_stats').html(str); + }, + + + // *************************************************************** + // $.plush.SetQueueSpeedLimit(str) -- called from queue.tmpl + SetQueueSpeedLimit : function(str) { + if ($("#maxSpeed-option").val() != str && !$.plush.focusedOnSpeedChanger) + $("#maxSpeed-option").val(str); + }, + + + // *************************************************************** + // $.plush.SetQueueFinishAction(str) -- called from queue.tmpl + SetQueueFinishAction : function(str) { + if ($("#onQueueFinish-option").val() != str) + $("#onQueueFinish-option").val(str); + }, + + + // *************************************************************** + // $.plush.SetQueuePauseInfo(paused,str) -- called from queue.tmpl + SetQueuePauseInfo : function(paused,str) { + $.plush.paused = paused; + + // Pause/resume button state + if ( paused && !$('#pause_resume').hasClass('sprite_q_pause_on') ) + $('#pause_resume').removeClass('sprite_q_pause').addClass('sprite_q_pause_on'); + else if ( !paused && !$('#pause_resume').hasClass('sprite_q_pause') ) + $('#pause_resume').removeClass('sprite_q_pause_on').addClass('sprite_q_pause'); + + // Pause interval + (str == "0") ? $('#pause_int').html("") : $('#pause_int').html(str); + }, + + + // *************************************************************** + // $.plush.SetQueueETAStats(speed,kbpersec,timeleft,eta) -- called from queue.tmpl + SetQueueETAStats : function(speed,kbpersec,timeleft,eta) { + + // ETA/speed stats at top of queue + if ($.plush.queuenoofslots < 1) + $('#stats_speed, #stats_eta').html('—'); + else if (kbpersec < 1 && $.plush.paused) + $('#stats_speed, #stats_eta').html('—'); + else { + $('#stats_speed').html(speed+"B/s"); + $('#stats_eta').html(timeleft); + } + $('#time-left').attr('title',eta); // Tooltip on "time left" + }, + + + // *************************************************************** + // $.plush.SetWarnings(have_warnings,last_warning) -- called from queue.tmpl + SetWarnings : function(have_warnings,last_warning) { + $('#have_warnings').html('('+have_warnings+')'); // Update warnings count/latest warning text in main menu + $('#last_warning').attr('title',last_warning); + }, + + + // *************************************************************** + // $.plush.SetHistoryStats(str) -- called from history.tmpl + SetHistoryStats : function(str) { + $('#history_stats').html(str); + } + + }; // end $.plush object + +}); + + +jQuery(document).ready(function($){ + $.plush.Init(); // Initialize Plush UI + $.plush.Refresh(); // Initiate Plush refresh cycle +}); diff --git a/interfaces/Plush/templates/static/stylesheets/plush-default.css b/interfaces/Plush/templates/static/stylesheets/plush-default.css new file mode 100644 index 0000000..6d97fc7 --- /dev/null +++ b/interfaces/Plush/templates/static/stylesheets/plush-default.css @@ -0,0 +1,1552 @@ +/*------------------------------------------------------------------ +[Plush default] +-------------------------------------------------------------------*/ + +/*------------------------------------------------------------------ +[reset] +------------------------------------------------------------------*/ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} +/* remember to define focus styles! */ +:focus { + outline: 0; +} +body { + line-height: 1; + color: #000; + background: #fff; +} +ol, ul { + list-style: none; +} +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: separate; + border-spacing: 0; +} +caption, th, td { + text-align: left; + font-weight: normal; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ""; +} +blockquote, q { + quotes: "" ""; +} + +/*------------------------------------------------------------------ +[Plush typography] +-------------------------------------------------------------------*/ + +body, +input, +textarea{ + font:75% 'Helvetica Neue', Arial, Helvetica, sans-serif; + color:#555550; +} +html>body{ + font-size:12px; +} +h1, +h2, +h3, +h4{ + font-family:'Century Gothic', 'AppleGothic', sans-serif; +} +h1{ + font-size:1.5em; +} +h2{ + font-size:1.25em; +} +h3{ + font-size:1em; +} +p, +ul, +ul li, +td{ + font-size:1em; +} +p,li,dt,dd,td,th{ + line-height:1.5; +} +p,dt,dd,td,th,ul,ol,dl{ + margin-bottom:10px; +} +strong { + font-weight:bold; +} +small { + font-size:0.8333em; +} +input, +textarea{ + font-size:1em; +} + +a:link,a:visited{ + color:#fff; + text-decoration:none; +} +a:hover,a:active{ + text-decoration:underline; +} + +#main_menu ul{ + color:#fff; +} +.box_fatbottom, +.queueTable .eta, +.currentDownload, +.totalDownload { + font-size:0.8333em; +} + +/*------------------------------------------------------------------ +[Plush default] +-------------------------------------------------------------------*/ + +body { + background: #B1B1B1; + padding-bottom: 10px; +} + +select { + background-color: #E0E0E0; + border: 0px; + color: #000; +} + +.new_release_link { + color: #006400; +} + +.pointer { + cursor: pointer; +} + +.clear { + clear: both; +} + +.nowrap { + white-space: nowrap; +} + +#warning_message { + color: #8B0000; + font-weight: bold; +} + +#new_release { + color: green; + font-weight: bold; +} + +#livetip { + position: absolute; + background-color: #cfc; + padding: 4px; + border: 2px solid #9c9; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; +} + + +/* for jQuery Pagination Plugin */ + +.pagination-perpage { + float: left; + margin-top: 2px; +} + +.pagination { + float: left; + margin-left:10px; +} + + .pagination a { + background: #E0E0E0; + border: solid 1px #B1B1B1; + color: #000; + cursor: pointer; + text-decoration: none; + } + + .pagination a:hover { border: solid 1px #000; } + + .pagination a, .pagination span { + display: block; + float: left; + margin-right: 5px; + padding:3px 5px; + } + + .pagination .current { + background: #FFF; + border: solid 1px #000; + color: #000; + } + + .pagination .current.prev, .pagination .current.next { + background: #E0E0E0; + border-color: #B1B1B1; + color: #B1B1B1; + } + + .pagination .loading { background: #FFF url('../images/plush-default/spinner.gif') 50% 50% no-repeat; } + +/* --------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------ + + queue + history overall container + +------------------------------------------------------------------------------------------------------------------ +--------------------------------------------------------------------------------------------------------------- */ + + + +/* sprite-main.png */ +.main_sprite_container { background: url('../images/plush-default/sprite-main.png') no-repeat top right; } + +#main_menu ul li a span.sf-sub-indicator { background-position: 0 5px; } +#main_menu ul li ul li a span.sf-sub-indicator { background-position: 0 -16px; } +.sprite_btm_corner_left { background-position: 0 -34px; } +.sprite_btm_corner_right { background-position: 0 -68px; } +.sprite_h_purge { background-position: 0 -102px; } +.sprite_hv_download { background-position: 0 -131px; } +.sprite_hv_error { background-position: 0 -155px; } +.sprite_hv_filejoin { background-position: 0 -179px; } +.sprite_hv_repair { background-position: 0 -203px; } +.sprite_hv_report { background-position: 0 -227px; } +.sprite_hv_script { background-position: 0 -251px; } +.sprite_hv_star { background-position: 0 -275px; } +.sprite_hv_stats { background-position: 0 -299px; } +.sprite_hv_unpack { background-position: 0 -323px; } +.sprite_progress_done { background-position: 0 -347px; } /* queue.tmpl */ +.sprite_progressbar_bg { background-position: 0 -374px; } +.sprite_q_menu_pausefor { background-position: 0 -401px; } +.sprite_q_menu_pauseforsfHover { background-position: 0 -430px; } +.sprite_q_pause { background-position: 0 -459px; } +.sprite_q_pause_on { background-position: 0 -488px; } +.sprite_q_queue { background-position: 0 -517px; } +.sprite_q_queuesfHover { background-position: 0 -546px; } +.sprite_q_stats_complete { background-position: 0 -575px; } +.sprite_q_stats_incomplete { background-position: 0 -599px; } +.sprite_q_stats_needspace { background-position: 0 -623px; } +.sprite_ql_cross { background-position: 0 -647px; } +.sprite_ql_cross_on { background-position: 0 -671px; } +.sprite_ql_grip_active, .sprite_ql_grip_active_on { background-position: 0 -695px; } +.sprite_ql_grip_paused { background-position: 0 -717px; } +.sprite_ql_grip_paused_on { background-position: 0 -739px; } +.sprite_ql_grip_queued { background-position: 0 -761px; } +.sprite_ql_grip_queued_on { background-position: 0 -783px; } +.sprite_rounded_area_bg { background-position: 0 -805px; } +.sprite_sabnzbdplus_logo { background-position: 0 -835px; } +.sprite_sabnzbdplus_plush { background-position: 0 -883px; } +.sprite_tile_qh_seperator { background-position: 0 -904px; } +.sprite_topleft_queue { background-position: 0 -916px; } +.sprite_topright_queue { background-position: right -991px; } /* right */ + +/* tile-x sprite */ +.tilex_sprite_container { background: url('../images/plush-default/sprite-tilex.png') repeat-x top right; } +.sprite_tile_bottom_wrap { background-position: 0 0; } +.sprite_tile_qh { background-position: 0 -27px; } +.sprite_tile_qhistory { background-position: 0 -43px; } /* subtract 16 from above */ +.sprite_tile_qh_bottom { background-position: 0 -95px; } +.sprite_tile_znavbar { background-position: 0 -134px; } + +/* tile-y sprite */ +.tiley_sprite_container { background: url('../images/plush-default/sprite-tiley.png') repeat-y top right; } +.sprite_tile_page_wrap { background-position: 0 0; } +.sprite_tile_queue_wrap { background-position: bottom right; } + + +.box_fatbottom { + color: #606060; + height: 37px; + text-align: center; +} + +.left_stats, .right_stats { + cursor: default; + padding: 12px 16px 0 20px; +} + +#box_fatbottom_queue .left_stats { + padding-top:6px; +} + +.plush_wrapper { + display:block; + height:15px; + margin:0 auto; + padding:13px 0 0; + text-indent:-5000px; + width:58px; +} + +#history_stats { padding-top: 16px; } + +.box_fatbottom .left_stats { float: left; } + +.box_fatbottom .right_stats { float: right; } + +.box_fatbottom strong { color: #000; } + +.box_banner_menu { + display: inline; + float: right; + list-style: none; + margin: 10px 0; + padding: 0; +} + + .box_banner_menu li { float: right; } + +/* keep .h_menu_verbose and .h_menu_purge up with the above (buttons top-right of history) */ +.sprite_h_purge { + cursor: pointer; + display: none; + margin: 6px; + padding-bottom: 24px; + padding-right: 28px; +} + +#page-wrap { + clear:both; + margin: 0px auto; + width: 95%; +} + +.box_banner_hr { + background-repeat: repeat-x; + height: 4px; +} + +.box_banner_history { + clear:both; + height:51px; + overflow:hidden; +} + + .box_banner_history h1 { + color: #c7c7c7; + cursor: default; + float: left; + font-weight: normal; + padding:17px 8em 11px 21px; + } + +.box_banner_r { + float:right; + height: 52px; + margin-left: 1px; + width:350px; +} + +#historySearchBox { + color:white; + border:1px solid gray; + width:120px; + margin: 8px 8px 0 0; + padding-right:20px; + background: url('../images/plush-default/viewmag.png') no-repeat top right; + /*background-color: black;*/ + /*background: url('../images/plush-default/sprite-main.png') no-repeat top right; + background-position: 0 -671px;*/ +} + +#hdr-queue { + height: 67px; +} + + #hdr-queue .logo { + float: left; + height: 67px; + } + +#hdr-queue .logo h1 { + color: #c7c7c7; + cursor: default; + font-weight: normal; + margin: 32px 0 0 38px; + width:180px; + overflow:hidden; +} + +#queue-buttons { + float:right; + height:37px; + padding-top:34px; + padding-right:5px; + position:relative; + white-space:nowrap; +} + + #queue-buttons ul { + float:left; + margin-right:24px; + } + + #queue-buttons #pause_int { + color:#ccc; + font-size:small; + padding-right:16px; + position:absolute; + right:104px; + text-indent:0; + top:34px; + } + #queue-buttons ul li { + float: left; + cursor:pointer; + display:block; + height:21px; + position:relative; + text-indent:-5000px; + width:21px; + } + #queue-buttons ul li.sprite_q_queue { + margin-left:10px; + } + + #queue-buttons ul li ul{ /* Second Level */ + border-bottom:2px solid #403f3f; + border-right:2px solid #403f3f; + display:none; + float:left; + height:auto; + right:1px; + margin:0; + position:absolute; + top:21px; + width:200px; + z-index:100; + } + #queue-buttons.lang-nl-du ul li ul{ + width:245px; + } + #queue-buttons.lang-de-de ul li ul, + #queue-buttons.lang-fr-fr ul li ul{ + width:265px; + } + #queue-buttons ul li.sprite_q_queue ul{ + right:0; + } + #queue-buttons ul li ul li{ + background:#1d1c1c; + border-top:1px solid #474646; + clear:left; + height:auto; + margin:0; + text-indent:0; + width:100%; + } + #queue-buttons ul li ul li:first-child{ + border:0; + } + + #queue-buttons ul li ul li a{ + color:#aaa; + clear:left; + float:left; + margin:0; + padding:4px 6px; + text-align:left; + width:188px; + } + #queue-buttons ul li ul li a:hover{ + color:#eee; + } + #queue-buttons ul li.sprite_q_queue ul li a:hover { + text-decoration:none; + } + #queue-buttons ul li ul li #onQueueFinish-option{ + width:130px; + } + #queue-buttons ul li ul li ul, + #queue-buttons ul li.sprite_q_queue ul li ul{ /* Third Level */ + border:0; + position:absolute; + right:200px; + top:0; + } + #queue-buttons.lang-nl-du ul li ul li ul, + #queue-buttons.lang-nl-du ul li.sprite_q_queue ul li ul{ + right:245px; + } + #queue-buttons.lang-de-de ul li ul li ul, + #queue-buttons.lang-de-de ul li.sprite_q_queue ul li ul, + #queue-buttons.lang-fr-fr ul li ul li ul, + #queue-buttons.lang-fr-fr ul li.sprite_q_queue ul li ul{ + right:265px; + } + +#queue-wrap { + padding:0 16px; +} + +#btm-wrapper { + clear: both; + height: 26px; +} + #btm-wrapper div { + background-repeat: no-repeat; + float: left; + height:26px; + width:26px; + } + + #btm-wrapper .sprite_btm_corner_right { + float: right; + } + + +/* --------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------ + + box header, above queue (sabnzbd logo & stats) + +------------------------------------------------------------------------------------------------------------------ +--------------------------------------------------------------------------------------------------------------- */ +.centerpiece { + margin:0 auto; + overflow:hidden; + padding-top:12px; + width:432px; +} + +.sprite_sabnzbdplus_logo { + margin: 10px 0 0; +} + +#queue_logo { + float: left; + height: 40px; + padding-left: 50px; + padding-right: 50px; +} + +#speed, #time-left { + cursor: default; + height: 12px; + margin-top: 20px; + padding: 3px 0px 7px; + text-align: center; + width: 68px; +} + +/* stats next to logo */ +#speed { + float: left; + margin-right: 36px; +} + +#time-left { + float: left; + margin-left: 36px; +} + +#speed p, #time-left p { + color: #7c7c7c; + font-size: 9px; +} + +#speed span, #time-left span { + color: #dadada; + font-size: 11px; + font-weight: bold; +} + +.show { display: inline; } + +/* queueTable shared by queue and history */ +.queueTable { + background-color: #e0e0e0; + border-bottom: 1px solid #fff; + border-collapse: separate; + border-spacing: 0px; + color: #606060; + width: 100%; +} + + .queueTable tr { + background-color: #e0e0e0; + cursor: default; + } + .queueTable tr:hover, + .queueTable tr.alt:hover { + background-color: #f9f9f9; + color: #000; + } + .queueTable tr select { + background: #e5e5e5; + border:1px solid #e0e0e0; + color:#606060; + padding:2px; + } + + .queueTable tr select.hovering { + background:#fff; + border: 1px solid #c0c0c0; + color: #000; + } + + .queueTable tr.alt { + background-color:#d0d0d0; + } + .queueTable tr.alt select { + border:1px solid #d0d0d0; + background: #d5d5d5; + } + .queueTable tr.alt select.hovering { + border:1px solid #b0b0b0; + background: #fff; + } + +#queueTable tr:hover { cursor: move; } + + + +.queueTable td { + border-bottom: 1px solid #B1B1B1; + border-top: 1px solid #FFF; + padding: 3px 0; + vertical-align: middle; +} + +tr:hover .nzb_status_grippie { + background-color: #f9f9f9; /* IE7 */ +} + +.queueTable td.download-title { + width: 50%; +} + +.nzb_status_col { + width: 28px; +} + +.nzb_status { + display: inline; + margin-right: 4px; + padding-bottom: 2px; + padding-left: 16px; +} + + .nzb_status.Loaded { background: url('../images/plush-default/spinner.gif') no-repeat; } + +#queueTable .nzb_status { + cursor: pointer; +} + +.loading { + background: url('../images/plush-default/spinner.gif') 4px 50% no-repeat; + display: inline; + padding-left: 16px; +} + +.queueTable td.historyTitle { + padding:11px 0; + width: 50%; +} + +.queueTable tr:hover td.historyTitle { + background-color: #f9f9f9; /* IE7 */ + color: #000; } + +.queueTable a { + color: #404040;; + text-decoration: none; +} + +.queueTable tr:hover a { color: #000; } + +.queueTable a:hover { + border-bottom: 1px dotted #606060; + cursor: pointer; +} + +.queueTable .eta { + padding-left: 6px; + text-align: center; +} + +.icon_nzb_remove { + display: inline; + padding-bottom: 2px; + padding-left: 16px; +} +.icon_nzb_remove:hover { + outline:none; +} + +.sprite_ql_cross_on { cursor: pointer; } + +/* --------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------ + + Queue + +------------------------------------------------------------------------------------------------------------------ +--------------------------------------------------------------------------------------------------------------- */ +/* progress bar & MB/left stats */ +.sprite_progressbar_bg { + width: 121px; + padding-left:1px; +} + +.sprite_progress_done { + height: 19px; + width: 121px; +} + +.currentDownload, .totalDownload { + color: #000; + font-weight: bold; + margin-top: 3px; + z-index: 1; +} + +.currentDownload small, .totalDownload small { font-weight: normal; } + +.currentDownload { + float: left; + margin-left: 5px; +} + +.totalDownload { + float: right; + margin-right: 5px; +} + +.options { + padding-right: 8px; + text-align: right; +} + +/* below queue, left side, limit */ +#queue_view_preference, #history_view_preference { width: 120px; } + +#queue_view_preference { margin-top: -5px; } + +#stats_noofslots { display: none; } + +/* below queue, right side, disk space */ +.queue_footer_icon { + display: inline; + margin: 16px 4px 0px 20px; + padding: 4px; +} + +/* --------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------ + + History + +------------------------------------------------------------------------------------------------------------------ +--------------------------------------------------------------------------------------------------------------- */ +.history_added { + cursor: default; + font-size: 75%; +} + +tr:hover .history_added { color: black; } + +.hvMessageFail { + clear: both; + color: #DE2424; + font-size: 80%; + font-weight: bold; + width: 100%; +} + +.hvMessageAction { + clear: both; + color: #00008B; + font-size: 80%; + font-weight: bold; + width: 100%; +} + +.hvMessageScript { + clear: both; + color: #006400; + font-size: 80%; + font-weight: bold; + width: 100%; +} + +.icon_history_verbose { + cursor: help; + display: inline; + float: left; + margin-right: 2px; + width: 16px; +} + +.hvFaded { + opacity: .25; + /*-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=25)"; + filter: alpha(opacity=25);*/ +} + +.pointer { cursor: pointer; } + + + +/* --------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------ + + MAIN MENU -- courtesy of jquery superfish plugin + See LICENSE-MIT & LICENSE-GPL + with modifications by jbw + +------------------------------------------------------------------------------------------------------------------ +--------------------------------------------------------------------------------------------------------------- */ + + +#main_menu { + padding-top:10px; + text-align:center; +} + +#main_menu ul { + display:inline-block; + list-style:none; + margin:0 auto; + padding:0; + white-space:nowrap; +} +#main_menu ul li { + float:left; + position:relative; +} +#main_menu ul li a { + display:block; + float:left; + margin:0 10px; + padding:0 20px 0 5px; + cursor:pointer; + position:relative; + text-align:left; + border-bottom:1px; +} +/* refresh button below queue */ +#manual_refresh_wrapper b { font-weight:normal; } +#manual_refresh_wrapper.refreshing b { border-bottom: 1px dotted white; } +#manual_refresh_wrapper.refresh_skipped b { border-bottom: 1px solid red; } + +#main_menu ul li a span { + background: url('../images/plush-default/sprite-main.png') no-repeat center left; + display:block; + height:1.5em; + right:5px; + position:absolute; + text-indent:-5000px; + top:0; + width:10px; +} + + +#main_menu ul li ul{ /* Second Level */ + display:none; + float:left; + height:auto; + left:10px; + margin:0; + position:absolute; + top:21px; + width:200px; + z-index:100; +} + +#main_menu ul li ul li{ + background:#a2a2a2; + border-bottom:1px solid #878787; + clear:left; + float:left; + margin:0; + width:100%; +} + +#main_menu ul li ul li a{ + clear:left; + float:left; + margin:0; + padding:4px 6px; + text-align:left; + width:188px; +} +#main_menu ul li ul li a span { + background: url('../images/plush-default/sprite-main.png') no-repeat top left; + height:auto; + top:32%; +} + +#main_menu ul li ul.config_links li a{ + padding:3px 6px; +} + +#main_menu ul li ul li:hover, +#main_menu ul li ul li ul li:hover { + background:#ccc; + color:#333; +} +#main_menu ul li ul li:hover ul li a { + color:#fff; +} +#main_menu ul li ul li:hover a, +#main_menu ul li ul li ul li:hover a { + text-decoration:none; + color:#333; +} +#main_menu ul li ul li ul{ /* Third Level */ + left:200px; + position:absolute; + top:0; +} +#main_menu ul li ul li ul li{ + width:188px; +} +#main_menu.lang-nl-du ul li ul li ul li, +#main_menu.lang-fr-fr ul li ul li ul li, +#main_menu.lang-sv-se ul li ul li ul li{ + width:250px; +} +#main_menu.lang-de-de ul li ul li ul li{ + width:280px; +} +#main_menu ul li ul li#plushoptions ul li:first-child a, +#main_menu ul li ul li#processingContainer ul li{ + padding:4px 6px; +} +#main_menu ul li ul#navaddnzb{ + width:275px; +} +#main_menu ul li ul#navaddnzb li#navupload, +#main_menu ul li ul li#navfetch{ + padding:10px; + width:255px; +} +#main_menu ul li ul#navaddnzb li#processingContainer a{ + width:255px; +} +#main_menu ul li ul#navaddnzb li#processingContainer ul{ + left:275px; +} + +#main_menu ul li ul li#processingContainer ul li label{ + float:left; + text-align:left; + width:40%; +} +#main_menu ul li ul li#processingContainer ul li select{ + width:60%; +} + +#main_menu ul li ul#navqueue{ + width:230px; +} +#main_menu ul li ul#navqueue li#navqueueoption { + padding:10px; + width:210px; +} +#main_menu ul li ul#navqueue li a{ + width:210px; +} +#main_menu ul li ul#navqueue li ul{ + left:230px; + width:200px; +} + +#main_menu ul li ul#navqueue li ul li a{ + width:180px; +} +#main_menu ul li ul#last_warning_link li{ + min-width: 460px; +} +#main_menu ul li ul#last_warning_link li a{ + min-width: 440px; +} + +#main_menu.lang-fr-fr #addID_input{ + width: 110px; +} + +/* +.sf-shadow ul { if superfish shadows are enabled lets make it happen! + background: url('../images/plush-default/shadow.png') no-repeat bottom right; + padding: 0 8px 9px 0; + -moz-border-radius-bottomleft: 17px; + -moz-border-radius-topright: 17px; + -webkit-border-top-right-radius: 17px; + -webkit-border-bottom-left-radius: 17px; +} +*/ + +#uploadTip { + overflow: hidden; +} + + + +/* + ColorBox Core Style + The following rules are the styles that are consistant between all ColorBox themes +*/ +#colorbox, #cboxOverlay, #cboxWrapper { + left: 0; + overflow: hidden; + position: absolute; + top: 0; + z-index: 9999; +} + +#cboxOverlay { + height: 100%; + position: fixed; + width: 100%; +} + +#cboxMiddleLeft, #cboxBottomLeft { clear: left; } + +#cboxContent { + overflow: visible; + position: relative; +} + +#cboxLoadedContent { overflow: auto; } + + #cboxLoadedContent iframe { + border: 0; + display: block; + height: 100%; + width: 100%; + } + +#cboxTitle { margin: 0; } + +#cboxLoadingOverlay, #cboxLoadingGraphic { + left: 0; + position: absolute; + top: 0; + width: 100%; +} + +#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow { cursor: pointer; } + +/* + ColorBox example user style + These rules are ordered and tabbed in a way that represents the order/nesting of the generated HTML, + in hope that this will make the relationship easier to understand. Thanks, jack@colorpowered.com +*/ +#cboxOverlay { background: #000; } + +#colorbox { } + +#cboxContent { margin-top: 32px; } + +#cboxLoadedContent { + background: #DDD; + padding: 10px; +} + +#cboxLoadedContent a { + color: #00008B; +} + +/*#cboxLoadingGraphic{background:url(images/loading.gif) center center no-repeat;}*/ +#cboxLoadingOverlay { background: #DDD; } + +#cboxTitle { + color: #000; + left: 0; + position: absolute; + top: -22px; +} + +#cboxCurrent { + position: absolute; + right: 205px; + text-indent: -9999px; + top: -22px; +} + +#cboxSlideshow, #cboxPrevious, #cboxNext, #cboxClose { + background: url('../images/plush-default/sprite-jq-colorbox.png') 0 0 no-repeat; + height: 20px; + position: absolute; + text-indent: -9999px; + top: -20px; + width: 20px; +} + +#cboxPrevious { + background-position: 0px 0px; + right: 44px; +} + + #cboxPrevious.hover { background-position: 0px -25px; } + +#cboxNext { + background-position: -25px 0px; + right: 22px; +} + + #cboxNext.hover { background-position: -25px -25px; } + +#cboxClose { + background-position: -50px 0px; + right: 0; +} + + #cboxClose.hover { background-position: -50px -25px; } + +.cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious { right: 66px; } + +.cboxSlideshow_on #cboxSlideshow { + background-position: -75px -25px; + right: 44px; +} + + .cboxSlideshow_on #cboxSlideshow.hover { background-position: -100px -25px; } + +.cboxSlideshow_off #cboxSlideshow { + background-position: -100px 0px; + right: 44px; +} + + .cboxSlideshow_off #cboxSlideshow.hover { background-position: -75px -25px; } + +/* --------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------ + + N Z O (nzb files page, linked from queue) + +------------------------------------------------------------------------------------------------------------------ +--------------------------------------------------------------------------------------------------------------- */ +body.nzo { + background: #ddd; +} + body.nzo .config_nav { + cursor: default; + } + body.nzo #config_content input, + body.nzo .config_nav a { + cursor: pointer; + } + +table.nzoTable { + border-collapse:collapse; + color: #131313; + margin:1px; + width:99%; +} + + table.nzoTable tr { + cursor: pointer; + } + table.nzoTable tr.even { + background-color: #cdf; + } + table.nzoTable tr.evenLine { + background-color: #eee; + } + table.nzoTable tr.odd { + background-color: #99bbff; + } + table.nzoTable tr.oddLine { + background-color: #f8f8f8; + } + table.nzoTable tr.nzo_highlight { + background-color:#FFFFE0; + } + table.nzoTable tr:hover { + background-color: #666; + color: #FFF; + } + + table.nzoTable th { + background: #b5b5b5; + color: white; + cursor: default; + font-weight: bold; + } + + table.nzoTable th, + table.nzoTable td { + border:1px solid #999; + padding:3px 5px; + } + table.nzoTable td.alignRight { + text-align:right; + } + table.nzoTable td.filename { + width:95%; + } + table.nzoTable th.check, + table.nzoTable td.check { + width:22px; + } + +.nzo_save_form { margin-left: 120px; } + + .nzo_save_form div { + display: inline; + white-space: nowrap; + } + +/* --------------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------ + + C O N F I G + +------------------------------------------------------------------------------------------------------------------ +--------------------------------------------------------------------------------------------------------------- */ +#config_container { + background: #bbb; + font-size: 10pt; + min-height: 435px; + padding-left: 20px; + padding: 10px; + text-align: left; +} +#config_content a { + color:#000; + text-decoration:underline; +} +#config_content { + overflow: auto; + width: 100%; +} + #config_content .center { + background:#eee; + border:1px solid #aaa; + padding:5px 7px; + } + #config_content .catheaderinfo { font-weight:bold;} + +#config_go_back { + padding: 1px; + text-align: center; +} + + #config_go_back div { + margin-bottom: -4px; + margin: auto; + padding: 25px 0 4px 20px; + width: 80px; + } + + #config_go_back a { + color: black; + font-size: 66%; + margin-left: -20px; + padding: 30px 10px 0px 40px; + text-decoration: none; + } + + #config_go_back a:hover { border-bottom: 1px dotted black; } + +div.EntryBlock form { display: inline; } +div.EntryBlock { + +} +fieldset.EntryFieldSet { + border:1px solid #333; + display: inline; + float: left; + margin: 5px; + padding: 7px 7px 10px; + vertical-align: top; +} +.add-rss fieldset.EntryFieldSet { + width:97%; +} + .add-rss fieldset.EntryFieldSet .feedname{ + font-weight:bold; + width:20%; + } + .add-rss fieldset.EntryFieldSet .feeduri{ + width:70%; + } + .add-rss fieldset.EntryFieldSet .inputsubmit{ + width:6%; + } + .update-rss fieldset.EntryFieldSet .feeduri{ + width:99%; + } +#catTable { + width:99%; +} + #catTable th, + #catTable td { + padding:3px 3px 5px; + } + #catTable th { + font-weight:bold; + } + #catTable td select { + background:#fff; + padding:3px; + width:100%; + } + #catTable td input { + width:98%; + } + #catTable td input.Add, + #catTable td input.Save{ + font-size:0.8333em; + width:75px; + } + #catTable td input.Delete { + font-size:0.8333em; + width:26px; + } + +#schedulingTable td, #switchesTable td { + padding:3px 3px 5px; +} +.alignRight { + text-align: right; + padding-right: 4px; +} + +.config_nav { + float: left; + margin-top: 20px; + text-align: left; + width: 84px; +} +.config_nav.lang-de-de { + width: 140px; +} + + .config_nav ul { + border: none; + list-style: none; + margin: 0; + padding: 0; + } + + .config_nav li { + margin: 0; + padding: 3px 0px 3px 5px; + } + + .config_nav li a { + background-color: #ddd; + color: #666; + display: block; + font-size: 9pt; + font-weight: bold; + padding: 4px 22px 4px 4px; + text-decoration: none; + width: 100%; + } + + .config_nav li a .config_sprite_container { + margin: 3px 0px 3px 0px; + padding-left: 22px; + padding-bottom: 1px; + width: 100%; + } + + .config_nav li:hover a, .config_nav li a:hover { + background-color: #ccc; + color: #000; + } + + .config_nav .nav_active { + background-color: #bbb; + color: #000; + } + + +legend .config_sprite_container { + display: inline; + padding: 0px 0px 0px 16px; +} + +#config_content legend { + background-color: #333; + color: white; + font-weight: bold; + padding: 2px 6px 2px 6px; +} + +#config_content legend.latestWarnings, +#config_content legend.serverDisabled { background-color:#8B0000; } +#config_content legend.lastEmail, +#config_content legend.serverBackup { background-color:#00008B; } +#config_content legend.serverOptional { background-color:#009090; } +#config_content legend.serverEnabled { background-color:#006400; } + + +/* sprite-config.png */ +.config_sprite_container { background: url('../images/plush-default/sprite-config.png') no-repeat top left; } + +.sprite_config_connections_disconnect { background-position: 0 0; } +.sprite_config_connections_encrypted { background-position: 0 -25px; } +.sprite_config_connections_unencrypted { background-position: 0 -44px; } +.sprite_config_connections_warnings { background-position: 0 -63px; } +.sprite_config_email_account_settings { background-position: 0 -82px; } +.sprite_config_email_options, .sprite_config_nav_email { background-position: 0 -101px; } +.sprite_config_email_test { background-position: 0 -120px; } +.sprite_config_folders_system { background-position: 0 -145px; } +.sprite_config_folders_user { background-position: 0 -164px; } +.sprite_config_general_restart { background-position: 0 -183px; } +.sprite_config_general_tuning { background-position: 0 -208px; } +.sprite_config_general_web_server { background-position: 0 -227px; } +.sprite_config_help { background-position: 0 -246px; } +.sprite_config_indexsites_account_info { background-position: 0 -271px; } +.sprite_config_indexsites_bookmarks { background-position: 0 -290px; } +.sprite_config_indexsites_processed { background-position: 0 -309px; } +.sprite_config_nav_categories { background-position: 0 -328px; } +.sprite_config_nav_connections { background-position: 0 -347px; } +.sprite_config_nav_folders { background-position: 0 -366px; } +.sprite_config_nav_general { background-position: 0 -385px; } +.sprite_config_nav_indexsites { background-position: 0 -404px; } +.sprite_config_nav_rss { background-position: 0 -423px; } +.sprite_config_nav_scheduling, .sprite_config_scheduling_current { background-position: 0 -442px; } +.sprite_config_nav_servers, .sprite_config_servers_add { background-position: 0 -461px; } +.sprite_config_nav_sorting, .sprite_config_sorting_series { background-position: 0 -480px; } +.sprite_config_nav_switches { background-position: 0 -499px; } +.sprite_config_rss_add { background-position: 0 -518px; } +.sprite_config_save { background-position: 0 -537px; } +.sprite_config_scheduling_add { background-position: 0 -562px; } +.sprite_config_sorting_date { background-position: 0 -581px; } +.sprite_config_sorting_generic { background-position: 0 -600px; } +.sprite_config_switches_other { background-position: 0 -619px; } +.sprite_config_switches_processing { background-position: 0 -638px; } +.sprite_nzo_bottom { background-position: 0 -657px; } +.sprite_nzo_delete { background-position: 0 -676px; } +.sprite_nzo_down { background-position: 0 -695px; } +.sprite_nzo_reload { background-position: 0 -714px; } +.sprite_nzo_select_all { background-position: 0 -733px; } +.sprite_nzo_select_invert { background-position: 0 -752px; } +.sprite_nzo_select_none { background-position: 0 -771px; } +.sprite_nzo_select_range { background-position: 0 -790px; } +.sprite_nzo_top { background-position: 0 -809px; } +.sprite_nzo_up { background-position: 0 -828px; } + + +.numbered_list li { list-style-type: decimal; margin-left:3em; } + +/* FF2 to rescue */ +.sucker { + font-weight: bold; + width: 120px; +} + +.tucker { + font-weight: bold; + width: 300px; +} + +.left_links .config_sprite_container, .right_links .config_sprite_container { + display: inline; + margin: 3px 0px 3px 0px; + padding: 4px 0px 4px 22px; +} + +.left_links a, .right_links a { + cursor: pointer; + margin-bottom: 40px; + margin: 10px; + padding: 36px; +} + +.left_links { + float: left; + margin: 5px 0 0 10px; + padding-left: 20px; +} + + .left_links a { + background-color: #ddd; + color: #666; + display: block; + font-size: 9pt; + font-weight: bold; + padding: 2px 5px; + text-decoration: none; + } + + .left_links a:hover { + background-color: #bbb; + color: #000; + } + +.config_margin { margin: 5px 10px 0 110px; } +.config_margin.lang-de-de { margin: 5px 10px 0 140px; } + +.right_links { + float: right; + margin: 5px 40px 0 0; +} + + .right_links a { + background-color: #ddd; + color: #666; + display: block; + font-size: 9pt; + font-weight: bold; + padding: 2px 5px; + text-decoration: none; + } + + .right_links a:hover { + background-color: #bbb; + color: #000; + } + +.center { text-align: center; } + +.xsmall { font-size: x-small; } + +.config_body { background: #ddd; } + +#configbox_latest_warnings a { color: white; } + +.dir_helper { + background-color: blue; + color: white; + padding:2px; +} + +.manual_restart { + background-color: red; + color: white; + padding:2px; +} + +.optional { + background-color: green; + color: white; +} + +.key_toggle { + background-color: #333; + color: white; + cursor: pointer; +} + +*+html { + overflow-x:visible; +} diff --git a/interfaces/smpl/CreativeCommons2-5.txt b/interfaces/smpl/CreativeCommons2-5.txt new file mode 100644 index 0000000..cd98301 --- /dev/null +++ b/interfaces/smpl/CreativeCommons2-5.txt @@ -0,0 +1,65 @@ +Creative Commons Attribution 2.5 License + +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + 1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. + 2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License. + 3. "Licensor" means the individual or entity that offers the Work under the terms of this License. + 4. "Original Author" means the individual or entity who created the Work. + 5. "Work" means the copyrightable work of authorship offered under the terms of this License. + 6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + +2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + 1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works; + 2. to create and reproduce Derivative Works; + 3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works; + 4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works. + 5. + + For the avoidance of doubt, where the work is a musical composition: + 1. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work. + 2. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions). + 6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions). + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + 1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(b), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by clause 4(b), as requested. + 2. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + 1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. + +Creative Commons may be contacted at http://creativecommons.org/. diff --git a/interfaces/smpl/CreativeCommons3-0.txt b/interfaces/smpl/CreativeCommons3-0.txt new file mode 100644 index 0000000..c5d01b9 --- /dev/null +++ b/interfaces/smpl/CreativeCommons3-0.txt @@ -0,0 +1,76 @@ +Creative Commons Attribution 3.0 Unported License + +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. +DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. +CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. +CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, +AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + 4. to Distribute and Publicly Perform Adaptations. + 5. + + For the avoidance of doubt: + 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. + 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. + + Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License. + + Creative Commons may be contacted at http://creativecommons.org/. diff --git a/interfaces/smpl/GPL2.txt b/interfaces/smpl/GPL2.txt new file mode 100644 index 0000000..f90922e --- /dev/null +++ b/interfaces/smpl/GPL2.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/interfaces/smpl/GPL3.txt b/interfaces/smpl/GPL3.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/interfaces/smpl/GPL3.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/interfaces/smpl/LICENCE-silk_icons.txt b/interfaces/smpl/LICENCE-silk_icons.txt new file mode 100644 index 0000000..d7fc371 --- /dev/null +++ b/interfaces/smpl/LICENCE-silk_icons.txt @@ -0,0 +1,49 @@ +For: +interfaces\smpl\templates\static\images\control_pause.png +interfaces\smpl\templates\static\images\control_play.png +interfaces\smpl\templates\static\images\drive.png +interfaces\smpl\templates\static\images\drive_go.png +interfaces\smpl\templates\static\images\bullet_arrow_down.png + +======================================================================= + +Silk icon set 1.3 +_______________________________________ +Mark James +http://www.famfamfam.com/lab/icons/silk/ +_________________________________________ + +This work is licensed under a +Creative Commons Attribution 2.5 License. +[ http://creativecommons.org/licenses/by/2.5/ ] + +This means you may use it for any purpose, +and make any changes you like. +All I ask is that you include a link back +to this page in your credits. + +Are you using this icon set? Send me an email +(including a link or picture if available) to +mjames@gmail.com + +Any other questions about this icon set please +contact mjames@gmail.com + +======================================================================= +The website states the following: + +License + +I also love to hear of my work being used, feel encouraged to send an email with a link +or screenshot of the icons in their new home to mjames at gmail dot com. +This work is licensed under a Creative Commons Attribution 2.5 License. +This means you may use it for any purpose, and make any changes you like. +All I ask is that you include a link back to this page in your credits +(although a giant link on every page of your website really isn't needed, contact me to discuss specifics). + +The icons can also be used under Creative Commons Attribution 3.0 License (Hi Debian folks!) +with the following requirements: + + As an author, I would appreciate a reference to my authorship of the Silk icon set + contents within a readme file or equivalent documentation for the software which + includes the set or a subset of the icons contained within. diff --git a/interfaces/smpl/LICENSE.txt b/interfaces/smpl/LICENSE.txt new file mode 100644 index 0000000..261a33f --- /dev/null +++ b/interfaces/smpl/LICENSE.txt @@ -0,0 +1,17 @@ +(c) Copyright 2007-2010 by "The SABnzbd-team" + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +See accompanying files GPL2.txt and GPL3.txt. \ No newline at end of file diff --git a/interfaces/smpl/License-ExCanvas.txt b/interfaces/smpl/License-ExCanvas.txt new file mode 100644 index 0000000..efb618f --- /dev/null +++ b/interfaces/smpl/License-ExCanvas.txt @@ -0,0 +1,220 @@ +ExplorerCanvas is developed by: + +Google Open Source: + + + +Developers: + Emil A Eklund + Erik Arvidsson + Glen Murphy + +The home of the kit is: http://excanvas.sourceforge.net + +It is covered by the following licenses: + + +-------------------------------------------------------------------------------------------- + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +-------------------------------------------------------------------------------------------- diff --git a/interfaces/smpl/License-MochiKit.txt b/interfaces/smpl/License-MochiKit.txt new file mode 100644 index 0000000..ec1003d --- /dev/null +++ b/interfaces/smpl/License-MochiKit.txt @@ -0,0 +1,77 @@ +The MochiKit is developed by Bob Ippolito (Mochi Media, Inc.). +Parts are written by Jonathan Gardner and Beau Hartshorne. + +The home of this kit is: http://www.mochikit.com/ + +It is covered by the following license: + +---------------------------------------------------------------------------------------- +MochiKit is dual-licensed software. It is available under the terms of the +MIT License, or the Academic Free License version 2.1. The full text of +each license is included below. + +MIT License +=========== + +Copyright (c) 2005 Bob Ippolito. All rights reserved. + +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. + + +Academic Free License v. 2.1 +============================ + +Copyright (c) 2005 Bob Ippolito. All rights reserved. + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work: + +Licensed under the Academic Free License version 2.1 + +1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following: + +a) to reproduce the Original Work in copies; + +b) to prepare derivative works ("Derivative Works") based upon the Original Work; + +c) to distribute copies of the Original Work and Derivative Works to the public; + +d) to perform the Original Work publicly; and + +e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license. + +5) This section intentionally omitted. + +6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. + +9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. + +10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License. + +12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + +13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner. + + + diff --git a/interfaces/smpl/License-Nuvola.txt b/interfaces/smpl/License-Nuvola.txt new file mode 100644 index 0000000..094c6fa --- /dev/null +++ b/interfaces/smpl/License-Nuvola.txt @@ -0,0 +1,573 @@ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +This copyright and license notice covers the following images in the +directory templates/static/images: + kgpg.png + messagebox_critical.png + browser.png + +Note the license notice contains an add-on. +************************************************************************ + +TITLE: NUVOLA ICON THEME for KDE 3.x +AUTHOR: David Vignoni | ICON KING +SITE: http://www.icon-king.com +MAILING LIST: http://mail.icon-king.com/mailman/listinfo/nuvola_icon-king.com + +Copyright (c) 2003-2004 David Vignoni. + +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, +version 2.1 of the License. +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 (see the the Nuvola-license.txt file); if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#######**** NOTE THIS ADD-ON ****####### +The GNU Lesser General Public License or LGPL is written for software libraries +in the first place. The LGPL has to be considered valid for this artwork +library too. +Nuvola icon theme for KDE 3.x is a special kind of software library, it is an +artwork library, it's elements can be used in a Graphical User Interface, or +GUI. +Source code, for this library means: + - raster png image* . +The LGPL in some sections obliges you to make the files carry +notices. With images this is in some cases impossible or hardly usefull. +With this library a notice is placed at a prominent place in the directory +containing the elements. You may follow this practice. +The exception in section 6 of the GNU Lesser General Public License covers +the use of elements of this art library in a GUI. +dave [at] icon-king.com + +Date: 15 october 2004 +Version: 1.0 + +DESCRIPTION: + +Icon theme for KDE 3.x. +Icons where designed using Adobe Illustrator, and then exported to PNG format. +Icons shadows and minor corrections were done using Adobe Photoshop. +Kiconedit was used to correct some 16x16 and 22x22 icons. + +LICENSE + +Released under GNU Lesser General Public License (LGPL) +Look at the Nuvola-license.txt file. + +CONTACT + +David Vignoni +e-mail : david [at] icon-king.com +ICQ : 117761009 +http: http://www.icon-king.com + + +Nuvola-license.txt +------------------------------------------------------------------------------------------ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + +------------------------------------------------------------------------------------------ diff --git a/interfaces/smpl/License-PlotKit.txt b/interfaces/smpl/License-PlotKit.txt new file mode 100644 index 0000000..7b80e4a --- /dev/null +++ b/interfaces/smpl/License-PlotKit.txt @@ -0,0 +1,37 @@ +The PlotKit is developed by Alastair Tse. + +The home of the kit is: http://www.liquidx.net/plotkit + +Parts are taken from MochiKit and exCanvas. +For copyright and licenses of these parts see: +License-MochiKit.txt +License-ExCanvas.txt + +PlotKit is covered by the following license. + +-------------------------------------------------------------------------------------------- +PlotKit is copyright (c) 2006 Alastair Tse. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------------------- diff --git a/interfaces/smpl/License-getElementPosition.txt b/interfaces/smpl/License-getElementPosition.txt new file mode 100644 index 0000000..59032e8 --- /dev/null +++ b/interfaces/smpl/License-getElementPosition.txt @@ -0,0 +1,39 @@ +The function getElementPosition in templates/static/MochiKit/MochiKit.js is +is adapted from YAHOO.util.Dom.getXY v0.9.0. +Copyright: Copyright (c) 2006, Yahoo! Inc. All rights reserved. + +It is covered by the following license. + +-------------------------------------------------------------------------------- +License: BSD, http://developer.yahoo.net/yui/license.txt +Software License Agreement (BSD License) + +Copyright (c) 2006, Yahoo! Inc. +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Yahoo! Inc. nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of Yahoo! Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- diff --git a/interfaces/smpl/README.txt b/interfaces/smpl/README.txt new file mode 100644 index 0000000..6a10c56 --- /dev/null +++ b/interfaces/smpl/README.txt @@ -0,0 +1,66 @@ +SMPL - Simple web-iu by switch - switch@sabnzbd.org + +SMPL is licenced under the Creative Commons Public Licence. +Please see LICENCE.txt or http://creativecommons.org/licenses/by/3.0/ for more information +------------------------ +v1.2 + +Install Instructions +------------------------ +-Go to the General config page in sabnzbd eg 'http://localhost:8080/sabnzbd/config/general/' +-select 'smpl' from the dropdown list under User interface: +-restart sabnzbd to see the new template +-If you notice any weird graphical stuff, press ctrl+f5 on your keyboard to force a refresh of the page without cache + + + +Credits +------------------------ +Javascript library - Mochikit http://www.mochikit.com/ +Javascript canvas library - Plotkit http://www.liquidx.net/plotkit/ +Canvas IE support - Excanvas http://sourceforge.net/projects/excanvas/ +Silk icons - http://www.famfamfam.com/lab/icons/silk/ + + +Changelog +------------------------ +1.0+1.1 +------------- +-Added newzbin config page +-Allow displaying of warnings in connection page +-Added Time-left + Speed/Paused/Idle to the title of the browser tab/window. +-Added: Combined queue+history views +-Fixed: Various stuff + +beta4 +------------- +-rewritten all javascript +-added ajax form submitting +-added drop down list for a changable refresh rate +-fixed graph updating, now shows correct values and works in IE7 +-retrieves info from the new JSON api +-Upgraded to Mochikit 1.4 +-removed top progressbar from queue and changed delete link to be an icon. +-redesigned forms to look prettier on firefox2 as well. +-lots of small fixes for various browsers. +-includes links for the latest log downloading, and email testing. +-added the current download below the graph. +-added a simple link at the bottom of the page to function as a version checker. + +beta 3.1 +------------- +-added purge history and toggle verbosity to history page + +beta3 +------------- +-Added sort, verbosity and shutdown toggles +-Styled verbosity view +-Changed the way queue stuff submits so it should keep refreshing +-Added 'age' to queue, will try to condense it to show just days +-forced main page forms elements to each be on their own line +-added help pages that link to the wiki like in the default template + + +TODO: +------------------------ +-Make it standards compliant. diff --git a/interfaces/smpl/language/de-de.txt b/interfaces/smpl/language/de-de.txt new file mode 100644 index 0000000..0c7a479 --- /dev/null +++ b/interfaces/smpl/language/de-de.txt @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Deutschland # Deutsch +# Translation by Severin Heiniger + +thisWeek In dieser Woche +thisMonth In diesem Monat +size Grösse +links Links +first Anfang +previous Zurück +next Weiter +last Ende +edit Bearbeiten +editDetails Details bearbeiten +showEdit Bearbeitungs-Einstellungen anzeigen +hideEdit Bearbeitungs-Einstellungen verbergen +timeleft Verbleibend +purgeQueue Alle löschen +progress Fortschritt +delete Löschen +downloading Am herunterladen +idle Leerlauf +paused Angehalten +emailsent E-Mail gesendet! +saving Speichern... +saved Gespeichert +failed Fehlgeschlagen +speed Geschwindigkeit +toggleadd NZB hinzufügen +refresr Aktualisierungsrate +restartOK? Möchten Sie SABnzbd wirklich neu starten? +warnings Warnungen +getbookmarks Lesezeichen abrufen +purgefailhistOK? Möchten Sie alle fehlergeschlagenen Downloads aus dem Verlauf löschen? +purgehist Alle löschen +purgefailhist Fehlgeschlagene Downloads löschen +path Pfad +age Alter +speed Geschwindigkeit +numresults@3 Einträge %s bis %s von insgesamt %s werden angezeigt +oneresult Ein Eintrag wird angezeigt +noresult Keine Einträge +custom Benutzerdefiniert +dualView1 DualView 1 +dualView2 DualView 2 +eta ETA +refreshr Aktualisierungsrate +hourmin Stunde:Min diff --git a/interfaces/smpl/language/fr-fr.txt b/interfaces/smpl/language/fr-fr.txt new file mode 100644 index 0000000..d1af553 --- /dev/null +++ b/interfaces/smpl/language/fr-fr.txt @@ -0,0 +1,47 @@ +# -*- coding: latin-1 -*- +# France # Français + +thisWeek Semaine +thisMonth Mois +size Taille +links Liens +first Premier +previous Préc. +next Suiv. +last Dernier +edit Editer +editDetails Editer Détails +showEdit Afficher Options Edition +hideEdit Cacher Options Edition +timeleft Temps Restant +purgeQueue Supprimer Tout +progress Progression +delete Supprimer +downloading Téléchargement en cours +idle En attente +paused En pause +emailsent Email Envoyé ! +saving Enregistrement.. +saved Enregistré +failed Echoué +speed Vitesse +toggleadd Afficher / Cacher Ajout NZB +refresr Délai Rafraîchissement +restartOK? Etes-vous sûr de vouloir redémarrer SABnzbd? +warnings Avertissements +getbookmarks Récupérer Favoris +purgefailhistOK? Supprimer tous les éléments échoués de l'historique ? +purgehist Supprimer Tous +purgefailhist Supprimer Echoués +path Chemin +age Age +speed Vitesse +numresults@3 Affiche %s de %s sur %s résultats +oneresult Affiche 1 résultat +noresult Pas de résultats +custom Personnalisé +dualView1 VueDuoV +dualView2 VueDuoH +eta TRE +refreshr Rafraîchissement +hourmin Heure:Min diff --git a/interfaces/smpl/language/nl-du.txt b/interfaces/smpl/language/nl-du.txt new file mode 100644 index 0000000..0dcfe5b --- /dev/null +++ b/interfaces/smpl/language/nl-du.txt @@ -0,0 +1,46 @@ +# -*- coding: UTF-8 -*- +# Nederland # Nederlands + +thisWeek Deze week +thisMonth Deze maand +size Omvang +links Links +first Eerste +previous Vorige +next Volgende +last Laatste +edit Bewerk +editDetails Bewerk details +showEdit Toon Opties +hideEdit Verberg Opties +timeleft Te gaan +purgeQueue Alles wissen +progress Voortgang +delete Verwijder +downloading Downloaden +idle Rust +paused Pauze +emailsent Email verzonden! +saving Opslaan.. +saved Opgeslagen +failed Mislukt +speed Snelheid +toggleadd Wissel "NZB toevoegen" +refresr Verversingstempo +restartOK? Weet je zeker dat je SABnzbd wilt herstarten? +warnings Meldingen +getbookmarks Bookmarks ophalen +purgefailhistOK? Verwijder alle mislukte items uit de Geschiedenis? +purgehist Verwijder alles +purgefailhist Verwijder alle mislukte items +path Pad +age Leeftijd +numresults@3 Toon %s t/m %s van %s resultaten +oneresult Toon 1 resultaat +noresult Geen resultaten +custom Aangepast +dualView1 Dubbel1 +dualView2 Dubbel2 +eta ETA +refreshr Verversen +hourmin Uur:Min diff --git a/interfaces/smpl/language/sv-se.txt b/interfaces/smpl/language/sv-se.txt new file mode 100644 index 0000000..3fc8f2d --- /dev/null +++ b/interfaces/smpl/language/sv-se.txt @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Sverige # Svenska +# Translation by "Kristoffer (Malmis) Malmström" + +thisWeek Denna vecka +thisMonth Denna mÃ¥nad +size Storlek +links Länkar +first Första +previous Prev +next Nästa +last Sista +edit Ändra +editDetails Ändra uppgifter +showEdit Visa Redigeringsalternativ +hideEdit Dölj Redigeringsalternativ +timeleft Ã…terstÃ¥ende tid +purgeQueue Ta bort alla +progress Arbetar +delete Ta bort +downloading Laddar ner +idle Väntar +paused Pausad +emailsent Skickat E-mail! +saving Sparar.. +saved Sparad +failed Misslyckades +speed Hastighet +toggleadd Visa/Dölj Lägg till NZB +refresr Uppdateringsfrekvens +restartOK? Är du säker pÃ¥ att du vill starta om SABnzbd? +warnings Varningar +getbookmarks Hämta bokmärken +purgefailhistOK? Ta bort alla felaktiga saker frÃ¥n historiken? +purgehist Ta bort alla +purgefailhist Ta bort felaktiga saker +path Genväg +age Ã…lder +speed Hastighet +numresults@3 Visar %s till %s av %s resultat +oneresult Visar 1 resultat +noresult Inga resultat +custom Anpassa +dualView1 Flerskärm1 +dualView2 Flerskärm2 +eta ETA +refreshr Uppdateringsfrekvens +hourmin Timme:Minut diff --git a/interfaces/smpl/language/us-en.txt b/interfaces/smpl/language/us-en.txt new file mode 100644 index 0000000..1f7fe4c --- /dev/null +++ b/interfaces/smpl/language/us-en.txt @@ -0,0 +1,47 @@ +# -*- coding: latin-1 -*- +# United States # English + +thisWeek This week +thisMonth This month +size Size +links Links +first First +previous Prev +next Next +last Last +edit Edit +editDetails Edit Details +showEdit Show Edit Options +hideEdit Hide Edit Options +timeleft Timeleft +purgeQueue Delete All +progress Progress +delete Delete +downloading Downloading +idle Idle +paused Paused +emailsent Email Sent! +saving Saving.. +saved Saved +failed Failed +speed Speed +toggleadd Toggle Add NZB +refresr Refresh Rate +restartOK? Are you sure you want to restart SABnzbd? +warnings Warnings +getbookmarks Get Bookmarks +purgefailhistOK? Delete the all failed items from the history? +purgehist Delete All +purgefailhist Delete Failed Items +path Path +age Age +speed Speed +numresults@3 Showing %s to %s out of %s results +oneresult Showing 1 result +noresult No results +custom Custom +dualView1 DualView1 +dualView2 DualView2 +eta ETA +refreshr Refresh rate +hourmin Hour:Min diff --git a/interfaces/smpl/templates/config.tmpl b/interfaces/smpl/templates/config.tmpl new file mode 100644 index 0000000..a1916dd --- /dev/null +++ b/interfaces/smpl/templates/config.tmpl @@ -0,0 +1,5 @@ +

      Configuration

      +

      +Configfile: $configfn +

      + diff --git a/interfaces/smpl/templates/config_cat.tmpl b/interfaces/smpl/templates/config_cat.tmpl new file mode 100644 index 0000000..32690d4 --- /dev/null +++ b/interfaces/smpl/templates/config_cat.tmpl @@ -0,0 +1,86 @@ +
      Help +

      $T('configCat')

      +
      +$T('explain-configCat').
      + + $T('explain-catNewzbin').
      + +
      + $T('link-initCat')

      + + +
      +$T('explain-relFolder') $defdir
      +
      + + + + + + + + + + + + + + + + + "> + + + + + + + + + + + + + + + + + + + + + + +
      $T('category')$T('mode')$T('priority')$T('script')$T('catFolderPath')$T('catGroups')
      + + + + + + + + + +
      \ No newline at end of file diff --git a/interfaces/smpl/templates/config_directories.tmpl b/interfaces/smpl/templates/config_directories.tmpl new file mode 100644 index 0000000..43df34a --- /dev/null +++ b/interfaces/smpl/templates/config_directories.tmpl @@ -0,0 +1,86 @@ + +Help +

      $T('folderConfig')

      + + +
      +
      + User Folders +
      +$T('explain-folderConfig') +
      +
      + + + $T('explain-download_dir') +
      + + + + $T('explain-download_free') +
      + + + + $T('explain-complete_dir') +
      + + + + + $T('explain-permissions') +
      + + + + + $T('explain-dirscan_dir') +
      + + + + $T('explain-dirscan_speed') +
      + + + + $T('explain-script_dir') +
      + + + + $T('explain-email_dir') +
      + +
      +
      +System Folders +
      +$T('systemFolders')
      +$T('in') "$my_lcldata"
      +

      + + + + $T('explain-cache_dir') +
      + + + + $T('explain-log_dir') +
      + + + + $T('explain-nzb_backup_dir') +
      + + +
      + + +

      + +
      + + diff --git a/interfaces/smpl/templates/config_email.tmpl b/interfaces/smpl/templates/config_email.tmpl new file mode 100644 index 0000000..5e14021 --- /dev/null +++ b/interfaces/smpl/templates/config_email.tmpl @@ -0,0 +1,77 @@ + +Help

      $T('configEmail')

      +
      +
      +
      +$T('emailOptions') +
      + + + $T('opt-email_endjob'): + /> $T('email-never') + /> $T('email-always') + /> $T('email-errorOnly') + $T('opt-email_endjob') +
      + + +
      + + + +
      + + + + + + $T('explain-email_dir') +
      + +
      + +
      +$T('emailAccount') +
      + + + + + + $T('explain-email_server'). +
      + + + + + $T('explain-email_to'). +
      + + + + $T('explain-email_from'). +
      + + + + $T('explain-email_account'). +
      + + + + $T('explain-email_pwd'). +
      + +
      +
      + +

      + +

      +
      +Test E-Mail +
      \ No newline at end of file diff --git a/interfaces/smpl/templates/config_general.tmpl b/interfaces/smpl/templates/config_general.tmpl new file mode 100644 index 0000000..45f5f00 --- /dev/null +++ b/interfaces/smpl/templates/config_general.tmpl @@ -0,0 +1,147 @@ + +Help

      $T('generalConfig')

      +
      + +
      +$T('webServer') ($T('restartRequired')) +
      + + + $T('explain-host') +
      + + + + $T('explain-port') +
      + + + + + $T('explain-web_dir') +
      + + + + $T('explain-web_dir2') +
      + + + + $T('explain-language') +
      + + + $T('explain-apikey') +
      + + +
      + + + 0 then "checked=1" else ""#--> /> + $T('explain-disableApikey') $T('explain-disableApikeyWarn') +
      + +
      +
      +$T('webAuth') +
      + + + $T('explain-web_username') +
      + + + + $T('explain-web_password') +
      + +
      +
      +$T('httpsSupport') ($T('restartRequired')) +
      + + +
      + + + + $T('explain-https_port') +
      + + + + $T('explain-https_cert') +
      + + + + $T('explain-https_key') +
      + +
      + +
      +$T('tuning') +
      + + + + $T('explain-refresh_rate') +
      + + + + $T('explain-rss_rate') +
      + + + + $T('explain-bandwidth_limit') +
      + + + + $T('explain-cache_limitstr') +
      + + + + $T('explain-cleanup_list') +
      + + +
      + + +

      + +

      +
      diff --git a/interfaces/smpl/templates/config_newzbin.tmpl b/interfaces/smpl/templates/config_newzbin.tmpl new file mode 100644 index 0000000..2c9230f --- /dev/null +++ b/interfaces/smpl/templates/config_newzbin.tmpl @@ -0,0 +1,92 @@ +Help

      Newzbin

      +
      + +$T('explain-newzbin')
      +
      +
      + + +
      +$T('accountInfo') +
      + + + $T('explain-username_newzbin') +
      + + + + + $T('explain-password_newzbin') +
      +
      + + +
      +$T('newzbinBookmarks') +
      + + +
      + + +
      + + + + $T('explain-bookmark_rate'). +
      +
      + +$T('link-getBookmarks') + + $T('link-HideBM') + + $T('link-ShowBM') + + + +
      +$T('processedBM') +
      + + $msgid  + +
      +
      + + + +
      + +

      +

      NzbMatrix


      + +$T('explain-nzbmatrix')
      +
      +
      + + +
      +$T('accountInfo') +
      + + + $T('explain-username_matrix') +
      + + + + + $T('explain-apikey_matrix') +
      +
      + +

      + +

      + diff --git a/interfaces/smpl/templates/config_rss.tmpl b/interfaces/smpl/templates/config_rss.tmpl new file mode 100644 index 0000000..f57e52b --- /dev/null +++ b/interfaces/smpl/templates/config_rss.tmpl @@ -0,0 +1,206 @@ + + +Help

      $T('configRSS')

      + +
      +
      +$T('newFeedURI') + + + + +
      +
      + +

      $T('explain-RSS')

      + + +
      + >/> + $T('feed') $feed +
      +
      + + + + + +

      + + + + + + + + + + + />Scheduled --> + + +
      + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              $T('rss-order')$T('rss-type')$T('rss-filter') $T('category') Mode $T('script')         
      + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + +
      + +


      + diff --git a/interfaces/smpl/templates/config_scheduling.tmpl b/interfaces/smpl/templates/config_scheduling.tmpl new file mode 100644 index 0000000..e317da2 --- /dev/null +++ b/interfaces/smpl/templates/config_scheduling.tmpl @@ -0,0 +1,69 @@ +Help +

      $T('configSchedule')

      +
      +
      +
      +$T('addSchedule') +
      +
      + <%import time +t = time.localtime() +hour = t[3] +if hour != 23: + hour += 1 +else: + hour = 0 %> + + +: + +
      + + +
      + + +
      + + +
      +

      + +

      +
      +
      +
      +

      $T('currentSchedules'):


      +
      + + +
      + +$T('sch-task') $taskinfo[$schednum][0]: $taskinfo[$schednum][1]:$taskinfo[$schednum][2] - $taskinfo[$schednum][3] - $taskinfo[$schednum][4] + + + +
      + +
      diff --git a/interfaces/smpl/templates/config_server.tmpl b/interfaces/smpl/templates/config_server.tmpl new file mode 100644 index 0000000..72b8555 --- /dev/null +++ b/interfaces/smpl/templates/config_server.tmpl @@ -0,0 +1,102 @@ + +Help +

      $T('configServer')

      +
      + + + +
      +
      +
      + $server +
      + +
      + +
      + +
      + +
      + +
      + +
      + +
      + + +
      + + +
      + + +
      + +
      $T('srv-testHint')
      + + + +

      +
      + +

      +
      +

      +
      + +
      +
      +
      + $T('addServer') +
      + + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + +

      + +

      + +
      +

      + +
      \ No newline at end of file diff --git a/interfaces/smpl/templates/config_sorting.tmpl b/interfaces/smpl/templates/config_sorting.tmpl new file mode 100644 index 0000000..f97f098 --- /dev/null +++ b/interfaces/smpl/templates/config_sorting.tmpl @@ -0,0 +1,279 @@ + +Help

      $T('configSort')

      + +
      +
      +
      + +$T('seriesSorting') +
      + + +
      + + +
      + [$T('sort-legenda')] +
      +
      + $T('sort-meaning') + $T('sort-pattern') + $T('sort-result') +
      +
      + $T('show-name') + %sn + $T('show-sp-name') +
      + %s.n + $T('show-dot-name') +
      + %s_n + $T('show-us-name') +
      +
      + $T('show-seasonNum') + %s + 1 +
      + %0s + 01 +
      +
      + $T('show-epNum') + %e + 5 +
      + %0e + 05 +
      +
      + $T('ep-name') + %en + $T('ep-sp-name') +
      + %e.n + $T('ep-dot-name') +
      + %e_n + $T('ep-us-name') +
      +
      + $T('fileExt') + %ext + avi +
      +
      + $T('orgFilename') + %fn + $T('sort-File') +
      +
      + $T('lowercase') + {$T('TEXT')} + $T('text') +
      + +


      + +
      + + + + +
      + $T('example'): +

      +
      + +
      +$T('genericSort') +
      + +
      + +
      + + +
      + [$T('sort-legenda')] +
      +
      + $T('sort-meaning') + $T('sort-pattern') + $T('sort-result') +
      +
      + $T('sort-title') + %title + $T('movie-sp-name') +
      + %.title + $T('movie-dot-name') +
      + %_title + $T('movie-us-name') +
      +
      + $T('year') + %y + 2000 +
      +
      + $T('extension') + %ext + avi +
      +
      + $T('partNumber') + %1 + 1 +
      +
      + $T('decade') + %decade + 00 +
      +
      + $T('decade') + %0decade + 2000 +
      +
      + $T('orgFilename') + %fn + $T('sort-File') +
      +
      + $T('lowercase') + {$T('TEXT')} + $T('text') +
      +


      + +
      + +
      + + +
      + $T('example'): +

      +
      + +
      +
      +$T('dateSorting') +
      + +
      + + +
      + [$T('sort-legenda')] +
      +
      + $T('sort-meaning') + $T('sort-pattern') + $T('sort-result') +
      +
      + $T('show-name') + %t + $T('show-sp-name') +
      + %.t + $T('show-dot-name') +
      + %_t + $T('show-us-name') +
      +
      + $T('year') + %y + 2009 +
      +
      + $T('month') + %m + 1 +
      + %0m + 01 +
      +
      + $T('day-of-month') + %d + 2 +
      + %0d + 02 +
      +
      +
      + $T('decade') + %decade + 00 +
      +
      + $T('decade') + %0decade + 2000 +
      +
      + $T('orgFilename') + %fn + $T('sort-File') +
      +
      + $T('lowercase') + {$T('TEXT')} + $T('text') +
      +


      + +
      + + + +
      + $T('example'): + +
      + + +

      + +
      + + diff --git a/interfaces/smpl/templates/config_switches.tmpl b/interfaces/smpl/templates/config_switches.tmpl new file mode 100644 index 0000000..02002e1 --- /dev/null +++ b/interfaces/smpl/templates/config_switches.tmpl @@ -0,0 +1,185 @@ + +Help +

      $T('switchesConfig')

      +
      +
      +
      + $T('processingSwitches') +
      + + $T('explain-quick_check') +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + $T('opt-dirscan_opts'): + /> $T('none') + /> $T('pp-repair') + /> $T('pp-unpack') + /> $T('pp-delete') + $T('explain-dirscan_opts') +
      + + $T('opt-dirscan_script'): + + $T('explain-dirscan_script') +
      + + $T('opt-dirscan_priority'): + + $T('explain-dirscan_priority') +
      + + + +
      + + + $T('opt-par_option'): + + $T('explain-par_option') +
      + + + $T('opt-nice'): + + $T('explain-nice') +
      + + + + $T('opt-ionice'): + + $T('explain-ionice') +
      + + +
      +
      + $T('otherSwitches') +
      + + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + + $T('explain-pause_on_post_processing') +
      + + $T('opt-ignore_samples'): + /> $T('igsam-off') + /> $T('igsam-del') + /> $T('igsam-not') + $T('explain-ignore_samples') +
      + + $T('opt-ssl_type'): + + $T('explain-ssl_type') +
      + +
      + + +

      + +

      +
      +
      diff --git a/interfaces/smpl/templates/connection_info.tmpl b/interfaces/smpl/templates/connection_info.tmpl new file mode 100644 index 0000000..8c043d0 --- /dev/null +++ b/interfaces/smpl/templates/connection_info.tmpl @@ -0,0 +1,46 @@ + +

      $T('connections')

      +$T('link-forceDisc') | +$T('link-testEmail') | +$T('link-showLog') | +$T('link-showWeblog') +$T('logging'): + + +
        + +
      • + $server[0]:$server[1]: $server[2] + + + ($T('server-blocked')) +   $server[6] + + +
          + +
        • Thread #$thrd[0] -> $thrd[1] -> $thrd[2] -> $thrd[3]
        • + +
        +
      • + +
      + + +

      $T('emailResult')

      + $lastmail + + +

      $T('lastWarnings') ($T('clearWarnings'))

      + + $warn
      + + diff --git a/interfaces/smpl/templates/history.tmpl b/interfaces/smpl/templates/history.tmpl new file mode 100644 index 0000000..d90dc6c --- /dev/null +++ b/interfaces/smpl/templates/history.tmpl @@ -0,0 +1,147 @@ +

      $T('menu-history') rss

      + + + + +<% import time %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      $T('name')$T('smpl-links')$T('smpl-size')$T('status')
      + + $line.name - $line.action_line - $line.fail_message + + + + + + + $line.size$T('post-'+$line.status)
      + <% +completed = time.localtime(float(line['completed'])) +t = time.strftime("%H:%M:%S on %A %d %B %Y", completed) + + %> +
      + Completed at $t +
      + + $T('stage-'+$stage.name.title.lower()):
      + + $item
      + + + + $T('category'):
      + $line.category
      + + + $T('smpl-path'):
      + $line.storage + +
      + +
      +
      + +
      + +$T('smpl-noresult') + +$T('smpl-oneresult') + + + + + + + + + + + + + + + + $numres + +
      + + diff --git a/interfaces/smpl/templates/main.tmpl b/interfaces/smpl/templates/main.tmpl new file mode 100644 index 0000000..631c251 --- /dev/null +++ b/interfaces/smpl/templates/main.tmpl @@ -0,0 +1,1239 @@ + + + + + + + SABnzbd+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + +
      + + +
      +
      +
      + +
      + + diff --git a/interfaces/smpl/templates/nzo.tmpl b/interfaces/smpl/templates/nzo.tmpl new file mode 100644 index 0000000..e0c7ac5 --- /dev/null +++ b/interfaces/smpl/templates/nzo.tmpl @@ -0,0 +1,80 @@ + +
      +

      $T('nzoDetails')

      +
      + + +
      + + + + +
      + + + + + +
      + + + + +
      + + + +
      +
      + + +

      + +
      + $T('nzo-delete') + $T('nzo-top') + $T('nzo-up') + $T('nzo-down') + $T('nzo-bottom') +
      + + $T('nzo-selection'):$T('nzo-all') + $T('nzo-none') + $T('nzo-invert') + + + + + + + + active"> + + + + + + +
      $T('nzo-filename')/$T('nzo-subject')$T('size')$T('nzo-age')
      >$file.filename$file.mb $T('MB')$file.age
      +
      + \ No newline at end of file diff --git a/interfaces/smpl/templates/queue.tmpl b/interfaces/smpl/templates/queue.tmpl new file mode 100644 index 0000000..859f928 --- /dev/null +++ b/interfaces/smpl/templates/queue.tmpl @@ -0,0 +1,224 @@ + +

      $T('menu-queue')

      + + + + + +
      $perc% - $mbleft/$mb MB - +$T('smpl-timeleft'): $timeleft $T('smpl-eta'): $eta +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + finished"> + + + + + active"> + + + + + waiting"> + + + + +
      $T('name') $T('smpl-edit')$T('smpl-progress')$T('smpl-timeleft')$T('smpl-age') $T('smpl-size')
      + + + + + $slot.filename + + + + + + + + + + + + + + + + + +
      + +
      $slot.timeleft$slot.avg_age$slot.size + + + + + + +
      Finished$line.filename$line.mbleft/$line.mb MB$line.age$line.size
      Active$line.filename$line.mbleft/$line.mb MB$line.age$line.size
      Waiting$line.filename (set: $line.set)$line.mbleft/$line.mb MB$line.age$line.size
      + + +
      $bufmsg
      + +
      + + +$T('smpl-noresult') + +$T('smpl-oneresult') + + + + + + + + + + + + + + + + + + $numres + +
      + + + diff --git a/interfaces/smpl/templates/static/MochiKit/MochiKit.js b/interfaces/smpl/templates/static/MochiKit/MochiKit.js new file mode 100644 index 0000000..b215f6a --- /dev/null +++ b/interfaces/smpl/templates/static/MochiKit/MochiKit.js @@ -0,0 +1,8073 @@ +/*** + + MochiKit.MochiKit 1.5 : PACKED VERSION + + THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please + diff against the source tree, not this file. + + See for documentation, downloads, license, etc. + + (c) 2005 Bob Ippolito. All rights Reserved. + +***/ + +if(typeof (MochiKit)=="undefined"){ +MochiKit={}; +} +if(typeof (MochiKit.__export__)=="undefined"){ +MochiKit.__export__=true; +} +if(typeof (MochiKit.Base)=="undefined"){ +MochiKit.Base={}; +} +MochiKit.Base._module=function(_1,_2,_3){ +if(!(_1 in MochiKit)){ +MochiKit[_1]={}; +} +var _4=MochiKit[_1]; +_4.NAME="MochiKit."+_1; +_4.VERSION=_2; +_4.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +_4.toString=function(){ +return this.__repr__(); +}; +for(var i=0;i<_3.length;i++){ +if(!(_3[i] in MochiKit)){ +throw "MochiKit."+_1+" depends on MochiKit."+_3[i]+"!"; +} +} +}; +MochiKit.Base._module("Base","1.5",[]); +MochiKit.Base.update=function(_6,_7){ +if(_6===null||_6===undefined){ +_6={}; +} +for(var i=1;i=0;i--){ +_1a.unshift(o[i]); +} +}else{ +res.push(o); +} +} +return res; +},extend:function(_1d,obj,_1f){ +if(!_1f){ +_1f=0; +} +if(obj){ +var l=obj.length; +if(typeof (l)!="number"){ +if(typeof (MochiKit.Iter)!="undefined"){ +obj=MochiKit.Iter.list(obj); +l=obj.length; +}else{ +throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); +} +} +if(!_1d){ +_1d=[]; +} +for(var i=_1f;i>b; +},zrshift:function(a,b){ +return a>>>b; +},eq:function(a,b){ +return a==b; +},ne:function(a,b){ +return a!=b; +},gt:function(a,b){ +return a>b; +},ge:function(a,b){ +return a>=b; +},lt:function(a,b){ +return a0&&_7b!="false"&&_7b!="null"&&_7b!="undefined"&&_7b!="0"; +}else{ +if(typeof (_7b)==="number"||_7b instanceof Number){ +return !isNaN(_7b)&&_7b!=0; +}else{ +if(_7b!=null&&typeof (_7b.length)==="number"){ +return _7b.length!==0; +}else{ +return _7b!=null; +} +} +} +} +},typeMatcher:function(){ +var _7c={}; +for(var i=0;il){ +_96=l; +} +} +_94=[]; +for(var i=0;i<_96;i++){ +var _98=[]; +for(var j=1;j=0;i--){ +_b5=[_b1[i].apply(this,_b5)]; +} +return _b5[0]; +}; +},bind:function(_b7,_b8){ +if(typeof (_b7)=="string"){ +_b7=_b8[_b7]; +} +var _b9=_b7.im_func; +var _ba=_b7.im_preargs; +var _bb=_b7.im_self; +var m=MochiKit.Base; +if(typeof (_b7)=="function"&&typeof (_b7.apply)=="undefined"){ +_b7=m._wrapDumbFunction(_b7); +} +if(typeof (_b9)!="function"){ +_b9=_b7; +} +if(typeof (_b8)!="undefined"){ +_bb=_b8; +} +if(typeof (_ba)=="undefined"){ +_ba=[]; +}else{ +_ba=_ba.slice(); +} +m.extend(_ba,arguments,2); +var _bd=function(){ +var _be=arguments; +var me=arguments.callee; +if(me.im_preargs.length>0){ +_be=m.concat(me.im_preargs,_be); +} +var _c0=me.im_self; +if(!_c0){ +_c0=this; +} +return me.im_func.apply(_c0,_be); +}; +_bd.im_self=_bb; +_bd.im_func=_b9; +_bd.im_preargs=_ba; +return _bd; +},bindLate:function(_c1,_c2){ +var m=MochiKit.Base; +var _c4=arguments; +if(typeof (_c1)==="string"){ +_c4=m.extend([m.forwardCall(_c1)],arguments,1); +return m.bind.apply(this,_c4); +} +return m.bind.apply(this,_c4); +},bindMethods:function(_c5){ +var _c6=MochiKit.Base.bind; +for(var k in _c5){ +var _c8=_c5[k]; +if(typeof (_c8)=="function"){ +_c5[k]=_c6(_c8,_c5); +} +} +},registerComparator:function(_c9,_ca,_cb,_cc){ +MochiKit.Base.comparatorRegistry.register(_c9,_ca,_cb,_cc); +},_primitives:{"boolean":true,"string":true,"number":true},compare:function(a,b){ +if(a==b){ +return 0; +} +var _cf=(typeof (a)=="undefined"||a===null); +var _d0=(typeof (b)=="undefined"||b===null); +if(_cf&&_d0){ +return 0; +}else{ +if(_cf){ +return -1; +}else{ +if(_d0){ +return 1; +} +} +} +var m=MochiKit.Base; +var _d2=m._primitives; +if(!(typeof (a) in _d2&&typeof (b) in _d2)){ +try{ +return m.comparatorRegistry.match(a,b); +} +catch(e){ +if(e!=m.NotFound){ +throw e; +} +} +} +if(ab){ +return 1; +} +} +var _d3=m.repr; +throw new TypeError(_d3(a)+" and "+_d3(b)+" can not be compared"); +},compareDateLike:function(a,b){ +return MochiKit.Base.compare(a.getTime(),b.getTime()); +},compareArrayLike:function(a,b){ +var _d8=MochiKit.Base.compare; +var _d9=a.length; +var _da=0; +if(_d9>b.length){ +_da=1; +_d9=b.length; +}else{ +if(_d9=0;i--){ +sum+=o[i]; +} +}else{ +sum+=o; +} +} +if(_120<=0){ +throw new TypeError("mean() requires at least one argument"); +} +return sum/_120; +},median:function(){ +var data=MochiKit.Base.flattenArguments(arguments); +if(data.length===0){ +throw new TypeError("median() requires at least one argument"); +} +data.sort(compare); +if(data.length%2==0){ +var _124=data.length/2; +return (data[_124]+data[_124-1])/2; +}else{ +return data[(data.length-1)/2]; +} +},findValue:function(lst,_126,_127,end){ +if(typeof (end)=="undefined"||end===null){ +end=lst.length; +} +if(typeof (_127)=="undefined"||_127===null){ +_127=0; +} +var cmp=MochiKit.Base.compare; +for(var i=_127;i0))){ +var kv=MochiKit.DOM.formContents(_134); +_134=kv[0]; +_135=kv[1]; +}else{ +if(arguments.length==1){ +if(typeof (_134.length)=="number"&&_134.length==2){ +return arguments.callee(_134[0],_134[1]); +} +var o=_134; +_134=[]; +_135=[]; +for(var k in o){ +var v=o[k]; +if(typeof (v)=="function"){ +continue; +}else{ +if(MochiKit.Base.isArrayLike(v)){ +for(var i=0;i=stop){ +throw self.StopIteration; +} +_18c+=step; +return rval; +}}; +},imap:function(fun,p,q){ +var m=MochiKit.Base; +var self=MochiKit.Iter; +var _196=m.map(self.iter,m.extend(null,arguments,1)); +var map=m.map; +var next=self.next; +return {repr:function(){ +return "imap(...)"; +},toString:m.forwardCall("repr"),next:function(){ +return fun.apply(this,map(next,_196)); +}}; +},applymap:function(fun,seq,self){ +seq=MochiKit.Iter.iter(seq); +var m=MochiKit.Base; +return {repr:function(){ +return "applymap(...)"; +},toString:m.forwardCall("repr"),next:function(){ +return fun.apply(self,seq.next()); +}}; +},chain:function(p,q){ +var self=MochiKit.Iter; +var m=MochiKit.Base; +if(arguments.length==1){ +return self.iter(arguments[0]); +} +var _1a1=m.map(self.iter,arguments); +return {repr:function(){ +return "chain(...)"; +},toString:m.forwardCall("repr"),next:function(){ +while(_1a1.length>1){ +try{ +var _1a2=_1a1[0].next(); +return _1a2; +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +_1a1.shift(); +var _1a2=_1a1[0].next(); +return _1a2; +} +} +if(_1a1.length==1){ +var arg=_1a1.shift(); +this.next=m.bind("next",arg); +return this.next(); +} +throw self.StopIteration; +}}; +},takewhile:function(pred,seq){ +var self=MochiKit.Iter; +seq=self.iter(seq); +return {repr:function(){ +return "takewhile(...)"; +},toString:MochiKit.Base.forwardCall("repr"),next:function(){ +var rval=seq.next(); +if(!pred(rval)){ +this.next=function(){ +throw self.StopIteration; +}; +this.next(); +} +return rval; +}}; +},dropwhile:function(pred,seq){ +seq=MochiKit.Iter.iter(seq); +var m=MochiKit.Base; +var bind=m.bind; +return {"repr":function(){ +return "dropwhile(...)"; +},"toString":m.forwardCall("repr"),"next":function(){ +while(true){ +var rval=seq.next(); +if(!pred(rval)){ +break; +} +} +this.next=bind("next",seq); +return rval; +}}; +},_tee:function(_1ad,sync,_1af){ +sync.pos[_1ad]=-1; +var m=MochiKit.Base; +var _1b1=m.listMin; +return {repr:function(){ +return "tee("+_1ad+", ...)"; +},toString:m.forwardCall("repr"),next:function(){ +var rval; +var i=sync.pos[_1ad]; +if(i==sync.max){ +rval=_1af.next(); +sync.deque.push(rval); +sync.max+=1; +sync.pos[_1ad]+=1; +}else{ +rval=sync.deque[i-sync.min]; +sync.pos[_1ad]+=1; +if(i==sync.min&&_1b1(sync.pos)!=sync.min){ +sync.min+=1; +sync.deque.shift(); +} +} +return rval; +}}; +},tee:function(_1b4,n){ +var rval=[]; +var sync={"pos":[],"deque":[],"max":-1,"min":-1}; +if(arguments.length==1||typeof (n)=="undefined"||n===null){ +n=2; +} +var self=MochiKit.Iter; +_1b4=self.iter(_1b4); +var _tee=self._tee; +for(var i=0;i0&&_1c6>=stop)||(step<0&&_1c6<=stop)){ +throw MochiKit.Iter.StopIteration; +} +var rval=_1c6; +_1c6+=step; +return rval; +},repr:function(){ +return "range("+[_1c6,stop,step].join(", ")+")"; +},toString:MochiKit.Base.forwardCall("repr")}; +},sum:function(_1ca,_1cb){ +if(typeof (_1cb)=="undefined"||_1cb===null){ +_1cb=0; +} +var x=_1cb; +var self=MochiKit.Iter; +_1ca=self.iter(_1ca); +try{ +while(true){ +x+=_1ca.next(); +} +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +} +return x; +},exhaust:function(_1ce){ +var self=MochiKit.Iter; +_1ce=self.iter(_1ce); +try{ +while(true){ +_1ce.next(); +} +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +} +},forEach:function(_1d0,func,obj){ +var m=MochiKit.Base; +var self=MochiKit.Iter; +if(arguments.length>2){ +func=m.bind(func,obj); +} +if(m.isArrayLike(_1d0)&&!self.isIterable(_1d0)){ +try{ +for(var i=0;i<_1d0.length;i++){ +func(_1d0[i]); +} +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +} +}else{ +self.exhaust(self.imap(func,_1d0)); +} +},every:function(_1d6,func){ +var self=MochiKit.Iter; +try{ +self.ifilterfalse(func,_1d6).next(); +return false; +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +return true; +} +},sorted:function(_1d9,cmp){ +var rval=MochiKit.Iter.list(_1d9); +if(arguments.length==1){ +cmp=MochiKit.Base.compare; +} +rval.sort(cmp); +return rval; +},reversed:function(_1dc){ +var rval=MochiKit.Iter.list(_1dc); +rval.reverse(); +return rval; +},some:function(_1de,func){ +var self=MochiKit.Iter; +try{ +self.ifilter(func,_1de).next(); +return true; +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +return false; +} +},iextend:function(lst,_1e2){ +var m=MochiKit.Base; +var self=MochiKit.Iter; +if(m.isArrayLike(_1e2)&&!self.isIterable(_1e2)){ +for(var i=0;i<_1e2.length;i++){ +lst.push(_1e2[i]); +} +}else{ +_1e2=self.iter(_1e2); +try{ +while(true){ +lst.push(_1e2.next()); +} +} +catch(e){ +if(e!=self.StopIteration){ +throw e; +} +} +} +return lst; +},groupby:function(_1e6,_1e7){ +var m=MochiKit.Base; +var self=MochiKit.Iter; +if(arguments.length<2){ +_1e7=m.operator.identity; +} +_1e6=self.iter(_1e6); +var pk=undefined; +var k=undefined; +var v; +function fetch(){ +v=_1e6.next(); +k=_1e7(v); +} +function eat(){ +var ret=v; +v=undefined; +return ret; +} +var _1ee=true; +var _1ef=m.compare; +return {repr:function(){ +return "groupby(...)"; +},next:function(){ +while(_1ef(k,pk)===0){ +fetch(); +if(_1ee){ +_1ee=false; +break; +} +} +pk=k; +return [k,{next:function(){ +if(v==undefined){ +fetch(); +} +if(_1ef(k,pk)!==0){ +throw self.StopIteration; +} +return eat(); +}}]; +}}; +},groupby_as_array:function(_1f0,_1f1){ +var m=MochiKit.Base; +var self=MochiKit.Iter; +if(arguments.length<2){ +_1f1=m.operator.identity; +} +_1f0=self.iter(_1f0); +var _1f4=[]; +var _1f5=true; +var _1f6; +var _1f7=m.compare; +while(true){ +try{ +var _1f8=_1f0.next(); +var key=_1f1(_1f8); +} +catch(e){ +if(e==self.StopIteration){ +break; +} +throw e; +} +if(_1f5||_1f7(key,_1f6)!==0){ +var _1fa=[]; +_1f4.push([key,_1fa]); +} +_1fa.push(_1f8); +_1f5=false; +_1f6=key; +} +return _1f4; +},arrayLikeIter:function(_1fb){ +var i=0; +return {repr:function(){ +return "arrayLikeIter(...)"; +},toString:MochiKit.Base.forwardCall("repr"),next:function(){ +if(i>=_1fb.length){ +throw MochiKit.Iter.StopIteration; +} +return _1fb[i++]; +}}; +},hasIterateNext:function(_1fd){ +return (_1fd&&typeof (_1fd.iterateNext)=="function"); +},iterateNextIter:function(_1fe){ +return {repr:function(){ +return "iterateNextIter(...)"; +},toString:MochiKit.Base.forwardCall("repr"),next:function(){ +var rval=_1fe.iterateNext(); +if(rval===null||rval===undefined){ +throw MochiKit.Iter.StopIteration; +} +return rval; +}}; +}}); +MochiKit.Iter.__new__=function(){ +var m=MochiKit.Base; +if(typeof (StopIteration)!="undefined"){ +this.StopIteration=StopIteration; +}else{ +this.StopIteration=new m.NamedError("StopIteration"); +} +this.iteratorRegistry=new m.AdapterRegistry(); +this.registerIteratorFactory("arrayLike",m.isArrayLike,this.arrayLikeIter); +this.registerIteratorFactory("iterateNext",this.hasIterateNext,this.iterateNextIter); +m.nameFunctions(this); +}; +MochiKit.Iter.__new__(); +if(MochiKit.__export__){ +reduce=MochiKit.Iter.reduce; +} +MochiKit.Base._exportSymbols(this,MochiKit.Iter); +MochiKit.Base._module("Logging","1.5",["Base"]); +MochiKit.Logging.LogMessage=function(num,_202,info){ +this.num=num; +this.level=_202; +this.info=info; +this.timestamp=new Date(); +}; +MochiKit.Logging.LogMessage.prototype={repr:function(){ +var m=MochiKit.Base; +return "LogMessage("+m.map(m.repr,[this.num,this.level,this.info]).join(", ")+")"; +},toString:MochiKit.Base.forwardCall("repr")}; +MochiKit.Base.update(MochiKit.Logging,{logLevelAtLeast:function(_205){ +var self=MochiKit.Logging; +if(typeof (_205)=="string"){ +_205=self.LogLevel[_205]; +} +return function(msg){ +var _208=msg.level; +if(typeof (_208)=="string"){ +_208=self.LogLevel[_208]; +} +return _208>=_205; +}; +},isLogMessage:function(){ +var _209=MochiKit.Logging.LogMessage; +for(var i=0;i=MochiKit.Logging.LogLevel.FATAL){ +_218="FATAL"; +}else{ +if(_218>=MochiKit.Logging.LogLevel.ERROR){ +_218="ERROR"; +}else{ +if(_218>=MochiKit.Logging.LogLevel.WARNING){ +_218="WARNING"; +}else{ +if(_218>=MochiKit.Logging.LogLevel.INFO){ +_218="INFO"; +}else{ +_218="DEBUG"; +} +} +} +} +} +var msg=new MochiKit.Logging.LogMessage(this.counter,_218,MochiKit.Base.extend(null,arguments,1)); +this._messages.push(msg); +this.dispatchListeners(msg); +if(this.useNativeConsole){ +this.logToConsole(msg.level+": "+msg.info.join(" ")); +} +this.counter+=1; +while(this.maxSize>=0&&this._messages.length>this.maxSize){ +this._messages.shift(); +} +},getMessages:function(_21b){ +var _21c=0; +if(!(typeof (_21b)=="undefined"||_21b===null)){ +_21c=Math.max(0,this._messages.length-_21b); +} +return this._messages.slice(_21c); +},getMessageText:function(_21d){ +if(typeof (_21d)=="undefined"||_21d===null){ +_21d=30; +} +var _21e=this.getMessages(_21d); +if(_21e.length){ +var lst=map(function(m){ +return "\n ["+m.num+"] "+m.level+": "+m.info.join(" "); +},_21e); +lst.unshift("LAST "+_21e.length+" MESSAGES:"); +return lst.join(""); +} +return ""; +},debuggingBookmarklet:function(_221){ +if(typeof (MochiKit.LoggingPane)=="undefined"){ +alert(this.getMessageText()); +}else{ +MochiKit.LoggingPane.createLoggingPane(_221||false); +} +}}; +MochiKit.Logging.__new__=function(){ +this.LogLevel={ERROR:40,FATAL:50,WARNING:30,INFO:20,DEBUG:10}; +var m=MochiKit.Base; +m.registerComparator("LogMessage",this.isLogMessage,this.compareLogMessage); +var _223=m.partial; +var _224=this.Logger; +var _225=_224.prototype.baseLog; +m.update(this.Logger.prototype,{debug:_223(_225,"DEBUG"),log:_223(_225,"INFO"),error:_223(_225,"ERROR"),fatal:_223(_225,"FATAL"),warning:_223(_225,"WARNING")}); +var self=this; +var _227=function(name){ +return function(){ +self.logger[name].apply(self.logger,arguments); +}; +}; +this.log=_227("log"); +this.logError=_227("error"); +this.logDebug=_227("debug"); +this.logFatal=_227("fatal"); +this.logWarning=_227("warning"); +this.logger=new _224(); +this.logger.useNativeConsole=true; +m.nameFunctions(this); +}; +MochiKit.Logging.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.Logging); +MochiKit.Base._module("DateTime","1.5",["Base"]); +MochiKit.DateTime.isoDate=function(str){ +str=str+""; +if(typeof (str)!="string"||str.length===0){ +return null; +} +var iso=str.split("-"); +if(iso.length===0){ +return null; +} +var date=new Date(iso[0],iso[1]-1,iso[2]); +date.setFullYear(iso[0]); +date.setMonth(iso[1]-1); +date.setDate(iso[2]); +return date; +}; +MochiKit.DateTime._isoRegexp=/(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/; +MochiKit.DateTime.isoTimestamp=function(str){ +str=str+""; +if(typeof (str)!="string"||str.length===0){ +return null; +} +var res=str.match(MochiKit.DateTime._isoRegexp); +if(typeof (res)=="undefined"||res===null){ +return null; +} +var year,_22f,day,hour,min,sec,msec; +year=parseInt(res[1],10); +if(typeof (res[2])=="undefined"||res[2]===""){ +return new Date(year); +} +_22f=parseInt(res[2],10)-1; +day=parseInt(res[3],10); +if(typeof (res[4])=="undefined"||res[4]===""){ +return new Date(year,_22f,day); +} +hour=parseInt(res[4],10); +min=parseInt(res[5],10); +sec=(typeof (res[6])!="undefined"&&res[6]!=="")?parseInt(res[6],10):0; +if(typeof (res[7])!="undefined"&&res[7]!==""){ +msec=Math.round(1000*parseFloat("0."+res[7])); +}else{ +msec=0; +} +if((typeof (res[8])=="undefined"||res[8]==="")&&(typeof (res[9])=="undefined"||res[9]==="")){ +return new Date(year,_22f,day,hour,min,sec,msec); +} +var ofs; +if(typeof (res[9])!="undefined"&&res[9]!==""){ +ofs=parseInt(res[10],10)*3600000; +if(typeof (res[11])!="undefined"&&res[11]!==""){ +ofs+=parseInt(res[11],10)*60000; +} +if(res[9]=="-"){ +ofs=-ofs; +} +}else{ +ofs=0; +} +return new Date(Date.UTC(year,_22f,day,hour,min,sec,msec)-ofs); +}; +MochiKit.DateTime.toISOTime=function(date,_237){ +if(typeof (date)=="undefined"||date===null){ +return null; +} +var hh=date.getHours(); +var mm=date.getMinutes(); +var ss=date.getSeconds(); +var lst=[((_237&&(hh<10))?"0"+hh:hh),((mm<10)?"0"+mm:mm),((ss<10)?"0"+ss:ss)]; +return lst.join(":"); +}; +MochiKit.DateTime.toISOTimestamp=function(date,_23d){ +if(typeof (date)=="undefined"||date===null){ +return null; +} +var sep=_23d?"T":" "; +var foot=_23d?"Z":""; +if(_23d){ +date=new Date(date.getTime()+(date.getTimezoneOffset()*60000)); +} +return MochiKit.DateTime.toISODate(date)+sep+MochiKit.DateTime.toISOTime(date,_23d)+foot; +}; +MochiKit.DateTime.toISODate=function(date){ +if(typeof (date)=="undefined"||date===null){ +return null; +} +var _241=MochiKit.DateTime._padTwo; +var _242=MochiKit.DateTime._padFour; +return [_242(date.getFullYear()),_241(date.getMonth()+1),_241(date.getDate())].join("-"); +}; +MochiKit.DateTime.americanDate=function(d){ +d=d+""; +if(typeof (d)!="string"||d.length===0){ +return null; +} +var a=d.split("/"); +return new Date(a[2],a[0]-1,a[1]); +}; +MochiKit.DateTime._padTwo=function(n){ +return (n>9)?n:"0"+n; +}; +MochiKit.DateTime._padFour=function(n){ +switch(n.toString().length){ +case 1: +return "000"+n; +break; +case 2: +return "00"+n; +break; +case 3: +return "0"+n; +break; +case 4: +default: +return n; +} +}; +MochiKit.DateTime.toPaddedAmericanDate=function(d){ +if(typeof (d)=="undefined"||d===null){ +return null; +} +var _248=MochiKit.DateTime._padTwo; +return [_248(d.getMonth()+1),_248(d.getDate()),d.getFullYear()].join("/"); +}; +MochiKit.DateTime.toAmericanDate=function(d){ +if(typeof (d)=="undefined"||d===null){ +return null; +} +return [d.getMonth()+1,d.getDate(),d.getFullYear()].join("/"); +}; +MochiKit.DateTime.__new__=function(){ +MochiKit.Base.nameFunctions(this); +}; +MochiKit.DateTime.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.DateTime); +MochiKit.Base._module("Format","1.5",["Base"]); +MochiKit.Format._numberFormatter=function(_24a,_24b,_24c,_24d,_24e,_24f,_250,_251,_252){ +return function(num){ +num=parseFloat(num); +if(typeof (num)=="undefined"||num===null||isNaN(num)){ +return _24a; +} +var _254=_24b; +var _255=_24c; +if(num<0){ +num=-num; +}else{ +_254=_254.replace(/-/,""); +} +var me=arguments.callee; +var fmt=MochiKit.Format.formatLocale(_24d); +if(_24e){ +num=num*100; +_255=fmt.percent+_255; +} +num=MochiKit.Format.roundToFixed(num,_24f); +var _258=num.split(/\./); +var _259=_258[0]; +var frac=(_258.length==1)?"":_258[1]; +var res=""; +while(_259.length<_250){ +_259="0"+_259; +} +if(_251){ +while(_259.length>_251){ +var i=_259.length-_251; +res=fmt.separator+_259.substring(i,_259.length)+res; +_259=_259.substring(0,i); +} +} +res=_259+res; +if(_24f>0){ +while(frac.length<_252){ +frac=frac+"0"; +} +res=res+fmt.decimal+frac; +} +return _254+res+_255; +}; +}; +MochiKit.Format.numberFormatter=function(_25d,_25e,_25f){ +if(typeof (_25e)=="undefined"){ +_25e=""; +} +var _260=_25d.match(/((?:[0#]+,)?[0#]+)(?:\.([0#]+))?(%)?/); +if(!_260){ +throw TypeError("Invalid pattern"); +} +var _261=_25d.substr(0,_260.index); +var _262=_25d.substr(_260.index+_260[0].length); +if(_261.search(/-/)==-1){ +_261=_261+"-"; +} +var _263=_260[1]; +var frac=(typeof (_260[2])=="string"&&_260[2]!="")?_260[2]:""; +var _265=(typeof (_260[3])=="string"&&_260[3]!=""); +var tmp=_263.split(/,/); +var _267; +if(typeof (_25f)=="undefined"){ +_25f="default"; +} +if(tmp.length==1){ +_267=null; +}else{ +_267=tmp[1].length; +} +var _268=_263.length-_263.replace(/0/g,"").length; +var _269=frac.length-frac.replace(/0/g,"").length; +var _26a=frac.length; +var rval=MochiKit.Format._numberFormatter(_25e,_261,_262,_25f,_265,_26a,_268,_267,_269); +var m=MochiKit.Base; +if(m){ +var fn=arguments.callee; +var args=m.concat(arguments); +rval.repr=function(){ +return [self.NAME,"(",map(m.repr,args).join(", "),")"].join(""); +}; +} +return rval; +}; +MochiKit.Format.formatLocale=function(_26f){ +if(typeof (_26f)=="undefined"||_26f===null){ +_26f="default"; +} +if(typeof (_26f)=="string"){ +var rval=MochiKit.Format.LOCALE[_26f]; +if(typeof (rval)=="string"){ +rval=arguments.callee(rval); +MochiKit.Format.LOCALE[_26f]=rval; +} +return rval; +}else{ +return _26f; +} +}; +MochiKit.Format.twoDigitAverage=function(_271,_272){ +if(_272){ +var res=_271/_272; +if(!isNaN(res)){ +return MochiKit.Format.twoDigitFloat(res); +} +} +return "0"; +}; +MochiKit.Format.twoDigitFloat=function(_274){ +var res=roundToFixed(_274,2); +if(res.indexOf(".00")>0){ +return res.substring(0,res.length-3); +}else{ +if(res.charAt(res.length-1)=="0"){ +return res.substring(0,res.length-1); +}else{ +return res; +} +} +}; +MochiKit.Format.lstrip=function(str,_277){ +str=str+""; +if(typeof (str)!="string"){ +return null; +} +if(!_277){ +return str.replace(/^\s+/,""); +}else{ +return str.replace(new RegExp("^["+_277+"]+"),""); +} +}; +MochiKit.Format.rstrip=function(str,_279){ +str=str+""; +if(typeof (str)!="string"){ +return null; +} +if(!_279){ +return str.replace(/\s+$/,""); +}else{ +return str.replace(new RegExp("["+_279+"]+$"),""); +} +}; +MochiKit.Format.strip=function(str,_27b){ +var self=MochiKit.Format; +return self.rstrip(self.lstrip(str,_27b),_27b); +}; +MochiKit.Format.truncToFixed=function(_27d,_27e){ +var _27f=MochiKit.Format._numberToFixed(_27d,_27e); +var _280=_27f.indexOf("."); +if(_280>0&&_280+_27e+1<_27f.length){ +_27f=_27f.substring(0,_280+_27e+1); +_27f=MochiKit.Format._shiftNumber(_27f,0); +} +return _27f; +}; +MochiKit.Format.roundToFixed=function(_281,_282){ +var _283=MochiKit.Format._numberToFixed(_281,_282); +var _284=_283.indexOf("."); +if(_284>0&&_284+_282+1<_283.length){ +var str=MochiKit.Format._shiftNumber(_283,_282); +str=MochiKit.Format._numberToFixed(Math.round(parseFloat(str)),0); +_283=MochiKit.Format._shiftNumber(str,-_282); +} +return _283; +}; +MochiKit.Format._numberToFixed=function(_286,_287){ +var str=_286.toString(); +var _289=str.split(/[eE]/); +var exp=(_289.length===1)?0:parseInt(_289[1])||0; +var _28b=MochiKit.Format._shiftNumber(_289[0],exp); +_289=_28b.split(/\./); +var _28c=_289[0]; +var frac=(_289.length===1)?"":_289[1]; +while(frac.length<_287){ +frac+="0"; +} +if(frac.length>0){ +return _28c+"."+frac; +}else{ +return _28c; +} +}; +MochiKit.Format._shiftNumber=function(num,exp){ +var pos=num.indexOf("."); +if(pos<0){ +pos=num.length; +}else{ +num=num.substring(0,pos)+num.substring(pos+1); +} +pos+=exp; +while(pos<=0||(pos<=1&&num.charAt(0)==="-")){ +if(num.charAt(0)==="-"){ +num="-0"+num.substring(1); +}else{ +num="0"+num; +} +pos++; +} +while(pos>num.length){ +num+="0"; +} +if(pos=0; +}; +MochiKit.Text.padLeft=function(str,_29d,_29e){ +str=str||""; +_29e=_29e||" "; +while(str.length<_29d){ +str=_29e+str; +} +return str; +}; +MochiKit.Text.padRight=function(str,_2a0,_2a1){ +str=str||""; +_2a1=_2a1||" "; +while(str.length<_2a0){ +str+=_2a1; +} +return str; +}; +MochiKit.Text.truncate=function(str,_2a3,tail){ +if(str==null||str.length<=_2a3||_2a3<0){ +return str; +}else{ +if(tail!=null){ +str=str.slice(0,Math.max(0,_2a3-tail.length)); +if(typeof (str)=="string"){ +return str+tail; +}else{ +return MochiKit.Base.extend(str,tail); +} +}else{ +return str.slice(0,_2a3); +} +} +}; +MochiKit.Text.split=function(str,_2a6,max){ +if(str==null||str.length==0){ +return str; +} +_2a6=_2a6||"\n"; +var bits=str.split(_2a6); +if((typeof (max)=="undefined")||max>=bits.length-1){ +return bits; +} +bits.splice(max,bits.length,bits.slice(max,bits.length).join(_2a6)); +return bits; +}; +MochiKit.Text.rsplit=function(str,_2aa,max){ +if(str==null||str.length==0){ +return str; +} +_2aa=_2aa||"\n"; +var bits=str.split(_2aa); +if((typeof (max)=="undefined")||max>=bits.length-1){ +return bits; +} +bits.splice(0,bits.length-max,bits.slice(0,bits.length-max).join(_2aa)); +return bits; +}; +MochiKit.Text.splitJoin=function(func,str,_2af){ +if(str==null||str.length==0){ +return str; +} +_2af=_2af||"\n"; +return MochiKit.Base.map(func,str.split(_2af)).join(_2af); +}; +MochiKit.Text.formatter=function(_2b0,_2b1){ +if(typeof (_2b1)=="undefined"){ +_2b1=MochiKit.Format.formatLocale(); +}else{ +if(typeof (_2b1)=="string"){ +_2b1=MochiKit.Format.formatLocale(_2b1); +} +} +var _2b2=MochiKit.Text._parsePattern(_2b0); +return function(){ +var _2b3=MochiKit.Base.extend([],arguments); +var res=[]; +for(var i=0;i<_2b2.length;i++){ +if(typeof (_2b2[i])=="string"){ +res.push(_2b2[i]); +}else{ +res.push(MochiKit.Text.formatValue(_2b2[i],_2b3,_2b1)); +} +} +return res.join(""); +}; +}; +MochiKit.Text.format=function(_2b6){ +var func=MochiKit.Text.formatter(_2b6); +return func.apply(this,MochiKit.Base.extend([],arguments,1)); +}; +MochiKit.Text.formatValue=function(spec,_2b9,_2ba){ +var self=MochiKit.Text; +if(typeof (spec)==="string"){ +spec=self._parseFormatFlags(spec,0,spec.length-1); +} +for(var i=0;spec.path!=null&&i=0){ +str=MochiKit.Format.roundToFixed(_2b9,spec.precision); +}else{ +str=_2b9.toString(); +} +} +} +} +if(spec.padding==="0"&&spec.format==="%"){ +str=self.padLeft(str,spec.width-sign.length-1,"0"); +}else{ +if(spec.padding=="0"){ +str=self.padLeft(str,spec.width-sign.length,"0"); +} +} +str=self._localizeNumber(str,_2ba,spec.grouping); +str=sign+str; +} +} +} +if(str!==""&&spec.format==="%"){ +str=str+_2ba.percent; +} +}else{ +if(spec.format=="r"){ +str=MochiKit.Base.repr(_2b9); +}else{ +str=(_2b9==null)?"null":_2b9.toString(); +} +str=self.truncate(str,spec.precision); +} +if(spec.align=="<"){ +str=self.padRight(str,spec.width); +}else{ +str=self.padLeft(str,spec.width); +} +return str; +}; +MochiKit.Text._localizeNumber=function(num,_2c0,_2c1){ +var _2c2=num.split(/\./); +var _2c3=_2c2[0]; +var frac=(_2c2.length==1)?"":_2c2[1]; +var res=(frac.length>0)?_2c0.decimal:""; +while(_2c1&&frac.length>3){ +res=res+frac.substring(0,3)+_2c0.separator; +frac=frac.substring(3); +if(_2c3.charAt(0)=="0"){ +_2c3=_2c3.substring(1); +} +} +if(frac.length>0){ +res+=frac; +} +while(_2c1&&_2c3.length>3){ +var pos=_2c3.length-3; +res=_2c0.separator+_2c3.substring(pos)+res; +_2c3=_2c3.substring((_2c3.charAt(0)=="0")?1:0,pos); +} +return _2c3+res; +}; +MochiKit.Text._parsePattern=function(_2c7){ +var self=MochiKit.Text; +var _2c9=[]; +var _2ca=0; +var pos=0; +for(pos=0;pos<_2c7.length;pos++){ +if(_2c7.charAt(pos)=="{"){ +if(pos+1>=_2c7.length){ +var msg="unescaped { char, should be escaped as {{"; +throw new self.FormatPatternError(_2c7,pos,msg); +}else{ +if(_2c7.charAt(pos+1)=="{"){ +_2c9.push(_2c7.substring(_2ca,pos+1)); +_2ca=pos+2; +pos++; +}else{ +if(_2ca=_2c7.length||_2c7.charAt(pos+1)!="}"){ +var msg="unescaped } char, should be escaped as }}"; +throw new self.FormatPatternError(_2c7,pos,msg); +} +_2c9.push(_2c7.substring(_2ca,pos+1)); +_2ca=pos+2; +pos++; +} +} +} +if(_2ca0){ +info=self._parseFormatFlags(_2cd,_2ce+pos+1,_2cf); +info.path=text.substring(0,pos).split("."); +}else{ +info=self._parseFormatFlags(_2cd,_2cf,_2cf); +info.path=text.split("."); +} +} +var _2d4=/^\d+$/; +for(var i=0;i",sign:"-",padding:" ",grouping:false}; +var _2dd=_2d8.substring(_2d9,_2da).replace(/\s+$/,""); +while(_2dd.length>0){ +switch(_2dd.charAt(0)){ +case ">": +case "<": +info.align=_2dd.charAt(0); +_2dd=_2dd.substring(1); +break; +case "+": +case "-": +case " ": +info.sign=_2dd.charAt(0); +_2dd=_2dd.substring(1); +break; +case ",": +info.grouping=true; +_2dd=_2dd.substring(1); +break; +case ".": +var _2de=/^\d*/.exec(_2dd.substring(1))[0]; +info.precision=parseInt(_2de); +_2dd=_2dd.substring(1+_2de.length); +break; +case "0": +info.padding=_2dd.charAt(0); +_2dd=_2dd.substring(1); +break; +case "1": +case "2": +case "3": +case "4": +case "5": +case "6": +case "7": +case "8": +case "9": +var _2de=/^\d*/.exec(_2dd)[0]; +info.width=parseInt(_2de); +_2dd=_2dd.substring(_2de.length); +break; +case "s": +case "r": +info.format=_2dd.charAt(0); +_2dd=_2dd.substring(1); +break; +case "b": +case "d": +case "o": +case "x": +case "X": +case "f": +case "%": +info.numeric=true; +info.format=_2dd.charAt(0); +info.radix=10; +if(info.format==="b"){ +info.radix=2; +}else{ +if(info.format==="o"){ +info.radix=8; +}else{ +if(info.format==="x"||info.format==="X"){ +info.radix=16; +} +} +} +_2dd=_2dd.substring(1); +break; +default: +var msg="unsupported format flag: "+_2dd.charAt(0); +throw new self.FormatPatternError(_2d8,_2d9,msg); +} +} +return info; +}; +MochiKit.Text._truncToPercent=function(_2e0,_2e1){ +var str; +if(_2e1>=0){ +str=MochiKit.Format.roundToFixed(_2e0,_2e1+2); +}else{ +str=(_2e0==null)?"0":_2e0.toString(); +} +var _2e3=str.indexOf("."); +if(_2e3<0){ +str=str+"00"; +}else{ +if(_2e3+3>=str.length){ +var _2e4=str.substring(_2e3+1); +while(_2e4.length<2){ +_2e4=_2e4+"0"; +} +str=str.substring(0,_2e3)+_2e4; +}else{ +var _2e4=str.substring(_2e3+1); +str=str.substring(0,_2e3)+_2e4.substring(0,2)+"."+_2e4.substring(2); +} +} +while(str.length>1&&str.charAt(0)=="0"&&str.charAt(1)!="."){ +str=str.substring(1); +} +return str; +}; +MochiKit.Text.FormatPatternError=function(_2e5,pos,_2e7){ +this.pattern=_2e5; +this.pos=pos; +this.message=_2e7; +}; +MochiKit.Text.FormatPatternError.prototype=new MochiKit.Base.NamedError("MochiKit.Text.FormatPatternError"); +if(MochiKit.__export__){ +formatter=MochiKit.Text.formatter; +format=MochiKit.Text.format; +formatValue=MochiKit.Text.formatValue; +} +MochiKit.Base.nameFunctions(MochiKit.Text); +MochiKit.Base._exportSymbols(this,MochiKit.Text); +MochiKit.Base._module("Async","1.5",["Base"]); +MochiKit.Async.Deferred=function(_2e8){ +this.chain=[]; +this.id=this._nextId(); +this.fired=-1; +this.paused=0; +this.results=[null,null]; +this.canceller=_2e8; +this.silentlyCancelled=false; +this.chained=false; +}; +MochiKit.Async.Deferred.prototype={repr:function(){ +var _2e9; +if(this.fired==-1){ +_2e9="unfired"; +}else{ +if(this.fired===0){ +_2e9="success"; +}else{ +_2e9="error"; +} +} +return "Deferred("+this.id+", "+_2e9+")"; +},toString:MochiKit.Base.forwardCall("repr"),_nextId:MochiKit.Base.counter(),cancel:function(){ +var self=MochiKit.Async; +if(this.fired==-1){ +if(this.canceller){ +this.canceller(this); +}else{ +this.silentlyCancelled=true; +} +if(this.fired==-1){ +this.errback(new self.CancelledError(this)); +} +}else{ +if((this.fired===0)&&(this.results[0] instanceof self.Deferred)){ +this.results[0].cancel(); +} +} +},_resback:function(res){ +this.fired=((res instanceof Error)?1:0); +this.results[this.fired]=res; +this._fire(); +},_check:function(){ +if(this.fired!=-1){ +if(!this.silentlyCancelled){ +throw new MochiKit.Async.AlreadyCalledError(this); +} +this.silentlyCancelled=false; +return; +} +},callback:function(res){ +this._check(); +if(res instanceof MochiKit.Async.Deferred){ +throw new Error("Deferred instances can only be chained if they are the result of a callback"); +} +this._resback(res); +},errback:function(res){ +this._check(); +var self=MochiKit.Async; +if(res instanceof self.Deferred){ +throw new Error("Deferred instances can only be chained if they are the result of a callback"); +} +if(!(res instanceof Error)){ +res=new self.GenericError(res); +} +this._resback(res); +},addBoth:function(fn){ +if(arguments.length>1){ +fn=MochiKit.Base.partial.apply(null,arguments); +} +return this.addCallbacks(fn,fn); +},addCallback:function(fn){ +if(arguments.length>1){ +fn=MochiKit.Base.partial.apply(null,arguments); +} +return this.addCallbacks(fn,null); +},addErrback:function(fn){ +if(arguments.length>1){ +fn=MochiKit.Base.partial.apply(null,arguments); +} +return this.addCallbacks(null,fn); +},addCallbacks:function(cb,eb){ +if(this.chained){ +throw new Error("Chained Deferreds can not be re-used"); +} +this.chain.push([cb,eb]); +if(this.fired>=0){ +this._fire(); +} +return this; +},_fire:function(){ +var _2f4=this.chain; +var _2f5=this.fired; +var res=this.results[_2f5]; +var self=this; +var cb=null; +while(_2f4.length>0&&this.paused===0){ +var pair=_2f4.shift(); +var f=pair[_2f5]; +if(f===null){ +continue; +} +try{ +res=f(res); +_2f5=((res instanceof Error)?1:0); +if(res instanceof MochiKit.Async.Deferred){ +cb=function(res){ +self._resback(res); +self.paused--; +if((self.paused===0)&&(self.fired>=0)){ +self._fire(); +} +}; +this.paused++; +} +} +catch(err){ +_2f5=1; +if(!(err instanceof Error)){ +err=new MochiKit.Async.GenericError(err); +} +res=err; +} +} +this.fired=_2f5; +this.results[_2f5]=res; +if(cb&&this.paused){ +res.addBoth(cb); +res.chained=true; +} +}}; +MochiKit.Base.update(MochiKit.Async,{evalJSONRequest:function(req){ +return MochiKit.Base.evalJSON(req.responseText); +},succeed:function(_2fd){ +var d=new MochiKit.Async.Deferred(); +d.callback.apply(d,arguments); +return d; +},fail:function(_2ff){ +var d=new MochiKit.Async.Deferred(); +d.errback.apply(d,arguments); +return d; +},getXMLHttpRequest:function(){ +var self=arguments.callee; +if(!self.XMLHttpRequest){ +var _302=[function(){ +return new XMLHttpRequest(); +},function(){ +return new ActiveXObject("Msxml2.XMLHTTP"); +},function(){ +return new ActiveXObject("Microsoft.XMLHTTP"); +},function(){ +return new ActiveXObject("Msxml2.XMLHTTP.4.0"); +},function(){ +throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest"); +}]; +for(var i=0;i<_302.length;i++){ +var func=_302[i]; +try{ +self.XMLHttpRequest=func; +return func(); +} +catch(e){ +} +} +} +return self.XMLHttpRequest(); +},_xhr_onreadystatechange:function(d){ +var m=MochiKit.Base; +if(this.readyState==4){ +try{ +this.onreadystatechange=null; +} +catch(e){ +try{ +this.onreadystatechange=m.noop; +} +catch(e){ +} +} +var _307=null; +try{ +_307=this.status; +if(!_307&&m.isNotEmpty(this.responseText)){ +_307=304; +} +} +catch(e){ +} +if(_307==200||_307==201||_307==204||_307==304||_307==1223){ +d.callback(this); +}else{ +var err=new MochiKit.Async.XMLHttpRequestError(this,"Request failed"); +if(err.number){ +d.errback(err); +}else{ +d.errback(err); +} +} +} +},_xhr_canceller:function(req){ +try{ +req.onreadystatechange=null; +} +catch(e){ +try{ +req.onreadystatechange=MochiKit.Base.noop; +} +catch(e){ +} +} +req.abort(); +},sendXMLHttpRequest:function(req,_30b){ +if(typeof (_30b)=="undefined"||_30b===null){ +_30b=""; +} +var m=MochiKit.Base; +var self=MochiKit.Async; +var d=new self.Deferred(m.partial(self._xhr_canceller,req)); +try{ +req.onreadystatechange=m.bind(self._xhr_onreadystatechange,req,d); +req.send(_30b); +} +catch(e){ +try{ +req.onreadystatechange=null; +} +catch(ignore){ +} +d.errback(e); +} +return d; +},doXHR:function(url,opts){ +var self=MochiKit.Async; +return self.callLater(0,self._doXHR,url,opts); +},_doXHR:function(url,opts){ +var m=MochiKit.Base; +opts=m.update({method:"GET",sendContent:""},opts); +var self=MochiKit.Async; +var req=self.getXMLHttpRequest(); +if(opts.queryString){ +var qs=m.queryString(opts.queryString); +if(qs){ +url+="?"+qs; +} +} +if("username" in opts){ +req.open(opts.method,url,true,opts.username,opts.password); +}else{ +req.open(opts.method,url,true); +} +if(req.overrideMimeType&&opts.mimeType){ +req.overrideMimeType(opts.mimeType); +} +req.setRequestHeader("X-Requested-With","XMLHttpRequest"); +if(opts.headers){ +var _318=opts.headers; +if(!m.isArrayLike(_318)){ +_318=m.items(_318); +} +for(var i=0;i<_318.length;i++){ +var _31a=_318[i]; +var name=_31a[0]; +var _31c=_31a[1]; +req.setRequestHeader(name,_31c); +} +} +return self.sendXMLHttpRequest(req,opts.sendContent); +},_buildURL:function(url){ +if(arguments.length>1){ +var m=MochiKit.Base; +var qs=m.queryString.apply(null,m.extend(null,arguments,1)); +if(qs){ +return url+"?"+qs; +} +} +return url; +},doSimpleXMLHttpRequest:function(url){ +var self=MochiKit.Async; +url=self._buildURL.apply(self,arguments); +return self.doXHR(url); +},loadJSONDoc:function(url){ +var self=MochiKit.Async; +url=self._buildURL.apply(self,arguments); +var d=self.doXHR(url,{"mimeType":"text/plain","headers":[["Accept","application/json"]]}); +d=d.addCallback(self.evalJSONRequest); +return d; +},wait:function(_325,_326){ +var d=new MochiKit.Async.Deferred(); +var m=MochiKit.Base; +if(typeof (_326)!="undefined"){ +d.addCallback(function(){ +return _326; +}); +} +var _329=setTimeout(m.bind("callback",d),Math.floor(_325*1000)); +d.canceller=function(){ +try{ +clearTimeout(_329); +} +catch(e){ +} +}; +return d; +},callLater:function(_32a,func){ +var m=MochiKit.Base; +var _32d=m.partial.apply(m,m.extend(null,arguments,1)); +return MochiKit.Async.wait(_32a).addCallback(function(res){ +return _32d(); +}); +}}); +MochiKit.Async.DeferredLock=function(){ +this.waiting=[]; +this.locked=false; +this.id=this._nextId(); +}; +MochiKit.Async.DeferredLock.prototype={__class__:MochiKit.Async.DeferredLock,acquire:function(){ +var d=new MochiKit.Async.Deferred(); +if(this.locked){ +this.waiting.push(d); +}else{ +this.locked=true; +d.callback(this); +} +return d; +},release:function(){ +if(!this.locked){ +throw TypeError("Tried to release an unlocked DeferredLock"); +} +this.locked=false; +if(this.waiting.length>0){ +this.locked=true; +this.waiting.shift().callback(this); +} +},_nextId:MochiKit.Base.counter(),repr:function(){ +var _330; +if(this.locked){ +_330="locked, "+this.waiting.length+" waiting"; +}else{ +_330="unlocked"; +} +return "DeferredLock("+this.id+", "+_330+")"; +},toString:MochiKit.Base.forwardCall("repr")}; +MochiKit.Async.DeferredList=function(list,_332,_333,_334,_335){ +MochiKit.Async.Deferred.apply(this,[_335]); +this.list=list; +var _336=[]; +this.resultList=_336; +this.finishedCount=0; +this.fireOnOneCallback=_332; +this.fireOnOneErrback=_333; +this.consumeErrors=_334; +var cb=MochiKit.Base.bind(this._cbDeferred,this); +for(var i=0;i=0){ +var opt=elem.options[elem.selectedIndex]; +var v=opt.value; +if(!v){ +var h=opt.outerHTML; +if(h&&!h.match(/^[^>]+\svalue\s*=/i)){ +v=opt.text; +} +} +_355.push(name); +_356.push(v); +return null; +} +_355.push(name); +_356.push(""); +return null; +}else{ +var opts=elem.options; +if(!opts.length){ +_355.push(name); +_356.push(""); +return null; +} +for(var i=0;i]+\svalue\s*=/i)){ +v=opt.text; +} +} +_355.push(name); +_356.push(v); +} +return null; +} +} +if(_35b==="FORM"||_35b==="P"||_35b==="SPAN"||_35b==="DIV"){ +return elem.childNodes; +} +_355.push(name); +_356.push(elem.value||""); +return null; +} +return elem.childNodes; +}); +return [_355,_356]; +},withDocument:function(doc,func){ +var self=MochiKit.DOM; +var _364=self._document; +var rval; +try{ +self._document=doc; +rval=func(); +} +catch(e){ +self._document=_364; +throw e; +} +self._document=_364; +return rval; +},registerDOMConverter:function(name,_367,wrap,_369){ +MochiKit.DOM.domConverters.register(name,_367,wrap,_369); +},coerceToDOM:function(node,ctx){ +var m=MochiKit.Base; +var im=MochiKit.Iter; +var self=MochiKit.DOM; +if(im){ +var iter=im.iter; +var _370=im.repeat; +} +var map=m.map; +var _372=self.domConverters; +var _373=arguments.callee; +var _374=m.NotFound; +while(true){ +if(typeof (node)=="undefined"||node===null){ +return null; +} +if(typeof (node)=="function"&&typeof (node.length)=="number"&&!(node instanceof Function)){ +node=im?im.list(node):m.extend(null,node); +} +if(typeof (node.nodeType)!="undefined"&&node.nodeType>0){ +return node; +} +if(typeof (node)=="number"||typeof (node)=="boolean"){ +node=node.toString(); +} +if(typeof (node)=="string"){ +return self._document.createTextNode(node); +} +if(typeof (node.__dom__)=="function"){ +node=node.__dom__(ctx); +continue; +} +if(typeof (node.dom)=="function"){ +node=node.dom(ctx); +continue; +} +if(typeof (node)=="function"){ +node=node.apply(ctx,[ctx]); +continue; +} +if(im){ +var _375=null; +try{ +_375=iter(node); +} +catch(e){ +} +if(_375){ +return map(_373,_375,_370(ctx)); +} +}else{ +if(m.isArrayLike(node)){ +var func=function(n){ +return _373(n,ctx); +}; +return map(func,node); +} +} +try{ +node=_372.match(node,ctx); +continue; +} +catch(e){ +if(e!=_374){ +throw e; +} +} +return self._document.createTextNode(node.toString()); +} +return undefined; +},isChildNode:function(node,_379){ +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +node=self.getElement(node); +} +if(typeof (_379)=="string"){ +_379=self.getElement(_379); +} +if(typeof (node)=="undefined"||node===null){ +return false; +} +while(node!=null&&node!==self._document){ +if(node===_379){ +return true; +} +node=node.parentNode; +} +return false; +},setNodeAttribute:function(node,attr,_37d){ +var o={}; +o[attr]=_37d; +try{ +return MochiKit.DOM.updateNodeAttributes(node,o); +} +catch(e){ +} +return null; +},getNodeAttribute:function(node,attr){ +var self=MochiKit.DOM; +var _382=self.attributeArray.renames[attr]; +var _383=self.attributeArray.ignoreAttr[attr]; +node=self.getElement(node); +try{ +if(_382){ +return node[_382]; +} +var _384=node.getAttribute(attr); +if(_384!=_383){ +return _384; +} +} +catch(e){ +} +return null; +},removeNodeAttribute:function(node,attr){ +var self=MochiKit.DOM; +var _388=self.attributeArray.renames[attr]; +node=self.getElement(node); +try{ +if(_388){ +return node[_388]; +} +return node.removeAttribute(attr); +} +catch(e){ +} +return null; +},updateNodeAttributes:function(node,_38a){ +var elem=node; +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +elem=self.getElement(node); +} +if(_38a){ +var _38d=MochiKit.Base.updatetree; +if(self.attributeArray.compliant){ +for(var k in _38a){ +var v=_38a[k]; +if(typeof (v)=="object"&&typeof (elem[k])=="object"){ +if(k=="style"&&MochiKit.Style){ +MochiKit.Style.setStyle(elem,v); +}else{ +_38d(elem[k],v); +} +}else{ +if(k.substring(0,2)=="on"){ +if(typeof (v)=="string"){ +v=new Function(v); +} +elem[k]=v; +}else{ +elem.setAttribute(k,v); +} +} +if(typeof (elem[k])=="string"&&elem[k]!=v){ +elem[k]=v; +} +} +}else{ +var _390=self.attributeArray.renames; +for(var k in _38a){ +v=_38a[k]; +var _391=_390[k]; +if(k=="style"&&typeof (v)=="string"){ +elem.style.cssText=v; +}else{ +if(typeof (_391)=="string"){ +elem[_391]=v; +}else{ +if(typeof (elem[k])=="object"&&typeof (v)=="object"){ +if(k=="style"&&MochiKit.Style){ +MochiKit.Style.setStyle(elem,v); +}else{ +_38d(elem[k],v); +} +}else{ +if(k.substring(0,2)=="on"){ +if(typeof (v)=="string"){ +v=new Function(v); +} +elem[k]=v; +}else{ +elem.setAttribute(k,v); +} +} +} +} +if(typeof (elem[k])=="string"&&elem[k]!=v){ +elem[k]=v; +} +} +} +} +return elem; +},appendChildNodes:function(node){ +var elem=node; +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +elem=self.getElement(node); +} +var _395=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; +var _396=MochiKit.Base.concat; +while(_395.length){ +var n=_395.shift(); +if(typeof (n)=="undefined"||n===null){ +}else{ +if(typeof (n.nodeType)=="number"){ +elem.appendChild(n); +}else{ +_395=_396(n,_395); +} +} +} +return elem; +},insertSiblingNodesBefore:function(node){ +var elem=node; +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +elem=self.getElement(node); +} +var _39b=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; +var _39c=elem.parentNode; +var _39d=MochiKit.Base.concat; +while(_39b.length){ +var n=_39b.shift(); +if(typeof (n)=="undefined"||n===null){ +}else{ +if(typeof (n.nodeType)=="number"){ +_39c.insertBefore(n,elem); +}else{ +_39b=_39d(n,_39b); +} +} +} +return _39c; +},insertSiblingNodesAfter:function(node){ +var elem=node; +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +elem=self.getElement(node); +} +var _3a2=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; +if(elem.nextSibling){ +return self.insertSiblingNodesBefore(elem.nextSibling,_3a2); +}else{ +return self.appendChildNodes(elem.parentNode,_3a2); +} +},replaceChildNodes:function(node){ +var elem=node; +var self=MochiKit.DOM; +if(typeof (node)=="string"){ +elem=self.getElement(node); +arguments[0]=elem; +} +var _3a6; +while((_3a6=elem.firstChild)){ +elem.removeChild(_3a6); +} +if(arguments.length<2){ +return elem; +}else{ +return self.appendChildNodes.apply(this,arguments); +} +},createDOM:function(name,_3a8){ +var elem; +var self=MochiKit.DOM; +var m=MochiKit.Base; +if(typeof (_3a8)=="string"||typeof (_3a8)=="number"){ +var args=m.extend([name,null],arguments,1); +return arguments.callee.apply(this,args); +} +if(typeof (name)=="string"){ +var _3ad=self._xhtml; +if(_3a8&&!self.attributeArray.compliant){ +var _3ae=""; +if("name" in _3a8){ +_3ae+=" name=\""+self.escapeHTML(_3a8.name)+"\""; +} +if(name=="input"&&"type" in _3a8){ +_3ae+=" type=\""+self.escapeHTML(_3a8.type)+"\""; +} +if(_3ae){ +name="<"+name+_3ae+">"; +_3ad=false; +} +} +var d=self._document; +if(_3ad&&d===document){ +elem=d.createElementNS("http://www.w3.org/1999/xhtml",name); +}else{ +elem=d.createElement(name); +} +}else{ +elem=name; +} +if(_3a8){ +self.updateNodeAttributes(elem,_3a8); +} +if(arguments.length<=2){ +return elem; +}else{ +var args=m.extend([elem],arguments,2); +return self.appendChildNodes.apply(this,args); +} +},createDOMFunc:function(){ +var m=MochiKit.Base; +return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments)); +},removeElement:function(elem){ +var self=MochiKit.DOM; +if(typeof (elem)=="string"){ +elem=self.getElement(elem); +} +var e=self.coerceToDOM(elem); +e.parentNode.removeChild(e); +return e; +},swapDOM:function(dest,src){ +var self=MochiKit.DOM; +dest=self.getElement(dest); +var _3b7=dest.parentNode; +if(src){ +if(typeof (src)=="string"){ +src=self.getElement(src); +} +src=self.coerceToDOM(src,_3b7); +_3b7.replaceChild(src,dest); +}else{ +_3b7.removeChild(dest); +} +return src; +},getElement:function(id){ +var self=MochiKit.DOM; +if(arguments.length==1){ +return ((typeof (id)=="string")?self._document.getElementById(id):id); +}else{ +return MochiKit.Base.map(self.getElement,arguments); +} +},getElementsByTagAndClassName:function(_3ba,_3bb,_3bc){ +var self=MochiKit.DOM; +if(typeof (_3ba)=="undefined"||_3ba===null){ +_3ba="*"; +} +if(typeof (_3bc)=="undefined"||_3bc===null){ +_3bc=self._document; +} +_3bc=self.getElement(_3bc); +if(_3bc==null){ +return []; +} +var _3be=(_3bc.getElementsByTagName(_3ba)||self._document.all); +if(typeof (_3bb)=="undefined"||_3bb===null){ +return MochiKit.Base.extend(null,_3be); +} +var _3bf=[]; +for(var i=0;i<_3be.length;i++){ +var _3c1=_3be[i]; +var cls=_3c1.className; +if(typeof (cls)!="string"){ +cls=_3c1.getAttribute("class"); +} +if(typeof (cls)=="string"){ +var _3c3=cls.split(" "); +for(var j=0;j<_3c3.length;j++){ +if(_3c3[j]==_3bb){ +_3bf.push(_3c1); +break; +} +} +} +} +return _3bf; +},_newCallStack:function(path,once){ +var rval=function(){ +var _3c8=arguments.callee.callStack; +for(var i=0;i<_3c8.length;i++){ +if(_3c8[i].apply(this,arguments)===false){ +break; +} +} +if(once){ +try{ +this[path]=null; +} +catch(e){ +} +} +}; +rval.callStack=[]; +return rval; +},addToCallStack:function(_3ca,path,func,once){ +var self=MochiKit.DOM; +var _3cf=_3ca[path]; +var _3d0=_3cf; +if(!(typeof (_3cf)=="function"&&typeof (_3cf.callStack)=="object"&&_3cf.callStack!==null)){ +_3d0=self._newCallStack(path,once); +if(typeof (_3cf)=="function"){ +_3d0.callStack.push(_3cf); +} +_3ca[path]=_3d0; +} +_3d0.callStack.push(func); +},addLoadEvent:function(func){ +var self=MochiKit.DOM; +self.addToCallStack(self._window,"onload",func,true); +},focusOnLoad:function(_3d3){ +var self=MochiKit.DOM; +self.addLoadEvent(function(){ +_3d3=self.getElement(_3d3); +if(_3d3){ +_3d3.focus(); +} +}); +},setElementClass:function(_3d5,_3d6){ +var self=MochiKit.DOM; +var obj=self.getElement(_3d5); +if(self.attributeArray.compliant){ +obj.setAttribute("class",_3d6); +}else{ +obj.setAttribute("className",_3d6); +} +},toggleElementClass:function(_3d9){ +var self=MochiKit.DOM; +for(var i=1;i/g,">"); +},toHTML:function(dom){ +return MochiKit.DOM.emitHTML(dom).join(""); +},emitHTML:function(dom,lst){ +if(typeof (lst)=="undefined"||lst===null){ +lst=[]; +} +var _3fc=[dom]; +var self=MochiKit.DOM; +var _3fe=self.escapeHTML; +var _3ff=self.attributeArray; +while(_3fc.length){ +dom=_3fc.pop(); +if(typeof (dom)=="string"){ +lst.push(dom); +}else{ +if(dom.nodeType==1){ +lst.push("<"+dom.tagName.toLowerCase()); +var _400=[]; +var _401=_3ff(dom); +for(var i=0;i<_401.length;i++){ +var a=_401[i]; +_400.push([" ",a.name,"=\"",_3fe(a.value),"\""]); +} +_400.sort(); +for(i=0;i<_400.length;i++){ +var _404=_400[i]; +for(var j=0;j<_404.length;j++){ +lst.push(_404[j]); +} +} +if(dom.hasChildNodes()){ +lst.push(">"); +_3fc.push(""); +var _406=dom.childNodes; +for(i=_406.length-1;i>=0;i--){ +_3fc.push(_406[i]); +} +}else{ +lst.push("/>"); +} +}else{ +if(dom.nodeType==3){ +lst.push(_3fe(dom.nodeValue)); +} +} +} +} +return lst; +},scrapeText:function(node,_408){ +var rval=[]; +(function(node){ +var cn=node.childNodes; +if(cn){ +for(var i=0;i0){ +var _425=m.filter; +_424=function(node){ +return _425(_424.ignoreAttrFilter,node.attributes); +}; +_424.ignoreAttr={}; +var _427=_423.attributes; +var _428=_424.ignoreAttr; +for(var i=0;i<_427.length;i++){ +var a=_427[i]; +_428[a.name]=a.value; +} +_424.ignoreAttrFilter=function(a){ +return (_424.ignoreAttr[a.name]!=a.value); +}; +_424.compliant=false; +_424.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor","readonly":"readOnly","colspan":"colSpan","bgcolor":"bgColor","cellspacing":"cellSpacing","cellpadding":"cellPadding"}; +}else{ +_424=function(node){ +return node.attributes; +}; +_424.compliant=true; +_424.ignoreAttr={}; +_424.renames={}; +} +_424.__export__=false; +this.attributeArray=_424; +m._deprecated(this,"computedStyle","MochiKit.Style.getStyle","1.4",true); +m._deprecated(this,"elementDimensions","MochiKit.Style.getElementDimensions","1.4"); +m._deprecated(this,"elementPosition","MochiKit.Style.getElementPosition","1.4"); +m._deprecated(this,"getViewportDimensions","MochiKit.Style.getViewportDimensions","1.4"); +m._deprecated(this,"hideElement","MochiKit.Style.hideElement","1.4"); +m._deprecated(this,"makeClipping","MochiKit.Style.makeClipping","1.4.1"); +m._deprecated(this,"makePositioned","MochiKit.Style.makePositioned","1.4.1"); +m._deprecated(this,"setElementDimensions","MochiKit.Style.setElementDimensions","1.4"); +m._deprecated(this,"setElementPosition","MochiKit.Style.setElementPosition","1.4"); +m._deprecated(this,"setDisplayForElement","MochiKit.Style.setDisplayForElement","1.4"); +m._deprecated(this,"setOpacity","MochiKit.Style.setOpacity","1.4"); +m._deprecated(this,"showElement","MochiKit.Style.showElement","1.4"); +m._deprecated(this,"undoClipping","MochiKit.Style.undoClipping","1.4.1"); +m._deprecated(this,"undoPositioned","MochiKit.Style.undoPositioned","1.4.1"); +m._deprecated(this,"Coordinates","MochiKit.Style.Coordinates","1.4"); +m._deprecated(this,"Dimensions","MochiKit.Style.Dimensions","1.4"); +var _42d=this.createDOMFunc; +this.UL=_42d("ul"); +this.OL=_42d("ol"); +this.LI=_42d("li"); +this.DL=_42d("dl"); +this.DT=_42d("dt"); +this.DD=_42d("dd"); +this.TD=_42d("td"); +this.TR=_42d("tr"); +this.TBODY=_42d("tbody"); +this.THEAD=_42d("thead"); +this.TFOOT=_42d("tfoot"); +this.TABLE=_42d("table"); +this.TH=_42d("th"); +this.INPUT=_42d("input"); +this.SPAN=_42d("span"); +this.A=_42d("a"); +this.DIV=_42d("div"); +this.IMG=_42d("img"); +this.BUTTON=_42d("button"); +this.TT=_42d("tt"); +this.PRE=_42d("pre"); +this.H1=_42d("h1"); +this.H2=_42d("h2"); +this.H3=_42d("h3"); +this.H4=_42d("h4"); +this.H5=_42d("h5"); +this.H6=_42d("h6"); +this.BR=_42d("br"); +this.HR=_42d("hr"); +this.LABEL=_42d("label"); +this.TEXTAREA=_42d("textarea"); +this.FORM=_42d("form"); +this.P=_42d("p"); +this.SELECT=_42d("select"); +this.OPTION=_42d("option"); +this.OPTGROUP=_42d("optgroup"); +this.LEGEND=_42d("legend"); +this.FIELDSET=_42d("fieldset"); +this.STRONG=_42d("strong"); +this.CANVAS=_42d("canvas"); +this.$=this.getElement; +m.nameFunctions(this); +}}); +MochiKit.DOM.__new__(((typeof (window)=="undefined")?this:window)); +if(MochiKit.__export__){ +withWindow=MochiKit.DOM.withWindow; +withDocument=MochiKit.DOM.withDocument; +} +MochiKit.Base._exportSymbols(this,MochiKit.DOM); +MochiKit.Base._module("Selector","1.5",["Base","DOM","Iter"]); +MochiKit.Selector.Selector=function(_42e){ +this.params={classNames:[],pseudoClassNames:[]}; +this.expression=_42e.toString().replace(/(^\s+|\s+$)/g,""); +this.parseExpression(); +this.compileMatcher(); +}; +MochiKit.Selector.Selector.prototype={__class__:MochiKit.Selector.Selector,parseExpression:function(){ +function abort(_42f){ +throw "Parse error in selector: "+_42f; +} +if(this.expression==""){ +abort("empty expression"); +} +var repr=MochiKit.Base.repr; +var _431=this.params; +var expr=this.expression; +var _433,_434,_435,rest; +while(_433=expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!^$*]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)){ +_431.attributes=_431.attributes||[]; +_431.attributes.push({name:_433[2],operator:_433[3],value:_433[4]||_433[5]||""}); +expr=_433[1]; +} +if(expr=="*"){ +return this.params.wildcard=true; +} +while(_433=expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+(?:\([^)]*\))?)(.*)/i)){ +_434=_433[1]; +_435=_433[2]; +rest=_433[3]; +switch(_434){ +case "#": +_431.id=_435; +break; +case ".": +_431.classNames.push(_435); +break; +case ":": +_431.pseudoClassNames.push(_435); +break; +case "": +case undefined: +_431.tagName=_435.toUpperCase(); +break; +default: +abort(repr(expr)); +} +expr=rest; +} +if(expr.length>0){ +abort(repr(expr)); +} +},buildMatchExpression:function(){ +var repr=MochiKit.Base.repr; +var _438=this.params; +var _439=[]; +var _43a,i; +function childElements(_43c){ +return "MochiKit.Base.filter(function (node) { return node.nodeType == 1; }, "+_43c+".childNodes)"; +} +if(_438.wildcard){ +_439.push("true"); +} +if(_43a=_438.id){ +_439.push("element.id == "+repr(_43a)); +} +if(_43a=_438.tagName){ +_439.push("element.tagName.toUpperCase() == "+repr(_43a)); +} +if((_43a=_438.classNames).length>0){ +for(i=0;i<_43a.length;i++){ +_439.push("MochiKit.DOM.hasElementClass(element, "+repr(_43a[i])+")"); +} +} +if((_43a=_438.pseudoClassNames).length>0){ +for(i=0;i<_43a.length;i++){ +var _43d=_43a[i].match(/^([^(]+)(?:\((.*)\))?$/); +var _43e=_43d[1]; +var _43f=_43d[2]; +switch(_43e){ +case "root": +_439.push("element.nodeType == 9 || element === element.ownerDocument.documentElement"); +break; +case "nth-child": +case "nth-last-child": +case "nth-of-type": +case "nth-last-of-type": +_43d=_43f.match(/^((?:(\d+)n\+)?(\d+)|odd|even)$/); +if(!_43d){ +throw "Invalid argument to pseudo element nth-child: "+_43f; +} +var a,b; +if(_43d[0]=="odd"){ +a=2; +b=1; +}else{ +if(_43d[0]=="even"){ +a=2; +b=0; +}else{ +a=_43d[2]&&parseInt(_43d)||null; +b=parseInt(_43d[3]); +} +} +_439.push("this.nthChild(element,"+a+","+b+","+!!_43e.match("^nth-last")+","+!!_43e.match("of-type$")+")"); +break; +case "first-child": +_439.push("this.nthChild(element, null, 1)"); +break; +case "last-child": +_439.push("this.nthChild(element, null, 1, true)"); +break; +case "first-of-type": +_439.push("this.nthChild(element, null, 1, false, true)"); +break; +case "last-of-type": +_439.push("this.nthChild(element, null, 1, true, true)"); +break; +case "only-child": +_439.push(childElements("element.parentNode")+".length == 1"); +break; +case "only-of-type": +_439.push("MochiKit.Base.filter(function (node) { return node.tagName == element.tagName; }, "+childElements("element.parentNode")+").length == 1"); +break; +case "empty": +_439.push("element.childNodes.length == 0"); +break; +case "enabled": +_439.push("(this.isUIElement(element) && element.disabled === false)"); +break; +case "disabled": +_439.push("(this.isUIElement(element) && element.disabled === true)"); +break; +case "checked": +_439.push("(this.isUIElement(element) && element.checked === true)"); +break; +case "not": +var _442=new MochiKit.Selector.Selector(_43f); +_439.push("!( "+_442.buildMatchExpression()+")"); +break; +} +} +} +if(_43a=_438.attributes){ +MochiKit.Base.map(function(_443){ +var _444="MochiKit.DOM.getNodeAttribute(element, "+repr(_443.name)+")"; +var _445=function(_446){ +return _444+".split("+repr(_446)+")"; +}; +_439.push(_444+" != null"); +switch(_443.operator){ +case "=": +_439.push(_444+" == "+repr(_443.value)); +break; +case "~=": +_439.push("MochiKit.Base.findValue("+_445(" ")+", "+repr(_443.value)+") > -1"); +break; +case "^=": +_439.push(_444+".substring(0, "+_443.value.length+") == "+repr(_443.value)); +break; +case "$=": +_439.push(_444+".substring("+_444+".length - "+_443.value.length+") == "+repr(_443.value)); +break; +case "*=": +_439.push(_444+".match("+repr(_443.value)+")"); +break; +case "|=": +_439.push(_445("-")+"[0].toUpperCase() == "+repr(_443.value.toUpperCase())); +break; +case "!=": +_439.push(_444+" != "+repr(_443.value)); +break; +case "": +case undefined: +break; +default: +throw "Unknown operator "+_443.operator+" in selector"; +} +},_43a); +} +return _439.join(" && "); +},compileMatcher:function(){ +var code="return (!element.tagName) ? false : "+this.buildMatchExpression()+";"; +this.match=new Function("element",code); +},nthChild:function(_448,a,b,_44b,_44c){ +var _44d=MochiKit.Base.filter(function(node){ +return node.nodeType==1; +},_448.parentNode.childNodes); +if(_44c){ +_44d=MochiKit.Base.filter(function(node){ +return node.tagName==_448.tagName; +},_44d); +} +if(_44b){ +_44d=MochiKit.Iter.reversed(_44d); +} +if(a){ +var _450=MochiKit.Base.findIdentical(_44d,_448); +return ((_450+1-b)/a)%1==0; +}else{ +return b==MochiKit.Base.findIdentical(_44d,_448)+1; +} +},isUIElement:function(_451){ +return MochiKit.Base.findValue(["input","button","select","option","textarea","object"],_451.tagName.toLowerCase())>-1; +},findElements:function(_452,axis){ +var _454; +if(axis==undefined){ +axis=""; +} +function inScope(_455,_456){ +if(axis==""){ +return MochiKit.DOM.isChildNode(_455,_456); +}else{ +if(axis==">"){ +return _455.parentNode===_456; +}else{ +if(axis=="+"){ +return _455===nextSiblingElement(_456); +}else{ +if(axis=="~"){ +var _457=_456; +while(_457=nextSiblingElement(_457)){ +if(_455===_457){ +return true; +} +} +return false; +}else{ +throw "Invalid axis: "+axis; +} +} +} +} +} +if(_454=MochiKit.DOM.getElement(this.params.id)){ +if(this.match(_454)){ +if(!_452||inScope(_454,_452)){ +return [_454]; +} +} +} +function nextSiblingElement(node){ +node=node.nextSibling; +while(node&&node.nodeType!=1){ +node=node.nextSibling; +} +return node; +} +if(axis==""){ +_452=(_452||MochiKit.DOM.currentDocument()).getElementsByTagName(this.params.tagName||"*"); +}else{ +if(axis==">"){ +if(!_452){ +throw "> combinator not allowed without preceeding expression"; +} +_452=MochiKit.Base.filter(function(node){ +return node.nodeType==1; +},_452.childNodes); +}else{ +if(axis=="+"){ +if(!_452){ +throw "+ combinator not allowed without preceeding expression"; +} +_452=nextSiblingElement(_452)&&[nextSiblingElement(_452)]; +}else{ +if(axis=="~"){ +if(!_452){ +throw "~ combinator not allowed without preceeding expression"; +} +var _45a=[]; +while(nextSiblingElement(_452)){ +_452=nextSiblingElement(_452); +_45a.push(_452); +} +_452=_45a; +} +} +} +} +if(!_452){ +return []; +} +var _45b=MochiKit.Base.filter(MochiKit.Base.bind(function(_45c){ +return this.match(_45c); +},this),_452); +return _45b; +},repr:function(){ +return "Selector("+this.expression+")"; +},toString:MochiKit.Base.forwardCall("repr")}; +MochiKit.Base.update(MochiKit.Selector,{findChildElements:function(_45d,_45e){ +_45d=MochiKit.DOM.getElement(_45d); +var uniq=function(arr){ +var res=[]; +for(var i=0;i+~]$/); +if(_468){ +_464=_468[0]; +return _466; +}else{ +var _469=new MochiKit.Selector.Selector(expr); +var _46a=MochiKit.Iter.reduce(function(_46b,_46c){ +return MochiKit.Base.extend(_46b,_469.findElements(_46c||_45d,_464)); +},_466,[]); +_464=""; +return _46a; +} +}; +var _46d=_463.replace(/(^\s+|\s+$)/g,"").split(/\s+/); +return uniq(MochiKit.Iter.reduce(_465,_46d,[null])); +},_45e)); +},findDocElements:function(){ +return MochiKit.Selector.findChildElements(MochiKit.DOM.currentDocument(),arguments); +},__new__:function(){ +this.$$=this.findDocElements; +MochiKit.Base.nameFunctions(this); +}}); +MochiKit.Selector.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.Selector); +MochiKit.Base._module("Style","1.5",["Base","DOM"]); +MochiKit.Style.Dimensions=function(w,h){ +if(!(this instanceof MochiKit.Style.Dimensions)){ +return new MochiKit.Style.Dimensions(w,h); +} +this.w=w; +this.h=h; +}; +MochiKit.Style.Dimensions.prototype.__repr__=function(){ +var repr=MochiKit.Base.repr; +return "{w: "+repr(this.w)+", h: "+repr(this.h)+"}"; +}; +MochiKit.Style.Dimensions.prototype.toString=function(){ +return this.__repr__(); +}; +MochiKit.Style.Coordinates=function(x,y){ +if(!(this instanceof MochiKit.Style.Coordinates)){ +return new MochiKit.Style.Coordinates(x,y); +} +this.x=x; +this.y=y; +}; +MochiKit.Style.Coordinates.prototype.__repr__=function(){ +var repr=MochiKit.Base.repr; +return "{x: "+repr(this.x)+", y: "+repr(this.y)+"}"; +}; +MochiKit.Style.Coordinates.prototype.toString=function(){ +return this.__repr__(); +}; +MochiKit.Base.update(MochiKit.Style,{getStyle:function(elem,_475){ +var dom=MochiKit.DOM; +var d=dom._document; +elem=dom.getElement(elem); +_475=MochiKit.Base.camelize(_475); +if(!elem||elem==d){ +return undefined; +} +if(_475=="opacity"&&typeof (elem.filters)!="undefined"){ +var _478=(MochiKit.Style.getStyle(elem,"filter")||"").match(/alpha\(opacity=(.*)\)/); +if(_478&&_478[1]){ +return parseFloat(_478[1])/100; +} +return 1; +} +if(_475=="float"||_475=="cssFloat"||_475=="styleFloat"){ +if(elem.style["float"]){ +return elem.style["float"]; +}else{ +if(elem.style.cssFloat){ +return elem.style.cssFloat; +}else{ +if(elem.style.styleFloat){ +return elem.style.styleFloat; +}else{ +return "none"; +} +} +} +} +var _479=elem.style?elem.style[_475]:null; +if(!_479){ +if(d.defaultView&&d.defaultView.getComputedStyle){ +var css=d.defaultView.getComputedStyle(elem,null); +_475=_475.replace(/([A-Z])/g,"-$1").toLowerCase(); +_479=css?css.getPropertyValue(_475):null; +}else{ +if(elem.currentStyle){ +_479=elem.currentStyle[_475]; +if(/^\d/.test(_479)&&!/px$/.test(_479)&&_475!="fontWeight"){ +var left=elem.style.left; +var _47c=elem.runtimeStyle.left; +elem.runtimeStyle.left=elem.currentStyle.left; +elem.style.left=_479||0; +_479=elem.style.pixelLeft+"px"; +elem.style.left=left; +elem.runtimeStyle.left=_47c; +} +} +} +} +if(_475=="opacity"){ +_479=parseFloat(_479); +} +if(/Opera/.test(navigator.userAgent)&&(MochiKit.Base.findValue(["left","top","right","bottom"],_475)!=-1)){ +if(MochiKit.Style.getStyle(elem,"position")=="static"){ +_479="auto"; +} +} +return _479=="auto"?null:_479; +},setStyle:function(elem,_47e){ +elem=MochiKit.DOM.getElement(elem); +for(var name in _47e){ +switch(name){ +case "opacity": +MochiKit.Style.setOpacity(elem,_47e[name]); +break; +case "float": +case "cssFloat": +case "styleFloat": +if(typeof (elem.style["float"])!="undefined"){ +elem.style["float"]=_47e[name]; +}else{ +if(typeof (elem.style.cssFloat)!="undefined"){ +elem.style.cssFloat=_47e[name]; +}else{ +elem.style.styleFloat=_47e[name]; +} +} +break; +default: +elem.style[MochiKit.Base.camelize(name)]=_47e[name]; +} +} +},setOpacity:function(elem,o){ +elem=MochiKit.DOM.getElement(elem); +var self=MochiKit.Style; +if(o==1){ +var _483=/Gecko/.test(navigator.userAgent)&&!(/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)); +elem.style["opacity"]=_483?0.999999:1; +if(/MSIE/.test(navigator.userAgent)){ +elem.style["filter"]=self.getStyle(elem,"filter").replace(/alpha\([^\)]*\)/gi,""); +} +}else{ +if(o<0.00001){ +o=0; +} +elem.style["opacity"]=o; +if(/MSIE/.test(navigator.userAgent)){ +elem.style["filter"]=self.getStyle(elem,"filter").replace(/alpha\([^\)]*\)/gi,"")+"alpha(opacity="+o*100+")"; +} +} +},getElementPosition:function(elem,_485){ +var self=MochiKit.Style; +var dom=MochiKit.DOM; +var _488=function(o){ +return o!=null&&o.nodeType==null&&typeof (o.x)=="number"&&typeof (o.y)=="number"; +}; +if(typeof (elem)=="string"){ +elem=dom.getElement(elem); +} +if(elem==null||(!_488(elem)&&self.getStyle(elem,"display")=="none")){ +return undefined; +} +var c=new self.Coordinates(0,0); +var box=null; +var _48c=null; +var d=MochiKit.DOM._document; +var de=d.documentElement; +var b=d.body; +if(!elem.parentNode&&elem.x&&elem.y){ +c.x+=elem.x||0; +c.y+=elem.y||0; +}else{ +if(elem.getBoundingClientRect){ +box=elem.getBoundingClientRect(); +c.x+=box.left+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||0); +c.y+=box.top+(de.scrollTop||b.scrollTop)-(de.clientTop||0); +}else{ +if(elem.offsetParent){ +c.x+=elem.offsetLeft; +c.y+=elem.offsetTop; +_48c=elem.offsetParent; +if(_48c!=elem){ +while(_48c){ +c.x+=parseInt(_48c.style.borderLeftWidth)||0; +c.y+=parseInt(_48c.style.borderTopWidth)||0; +c.x+=_48c.offsetLeft; +c.y+=_48c.offsetTop; +_48c=_48c.offsetParent; +} +} +var ua=navigator.userAgent.toLowerCase(); +if((typeof (opera)!="undefined"&&parseFloat(opera.version())<9)||(ua.indexOf("AppleWebKit")!=-1&&self.getStyle(elem,"position")=="absolute")){ +c.x-=b.offsetLeft; +c.y-=b.offsetTop; +} +if(elem.parentNode){ +_48c=elem.parentNode; +}else{ +_48c=null; +} +while(_48c){ +var _491=_48c.tagName.toUpperCase(); +if(_491==="BODY"||_491==="HTML"){ +break; +} +var disp=self.getStyle(_48c,"display"); +if(disp.search(/^inline|table-row.*$/i)){ +c.x-=_48c.scrollLeft; +c.y-=_48c.scrollTop; +} +if(_48c.parentNode){ +_48c=_48c.parentNode; +}else{ +_48c=null; +} +} +} +} +} +if(_485){ +_485=arguments.callee(_485); +if(_485){ +c.x-=(_485.x||0); +c.y-=(_485.y||0); +} +} +return c; +},setElementPosition:function(elem,_494,_495){ +elem=MochiKit.DOM.getElement(elem); +if(typeof (_495)=="undefined"){ +_495="px"; +} +var _496={}; +var _497=MochiKit.Base.isUndefinedOrNull; +if(!_497(_494.x)){ +_496["left"]=_494.x+_495; +} +if(!_497(_494.y)){ +_496["top"]=_494.y+_495; +} +MochiKit.DOM.updateNodeAttributes(elem,{"style":_496}); +},makePositioned:function(_498){ +_498=MochiKit.DOM.getElement(_498); +var pos=MochiKit.Style.getStyle(_498,"position"); +if(pos=="static"||!pos){ +_498.style.position="relative"; +if(/Opera/.test(navigator.userAgent)){ +_498.style.top=0; +_498.style.left=0; +} +} +},undoPositioned:function(_49a){ +_49a=MochiKit.DOM.getElement(_49a); +if(_49a.style.position=="relative"){ +_49a.style.position=_49a.style.top=_49a.style.left=_49a.style.bottom=_49a.style.right=""; +} +},makeClipping:function(_49b){ +_49b=MochiKit.DOM.getElement(_49b); +var s=_49b.style; +var _49d={"overflow":s.overflow,"overflow-x":s.overflowX,"overflow-y":s.overflowY}; +if((MochiKit.Style.getStyle(_49b,"overflow")||"visible")!="hidden"){ +_49b.style.overflow="hidden"; +_49b.style.overflowX="hidden"; +_49b.style.overflowY="hidden"; +} +return _49d; +},undoClipping:function(_49e,_49f){ +_49e=MochiKit.DOM.getElement(_49e); +if(typeof (_49f)=="string"){ +_49e.style.overflow=_49f; +}else{ +if(_49f!=null){ +_49e.style.overflow=_49f["overflow"]; +_49e.style.overflowX=_49f["overflow-x"]; +_49e.style.overflowY=_49f["overflow-y"]; +} +} +},getElementDimensions:function(elem,_4a1){ +var self=MochiKit.Style; +var dom=MochiKit.DOM; +if(typeof (elem.w)=="number"||typeof (elem.h)=="number"){ +return new self.Dimensions(elem.w||0,elem.h||0); +} +elem=dom.getElement(elem); +if(!elem){ +return undefined; +} +var disp=self.getStyle(elem,"display"); +if(disp=="none"||disp==""||typeof (disp)=="undefined"){ +var s=elem.style; +var _4a6=s.visibility; +var _4a7=s.position; +var _4a8=s.display; +s.visibility="hidden"; +s.position="absolute"; +s.display=self._getDefaultDisplay(elem); +var _4a9=elem.offsetWidth; +var _4aa=elem.offsetHeight; +s.display=_4a8; +s.position=_4a7; +s.visibility=_4a6; +}else{ +_4a9=elem.offsetWidth||0; +_4aa=elem.offsetHeight||0; +} +if(_4a1){ +var _4ab="colSpan" in elem&&"rowSpan" in elem; +var _4ac=(_4ab&&elem.parentNode&&self.getStyle(elem.parentNode,"borderCollapse")=="collapse"); +if(_4ac){ +if(/MSIE/.test(navigator.userAgent)){ +var _4ad=elem.previousSibling?0.5:1; +var _4ae=elem.nextSibling?0.5:1; +}else{ +var _4ad=0.5; +var _4ae=0.5; +} +}else{ +var _4ad=1; +var _4ae=1; +} +_4a9-=Math.round((parseFloat(self.getStyle(elem,"paddingLeft"))||0)+(parseFloat(self.getStyle(elem,"paddingRight"))||0)+_4ad*(parseFloat(self.getStyle(elem,"borderLeftWidth"))||0)+_4ae*(parseFloat(self.getStyle(elem,"borderRightWidth"))||0)); +if(_4ab){ +if(/Gecko|Opera/.test(navigator.userAgent)&&!/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)){ +var _4af=0; +}else{ +if(/MSIE/.test(navigator.userAgent)){ +var _4af=1; +}else{ +var _4af=_4ac?0.5:1; +} +} +}else{ +var _4af=1; +} +_4aa-=Math.round((parseFloat(self.getStyle(elem,"paddingTop"))||0)+(parseFloat(self.getStyle(elem,"paddingBottom"))||0)+_4af*((parseFloat(self.getStyle(elem,"borderTopWidth"))||0)+(parseFloat(self.getStyle(elem,"borderBottomWidth"))||0))); +} +return new self.Dimensions(_4a9,_4aa); +},setElementDimensions:function(elem,_4b1,_4b2){ +elem=MochiKit.DOM.getElement(elem); +if(typeof (_4b2)=="undefined"){ +_4b2="px"; +} +var _4b3={}; +var _4b4=MochiKit.Base.isUndefinedOrNull; +if(!_4b4(_4b1.w)){ +_4b3["width"]=_4b1.w+_4b2; +} +if(!_4b4(_4b1.h)){ +_4b3["height"]=_4b1.h+_4b2; +} +MochiKit.DOM.updateNodeAttributes(elem,{"style":_4b3}); +},_getDefaultDisplay:function(elem){ +var self=MochiKit.Style; +var dom=MochiKit.DOM; +elem=dom.getElement(elem); +if(!elem){ +return undefined; +} +var _4b8=elem.tagName.toUpperCase(); +return self._defaultDisplay[_4b8]||"block"; +},setDisplayForElement:function(_4b9,_4ba){ +var _4bb=MochiKit.Base.extend(null,arguments,1); +var _4bc=MochiKit.DOM.getElement; +for(var i=0;i<_4bb.length;i++){ +_4ba=_4bc(_4bb[i]); +if(_4ba){ +_4ba.style.display=_4b9; +} +} +},getViewportDimensions:function(){ +var d=new MochiKit.Style.Dimensions(); +var w=MochiKit.DOM._window; +var b=MochiKit.DOM._document.body; +if(w.innerWidth){ +d.w=w.innerWidth; +d.h=w.innerHeight; +}else{ +if(b&&b.parentElement&&b.parentElement.clientWidth){ +d.w=b.parentElement.clientWidth; +d.h=b.parentElement.clientHeight; +}else{ +if(b&&b.clientWidth){ +d.w=b.clientWidth; +d.h=b.clientHeight; +} +} +} +return d; +},getViewportPosition:function(){ +var c=new MochiKit.Style.Coordinates(0,0); +var d=MochiKit.DOM._document; +var de=d.documentElement; +var db=d.body; +if(de&&(de.scrollTop||de.scrollLeft)){ +c.x=de.scrollLeft; +c.y=de.scrollTop; +}else{ +if(db){ +c.x=db.scrollLeft; +c.y=db.scrollTop; +} +} +return c; +},__new__:function(){ +var m=MochiKit.Base; +var _4c6=["A","ABBR","ACRONYM","B","BASEFONT","BDO","BIG","BR","CITE","CODE","DFN","EM","FONT","I","IMG","KBD","LABEL","Q","S","SAMP","SMALL","SPAN","STRIKE","STRONG","SUB","SUP","TEXTAREA","TT","U","VAR"]; +this._defaultDisplay={"TABLE":"table","THEAD":"table-header-group","TBODY":"table-row-group","TFOOT":"table-footer-group","COLGROUP":"table-column-group","COL":"table-column","TR":"table-row","TD":"table-cell","TH":"table-cell","CAPTION":"table-caption","LI":"list-item","INPUT":"inline-block","SELECT":"inline-block"}; +if(/MSIE/.test(navigator.userAgent)){ +for(var k in this._defaultDisplay){ +var v=this._defaultDisplay[k]; +if(v.indexOf("table")==0){ +this._defaultDisplay[k]="block"; +} +} +} +for(var i=0;i<_4c6.length;i++){ +this._defaultDisplay[_4c6[i]]="inline"; +} +m._deprecated(this,"elementPosition","MochiKit.Style.getElementPosition","1.3",true); +m._deprecated(this,"elementDimensions","MochiKit.Style.getElementDimensions","1.3",true); +this.hideElement=m.partial(this.setDisplayForElement,"none"); +this.showElement=m.partial(this.setDisplayForElement,"block"); +m.nameFunctions(this); +}}); +MochiKit.Style.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.Style); +MochiKit.Base._module("LoggingPane","1.5",["Base","Logging"]); +MochiKit.LoggingPane.createLoggingPane=function(_4ca){ +var m=MochiKit.LoggingPane; +_4ca=!(!_4ca); +if(m._loggingPane&&m._loggingPane.inline!=_4ca){ +m._loggingPane.closePane(); +m._loggingPane=null; +} +if(!m._loggingPane||m._loggingPane.closed){ +m._loggingPane=new m.LoggingPane(_4ca,MochiKit.Logging.logger); +} +return m._loggingPane; +}; +MochiKit.LoggingPane.LoggingPane=function(_4cc,_4cd){ +if(typeof (_4cd)=="undefined"||_4cd===null){ +_4cd=MochiKit.Logging.logger; +} +this.logger=_4cd; +var _4ce=MochiKit.Base.update; +var _4cf=MochiKit.Base.updatetree; +var bind=MochiKit.Base.bind; +var _4d1=MochiKit.Base.clone; +var win=window; +var uid="_MochiKit_LoggingPane"; +if(typeof (MochiKit.DOM)!="undefined"){ +win=MochiKit.DOM.currentWindow(); +} +if(!_4cc){ +var url=win.location.href.split("?")[0].replace(/[#:\/.><&%-]/g,"_"); +var name=uid+"_"+url; +var nwin=win.open("",name,"dependent,resizable,height=200"); +if(!nwin){ +alert("Not able to open debugging window due to pop-up blocking."); +return undefined; +} +nwin.document.write(""+"[MochiKit.LoggingPane]"+""); +nwin.document.close(); +nwin.document.title+=" "+win.document.title; +win=nwin; +} +var doc=win.document; +this.doc=doc; +var _4d8=doc.getElementById(uid); +var _4d9=!!_4d8; +if(_4d8&&typeof (_4d8.loggingPane)!="undefined"){ +_4d8.loggingPane.logger=this.logger; +_4d8.loggingPane.buildAndApplyFilter(); +return _4d8.loggingPane; +} +if(_4d9){ +var _4da; +while((_4da=_4d8.firstChild)){ +_4d8.removeChild(_4da); +} +}else{ +_4d8=doc.createElement("div"); +_4d8.id=uid; +} +_4d8.loggingPane=this; +var _4db=doc.createElement("input"); +var _4dc=doc.createElement("input"); +var _4dd=doc.createElement("button"); +var _4de=doc.createElement("button"); +var _4df=doc.createElement("button"); +var _4e0=doc.createElement("button"); +var _4e1=doc.createElement("div"); +var _4e2=doc.createElement("div"); +var _4e3=uid+"_Listener"; +this.colorTable=_4d1(this.colorTable); +var _4e4=[]; +var _4e5=null; +var _4e6=function(msg){ +var _4e8=msg.level; +if(typeof (_4e8)=="number"){ +_4e8=MochiKit.Logging.LogLevel[_4e8]; +} +return _4e8; +}; +var _4e9=function(msg){ +return msg.info.join(" "); +}; +var _4eb=bind(function(msg){ +var _4ed=_4e6(msg); +var text=_4e9(msg); +var c=this.colorTable[_4ed]; +var p=doc.createElement("span"); +p.className="MochiKit-LogMessage MochiKit-LogLevel-"+_4ed; +p.style.cssText="margin: 0px; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; white-space: pre-line; word-wrap: break-word; wrap-option: emergency; color: "+c; +p.appendChild(doc.createTextNode(_4ed+": "+text)); +_4e2.appendChild(p); +_4e2.appendChild(doc.createElement("br")); +if(_4e1.offsetHeight>_4e1.scrollHeight){ +_4e1.scrollTop=0; +}else{ +_4e1.scrollTop=_4e1.scrollHeight; +} +},this); +var _4f1=function(msg){ +_4e4[_4e4.length]=msg; +_4eb(msg); +}; +var _4f3=function(){ +var _4f4,_4f5; +try{ +_4f4=new RegExp(_4db.value); +_4f5=new RegExp(_4dc.value); +} +catch(e){ +logDebug("Error in filter regex: "+e.message); +return null; +} +return function(msg){ +return (_4f4.test(_4e6(msg))&&_4f5.test(_4e9(msg))); +}; +}; +var _4f7=function(){ +while(_4e2.firstChild){ +_4e2.removeChild(_4e2.firstChild); +} +}; +var _4f8=function(){ +_4e4=[]; +_4f7(); +}; +var _4f9=bind(function(){ +if(this.closed){ +return; +} +this.closed=true; +if(MochiKit.LoggingPane._loggingPane==this){ +MochiKit.LoggingPane._loggingPane=null; +} +this.logger.removeListener(_4e3); +try{ +try{ +_4d8.loggingPane=null; +} +catch(e){ +logFatal("Bookmarklet was closed incorrectly."); +} +if(_4cc){ +_4d8.parentNode.removeChild(_4d8); +}else{ +this.win.close(); +} +} +catch(e){ +} +},this); +var _4fa=function(){ +_4f7(); +for(var i=0;i<_4e4.length;i++){ +var msg=_4e4[i]; +if(_4e5===null||_4e5(msg)){ +_4eb(msg); +} +} +}; +this.buildAndApplyFilter=function(){ +_4e5=_4f3(); +_4fa(); +this.logger.removeListener(_4e3); +this.logger.addListener(_4e3,_4e5,_4f1); +}; +var _4fd=bind(function(){ +_4e4=this.logger.getMessages(); +_4fa(); +},this); +var _4fe=bind(function(_4ff){ +_4ff=_4ff||window.event; +key=_4ff.which||_4ff.keyCode; +if(key==13){ +this.buildAndApplyFilter(); +} +},this); +var _500="display: block; z-index: 1000; left: 0px; bottom: 0px; position: fixed; width: 100%; background-color: white; font: "+this.logFont; +if(_4cc){ +_500+="; height: 10em; border-top: 2px solid black"; +}else{ +_500+="; height: 100%;"; +} +_4d8.style.cssText=_500; +if(!_4d9){ +doc.body.appendChild(_4d8); +} +_500={"cssText":"width: 33%; display: inline; font: "+this.logFont}; +_4cf(_4db,{"value":"FATAL|ERROR|WARNING|INFO|DEBUG","onkeypress":_4fe,"style":_500}); +_4d8.appendChild(_4db); +_4cf(_4dc,{"value":".*","onkeypress":_4fe,"style":_500}); +_4d8.appendChild(_4dc); +_500="width: 8%; display:inline; font: "+this.logFont; +_4dd.appendChild(doc.createTextNode("Filter")); +_4dd.onclick=bind("buildAndApplyFilter",this); +_4dd.style.cssText=_500; +_4d8.appendChild(_4dd); +_4de.appendChild(doc.createTextNode("Load")); +_4de.onclick=_4fd; +_4de.style.cssText=_500; +_4d8.appendChild(_4de); +_4df.appendChild(doc.createTextNode("Clear")); +_4df.onclick=_4f8; +_4df.style.cssText=_500; +_4d8.appendChild(_4df); +_4e0.appendChild(doc.createTextNode("Close")); +_4e0.onclick=_4f9; +_4e0.style.cssText=_500; +_4d8.appendChild(_4e0); +_4e1.style.cssText="overflow: auto; width: 100%"; +_4e2.style.cssText="width: 100%; height: "+(_4cc?"8em":"100%"); +_4e1.appendChild(_4e2); +_4d8.appendChild(_4e1); +this.buildAndApplyFilter(); +_4fd(); +if(_4cc){ +this.win=undefined; +}else{ +this.win=win; +} +this.inline=_4cc; +this.closePane=_4f9; +this.closed=false; +return this; +}; +MochiKit.LoggingPane.LoggingPane.prototype={"logFont":"8pt Verdana,sans-serif","colorTable":{"ERROR":"red","FATAL":"darkred","WARNING":"blue","INFO":"black","DEBUG":"green"}}; +MochiKit.LoggingPane.__new__=function(){ +MochiKit.Base.nameFunctions(this); +MochiKit.LoggingPane._loggingPane=null; +}; +MochiKit.LoggingPane.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.LoggingPane); +MochiKit.Base._module("Color","1.5",["Base","DOM","Style"]); +MochiKit.Color.Color=function(red,_502,blue,_504){ +if(typeof (_504)=="undefined"||_504===null){ +_504=1; +} +this.rgb={r:red,g:_502,b:blue,a:_504}; +}; +MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(_505){ +var rgb=this.rgb; +var m=MochiKit.Color; +return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,_505); +},colorWithHue:function(hue){ +var hsl=this.asHSL(); +hsl.h=hue; +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},colorWithSaturation:function(_50b){ +var hsl=this.asHSL(); +hsl.s=_50b; +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},colorWithLightness:function(_50e){ +var hsl=this.asHSL(); +hsl.l=_50e; +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},darkerColorWithLevel:function(_511){ +var hsl=this.asHSL(); +hsl.l=Math.max(hsl.l-_511,0); +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},lighterColorWithLevel:function(_514){ +var hsl=this.asHSL(); +hsl.l=Math.min(hsl.l+_514,1); +var m=MochiKit.Color; +return m.Color.fromHSL(hsl); +},blendedColor:function(_517,_518){ +if(typeof (_518)=="undefined"||_518===null){ +_518=0.5; +} +var sf=1-_518; +var s=this.rgb; +var d=_517.rgb; +var df=_518; +return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df)); +},compareRGB:function(_51d){ +var a=this.asRGB(); +var b=_51d.asRGB(); +return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]); +},isLight:function(){ +return this.asHSL().b>0.5; +},isDark:function(){ +return (!this.isLight()); +},toHSLString:function(){ +var c=this.asHSL(); +var ccc=MochiKit.Color.clampColorComponent; +var rval=this._hslString; +if(!rval){ +var mid=(ccc(c.h,360).toFixed(0)+","+ccc(c.s,100).toPrecision(4)+"%"+","+ccc(c.l,100).toPrecision(4)+"%"); +var a=c.a; +if(a>=1){ +a=1; +rval="hsl("+mid+")"; +}else{ +if(a<=0){ +a=0; +} +rval="hsla("+mid+","+a+")"; +} +this._hslString=rval; +} +return rval; +},toRGBString:function(){ +var c=this.rgb; +var ccc=MochiKit.Color.clampColorComponent; +var rval=this._rgbString; +if(!rval){ +var mid=(ccc(c.r,255).toFixed(0)+","+ccc(c.g,255).toFixed(0)+","+ccc(c.b,255).toFixed(0)); +if(c.a!=1){ +rval="rgba("+mid+","+c.a+")"; +}else{ +rval="rgb("+mid+")"; +} +this._rgbString=rval; +} +return rval; +},asRGB:function(){ +return MochiKit.Base.clone(this.rgb); +},toHexString:function(){ +var m=MochiKit.Color; +var c=this.rgb; +var ccc=MochiKit.Color.clampColorComponent; +var rval=this._hexString; +if(!rval){ +rval=("#"+m.toColorPart(ccc(c.r,255))+m.toColorPart(ccc(c.g,255))+m.toColorPart(ccc(c.b,255))); +this._hexString=rval; +} +return rval; +},asHSV:function(){ +var hsv=this.hsv; +var c=this.rgb; +if(typeof (hsv)=="undefined"||hsv===null){ +hsv=MochiKit.Color.rgbToHSV(this.rgb); +this.hsv=hsv; +} +return MochiKit.Base.clone(hsv); +},asHSL:function(){ +var hsl=this.hsl; +var c=this.rgb; +if(typeof (hsl)=="undefined"||hsl===null){ +hsl=MochiKit.Color.rgbToHSL(this.rgb); +this.hsl=hsl; +} +return MochiKit.Base.clone(hsl); +},toString:function(){ +return this.toRGBString(); +},repr:function(){ +var c=this.rgb; +var col=[c.r,c.g,c.b,c.a]; +return this.__class__.NAME+"("+col.join(", ")+")"; +}}; +MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,_534,blue,_536){ +var _537=MochiKit.Color.Color; +if(arguments.length==1){ +var rgb=red; +red=rgb.r; +_534=rgb.g; +blue=rgb.b; +if(typeof (rgb.a)=="undefined"){ +_536=undefined; +}else{ +_536=rgb.a; +} +} +return new _537(red,_534,blue,_536); +},fromHSL:function(hue,_53a,_53b,_53c){ +var m=MochiKit.Color; +return m.Color.fromRGB(m.hslToRGB.apply(m,arguments)); +},fromHSV:function(hue,_53f,_540,_541){ +var m=MochiKit.Color; +return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments)); +},fromName:function(name){ +var _544=MochiKit.Color.Color; +if(name.charAt(0)=="\""){ +name=name.substr(1,name.length-2); +} +var _545=_544._namedColors[name.toLowerCase()]; +if(typeof (_545)=="string"){ +return _544.fromHexString(_545); +}else{ +if(name=="transparent"){ +return _544.transparentColor(); +} +} +return null; +},fromString:function(_546){ +var self=MochiKit.Color.Color; +var _548=_546.substr(0,3); +if(_548=="rgb"){ +return self.fromRGBString(_546); +}else{ +if(_548=="hsl"){ +return self.fromHSLString(_546); +}else{ +if(_546.charAt(0)=="#"){ +return self.fromHexString(_546); +} +} +} +return self.fromName(_546); +},fromHexString:function(_549){ +if(_549.charAt(0)=="#"){ +_549=_549.substring(1); +} +var _54a=[]; +var i,hex; +if(_549.length==3){ +for(i=0;i<3;i++){ +hex=_549.substr(i,1); +_54a.push(parseInt(hex+hex,16)/255); +} +}else{ +for(i=0;i<6;i+=2){ +hex=_549.substr(i,2); +_54a.push(parseInt(hex,16)/255); +} +} +var _54d=MochiKit.Color.Color; +return _54d.fromRGB.apply(_54d,_54a); +},_fromColorString:function(pre,_54f,_550,_551){ +if(_551.indexOf(pre)===0){ +_551=_551.substring(_551.indexOf("(",3)+1,_551.length-1); +} +var _552=_551.split(/\s*,\s*/); +var _553=[]; +for(var i=0;i<_552.length;i++){ +var c=_552[i]; +var val; +var _557=c.substring(c.length-3); +if(c.charAt(c.length-1)=="%"){ +val=0.01*parseFloat(c.substring(0,c.length-1)); +}else{ +if(_557=="deg"){ +val=parseFloat(c)/360; +}else{ +if(_557=="rad"){ +val=parseFloat(c)/(Math.PI*2); +}else{ +val=_550[i]*parseFloat(c); +} +} +} +_553.push(val); +} +return this[_54f].apply(this,_553); +},fromComputedStyle:function(elem,_559){ +var d=MochiKit.DOM; +var cls=MochiKit.Color.Color; +for(elem=d.getElement(elem);elem;elem=elem.parentNode){ +var _55c=MochiKit.Style.getStyle.apply(d,arguments); +if(!_55c){ +continue; +} +var _55d=cls.fromString(_55c); +if(!_55d){ +break; +} +if(_55d.asRGB().a>0){ +return _55d; +} +} +return null; +},fromBackground:function(elem){ +var cls=MochiKit.Color.Color; +return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor(); +},fromText:function(elem){ +var cls=MochiKit.Color.Color; +return cls.fromComputedStyle(elem,"color","color")||cls.blackColor(); +},namedColors:function(){ +return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); +}}); +MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,_563){ +v*=_563; +if(v<0){ +return 0; +}else{ +if(v>_563){ +return _563; +}else{ +return v; +} +} +},_hslValue:function(n1,n2,hue){ +if(hue>6){ +hue-=6; +}else{ +if(hue<0){ +hue+=6; +} +} +var val; +if(hue<1){ +val=n1+(n2-n1)*hue; +}else{ +if(hue<3){ +val=n2; +}else{ +if(hue<4){ +val=n1+(n2-n1)*(4-hue); +}else{ +val=n1; +} +} +} +return val; +},hsvToRGB:function(hue,_569,_56a,_56b){ +if(arguments.length==1){ +var hsv=hue; +hue=hsv.h; +_569=hsv.s; +_56a=hsv.v; +_56b=hsv.a; +} +var red; +var _56e; +var blue; +if(_569===0){ +red=_56a; +_56e=_56a; +blue=_56a; +}else{ +var i=Math.floor(hue*6); +var f=(hue*6)-i; +var p=_56a*(1-_569); +var q=_56a*(1-(_569*f)); +var t=_56a*(1-(_569*(1-f))); +switch(i){ +case 1: +red=q; +_56e=_56a; +blue=p; +break; +case 2: +red=p; +_56e=_56a; +blue=t; +break; +case 3: +red=p; +_56e=q; +blue=_56a; +break; +case 4: +red=t; +_56e=p; +blue=_56a; +break; +case 5: +red=_56a; +_56e=p; +blue=q; +break; +case 6: +case 0: +red=_56a; +_56e=t; +blue=p; +break; +} +} +return {r:red,g:_56e,b:blue,a:_56b}; +},hslToRGB:function(hue,_576,_577,_578){ +if(arguments.length==1){ +var hsl=hue; +hue=hsl.h; +_576=hsl.s; +_577=hsl.l; +_578=hsl.a; +} +var red; +var _57b; +var blue; +if(_576===0){ +red=_577; +_57b=_577; +blue=_577; +}else{ +var m2; +if(_577<=0.5){ +m2=_577*(1+_576); +}else{ +m2=_577+_576-(_577*_576); +} +var m1=(2*_577)-m2; +var f=MochiKit.Color._hslValue; +var h6=hue*6; +red=f(m1,m2,h6+2); +_57b=f(m1,m2,h6); +blue=f(m1,m2,h6-2); +} +return {r:red,g:_57b,b:blue,a:_578}; +},rgbToHSV:function(red,_582,blue,_584){ +if(arguments.length==1){ +var rgb=red; +red=rgb.r; +_582=rgb.g; +blue=rgb.b; +_584=rgb.a; +} +var max=Math.max(Math.max(red,_582),blue); +var min=Math.min(Math.min(red,_582),blue); +var hue; +var _589; +var _58a=max; +if(min==max){ +hue=0; +_589=0; +}else{ +var _58b=(max-min); +_589=_58b/max; +if(red==max){ +hue=(_582-blue)/_58b; +}else{ +if(_582==max){ +hue=2+((blue-red)/_58b); +}else{ +hue=4+((red-_582)/_58b); +} +} +hue/=6; +if(hue<0){ +hue+=1; +} +if(hue>1){ +hue-=1; +} +} +return {h:hue,s:_589,v:_58a,a:_584}; +},rgbToHSL:function(red,_58d,blue,_58f){ +if(arguments.length==1){ +var rgb=red; +red=rgb.r; +_58d=rgb.g; +blue=rgb.b; +_58f=rgb.a; +} +var max=Math.max(red,Math.max(_58d,blue)); +var min=Math.min(red,Math.min(_58d,blue)); +var hue; +var _594; +var _595=(max+min)/2; +var _596=max-min; +if(_596===0){ +hue=0; +_594=0; +}else{ +if(_595<=0.5){ +_594=_596/(max+min); +}else{ +_594=_596/(2-max-min); +} +if(red==max){ +hue=(_58d-blue)/_596; +}else{ +if(_58d==max){ +hue=2+((blue-red)/_596); +}else{ +hue=4+((red-_58d)/_596); +} +} +hue/=6; +if(hue<0){ +hue+=1; +} +if(hue>1){ +hue-=1; +} +} +return {h:hue,s:_594,l:_595,a:_58f}; +},toColorPart:function(num){ +num=Math.round(num); +var _598=num.toString(16); +if(num<16){ +return "0"+_598; +} +return _598; +},__new__:function(){ +var m=MochiKit.Base; +this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1/255,1/255,1/255,1]); +this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1/360,0.01,0.01,1]); +var _59a=1/3; +var _59b={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[_59a,_59a,_59a],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*_59a,2*_59a,2*_59a],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]}; +for(var k in _59b){ +var name=k+"Color"; +var _59e=this.Color.fromRGB.apply(this.Color,_59b[k]); +this.Color[name]=m.partial(m.operator.identity,_59e); +} +var _59f=function(){ +for(var i=0;i1){ +var src=arguments[0]; +if(typeof (src)=="string"){ +src=MochiKit.DOM.getElement(src); +} +var sig=arguments[1]; +var obj=arguments[2]; +var func=arguments[3]; +for(var i=_5e2.length-1;i>=0;i--){ +var o=_5e2[i]; +if(o.source===src&&o.signal===sig&&o.objOrFunc===obj&&o.funcOrStr===func){ +self._disconnect(o); +if(!self._lock){ +_5e2.splice(i,1); +}else{ +self._dirty=true; +} +return true; +} +} +}else{ +var idx=m.findIdentical(_5e2,_5e0); +if(idx>=0){ +self._disconnect(_5e0); +if(!self._lock){ +_5e2.splice(idx,1); +}else{ +self._dirty=true; +} +return true; +} +} +return false; +},disconnectAllTo:function(_5eb,_5ec){ +var self=MochiKit.Signal; +var _5ee=self._observers; +var _5ef=self._disconnect; +var _5f0=self._lock; +var _5f1=self._dirty; +if(typeof (_5ec)==="undefined"){ +_5ec=null; +} +for(var i=_5ee.length-1;i>=0;i--){ +var _5f3=_5ee[i]; +if(_5f3.objOrFunc===_5eb&&(_5ec===null||_5f3.funcOrStr===_5ec)){ +_5ef(_5f3); +if(_5f0){ +_5f1=true; +}else{ +_5ee.splice(i,1); +} +} +} +self._dirty=_5f1; +},disconnectAll:function(src,sig){ +if(typeof (src)=="string"){ +src=MochiKit.DOM.getElement(src); +} +var m=MochiKit.Base; +var _5f7=m.flattenArguments(m.extend(null,arguments,1)); +var self=MochiKit.Signal; +var _5f9=self._disconnect; +var _5fa=self._observers; +var i,_5fc; +var _5fd=self._lock; +var _5fe=self._dirty; +if(_5f7.length===0){ +for(i=_5fa.length-1;i>=0;i--){ +_5fc=_5fa[i]; +if(_5fc.source===src){ +_5f9(_5fc); +if(!_5fd){ +_5fa.splice(i,1); +}else{ +_5fe=true; +} +} +} +}else{ +var sigs={}; +for(i=0;i<_5f7.length;i++){ +sigs[_5f7[i]]=true; +} +for(i=_5fa.length-1;i>=0;i--){ +_5fc=_5fa[i]; +if(_5fc.source===src&&_5fc.signal in sigs){ +_5f9(_5fc); +if(!_5fd){ +_5fa.splice(i,1); +}else{ +_5fe=true; +} +} +} +} +self._dirty=_5fe; +},signal:function(src,sig){ +var self=MochiKit.Signal; +var _603=self._observers; +if(typeof (src)=="string"){ +src=MochiKit.DOM.getElement(src); +} +var args=MochiKit.Base.extend(null,arguments,2); +var _605=[]; +self._lock=true; +for(var i=0;i<_603.length;i++){ +var _607=_603[i]; +if(_607.source===src&&_607.signal===sig&&_607.connected){ +try{ +if(_607.isDOM&&_607.funcOrStr!=null){ +var obj=_607.objOrFunc; +obj[_607.funcOrStr].apply(obj,args); +}else{ +if(_607.isDOM){ +_607.objOrFunc.apply(src,args); +}else{ +_607.listener.apply(src,args); +} +} +} +catch(e){ +_605.push(e); +} +} +} +self._lock=false; +if(self._dirty){ +self._dirty=false; +for(var i=_603.length-1;i>=0;i--){ +if(!_603[i].connected){ +_603.splice(i,1); +} +} +} +if(_605.length==1){ +throw _605[0]; +}else{ +if(_605.length>1){ +var e=new Error("Multiple errors thrown in handling 'sig', see errors property"); +e.errors=_605; +throw e; +} +} +}}); +MochiKit.Signal.__new__=function(win){ +var m=MochiKit.Base; +this._document=document; +this._window=win; +this._lock=false; +this._dirty=false; +try{ +this.connect(window,"onunload",this._unloadCache); +} +catch(e){ +} +m.nameFunctions(this); +}; +MochiKit.Signal.__new__(this); +if(MochiKit.__export__){ +connect=MochiKit.Signal.connect; +disconnect=MochiKit.Signal.disconnect; +disconnectAll=MochiKit.Signal.disconnectAll; +signal=MochiKit.Signal.signal; +} +MochiKit.Base._exportSymbols(this,MochiKit.Signal); +MochiKit.Base._module("Position","1.5",["Base","DOM","Style"]); +MochiKit.Base.update(MochiKit.Position,{__export__:false,includeScrollOffsets:false,prepare:function(){ +var _60c=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0; +var _60d=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0; +this.windowOffset=new MochiKit.Style.Coordinates(_60c,_60d); +},cumulativeOffset:function(_60e){ +var _60f=0; +var _610=0; +do{ +_60f+=_60e.offsetTop||0; +_610+=_60e.offsetLeft||0; +_60e=_60e.offsetParent; +}while(_60e); +return new MochiKit.Style.Coordinates(_610,_60f); +},realOffset:function(_611){ +var _612=0; +var _613=0; +do{ +_612+=_611.scrollTop||0; +_613+=_611.scrollLeft||0; +_611=_611.parentNode; +}while(_611); +return new MochiKit.Style.Coordinates(_613,_612); +},within:function(_614,x,y){ +if(this.includeScrollOffsets){ +return this.withinIncludingScrolloffsets(_614,x,y); +} +this.xcomp=x; +this.ycomp=y; +this.offset=this.cumulativeOffset(_614); +if(_614.style.position=="fixed"){ +this.offset.x+=this.windowOffset.x; +this.offset.y+=this.windowOffset.y; +} +return (y>=this.offset.y&&y=this.offset.x&&x=this.offset.y&&this.ycomp=this.offset.x&&this.xcomp"+el.innerHTML+"
      "; +},_roundTopCorners:function(el,_646,_647){ +var _648=this._createCorner(_647); +for(var i=0;i=0;i--){ +_64d.appendChild(this._createCornerSlice(_64b,_64c,i,"bottom")); +} +el.style.paddingBottom=0; +el.appendChild(_64d); +},_createCorner:function(_64f){ +var dom=MochiKit.DOM; +return dom.DIV({style:{backgroundColor:_64f.toString()}}); +},_createCornerSlice:function(_651,_652,n,_654){ +var _655=MochiKit.DOM.SPAN(); +var _656=_655.style; +_656.backgroundColor=_651.toString(); +_656.display="block"; +_656.height="1px"; +_656.overflow="hidden"; +_656.fontSize="1px"; +var _657=this._borderColor(_651,_652); +if(this.options.border&&n===0){ +_656.borderTopStyle="solid"; +_656.borderTopWidth="1px"; +_656.borderLeftWidth="0px"; +_656.borderRightWidth="0px"; +_656.borderBottomWidth="0px"; +_656.height="0px"; +_656.borderColor=_657.toString(); +}else{ +if(_657){ +_656.borderColor=_657.toString(); +_656.borderStyle="solid"; +_656.borderWidth="0px 1px"; +} +} +if(!this.options.compact&&(n==(this.options.numSlices-1))){ +_656.height="2px"; +} +this._setMargin(_655,n,_654); +this._setBorder(_655,n,_654); +return _655; +},_setOptions:function(_658){ +this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false,__unstable__wrapElement:false}; +MochiKit.Base.update(this.options,_658); +this.options.numSlices=(this.options.compact?2:4); +},_whichSideTop:function(){ +var _659=this.options.corners; +if(this._hasString(_659,"all","top")){ +return ""; +} +var _65a=(_659.indexOf("tl")!=-1); +var _65b=(_659.indexOf("tr")!=-1); +if(_65a&&_65b){ +return ""; +} +if(_65a){ +return "left"; +} +if(_65b){ +return "right"; +} +return ""; +},_whichSideBottom:function(){ +var _65c=this.options.corners; +if(this._hasString(_65c,"all","bottom")){ +return ""; +} +var _65d=(_65c.indexOf("bl")!=-1); +var _65e=(_65c.indexOf("br")!=-1); +if(_65d&&_65e){ +return ""; +} +if(_65d){ +return "left"; +} +if(_65e){ +return "right"; +} +return ""; +},_borderColor:function(_65f,_660){ +if(_65f=="transparent"){ +return _660; +}else{ +if(this.options.border){ +return this.options.border; +}else{ +if(this.options.blend){ +return _660.blendedColor(_65f); +} +} +} +return ""; +},_setMargin:function(el,n,_663){ +var _664=this._marginSize(n)+"px"; +var _665=(_663=="top"?this._whichSideTop():this._whichSideBottom()); +var _666=el.style; +if(_665=="left"){ +_666.marginLeft=_664; +_666.marginRight="0px"; +}else{ +if(_665=="right"){ +_666.marginRight=_664; +_666.marginLeft="0px"; +}else{ +_666.marginLeft=_664; +_666.marginRight=_664; +} +} +},_setBorder:function(el,n,_669){ +var _66a=this._borderSize(n)+"px"; +var _66b=(_669=="top"?this._whichSideTop():this._whichSideBottom()); +var _66c=el.style; +if(_66b=="left"){ +_66c.borderLeftWidth=_66a; +_66c.borderRightWidth="0px"; +}else{ +if(_66b=="right"){ +_66c.borderRightWidth=_66a; +_66c.borderLeftWidth="0px"; +}else{ +_66c.borderLeftWidth=_66a; +_66c.borderRightWidth=_66a; +} +} +},_marginSize:function(n){ +if(this.isTransparent){ +return 0; +} +var o=this.options; +if(o.compact&&o.blend){ +var _66f=[1,0]; +return _66f[n]; +}else{ +if(o.compact){ +var _670=[2,1]; +return _670[n]; +}else{ +if(o.blend){ +var _671=[3,2,1,0]; +return _671[n]; +}else{ +var _672=[5,3,2,1]; +return _672[n]; +} +} +} +},_borderSize:function(n){ +var o=this.options; +var _675; +if(o.compact&&(o.blend||this.isTransparent)){ +return 1; +}else{ +if(o.compact){ +_675=[1,0]; +}else{ +if(o.blend){ +_675=[2,1,1,1]; +}else{ +if(o.border){ +_675=[0,2,0,0]; +}else{ +if(this.isTransparent){ +_675=[5,3,2,1]; +}else{ +return 0; +} +} +} +} +} +return _675[n]; +},_hasString:function(str){ +for(var i=1;i=(_6a3||i)){ +_6a3=i; +} +},this.effects); +_69f=_6a3||_69f; +break; +case "break": +ma(function(e){ +e.finalize(); +},this.effects); +break; +case "replace": +ma(function(e){ +e.cancel(); +},this.effects); +break; +} +_69e.startOn+=_69f; +_69e.finishOn+=_69f; +if(!_69e.options.queue.limit||this.effects.length<_69e.options.queue.limit){ +this.effects.push(_69e); +} +if(!this.interval){ +this.interval=this.startLoop(MochiKit.Base.bind(this.loop,this),40); +} +},startLoop:function(func,_6a9){ +return setInterval(func,_6a9); +},remove:function(_6aa){ +this.effects=MochiKit.Base.filter(function(e){ +return e!=_6aa; +},this.effects); +if(!this.effects.length){ +this.stopLoop(this.interval); +this.interval=null; +} +},stopLoop:function(_6ac){ +clearInterval(_6ac); +},loop:function(){ +var _6ad=new Date().getTime(); +MochiKit.Base.map(function(_6ae){ +_6ae.loop(_6ad); +},this.effects); +}}); +MochiKit.Visual.Queues={__export__:false,instances:{},get:function(_6af){ +if(typeof (_6af)!="string"){ +return _6af; +} +if(!this.instances[_6af]){ +this.instances[_6af]=new MochiKit.Visual.ScopedQueue(); +} +return this.instances[_6af]; +}}; +MochiKit.Visual.Queue=MochiKit.Visual.Queues.get("global"); +MochiKit.Visual.Queue.__export__=false; +MochiKit.Visual.DefaultOptions={__export__:false,transition:MochiKit.Visual.Transitions.sinoidal,duration:1,fps:25,sync:false,from:0,to:1,delay:0,queue:"parallel"}; +MochiKit.Visual.Base=function(){ +}; +MochiKit.Visual.Base.prototype={__class__:MochiKit.Visual.Base,start:function(_6b0){ +var v=MochiKit.Visual; +this.options=MochiKit.Base.setdefault(_6b0,v.DefaultOptions); +this.currentFrame=0; +this.state="idle"; +this.startOn=this.options.delay*1000; +this.finishOn=this.startOn+(this.options.duration*1000); +this.event("beforeStart"); +if(!this.options.sync){ +v.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).add(this); +} +},loop:function(_6b2){ +if(_6b2>=this.startOn){ +if(_6b2>=this.finishOn){ +return this.finalize(); +} +var pos=(_6b2-this.startOn)/(this.finishOn-this.startOn); +var _6b4=Math.round(pos*this.options.fps*this.options.duration); +if(_6b4>this.currentFrame){ +this.render(pos); +this.currentFrame=_6b4; +} +} +},render:function(pos){ +if(this.state=="idle"){ +this.state="running"; +this.event("beforeSetup"); +this.setup(); +this.event("afterSetup"); +} +if(this.state=="running"){ +var _6b6=this.options.transition; +if(typeof (_6b6)=="string"){ +_6b6=MochiKit.Visual.Transitions[_6b6]; +} +if(typeof (_6b6)=="function"){ +pos=_6b6(pos); +} +pos*=(this.options.to-this.options.from); +pos+=this.options.from; +this.event("beforeUpdate"); +this.update(pos); +this.event("afterUpdate"); +} +},cancel:function(){ +if(!this.options.sync){ +MochiKit.Visual.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).remove(this); +} +this.state="finished"; +},finalize:function(){ +this.render(1); +this.cancel(); +this.event("beforeFinish"); +this.finish(); +this.event("afterFinish"); +},setup:function(){ +},finish:function(){ +},update:function(_6b7){ +},event:function(_6b8){ +if(this.options[_6b8+"Internal"]){ +this.options[_6b8+"Internal"](this); +} +if(this.options[_6b8]){ +this.options[_6b8](this); +} +},repr:function(){ +return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; +}}; +MochiKit.Visual.Parallel=function(_6b9,_6ba){ +var cls=arguments.callee; +if(!(this instanceof cls)){ +return new cls(_6b9,_6ba); +} +this.__init__(_6b9,_6ba); +}; +MochiKit.Visual.Parallel.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Parallel.prototype,{__class__:MochiKit.Visual.Parallel,__init__:function(_6bc,_6bd){ +this.effects=_6bc||[]; +this.start(_6bd); +},update:function(_6be){ +MochiKit.Base.map(function(_6bf){ +_6bf.render(_6be); +},this.effects); +},finish:function(){ +MochiKit.Base.map(function(_6c0){ +_6c0.finalize(); +},this.effects); +}}); +MochiKit.Visual.Sequence=function(_6c1,_6c2){ +var cls=arguments.callee; +if(!(this instanceof cls)){ +return new cls(_6c1,_6c2); +} +this.__init__(_6c1,_6c2); +}; +MochiKit.Visual.Sequence.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Sequence.prototype,{__class__:MochiKit.Visual.Sequence,__init__:function(_6c4,_6c5){ +var defs={transition:MochiKit.Visual.Transitions.linear,duration:0}; +this.effects=_6c4||[]; +MochiKit.Base.map(function(_6c7){ +defs.duration+=_6c7.options.duration; +},this.effects); +MochiKit.Base.setdefault(_6c5,defs); +this.start(_6c5); +},update:function(_6c8){ +var time=_6c8*this.options.duration; +for(var i=0;i0){ +this.fontSize=parseFloat(_6e8); +this.fontSizeType=_6e9; +} +},this),["em","px","%"]); +this.factor=(this.options.scaleTo-this.options.scaleFrom)/100; +if(/^content/.test(this.options.scaleMode)){ +this.dims=[this.element.scrollHeight,this.element.scrollWidth]; +}else{ +if(this.options.scaleMode=="box"){ +this.dims=[this.element.offsetHeight,this.element.offsetWidth]; +}else{ +this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]; +} +} +},update:function(_6ea){ +var _6eb=(this.options.scaleFrom/100)+(this.factor*_6ea); +if(this.options.scaleContent&&this.fontSize){ +MochiKit.Style.setStyle(this.element,{fontSize:this.fontSize*_6eb+this.fontSizeType}); +} +this.setDimensions(this.dims[0]*_6eb,this.dims[1]*_6eb); +},finish:function(){ +if(this.restoreAfterFinish){ +MochiKit.Style.setStyle(this.element,this.originalStyle); +} +},setDimensions:function(_6ec,_6ed){ +var d={}; +var r=Math.round; +if(/MSIE/.test(navigator.userAgent)){ +r=Math.ceil; +} +if(this.options.scaleX){ +d.width=r(_6ed)+"px"; +} +if(this.options.scaleY){ +d.height=r(_6ec)+"px"; +} +if(this.options.scaleFromCenter){ +var topd=(_6ec-this.dims[0])/2; +var _6f1=(_6ed-this.dims[1])/2; +if(this.elementPositioning=="absolute"){ +if(this.options.scaleY){ +d.top=this.originalTop-topd+"px"; +} +if(this.options.scaleX){ +d.left=this.originalLeft-_6f1+"px"; +} +}else{ +if(this.options.scaleY){ +d.top=-topd+"px"; +} +if(this.options.scaleX){ +d.left=-_6f1+"px"; +} +} +} +MochiKit.Style.setStyle(this.element,d); +}}); +MochiKit.Visual.Highlight=function(_6f2,_6f3){ +var cls=arguments.callee; +if(!(this instanceof cls)){ +return new cls(_6f2,_6f3); +} +this.__init__(_6f2,_6f3); +}; +MochiKit.Visual.Highlight.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Highlight.prototype,{__class__:MochiKit.Visual.Highlight,__init__:function(_6f5,_6f6){ +this.element=MochiKit.DOM.getElement(_6f5); +_6f6=MochiKit.Base.update({startcolor:"#ffff99"},_6f6); +this.start(_6f6); +},setup:function(){ +var b=MochiKit.Base; +var s=MochiKit.Style; +if(s.getStyle(this.element,"display")=="none"){ +this.cancel(); +return; +} +this.oldStyle={backgroundImage:s.getStyle(this.element,"background-image")}; +s.setStyle(this.element,{backgroundImage:"none"}); +if(!this.options.endcolor){ +this.options.endcolor=MochiKit.Color.Color.fromBackground(this.element).toHexString(); +} +if(b.isUndefinedOrNull(this.options.restorecolor)){ +this.options.restorecolor=s.getStyle(this.element,"background-color"); +} +this._base=b.map(b.bind(function(i){ +return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16); +},this),[0,1,2]); +this._delta=b.map(b.bind(function(i){ +return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]; +},this),[0,1,2]); +},update:function(_6fb){ +var m="#"; +MochiKit.Base.map(MochiKit.Base.bind(function(i){ +m+=MochiKit.Color.toColorPart(Math.round(this._base[i]+this._delta[i]*_6fb)); +},this),[0,1,2]); +MochiKit.Style.setStyle(this.element,{backgroundColor:m}); +},finish:function(){ +MochiKit.Style.setStyle(this.element,MochiKit.Base.update(this.oldStyle,{backgroundColor:this.options.restorecolor})); +}}); +MochiKit.Visual.ScrollTo=function(_6fe,_6ff){ +var cls=arguments.callee; +if(!(this instanceof cls)){ +return new cls(_6fe,_6ff); +} +this.__init__(_6fe,_6ff); +}; +MochiKit.Visual.ScrollTo.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.ScrollTo.prototype,{__class__:MochiKit.Visual.ScrollTo,__init__:function(_701,_702){ +this.element=MochiKit.DOM.getElement(_701); +this.start(_702); +},setup:function(){ +var p=MochiKit.Position; +p.prepare(); +var _704=p.cumulativeOffset(this.element); +if(this.options.offset){ +_704.y+=this.options.offset; +} +var max; +if(window.innerHeight){ +max=window.innerHeight-window.height; +}else{ +if(document.documentElement&&document.documentElement.clientHeight){ +max=document.documentElement.clientHeight-document.body.scrollHeight; +}else{ +if(document.body){ +max=document.body.clientHeight-document.body.scrollHeight; +} +} +} +this.scrollStart=p.windowOffset.y; +this.delta=(_704.y>max?max:_704.y)-this.scrollStart; +},update:function(_706){ +var p=MochiKit.Position; +p.prepare(); +window.scrollTo(p.windowOffset.x,this.scrollStart+(_706*this.delta)); +}}); +MochiKit.Visual._CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; +MochiKit.Visual.Morph=function(_708,_709){ +var cls=arguments.callee; +if(!(this instanceof cls)){ +return new cls(_708,_709); +} +this.__init__(_708,_709); +}; +MochiKit.Visual.Morph.prototype=new MochiKit.Visual.Base(); +MochiKit.Base.update(MochiKit.Visual.Morph.prototype,{__class__:MochiKit.Visual.Morph,__init__:function(_70b,_70c){ +this.element=MochiKit.DOM.getElement(_70b); +this.start(_70c); +},setup:function(){ +var b=MochiKit.Base; +var _70e=this.options.style; +this.styleStart={}; +this.styleEnd={}; +this.units={}; +var _70f,unit; +for(var s in _70e){ +_70f=_70e[s]; +s=b.camelize(s); +if(MochiKit.Visual._CSS_LENGTH.test(_70f)){ +var _712=_70f.match(/^([\+\-]?[0-9\.]+)(.*)$/); +_70f=parseFloat(_712[1]); +unit=(_712.length==3)?_712[2]:null; +this.styleEnd[s]=_70f; +this.units[s]=unit; +_70f=MochiKit.Style.getStyle(this.element,s); +_712=_70f.match(/^([\+\-]?[0-9\.]+)(.*)$/); +_70f=parseFloat(_712[1]); +this.styleStart[s]=_70f; +}else{ +if(/[Cc]olor$/.test(s)){ +var c=MochiKit.Color.Color; +_70f=c.fromString(_70f); +if(_70f){ +this.units[s]="color"; +this.styleEnd[s]=_70f.toHexString(); +_70f=MochiKit.Style.getStyle(this.element,s); +this.styleStart[s]=c.fromString(_70f).toHexString(); +this.styleStart[s]=b.map(b.bind(function(i){ +return parseInt(this.styleStart[s].slice(i*2+1,i*2+3),16); +},this),[0,1,2]); +this.styleEnd[s]=b.map(b.bind(function(i){ +return parseInt(this.styleEnd[s].slice(i*2+1,i*2+3),16); +},this),[0,1,2]); +} +}else{ +this.element.style[s]=_70f; +} +} +} +},update:function(_716){ +var _717; +for(var s in this.styleStart){ +if(this.units[s]=="color"){ +var m="#"; +var _71a=this.styleStart[s]; +var end=this.styleEnd[s]; +MochiKit.Base.map(MochiKit.Base.bind(function(i){ +m+=MochiKit.Color.toColorPart(Math.round(_71a[i]+(end[i]-_71a[i])*_716)); +},this),[0,1,2]); +this.element.style[s]=m; +}else{ +_717=this.styleStart[s]+Math.round((this.styleEnd[s]-this.styleStart[s])*_716*1000)/1000+this.units[s]; +this.element.style[s]=_717; +} +} +}}); +MochiKit.Visual.fade=function(_71d,_71e){ +var s=MochiKit.Style; +var _720=s.getStyle(_71d,"opacity"); +_71e=MochiKit.Base.update({from:s.getStyle(_71d,"opacity")||1,to:0,afterFinishInternal:function(_721){ +if(_721.options.to!==0){ +return; +} +s.hideElement(_721.element); +s.setStyle(_721.element,{"opacity":_720}); +}},_71e); +return new MochiKit.Visual.Opacity(_71d,_71e); +}; +MochiKit.Visual.appear=function(_722,_723){ +var s=MochiKit.Style; +var v=MochiKit.Visual; +_723=MochiKit.Base.update({from:(s.getStyle(_722,"display")=="none"?0:s.getStyle(_722,"opacity")||0),to:1,afterFinishInternal:function(_726){ +v._forceRerendering(_726.element); +},beforeSetupInternal:function(_727){ +s.setStyle(_727.element,{"opacity":_727.options.from}); +s.showElement(_727.element); +}},_723); +return new v.Opacity(_722,_723); +}; +MochiKit.Visual.puff=function(_728,_729){ +var s=MochiKit.Style; +var v=MochiKit.Visual; +_728=MochiKit.DOM.getElement(_728); +var _72c=MochiKit.Style.getElementDimensions(_728,true); +var _72d={position:s.getStyle(_728,"position"),top:_728.style.top,left:_728.style.left,width:_728.style.width,height:_728.style.height,opacity:s.getStyle(_728,"opacity")}; +_729=MochiKit.Base.update({beforeSetupInternal:function(_72e){ +MochiKit.Position.absolutize(_72e.effects[0].element); +},afterFinishInternal:function(_72f){ +s.hideElement(_72f.effects[0].element); +s.setStyle(_72f.effects[0].element,_72d); +},scaleContent:true,scaleFromCenter:true},_729); +return new v.Parallel([new v.Scale(_728,200,{sync:true,scaleFromCenter:_729.scaleFromCenter,scaleMode:{originalHeight:_72c.h,originalWidth:_72c.w},scaleContent:_729.scaleContent,restoreAfterFinish:true}),new v.Opacity(_728,{sync:true,to:0})],_729); +}; +MochiKit.Visual.blindUp=function(_730,_731){ +var d=MochiKit.DOM; +var s=MochiKit.Style; +_730=d.getElement(_730); +var _734=s.getElementDimensions(_730,true); +var _735=s.makeClipping(_730); +_731=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_734.h,originalWidth:_734.w},restoreAfterFinish:true,afterFinishInternal:function(_736){ +s.hideElement(_736.element); +s.undoClipping(_736.element,_735); +}},_731); +return new MochiKit.Visual.Scale(_730,0,_731); +}; +MochiKit.Visual.blindDown=function(_737,_738){ +var d=MochiKit.DOM; +var s=MochiKit.Style; +_737=d.getElement(_737); +var _73b=s.getElementDimensions(_737,true); +var _73c; +_738=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_73b.h,originalWidth:_73b.w},restoreAfterFinish:true,afterSetupInternal:function(_73d){ +_73c=s.makeClipping(_73d.element); +s.setStyle(_73d.element,{height:"0px"}); +s.showElement(_73d.element); +},afterFinishInternal:function(_73e){ +s.undoClipping(_73e.element,_73c); +}},_738); +return new MochiKit.Visual.Scale(_737,100,_738); +}; +MochiKit.Visual.switchOff=function(_73f,_740){ +var d=MochiKit.DOM; +var s=MochiKit.Style; +_73f=d.getElement(_73f); +var _743=s.getElementDimensions(_73f,true); +var _744=s.getStyle(_73f,"opacity"); +var _745; +_740=MochiKit.Base.update({duration:0.7,restoreAfterFinish:true,beforeSetupInternal:function(_746){ +s.makePositioned(_73f); +_745=s.makeClipping(_73f); +},afterFinishInternal:function(_747){ +s.hideElement(_73f); +s.undoClipping(_73f,_745); +s.undoPositioned(_73f); +s.setStyle(_73f,{"opacity":_744}); +}},_740); +var v=MochiKit.Visual; +return new v.Sequence([new v.appear(_73f,{sync:true,duration:0.57*_740.duration,from:0,transition:v.Transitions.flicker}),new v.Scale(_73f,1,{sync:true,duration:0.43*_740.duration,scaleFromCenter:true,scaleX:false,scaleMode:{originalHeight:_743.h,originalWidth:_743.w},scaleContent:false,restoreAfterFinish:true})],_740); +}; +MochiKit.Visual.dropOut=function(_749,_74a){ +var d=MochiKit.DOM; +var s=MochiKit.Style; +_749=d.getElement(_749); +var _74d={top:s.getStyle(_749,"top"),left:s.getStyle(_749,"left"),opacity:s.getStyle(_749,"opacity")}; +_74a=MochiKit.Base.update({duration:0.5,distance:100,beforeSetupInternal:function(_74e){ +s.makePositioned(_74e.effects[0].element); +},afterFinishInternal:function(_74f){ +s.hideElement(_74f.effects[0].element); +s.undoPositioned(_74f.effects[0].element); +s.setStyle(_74f.effects[0].element,_74d); +}},_74a); +var v=MochiKit.Visual; +return new v.Parallel([new v.Move(_749,{x:0,y:_74a.distance,sync:true}),new v.Opacity(_749,{sync:true,to:0})],_74a); +}; +MochiKit.Visual.shake=function(_751,_752){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var s=MochiKit.Style; +_751=d.getElement(_751); +var _756={top:s.getStyle(_751,"top"),left:s.getStyle(_751,"left")}; +_752=MochiKit.Base.update({duration:0.5,afterFinishInternal:function(_757){ +s.undoPositioned(_751); +s.setStyle(_751,_756); +}},_752); +return new v.Sequence([new v.Move(_751,{sync:true,duration:0.1*_752.duration,x:20,y:0}),new v.Move(_751,{sync:true,duration:0.2*_752.duration,x:-40,y:0}),new v.Move(_751,{sync:true,duration:0.2*_752.duration,x:40,y:0}),new v.Move(_751,{sync:true,duration:0.2*_752.duration,x:-40,y:0}),new v.Move(_751,{sync:true,duration:0.2*_752.duration,x:40,y:0}),new v.Move(_751,{sync:true,duration:0.1*_752.duration,x:-20,y:0})],_752); +}; +MochiKit.Visual.slideDown=function(_758,_759){ +var d=MochiKit.DOM; +var b=MochiKit.Base; +var s=MochiKit.Style; +_758=d.getElement(_758); +if(!_758.firstChild){ +throw new Error("MochiKit.Visual.slideDown must be used on a element with a child"); +} +d.removeEmptyTextNodes(_758); +var _75d=s.getStyle(_758.firstChild,"bottom")||0; +var _75e=s.getElementDimensions(_758,true); +var _75f; +_759=b.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_75e.h,originalWidth:_75e.w},restoreAfterFinish:true,afterSetupInternal:function(_760){ +s.makePositioned(_760.element); +s.makePositioned(_760.element.firstChild); +if(/Opera/.test(navigator.userAgent)){ +s.setStyle(_760.element,{top:""}); +} +_75f=s.makeClipping(_760.element); +s.setStyle(_760.element,{height:"0px"}); +s.showElement(_760.element); +},afterUpdateInternal:function(_761){ +var _762=s.getElementDimensions(_761.element,true); +s.setStyle(_761.element.firstChild,{bottom:(_761.dims[0]-_762.h)+"px"}); +},afterFinishInternal:function(_763){ +s.undoClipping(_763.element,_75f); +if(/MSIE/.test(navigator.userAgent)){ +s.undoPositioned(_763.element); +s.undoPositioned(_763.element.firstChild); +}else{ +s.undoPositioned(_763.element.firstChild); +s.undoPositioned(_763.element); +} +s.setStyle(_763.element.firstChild,{bottom:_75d}); +}},_759); +return new MochiKit.Visual.Scale(_758,100,_759); +}; +MochiKit.Visual.slideUp=function(_764,_765){ +var d=MochiKit.DOM; +var b=MochiKit.Base; +var s=MochiKit.Style; +_764=d.getElement(_764); +if(!_764.firstChild){ +throw new Error("MochiKit.Visual.slideUp must be used on a element with a child"); +} +d.removeEmptyTextNodes(_764); +var _769=s.getStyle(_764.firstChild,"bottom"); +var _76a=s.getElementDimensions(_764,true); +var _76b; +_765=b.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_76a.h,originalWidth:_76a.w},scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(_76c){ +s.makePositioned(_76c.element); +s.makePositioned(_76c.element.firstChild); +if(/Opera/.test(navigator.userAgent)){ +s.setStyle(_76c.element,{top:""}); +} +_76b=s.makeClipping(_76c.element); +s.showElement(_76c.element); +},afterUpdateInternal:function(_76d){ +var _76e=s.getElementDimensions(_76d.element,true); +s.setStyle(_76d.element.firstChild,{bottom:(_76d.dims[0]-_76e.h)+"px"}); +},afterFinishInternal:function(_76f){ +s.hideElement(_76f.element); +s.undoClipping(_76f.element,_76b); +s.undoPositioned(_76f.element.firstChild); +s.undoPositioned(_76f.element); +s.setStyle(_76f.element.firstChild,{bottom:_769}); +}},_765); +return new MochiKit.Visual.Scale(_764,0,_765); +}; +MochiKit.Visual.squish=function(_770,_771){ +var d=MochiKit.DOM; +var b=MochiKit.Base; +var s=MochiKit.Style; +var _775=s.getElementDimensions(_770,true); +var _776; +_771=b.update({restoreAfterFinish:true,scaleMode:{originalHeight:_775.w,originalWidth:_775.h},beforeSetupInternal:function(_777){ +_776=s.makeClipping(_777.element); +},afterFinishInternal:function(_778){ +s.hideElement(_778.element); +s.undoClipping(_778.element,_776); +}},_771); +return new MochiKit.Visual.Scale(_770,/Opera/.test(navigator.userAgent)?1:0,_771); +}; +MochiKit.Visual.grow=function(_779,_77a){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var s=MochiKit.Style; +_779=d.getElement(_779); +_77a=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.full,scaleContent:true,scaleFromCenter:false},_77a); +var _77e={top:_779.style.top,left:_779.style.left,height:_779.style.height,width:_779.style.width,opacity:s.getStyle(_779,"opacity")}; +var dims=s.getElementDimensions(_779,true); +var _780,_781; +var _782,_783; +switch(_77a.direction){ +case "top-left": +_780=_781=_782=_783=0; +break; +case "top-right": +_780=dims.w; +_781=_783=0; +_782=-dims.w; +break; +case "bottom-left": +_780=_782=0; +_781=dims.h; +_783=-dims.h; +break; +case "bottom-right": +_780=dims.w; +_781=dims.h; +_782=-dims.w; +_783=-dims.h; +break; +case "center": +_780=dims.w/2; +_781=dims.h/2; +_782=-dims.w/2; +_783=-dims.h/2; +break; +} +var _784=MochiKit.Base.update({beforeSetupInternal:function(_785){ +s.setStyle(_785.effects[0].element,{height:"0px"}); +s.showElement(_785.effects[0].element); +},afterFinishInternal:function(_786){ +s.undoClipping(_786.effects[0].element); +s.undoPositioned(_786.effects[0].element); +s.setStyle(_786.effects[0].element,_77e); +}},_77a); +return new v.Move(_779,{x:_780,y:_781,duration:0.01,beforeSetupInternal:function(_787){ +s.hideElement(_787.element); +s.makeClipping(_787.element); +s.makePositioned(_787.element); +},afterFinishInternal:function(_788){ +new v.Parallel([new v.Opacity(_788.element,{sync:true,to:1,from:0,transition:_77a.opacityTransition}),new v.Move(_788.element,{x:_782,y:_783,sync:true,transition:_77a.moveTransition}),new v.Scale(_788.element,100,{scaleMode:{originalHeight:dims.h,originalWidth:dims.w},sync:true,scaleFrom:/Opera/.test(navigator.userAgent)?1:0,transition:_77a.scaleTransition,scaleContent:_77a.scaleContent,scaleFromCenter:_77a.scaleFromCenter,restoreAfterFinish:true})],_784); +}}); +}; +MochiKit.Visual.shrink=function(_789,_78a){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var s=MochiKit.Style; +_789=d.getElement(_789); +_78a=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.none,scaleContent:true,scaleFromCenter:false},_78a); +var _78e={top:_789.style.top,left:_789.style.left,height:_789.style.height,width:_789.style.width,opacity:s.getStyle(_789,"opacity")}; +var dims=s.getElementDimensions(_789,true); +var _790,_791; +switch(_78a.direction){ +case "top-left": +_790=_791=0; +break; +case "top-right": +_790=dims.w; +_791=0; +break; +case "bottom-left": +_790=0; +_791=dims.h; +break; +case "bottom-right": +_790=dims.w; +_791=dims.h; +break; +case "center": +_790=dims.w/2; +_791=dims.h/2; +break; +} +var _792; +var _793=MochiKit.Base.update({beforeStartInternal:function(_794){ +s.makePositioned(_794.effects[0].element); +_792=s.makeClipping(_794.effects[0].element); +},afterFinishInternal:function(_795){ +s.hideElement(_795.effects[0].element); +s.undoClipping(_795.effects[0].element,_792); +s.undoPositioned(_795.effects[0].element); +s.setStyle(_795.effects[0].element,_78e); +}},_78a); +return new v.Parallel([new v.Opacity(_789,{sync:true,to:0,from:1,transition:_78a.opacityTransition}),new v.Scale(_789,/Opera/.test(navigator.userAgent)?1:0,{scaleMode:{originalHeight:dims.h,originalWidth:dims.w},sync:true,transition:_78a.scaleTransition,scaleContent:_78a.scaleContent,scaleFromCenter:_78a.scaleFromCenter,restoreAfterFinish:true}),new v.Move(_789,{x:_790,y:_791,sync:true,transition:_78a.moveTransition})],_793); +}; +MochiKit.Visual.pulsate=function(_796,_797){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var b=MochiKit.Base; +var _79b=MochiKit.Style.getStyle(_796,"opacity"); +_797=b.update({duration:3,from:0,afterFinishInternal:function(_79c){ +MochiKit.Style.setStyle(_79c.element,{"opacity":_79b}); +}},_797); +var _79d=_797.transition||v.Transitions.sinoidal; +_797.transition=function(pos){ +return _79d(1-v.Transitions.pulse(pos,_797.pulses)); +}; +return new v.Opacity(_796,_797); +}; +MochiKit.Visual.fold=function(_79f,_7a0){ +var d=MochiKit.DOM; +var v=MochiKit.Visual; +var s=MochiKit.Style; +_79f=d.getElement(_79f); +var _7a4=s.getElementDimensions(_79f,true); +var _7a5={top:_79f.style.top,left:_79f.style.left,width:_79f.style.width,height:_79f.style.height}; +var _7a6=s.makeClipping(_79f); +_7a0=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_7a4.h,originalWidth:_7a4.w},afterFinishInternal:function(_7a7){ +new v.Scale(_79f,1,{scaleContent:false,scaleY:false,scaleMode:{originalHeight:_7a4.h,originalWidth:_7a4.w},afterFinishInternal:function(_7a8){ +s.hideElement(_7a8.element); +s.undoClipping(_7a8.element,_7a6); +s.setStyle(_7a8.element,_7a5); +}}); +}},_7a0); +return new v.Scale(_79f,5,_7a0); +}; +MochiKit.Base.nameFunctions(MochiKit.Visual); +MochiKit.Base._exportSymbols(this,MochiKit.Visual); +MochiKit.Base._module("DragAndDrop","1.5",["Base","Iter","DOM","Signal","Visual","Position"]); +MochiKit.DragAndDrop.Droppables={drops:[],remove:function(_7a9){ +this.drops=MochiKit.Base.filter(function(d){ +return d.element!=MochiKit.DOM.getElement(_7a9); +},this.drops); +},register:function(drop){ +this.drops.push(drop); +},unregister:function(drop){ +this.drops=MochiKit.Base.filter(function(d){ +return d!=drop; +},this.drops); +},prepare:function(_7ae){ +MochiKit.Base.map(function(drop){ +if(drop.isAccepted(_7ae)){ +if(drop.options.activeclass){ +MochiKit.DOM.addElementClass(drop.element,drop.options.activeclass); +} +drop.options.onactive(drop.element,_7ae); +} +},this.drops); +},findDeepestChild:function(_7b0){ +var _7b1=_7b0[0]; +for(var i=1;i<_7b0.length;++i){ +if(MochiKit.DOM.isChildNode(_7b0[i].element,_7b1.element)){ +_7b1=_7b0[i]; +} +} +return _7b1; +},show:function(_7b3,_7b4){ +if(!this.drops.length){ +return; +} +var _7b5=[]; +if(this.last_active){ +this.last_active.deactivate(); +} +MochiKit.Iter.forEach(this.drops,function(drop){ +if(drop.isAffected(_7b3,_7b4)){ +_7b5.push(drop); +} +}); +if(_7b5.length>0){ +var drop=this.findDeepestChild(_7b5); +MochiKit.Position.within(drop.element,_7b3.page.x,_7b3.page.y); +drop.options.onhover(_7b4,drop.element,MochiKit.Position.overlap(drop.options.overlap,drop.element)); +drop.activate(); +} +},fire:function(_7b8,_7b9){ +if(!this.last_active){ +return; +} +MochiKit.Position.prepare(); +if(this.last_active.isAffected(_7b8.mouse(),_7b9)){ +this.last_active.options.ondrop(_7b9,this.last_active.element,_7b8); +} +},reset:function(_7ba){ +MochiKit.Base.map(function(drop){ +if(drop.options.activeclass){ +MochiKit.DOM.removeElementClass(drop.element,drop.options.activeclass); +} +drop.options.ondesactive(drop.element,_7ba); +},this.drops); +if(this.last_active){ +this.last_active.deactivate(); +} +}}; +MochiKit.DragAndDrop.Droppable=function(_7bc,_7bd){ +var cls=arguments.callee; +if(!(this instanceof cls)){ +return new cls(_7bc,_7bd); +} +this.__init__(_7bc,_7bd); +}; +MochiKit.DragAndDrop.Droppable.prototype={__class__:MochiKit.DragAndDrop.Droppable,__init__:function(_7bf,_7c0){ +var d=MochiKit.DOM; +var b=MochiKit.Base; +this.element=d.getElement(_7bf); +this.options=b.update({greedy:true,hoverclass:null,activeclass:null,hoverfunc:b.noop,accept:null,onactive:b.noop,ondesactive:b.noop,onhover:b.noop,ondrop:b.noop,containment:[],tree:false},_7c0); +this.options._containers=[]; +b.map(MochiKit.Base.bind(function(c){ +this.options._containers.push(d.getElement(c)); +},this),this.options.containment); +MochiKit.Style.makePositioned(this.element); +MochiKit.DragAndDrop.Droppables.register(this); +},isContained:function(_7c4){ +if(this.options._containers.length){ +var _7c5; +if(this.options.tree){ +_7c5=_7c4.treeNode; +}else{ +_7c5=_7c4.parentNode; +} +return MochiKit.Iter.some(this.options._containers,function(c){ +return _7c5==c; +}); +}else{ +return true; +} +},isAccepted:function(_7c7){ +return ((!this.options.accept)||MochiKit.Iter.some(this.options.accept,function(c){ +return MochiKit.DOM.hasElementClass(_7c7,c); +})); +},isAffected:function(_7c9,_7ca){ +return ((this.element!=_7ca)&&this.isContained(_7ca)&&this.isAccepted(_7ca)&&MochiKit.Position.within(this.element,_7c9.page.x,_7c9.page.y)); +},deactivate:function(){ +if(this.options.hoverclass){ +MochiKit.DOM.removeElementClass(this.element,this.options.hoverclass); +} +this.options.hoverfunc(this.element,false); +MochiKit.DragAndDrop.Droppables.last_active=null; +},activate:function(){ +if(this.options.hoverclass){ +MochiKit.DOM.addElementClass(this.element,this.options.hoverclass); +} +this.options.hoverfunc(this.element,true); +MochiKit.DragAndDrop.Droppables.last_active=this; +},destroy:function(){ +MochiKit.DragAndDrop.Droppables.unregister(this); +},repr:function(){ +return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; +}}; +MochiKit.DragAndDrop.Draggables={drags:[],register:function(_7cb){ +if(this.drags.length===0){ +var conn=MochiKit.Signal.connect; +this.eventMouseUp=conn(document,"onmouseup",this,this.endDrag); +this.eventMouseMove=conn(document,"onmousemove",this,this.updateDrag); +this.eventKeypress=conn(document,"onkeypress",this,this.keyPress); +} +this.drags.push(_7cb); +},unregister:function(_7cd){ +this.drags=MochiKit.Base.filter(function(d){ +return d!=_7cd; +},this.drags); +if(this.drags.length===0){ +var disc=MochiKit.Signal.disconnect; +disc(this.eventMouseUp); +disc(this.eventMouseMove); +disc(this.eventKeypress); +} +},activate:function(_7d0){ +window.focus(); +this.activeDraggable=_7d0; +},deactivate:function(){ +this.activeDraggable=null; +},updateDrag:function(_7d1){ +if(!this.activeDraggable){ +return; +} +var _7d2=_7d1.mouse(); +if(this._lastPointer&&(MochiKit.Base.repr(this._lastPointer.page)==MochiKit.Base.repr(_7d2.page))){ +return; +} +this._lastPointer=_7d2; +this.activeDraggable.updateDrag(_7d1,_7d2); +},endDrag:function(_7d3){ +if(!this.activeDraggable){ +return; +} +this._lastPointer=null; +this.activeDraggable.endDrag(_7d3); +this.activeDraggable=null; +},keyPress:function(_7d4){ +if(this.activeDraggable){ +this.activeDraggable.keyPress(_7d4); +} +},notify:function(_7d5,_7d6,_7d7){ +MochiKit.Signal.signal(this,_7d5,_7d6,_7d7); +}}; +MochiKit.DragAndDrop.Draggable=function(_7d8,_7d9){ +var cls=arguments.callee; +if(!(this instanceof cls)){ +return new cls(_7d8,_7d9); +} +this.__init__(_7d8,_7d9); +}; +MochiKit.DragAndDrop.Draggable.prototype={__class__:MochiKit.DragAndDrop.Draggable,__init__:function(_7db,_7dc){ +var v=MochiKit.Visual; +var b=MochiKit.Base; +_7dc=b.update({handle:false,starteffect:function(_7df){ +this._savedOpacity=MochiKit.Style.getStyle(_7df,"opacity")||1; +new v.Opacity(_7df,{duration:0.2,from:this._savedOpacity,to:0.7}); +},reverteffect:function(_7e0,_7e1,_7e2){ +var dur=Math.sqrt(Math.abs(_7e1^2)+Math.abs(_7e2^2))*0.02; +return new v.Move(_7e0,{x:-_7e2,y:-_7e1,duration:dur}); +},endeffect:function(_7e4){ +new v.Opacity(_7e4,{duration:0.2,from:0.7,to:this._savedOpacity}); +},onchange:b.noop,zindex:1000,revert:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false},_7dc); +var d=MochiKit.DOM; +this.element=d.getElement(_7db); +if(_7dc.handle&&(typeof (_7dc.handle)=="string")){ +this.handle=d.getFirstElementByTagAndClassName(null,_7dc.handle,this.element); +} +if(!this.handle){ +this.handle=d.getElement(_7dc.handle); +} +if(!this.handle){ +this.handle=this.element; +} +if(_7dc.scroll&&!_7dc.scroll.scrollTo&&!_7dc.scroll.outerHTML){ +_7dc.scroll=d.getElement(_7dc.scroll); +this._isScrollChild=MochiKit.DOM.isChildNode(this.element,_7dc.scroll); +} +MochiKit.Style.makePositioned(this.element); +this.delta=this.currentDelta(); +this.options=_7dc; +this.dragging=false; +this.eventMouseDown=MochiKit.Signal.connect(this.handle,"onmousedown",this,this.initDrag); +MochiKit.DragAndDrop.Draggables.register(this); +},destroy:function(){ +MochiKit.Signal.disconnect(this.eventMouseDown); +MochiKit.DragAndDrop.Draggables.unregister(this); +},currentDelta:function(){ +var s=MochiKit.Style.getStyle; +return [parseInt(s(this.element,"left")||"0"),parseInt(s(this.element,"top")||"0")]; +},initDrag:function(_7e7){ +if(!_7e7.mouse().button.left){ +return; +} +var src=_7e7.target(); +var _7e9=(src.tagName||"").toUpperCase(); +if(_7e9==="INPUT"||_7e9==="SELECT"||_7e9==="OPTION"||_7e9==="BUTTON"||_7e9==="TEXTAREA"){ +return; +} +if(this._revert){ +this._revert.cancel(); +this._revert=null; +} +var _7ea=_7e7.mouse(); +var pos=MochiKit.Position.cumulativeOffset(this.element); +this.offset=[_7ea.page.x-pos.x,_7ea.page.y-pos.y]; +MochiKit.DragAndDrop.Draggables.activate(this); +_7e7.stop(); +},startDrag:function(_7ec){ +this.dragging=true; +if(this.options.selectclass){ +MochiKit.DOM.addElementClass(this.element,this.options.selectclass); +} +if(this.options.zindex){ +this.originalZ=parseInt(MochiKit.Style.getStyle(this.element,"z-index")||"0"); +this.element.style.zIndex=this.options.zindex; +} +if(this.options.ghosting){ +this._clone=this.element.cloneNode(true); +this.ghostPosition=MochiKit.Position.absolutize(this.element); +this.element.parentNode.insertBefore(this._clone,this.element); +} +if(this.options.scroll){ +if(this.options.scroll==window){ +var _7ed=this._getWindowScroll(this.options.scroll); +this.originalScrollLeft=_7ed.left; +this.originalScrollTop=_7ed.top; +}else{ +this.originalScrollLeft=this.options.scroll.scrollLeft; +this.originalScrollTop=this.options.scroll.scrollTop; +} +} +MochiKit.DragAndDrop.Droppables.prepare(this.element); +MochiKit.DragAndDrop.Draggables.notify("start",this,_7ec); +if(this.options.starteffect){ +this.options.starteffect(this.element); +} +},updateDrag:function(_7ee,_7ef){ +if(!this.dragging){ +this.startDrag(_7ee); +} +MochiKit.Position.prepare(); +MochiKit.DragAndDrop.Droppables.show(_7ef,this.element); +MochiKit.DragAndDrop.Draggables.notify("drag",this,_7ee); +this.draw(_7ef); +this.options.onchange(this); +if(this.options.scroll){ +this.stopScrolling(); +var p,q; +if(this.options.scroll==window){ +var s=this._getWindowScroll(this.options.scroll); +p=new MochiKit.Style.Coordinates(s.left,s.top); +q=new MochiKit.Style.Coordinates(s.left+s.width,s.top+s.height); +}else{ +p=MochiKit.Position.page(this.options.scroll); +p.x+=this.options.scroll.scrollLeft; +p.y+=this.options.scroll.scrollTop; +p.x+=(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0); +p.y+=(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0); +q=new MochiKit.Style.Coordinates(p.x+this.options.scroll.offsetWidth,p.y+this.options.scroll.offsetHeight); +} +var _7f3=[0,0]; +if(_7ef.page.x>(q.x-this.options.scrollSensitivity)){ +_7f3[0]=_7ef.page.x-(q.x-this.options.scrollSensitivity); +}else{ +if(_7ef.page.x<(p.x+this.options.scrollSensitivity)){ +_7f3[0]=_7ef.page.x-(p.x+this.options.scrollSensitivity); +} +} +if(_7ef.page.y>(q.y-this.options.scrollSensitivity)){ +_7f3[1]=_7ef.page.y-(q.y-this.options.scrollSensitivity); +}else{ +if(_7ef.page.y<(p.y+this.options.scrollSensitivity)){ +_7f3[1]=_7ef.page.y-(p.y+this.options.scrollSensitivity); +} +} +this.startScrolling(_7f3); +} +if(/AppleWebKit/.test(navigator.appVersion)){ +window.scrollBy(0,0); +} +_7ee.stop(); +},finishDrag:function(_7f4,_7f5){ +var dr=MochiKit.DragAndDrop; +this.dragging=false; +if(this.options.selectclass){ +MochiKit.DOM.removeElementClass(this.element,this.options.selectclass); +} +if(this.options.ghosting){ +MochiKit.Position.relativize(this.element,this.ghostPosition); +MochiKit.DOM.removeElement(this._clone); +this._clone=null; +} +if(_7f5){ +dr.Droppables.fire(_7f4,this.element); +} +dr.Draggables.notify("end",this,_7f4); +var _7f7=this.options.revert; +if(_7f7&&typeof (_7f7)=="function"){ +_7f7=_7f7(this.element); +} +var d=this.currentDelta(); +if(_7f7&&this.options.reverteffect){ +this._revert=this.options.reverteffect(this.element,d[1]-this.delta[1],d[0]-this.delta[0]); +}else{ +this.delta=d; +} +if(this.options.zindex){ +this.element.style.zIndex=this.originalZ; +} +if(this.options.endeffect){ +this.options.endeffect(this.element); +} +dr.Draggables.deactivate(); +dr.Droppables.reset(this.element); +},keyPress:function(_7f9){ +if(_7f9.key().string!="KEY_ESCAPE"){ +return; +} +this.finishDrag(_7f9,false); +_7f9.stop(); +},endDrag:function(_7fa){ +if(!this.dragging){ +return; +} +this.stopScrolling(); +this.finishDrag(_7fa,true); +_7fa.stop(); +},draw:function(_7fb){ +var pos=MochiKit.Position.cumulativeOffset(this.element); +var d=this.currentDelta(); +pos.x-=d[0]; +pos.y-=d[1]; +if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){ +pos.x-=this.options.scroll.scrollLeft-this.originalScrollLeft; +pos.y-=this.options.scroll.scrollTop-this.originalScrollTop; +} +var p=[_7fb.page.x-pos.x-this.offset[0],_7fb.page.y-pos.y-this.offset[1]]; +if(this.options.snap){ +if(typeof (this.options.snap)=="function"){ +p=this.options.snap(p[0],p[1]); +}else{ +if(this.options.snap instanceof Array){ +var i=-1; +p=MochiKit.Base.map(MochiKit.Base.bind(function(v){ +i+=1; +return Math.round(v/this.options.snap[i])*this.options.snap[i]; +},this),p); +}else{ +p=MochiKit.Base.map(MochiKit.Base.bind(function(v){ +return Math.round(v/this.options.snap)*this.options.snap; +},this),p); +} +} +} +var _802=this.element.style; +if((!this.options.constraint)||(this.options.constraint=="horizontal")){ +_802.left=p[0]+"px"; +} +if((!this.options.constraint)||(this.options.constraint=="vertical")){ +_802.top=p[1]+"px"; +} +if(_802.visibility=="hidden"){ +_802.visibility=""; +} +},stopScrolling:function(){ +if(this.scrollInterval){ +clearInterval(this.scrollInterval); +this.scrollInterval=null; +MochiKit.DragAndDrop.Draggables._lastScrollPointer=null; +} +},startScrolling:function(_803){ +if(!_803[0]&&!_803[1]){ +return; +} +this.scrollSpeed=[_803[0]*this.options.scrollSpeed,_803[1]*this.options.scrollSpeed]; +this.lastScrolled=new Date(); +this.scrollInterval=setInterval(MochiKit.Base.bind(this.scroll,this),10); +},scroll:function(){ +var _804=new Date(); +var _805=_804-this.lastScrolled; +this.lastScrolled=_804; +if(this.options.scroll==window){ +var s=this._getWindowScroll(this.options.scroll); +if(this.scrollSpeed[0]||this.scrollSpeed[1]){ +var dm=_805/1000; +this.options.scroll.scrollTo(s.left+dm*this.scrollSpeed[0],s.top+dm*this.scrollSpeed[1]); +} +}else{ +this.options.scroll.scrollLeft+=this.scrollSpeed[0]*_805/1000; +this.options.scroll.scrollTop+=this.scrollSpeed[1]*_805/1000; +} +var d=MochiKit.DragAndDrop; +MochiKit.Position.prepare(); +d.Droppables.show(d.Draggables._lastPointer,this.element); +d.Draggables.notify("drag",this); +if(this._isScrollChild){ +d.Draggables._lastScrollPointer=d.Draggables._lastScrollPointer||d.Draggables._lastPointer; +d.Draggables._lastScrollPointer.x+=this.scrollSpeed[0]*_805/1000; +d.Draggables._lastScrollPointer.y+=this.scrollSpeed[1]*_805/1000; +if(d.Draggables._lastScrollPointer.x<0){ +d.Draggables._lastScrollPointer.x=0; +} +if(d.Draggables._lastScrollPointer.y<0){ +d.Draggables._lastScrollPointer.y=0; +} +this.draw(d.Draggables._lastScrollPointer); +} +this.options.onchange(this); +},_getWindowScroll:function(win){ +var vp,w,h; +MochiKit.DOM.withWindow(win,function(){ +vp=MochiKit.Style.getViewportPosition(win.document); +}); +if(win.innerWidth){ +w=win.innerWidth; +h=win.innerHeight; +}else{ +if(win.document.documentElement&&win.document.documentElement.clientWidth){ +w=win.document.documentElement.clientWidth; +h=win.document.documentElement.clientHeight; +}else{ +w=win.document.body.offsetWidth; +h=win.document.body.offsetHeight; +} +} +return {top:vp.y,left:vp.x,width:w,height:h}; +},repr:function(){ +return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; +}}; +MochiKit.DragAndDrop.__new__=function(){ +MochiKit.Base.nameFunctions(this); +}; +MochiKit.DragAndDrop.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.DragAndDrop); +MochiKit.Base._module("Sortable","1.5",["Base","Iter","DOM","Position","DragAndDrop"]); +MochiKit.Base.update(MochiKit.Sortable,{__export__:false,sortables:{},_findRootElement:function(_80d){ +while(_80d.tagName.toUpperCase()!="BODY"){ +if(_80d.id&&MochiKit.Sortable.sortables[_80d.id]){ +return _80d; +} +_80d=_80d.parentNode; +} +},_createElementId:function(_80e){ +if(_80e.id==null||_80e.id==""){ +var d=MochiKit.DOM; +var id; +var _811=1; +while(d.getElement(id="sortable"+_811)!=null){ +_811+=1; +} +d.setNodeAttribute(_80e,"id",id); +} +},options:function(_812){ +_812=MochiKit.Sortable._findRootElement(MochiKit.DOM.getElement(_812)); +if(!_812){ +return; +} +return MochiKit.Sortable.sortables[_812.id]; +},destroy:function(_813){ +var s=MochiKit.Sortable.options(_813); +var b=MochiKit.Base; +var d=MochiKit.DragAndDrop; +if(s){ +MochiKit.Signal.disconnect(s.startHandle); +MochiKit.Signal.disconnect(s.endHandle); +b.map(function(dr){ +d.Droppables.remove(dr); +},s.droppables); +b.map(function(dr){ +dr.destroy(); +},s.draggables); +delete MochiKit.Sortable.sortables[s.element.id]; +} +},create:function(_819,_81a){ +_819=MochiKit.DOM.getElement(_819); +var self=MochiKit.Sortable; +self._createElementId(_819); +_81a=MochiKit.Base.update({element:_819,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:[_819],handle:false,only:false,hoverclass:null,ghosting:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:/^[^_]*_(.*)$/,onChange:MochiKit.Base.noop,onUpdate:MochiKit.Base.noop,accept:null},_81a); +self.destroy(_819); +var _81c={revert:true,ghosting:_81a.ghosting,scroll:_81a.scroll,scrollSensitivity:_81a.scrollSensitivity,scrollSpeed:_81a.scrollSpeed,constraint:_81a.constraint,handle:_81a.handle}; +if(_81a.starteffect){ +_81c.starteffect=_81a.starteffect; +} +if(_81a.reverteffect){ +_81c.reverteffect=_81a.reverteffect; +}else{ +if(_81a.ghosting){ +_81c.reverteffect=function(_81d){ +_81d.style.top=0; +_81d.style.left=0; +}; +} +} +if(_81a.endeffect){ +_81c.endeffect=_81a.endeffect; +} +if(_81a.zindex){ +_81c.zindex=_81a.zindex; +} +var _81e={overlap:_81a.overlap,containment:_81a.containment,hoverclass:_81a.hoverclass,onhover:self.onHover,tree:_81a.tree,accept:_81a.accept}; +var _81f={onhover:self.onEmptyHover,overlap:_81a.overlap,containment:_81a.containment,hoverclass:_81a.hoverclass,accept:_81a.accept}; +MochiKit.DOM.removeEmptyTextNodes(_819); +_81a.draggables=[]; +_81a.droppables=[]; +if(_81a.dropOnEmpty||_81a.tree){ +new MochiKit.DragAndDrop.Droppable(_819,_81f); +_81a.droppables.push(_819); +} +MochiKit.Base.map(function(e){ +var _821=_81a.handle?MochiKit.DOM.getFirstElementByTagAndClassName(null,_81a.handle,e):e; +_81a.draggables.push(new MochiKit.DragAndDrop.Draggable(e,MochiKit.Base.update(_81c,{handle:_821}))); +new MochiKit.DragAndDrop.Droppable(e,_81e); +if(_81a.tree){ +e.treeNode=_819; +} +_81a.droppables.push(e); +},(self.findElements(_819,_81a)||[])); +if(_81a.tree){ +MochiKit.Base.map(function(e){ +new MochiKit.DragAndDrop.Droppable(e,_81f); +e.treeNode=_819; +_81a.droppables.push(e); +},(self.findTreeElements(_819,_81a)||[])); +} +self.sortables[_819.id]=_81a; +_81a.lastValue=self.serialize(_819); +_81a.startHandle=MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables,"start",MochiKit.Base.partial(self.onStart,_819)); +_81a.endHandle=MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables,"end",MochiKit.Base.partial(self.onEnd,_819)); +},onStart:function(_823,_824){ +var self=MochiKit.Sortable; +var _826=self.options(_823); +_826.lastValue=self.serialize(_826.element); +},onEnd:function(_827,_828){ +var self=MochiKit.Sortable; +self.unmark(); +var _82a=self.options(_827); +if(_82a.lastValue!=self.serialize(_82a.element)){ +_82a.onUpdate(_82a.element); +} +},findElements:function(_82b,_82c){ +return MochiKit.Sortable.findChildren(_82b,_82c.only,_82c.tree,_82c.tag); +},findTreeElements:function(_82d,_82e){ +return MochiKit.Sortable.findChildren(_82d,_82e.only,_82e.tree?true:false,_82e.treeTag); +},findChildren:function(_82f,only,_831,_832){ +if(!_82f.hasChildNodes()){ +return null; +} +_832=_832.toUpperCase(); +if(only){ +only=MochiKit.Base.flattenArray([only]); +} +var _833=[]; +MochiKit.Base.map(function(e){ +if(e.tagName&&e.tagName.toUpperCase()==_832&&(!only||MochiKit.Iter.some(only,function(c){ +return MochiKit.DOM.hasElementClass(e,c); +}))){ +_833.push(e); +} +if(_831){ +var _836=MochiKit.Sortable.findChildren(e,only,_831,_832); +if(_836&&_836.length>0){ +_833=_833.concat(_836); +} +} +},_82f.childNodes); +return _833; +},onHover:function(_837,_838,_839){ +if(MochiKit.DOM.isChildNode(_838,_837)){ +return; +} +var self=MochiKit.Sortable; +if(_839>0.33&&_839<0.66&&self.options(_838).tree){ +return; +}else{ +if(_839>0.5){ +self.mark(_838,"before"); +if(_838.previousSibling!=_837){ +var _83b=_837.parentNode; +_837.style.visibility="hidden"; +_838.parentNode.insertBefore(_837,_838); +if(_838.parentNode!=_83b){ +self.options(_83b).onChange(_837); +} +self.options(_838.parentNode).onChange(_837); +} +}else{ +self.mark(_838,"after"); +var _83c=_838.nextSibling||null; +if(_83c!=_837){ +var _83b=_837.parentNode; +_837.style.visibility="hidden"; +_838.parentNode.insertBefore(_837,_83c); +if(_838.parentNode!=_83b){ +self.options(_83b).onChange(_837); +} +self.options(_838.parentNode).onChange(_837); +} +} +} +},_offsetSize:function(_83d,type){ +if(type=="vertical"||type=="height"){ +return _83d.offsetHeight; +}else{ +return _83d.offsetWidth; +} +},onEmptyHover:function(_83f,_840,_841){ +var _842=_83f.parentNode; +var self=MochiKit.Sortable; +var _844=self.options(_840); +if(!MochiKit.DOM.isChildNode(_840,_83f)){ +var _845; +var _846=self.findElements(_840,{tag:_844.tag,only:_844.only}); +var _847=null; +if(_846){ +var _848=self._offsetSize(_840,_844.overlap)*(1-_841); +for(_845=0;_845<_846.length;_845+=1){ +if(_848-self._offsetSize(_846[_845],_844.overlap)>=0){ +_848-=self._offsetSize(_846[_845],_844.overlap); +}else{ +if(_848-(self._offsetSize(_846[_845],_844.overlap)/2)>=0){ +_847=_845+1<_846.length?_846[_845+1]:null; +break; +}else{ +_847=_846[_845]; +break; +} +} +} +} +_840.insertBefore(_83f,_847); +self.options(_842).onChange(_83f); +_844.onChange(_83f); +} +},unmark:function(){ +var m=MochiKit.Sortable._marker; +if(m){ +MochiKit.Style.hideElement(m); +} +},mark:function(_84a,_84b){ +var d=MochiKit.DOM; +var self=MochiKit.Sortable; +var _84e=self.options(_84a.parentNode); +if(_84e&&!_84e.ghosting){ +return; +} +if(!self._marker){ +self._marker=d.getElement("dropmarker")||document.createElement("DIV"); +MochiKit.Style.hideElement(self._marker); +d.addElementClass(self._marker,"dropmarker"); +self._marker.style.position="absolute"; +document.getElementsByTagName("body").item(0).appendChild(self._marker); +} +var _84f=MochiKit.Position.cumulativeOffset(_84a); +self._marker.style.left=_84f.x+"px"; +self._marker.style.top=_84f.y+"px"; +if(_84b=="after"){ +if(_84e.overlap=="horizontal"){ +self._marker.style.left=(_84f.x+_84a.clientWidth)+"px"; +}else{ +self._marker.style.top=(_84f.y+_84a.clientHeight)+"px"; +} +} +MochiKit.Style.showElement(self._marker); +},_tree:function(_850,_851,_852){ +var self=MochiKit.Sortable; +var _854=self.findElements(_850,_851)||[]; +for(var i=0;i<_854.length;++i){ +var _856=_854[i].id.match(_851.format); +if(!_856){ +continue; +} +var _857={id:encodeURIComponent(_856?_856[1]:null),element:_850,parent:_852,children:[],position:_852.children.length,container:self._findChildrenElement(_854[i],_851.treeTag.toUpperCase())}; +if(_857.container){ +self._tree(_857.container,_851,_857); +} +_852.children.push(_857); +} +return _852; +},_findChildrenElement:function(_858,_859){ +if(_858&&_858.hasChildNodes){ +_859=_859.toUpperCase(); +for(var i=0;i<_858.childNodes.length;++i){ +if(_858.childNodes[i].tagName.toUpperCase()==_859){ +return _858.childNodes[i]; +} +} +} +return null; +},tree:function(_85b,_85c){ +_85b=MochiKit.DOM.getElement(_85b); +var _85d=MochiKit.Sortable.options(_85b); +_85c=MochiKit.Base.update({tag:_85d.tag,treeTag:_85d.treeTag,only:_85d.only,name:_85b.id,format:_85d.format},_85c||{}); +var root={id:null,parent:null,children:new Array,container:_85b,position:0}; +return MochiKit.Sortable._tree(_85b,_85c,root); +},setSequence:function(_85f,_860,_861){ +var self=MochiKit.Sortable; +var b=MochiKit.Base; +_85f=MochiKit.DOM.getElement(_85f); +_861=b.update(self.options(_85f),_861||{}); +var _864={}; +b.map(function(n){ +var m=n.id.match(_861.format); +if(m){ +_864[m[1]]=[n,n.parentNode]; +} +n.parentNode.removeChild(n); +},self.findElements(_85f,_861)); +b.map(function(_867){ +var n=_864[_867]; +if(n){ +n[1].appendChild(n[0]); +delete _864[_867]; +} +},_860); +},_constructIndex:function(node){ +var _86a=""; +do{ +if(node.id){ +_86a="["+node.position+"]"+_86a; +} +}while((node=node.parent)!=null); +return _86a; +},sequence:function(_86b,_86c){ +_86b=MochiKit.DOM.getElement(_86b); +var self=MochiKit.Sortable; +var _86c=MochiKit.Base.update(self.options(_86b),_86c||{}); +return MochiKit.Base.map(function(item){ +return item.id.match(_86c.format)?item.id.match(_86c.format)[1]:""; +},MochiKit.DOM.getElement(self.findElements(_86b,_86c)||[])); +},serialize:function(_86f,_870){ +_86f=MochiKit.DOM.getElement(_86f); +var self=MochiKit.Sortable; +_870=MochiKit.Base.update(self.options(_86f),_870||{}); +var name=encodeURIComponent(_870.name||_86f.id); +if(_870.tree){ +return MochiKit.Base.flattenArray(MochiKit.Base.map(function(item){ +return [name+self._constructIndex(item)+"[id]="+encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); +},self.tree(_86f,_870).children)).join("&"); +}else{ +return MochiKit.Base.map(function(item){ +return name+"[]="+encodeURIComponent(item); +},self.sequence(_86f,_870)).join("&"); +} +}}); +MochiKit.Sortable.Sortable=MochiKit.Sortable; +MochiKit.Sortable.__new__=function(){ +MochiKit.Base.nameFunctions(this); +}; +MochiKit.Sortable.__new__(); +MochiKit.Base._exportSymbols(this,MochiKit.Sortable); +if(typeof (MochiKit)=="undefined"){ +MochiKit={}; +} +if(typeof (MochiKit.MochiKit)=="undefined"){ +MochiKit.MochiKit={}; +} +MochiKit.MochiKit.NAME="MochiKit.MochiKit"; +MochiKit.MochiKit.VERSION="1.5"; +MochiKit.MochiKit.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +MochiKit.MochiKit.toString=function(){ +return this.__repr__(); +}; +MochiKit.MochiKit.SUBMODULES=["Base","Iter","Logging","DateTime","Format","Text","Async","DOM","Selector","Style","LoggingPane","Color","Signal","Position","Visual","DragAndDrop","Sortable"]; +(function(){ +if(typeof (document)=="undefined"){ +return; +} +var _875=document.getElementsByTagName("script"); +var _876="http://www.w3.org/1999/xhtml"; +var _877="http://www.w3.org/2000/svg"; +var _878="http://www.w3.org/1999/xlink"; +var _879="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; +var base=null; +var _87b=null; +var _87c={}; +var i; +var src; +for(i=0;i<_875.length;i++){ +src=null; +switch(_875[i].namespaceURI){ +case _877: +src=_875[i].getAttributeNS(_878,"href"); +break; +default: +src=_875[i].getAttribute("src"); +break; +} +if(!src){ +continue; +} +_87c[src]=true; +if(src.match(/MochiKit.js(\?.*)?$/)){ +base=src.substring(0,src.lastIndexOf("MochiKit.js")); +_87b=_875[i]; +} +} +if(base===null){ +return; +} +var _87f=MochiKit.MochiKit.SUBMODULES; +for(var i=0;i<_87f.length;i++){ +if(MochiKit[_87f[i]]){ +continue; +} +var uri=base+_87f[i]+".js"; +if(uri in _87c){ +continue; +} +if(_87b.namespaceURI==_877||_87b.namespaceURI==_879){ +var s=document.createElementNS(_87b.namespaceURI,"script"); +s.setAttribute("id","MochiKit_"+base+_87f[i]); +if(_87b.namespaceURI==_877){ +s.setAttributeNS(_878,"href",uri); +}else{ +s.setAttribute("src",uri); +} +s.setAttribute("type","application/x-javascript"); +_87b.parentNode.appendChild(s); +}else{ +document.write("<"+_87b.nodeName+" src=\""+uri+"\" type=\"text/javascript\">"); +} +} +})(); + + diff --git a/interfaces/smpl/templates/static/MochiKit/__package__.js b/interfaces/smpl/templates/static/MochiKit/__package__.js new file mode 100644 index 0000000..6448966 --- /dev/null +++ b/interfaces/smpl/templates/static/MochiKit/__package__.js @@ -0,0 +1,2 @@ +dojo.hostenv.conditionalLoadModule({"common": ["MochiKit.MochiKit"]}); +dojo.hostenv.moduleLoaded("MochiKit.*"); diff --git a/interfaces/smpl/templates/static/PlotKit/PlotKit.js b/interfaces/smpl/templates/static/PlotKit/PlotKit.js new file mode 100644 index 0000000..363042a --- /dev/null +++ b/interfaces/smpl/templates/static/PlotKit/PlotKit.js @@ -0,0 +1,2177 @@ +/*** + + PlotKit.PlotKit 0.9.1 : PACKED VERSION + + THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please + diff against the source tree, not this file. + + For more information, . + + Copyright (c) 2006. Alastair Tse. + +***/ + +try{ +if(typeof (MochiKit.Base)=="undefined"||typeof (MochiKit.DOM)=="undefined"||typeof (MochiKit.Color)=="undefined"||typeof (MochiKit.Format)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "PlotKit depends on MochiKit.{Base,Color,DOM,Format}"; +} +MochiKit.Base.update(MochiKit.Color.Color.prototype,{asFillColor:function(){ +return this.lighterColorWithLevel(0.3); +},asStrokeColor:function(){ +return this.darkerColorWithLevel(0.1); +},asPointColor:function(){ +return this.lighterColorWithLevel(0.1); +}}); +if(typeof (PlotKit)=="undefined"){ +PlotKit={}; +} +PlotKit.NAME="PlotKit"; +PlotKit.VERSION="0.8"; +PlotKit.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +PlotKit.toString=function(){ +return this.__repr__(); +}; +if(typeof (PlotKit.Base)=="undefined"){ +PlotKit.Base={}; +} +PlotKit.Base.NAME="PlotKit.Base"; +PlotKit.Base.VERSION=PlotKit.VERSION; +PlotKit.Base.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +PlotKit.Base.toString=function(){ +return this.__repr__(); +}; +PlotKit.Base.usingPrototype=function(){ +try{ +return (typeof (Object.extend)=="function"); +} +catch(e){ +return false; +} +}; +MochiKit.Base.update(PlotKit.Base,{roundInterval:function(_1,_2,_3){ +var _4=MochiKit.Format.roundToFixed; +var _5=_1/_2; +return parseFloat(_4(_5,_3)); +},collapse:function(_6){ +var m=MochiKit.Base; +var _8=new Array(); +for(var i=0;i<_6.length;i++){ +_8=m.concat(_8,_6[i]); +} +if(PlotKit.Base.usingPrototype()){ +delete _8.extend; +delete _8.from; +delete _8.inspect; +} +return _8; +},uniq:function(_10){ +var m=MochiKit.Base; +if(!m.isArrayLike(_10)||(_10.length<1)){ +return new Array(); +} +var _11=new Array(); +var _12=_10[0]; +_11.push(_10[0]); +for(var i=1;i<_10.length;i++){ +if(m.compare(_10[i],_12)!=0){ +_12=_10[i]; +_11.push(_10[i]); +} +} +return _11; +},colorScheme:function(){ +var mb=MochiKit.Base; +var mc=MochiKit.Color; +var _15=["red","orange","yellow","green","cyan","blue","purple","magenta"]; +var _16=function(_17){ +return mc.Color[_17+"Color"](); +}; +return mb.map(_16,_15); +},baseDarkPrimaryColors:function(){ +var _18=MochiKit.Color.Color.fromHexString; +return [_18("#ad3f40"),_18("#ddac2c"),_18("#dfdd0c"),_18("#5276c4"),_18("#739c5a")]; +},basePrimaryColors:function(){ +var _19=MochiKit.Color.Color.fromHexString; +return [_19("#d24c4d"),_19("#f2b32f"),_19("#ece90e"),_19("#5d83da"),_19("#78a15d")]; +},baseBlueColors:function(){ +var _20=MochiKit.Color.Color.fromHexString; +return [_20("#4b6b94"),_20("#5d81b4"),_20("#acbad2")]; +},palette:function(_21,_22,_23,_24){ +var _25=MochiKit.Base.isUndefinedOrNull; +var _26=new Array(); +if(_25(_24)){ +_24=0.1; +} +if(_25(_23)){ +_23=0.4; +} +if(_25(_22)){ +_22=-0.2; +} +var _27=_22; +while(_27<=_23){ +_26.push(_27); +_27+=_24; +} +var _28=function(_29,_30){ +return _29.lighterColorWithLevel(_30); +}; +return MochiKit.Base.map(partial(_28,_21),_26); +},excanvasSupported:function(){ +if(/MSIE/.test(navigator.userAgent)&&!window.opera){ +return true; +} +return false; +},findPosX:function(obj){ +var _32=0; +if(obj.offsetParent){ +while(obj.offsetParent){ +_32+=obj.offsetLeft; +obj=obj.offsetParent; +} +}else{ +if(obj.x){ +_32+=obj.x; +} +} +return _32; +},findPosY:function(obj){ +var _33=0; +if(obj.offsetParent){ +while(obj.offsetParent){ +_33+=obj.offsetTop; +obj=obj.offsetParent; +} +}else{ +if(obj.y){ +_33+=obj.y; +} +} +return _33; +},isFuncLike:function(obj){ +return (typeof (obj)=="function"); +}}); +PlotKit.Base.map=function(fn,lst){ +if(PlotKit.Base.usingPrototype()){ +var _36=[]; +for(var x in lst){ +if(typeof (lst[x])=="function"){ +continue; +} +_36.push(fn(lst[x])); +} +return _36; +}else{ +return MochiKit.Base.map(fn,lst); +} +}; +PlotKit.Base.items=function(lst){ +if(PlotKit.Base.usingPrototype()){ +var _38=[]; +for(var x in lst){ +if(typeof (lst[x])=="function"){ +continue; +} +_38.push([x,lst[x]]); +} +return _38; +}else{ +return MochiKit.Base.items(lst); +} +}; +PlotKit.Base.keys=function(lst){ +if(PlotKit.Base.usingPrototype()){ +var _39=[]; +for(var x in lst){ +if(typeof (lst[x])=="function"){ +continue; +} +_39.push(x); +} +return _39; +}else{ +return MochiKit.Base.keys(lst); +} +}; +PlotKit.Base.baseColors=function(){ +var _40=MochiKit.Color.Color.fromHexString; +return [_40("#476fb2"),_40("#be2c2b"),_40("#85b730"),_40("#734a99"),_40("#26a1c5"),_40("#fb8707"),_40("#000000")]; +}; +PlotKit.Base.officeBaseStyle={"axisLineWidth":2,"axisLabelColor":Color.grayColor(),"axisLineColor":Color.whiteColor(),"padding":{top:5,bottom:10,left:30,right:30}}; +MochiKit.Base.update(PlotKit.Base,{officeBlue:function(){ +var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"backgroundColor":PlotKit.Base.baseColors()[0].lighterColorWithLevel(0.45)}; +MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); +return r; +},officeRed:function(){ +var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[1]),"backgroundColor":PlotKit.Base.baseColors()[1].lighterColorWithLevel(0.5)}; +MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); +return r; +},officeGreen:function(){ +var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[2]),"backgroundColor":PlotKit.Base.baseColors()[2].lighterColorWithLevel(0.5)}; +MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); +return r; +},officePurple:function(){ +var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[3]),"backgroundColor":PlotKit.Base.baseColors()[3].lighterColorWithLevel(0.5)}; +MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); +return r; +},officeCyan:function(){ +var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[4]),"backgroundColor":PlotKit.Base.baseColors()[4].lighterColorWithLevel(0.5)}; +MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); +return r; +},officeOrange:function(){ +var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[5]),"backgroundColor":PlotKit.Base.baseColors()[5].lighterColorWithLevel(0.4)}; +MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); +return r; +},officeBlack:function(){ +var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[6],0,0.6),"backgroundColor":PlotKit.Base.baseColors()[6].lighterColorWithLevel(0.9)}; +MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); +return r; +}}); +PlotKit.Base.EXPORT=["baseColors","collapse","colorScheme","findPosX","findPosY","officeBaseStyle","officeBlue","officeRed","officeGreen","officePurple","officeCyan","officeOrange","officeBlack","roundInterval","uniq","isFuncLike","excanvasSupported"]; +PlotKit.Base.EXPORT_OK=[]; +PlotKit.Base.__new__=function(){ +var m=MochiKit.Base; +m.nameFunctions(this); +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +}; +PlotKit.Base.__new__(); +MochiKit.Base._exportSymbols(this,PlotKit.Base); +try{ +if(typeof (PlotKit.Base)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "PlotKit.Layout depends on MochiKit.{Base,Color,DOM,Format} and PlotKit.Base"; +} +if(typeof (PlotKit.Layout)=="undefined"){ +PlotKit.Layout={}; +} +PlotKit.Layout.NAME="PlotKit.Layout"; +PlotKit.Layout.VERSION=PlotKit.VERSION; +PlotKit.Layout.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +PlotKit.Layout.toString=function(){ +return this.__repr__(); +}; +PlotKit.Layout.valid_styles=["bar","line","pie","point"]; +PlotKit.Layout=function(_42,_43){ +this.options={"barWidthFillFraction":0.75,"barOrientation":"vertical","xOriginIsZero":true,"yOriginIsZero":true,"xAxis":null,"yAxis":null,"xTicks":null,"yTicks":null,"xNumberOfTicks":10,"yNumberOfTicks":5,"xTickPrecision":1,"yTickPrecision":1,"pieRadius":0.4}; +this.style=_42; +MochiKit.Base.update(this.options,_43?_43:{}); +if(!MochiKit.Base.isUndefinedOrNull(this.options.xAxis)){ +this.minxval=this.options.xAxis[0]; +this.maxxval=this.options.xAxis[1]; +this.xscale=this.maxxval-this.minxval; +}else{ +this.minxval=0; +this.maxxval=null; +this.xscale=null; +} +if(!MochiKit.Base.isUndefinedOrNull(this.options.yAxis)){ +this.minyval=this.options.yAxis[0]; +this.maxyval=this.options.yAxis[1]; +this.yscale=this.maxyval-this.minyval; +}else{ +this.minyval=0; +this.maxyval=null; +this.yscale=null; +} +this.bars=new Array(); +this.points=new Array(); +this.slices=new Array(); +this.xticks=new Array(); +this.yticks=new Array(); +this.datasets=new Array(); +this.minxdelta=0; +this.xrange=1; +this.yrange=1; +this.hitTestCache={x2maxy:null}; +}; +PlotKit.Layout.prototype.addDataset=function(_44,_45){ +this.datasets[_44]=_45; +}; +PlotKit.Layout.prototype.removeDataset=function(_46,_47){ +delete this.datasets[_46]; +}; +PlotKit.Layout.prototype.addDatasetFromTable=function(_48,_49,_50,_51,_52){ +var _53=MochiKit.Base.isUndefinedOrNull; +var _54=MochiKit.DOM.scrapeText; +var _55=MochiKit.Format.strip; +if(_53(_50)){ +_50=0; +} +if(_53(_51)){ +_51=1; +} +if(_53(_52)){ +_52=-1; +} +var _56=_49.tBodies[0].rows; +var _57=new Array(); +var _58=new Array(); +if(!_53(_56)){ +for(var i=0;i<_56.length;i++){ +_57.push([parseFloat(_55(_54(_56[i].cells[_50]))),parseFloat(_55(_54(_56[i].cells[_51])))]); +if(_52>=0){ +_58.push({v:parseFloat(_55(_54(_56[i].cells[_50]))),label:_55(_54(_56[i].cells[_52]))}); +} +} +this.addDataset(_48,_57); +if(_52>=0){ +this.options.xTicks=_58; +} +return true; +} +return false; +}; +PlotKit.Layout.prototype.evaluate=function(){ +this._evaluateLimits(); +this._evaluateScales(); +if(this.style=="bar"){ +if(this.options.barOrientation=="horizontal"){ +this._evaluateHorizBarCharts(); +}else{ +this._evaluateBarCharts(); +} +this._evaluateBarTicks(); +}else{ +if(this.style=="line"){ +this._evaluateLineCharts(); +this._evaluateLineTicks(); +}else{ +if(this.style=="pie"){ +this._evaluatePieCharts(); +this._evaluatePieTicks(); +} +} +} +}; +PlotKit.Layout.prototype.hitTest=function(x,y){ +var f=MochiKit.Format.twoDigitFloat; +if((this.style=="bar")&&this.bars&&(this.bars.length>0)){ +for(var i=0;i=bar.x)&&(x<=bar.x+bar.w)&&(y>=bar.y)&&(y-bar.y<=bar.h)){ +return bar; +} +} +}else{ +if(this.style=="line"){ +if(this.hitTestCache.x2maxy==null){ +this._regenerateHitTestCache(); +} +var _62=x/this.xscale; +var _63=this.hitTestCache.xvalues; +var _64=null; +var _65=null; +for(var i=1;i<_63.length;i++){ +if(_63[i]>_62){ +_64=_63[i-1]; +_65=_63[i]; +break; +} +} +if((_64!=null)){ +var _66=this.hitTestCache.x2maxy[_64]; +var _67=this.hitTestCache.x2maxy[_65]; +var _68=(1-y)/this.yscale; +var _69=(_67-_66)/(_65-_64); +var _70=_66+_69*(_62-_64); +if(_70>=_68){ +var obj={xval:_62,yval:_68,xafter:_65,yafter:_67,xbefore:_64,ybefore:_66,yprojected:_70}; +return obj; +} +} +}else{ +if(this.style=="pie"){ +var _71=Math.sqrt((y-0.5)*(y-0.5)+(x-0.5)*(x-0.5)); +if(_71>this.options.pieRadius){ +return null; +} +var _72=Math.atan2(y-0.5,x-0.5)-Math.PI/2; +for(var i=0;i=_72){ +return _73; +} +} +} +} +} +return null; +}; +PlotKit.Layout.prototype.rectForX=function(x){ +return null; +}; +PlotKit.Layout.prototype.angleRangeForX=function(x){ +return null; +}; +PlotKit.Layout.prototype._evaluateLimits=function(){ +var map=PlotKit.Base.map; +var _75=PlotKit.Base.items; +var _76=MochiKit.Base.itemgetter; +var _77=PlotKit.Base.collapse; +var _78=MochiKit.Base.listMin; +var _79=MochiKit.Base.listMax; +var _80=MochiKit.Base.isUndefinedOrNull; +var all=_77(map(_76(1),_75(this.datasets))); +if(_80(this.options.xAxis)){ +if(this.options.xOriginIsZero){ +this.minxval=0; +}else{ +this.minxval=_78(map(parseFloat,map(_76(0),all))); +} +this.maxxval=_79(map(parseFloat,map(_76(0),all))); +}else{ +this.minxval=this.options.xAxis[0]; +this.maxxval=this.options.xAxis[1]; +this.xscale=this.maxval-this.minxval; +} +if(_80(this.options.yAxis)){ +if(this.options.yOriginIsZero){ +this.minyval=0; +}else{ +this.minyval=_78(map(parseFloat,map(_76(1),all))); +} +this.maxyval=_79(map(parseFloat,map(_76(1),all))); +}else{ +this.minyval=this.options.yAxis[0]; +this.maxyval=this.options.yAxis[1]; +this.yscale=this.maxyval-this.minyval; +} +}; +PlotKit.Layout.prototype._evaluateScales=function(){ +var _82=MochiKit.Base.isUndefinedOrNull; +this.xrange=this.maxxval-this.minxval; +if(this.xrange==0){ +this.xscale=1; +}else{ +this.xscale=1/this.xrange; +} +this.yrange=this.maxyval-this.minyval; +if(this.yrange==0){ +this.yscale=1; +}else{ +this.yscale=1/this.yrange; +} +}; +PlotKit.Layout.prototype._uniqueXValues=function(){ +var _83=PlotKit.Base.collapse; +var map=PlotKit.Base.map; +var _84=PlotKit.Base.uniq; +var _85=MochiKit.Base.itemgetter; +var _86=PlotKit.Base.items; +var _87=map(parseFloat,map(_85(0),_83(map(_85(1),_86(this.datasets))))); +_87.sort(MochiKit.Base.compare); +return _84(_87); +}; +PlotKit.Layout.prototype._evaluateBarCharts=function(){ +var _88=PlotKit.Base.items; +var _89=_88(this.datasets).length; +var _90=10000000; +var _91=this._uniqueXValues(); +for(var i=1;i<_91.length;i++){ +_90=Math.min(Math.abs(_91[i]-_91[i-1]),_90); +} +var _92=0; +var _93=0; +var _94=0; +if(_91.length==1){ +_90=1; +this.xscale=1; +this.minxval=_91[0]; +_92=1*this.options.barWidthFillFraction; +_93=_92/_89; +_94=(1-this.options.barWidthFillFraction)/2; +}else{ +if(this.xrange==1){ +this.xscale=0.5; +}else{ +if(this.xrange==2){ +this.xscale=1/3; +}else{ +this.xscale=(1-_90/this.xrange)/this.xrange; +} +} +_92=_90*this.xscale*this.options.barWidthFillFraction; +_93=_92/_89; +_94=_90*this.xscale*(1-this.options.barWidthFillFraction)/2; +} +this.minxdelta=_90; +this.bars=new Array(); +var i=0; +for(var _95 in this.datasets){ +var _96=this.datasets[_95]; +if(PlotKit.Base.isFuncLike(_96)){ +continue; +} +for(var j=0;j<_96.length;j++){ +var _98=_96[j]; +var _99={x:((parseFloat(_98[0])-this.minxval)*this.xscale)+(i*_93)+_94,y:1-((parseFloat(_98[1])-this.minyval)*this.yscale),w:_93,h:((parseFloat(_98[1])-this.minyval)*this.yscale),xval:parseFloat(_98[0]),yval:parseFloat(_98[1]),name:_95}; +if((_99.x>=0)&&(_99.x<=1)&&(_99.y>=0)&&(_99.y<=1)){ +this.bars.push(_99); +} +} +i++; +} +}; +PlotKit.Layout.prototype._evaluateHorizBarCharts=function(){ +var _100=PlotKit.Base.items; +var _101=_100(this.datasets).length; +var _102=10000000; +var _103=this._uniqueXValues(); +for(var i=1;i<_103.length;i++){ +_102=Math.min(Math.abs(_103[i]-_103[i-1]),_102); +} +var _104=0; +var _105=0; +var _106=0; +if(_103.length==1){ +_102=1; +this.xscale=1; +this.minxval=_103[0]; +_104=1*this.options.barWidthFillFraction; +_105=_104/_101; +_106=(1-this.options.barWidthFillFraction)/2; +}else{ +this.xscale=(1-_102/this.xrange)/this.xrange; +_104=_102*this.xscale*this.options.barWidthFillFraction; +_105=_104/_101; +_106=_102*this.xscale*(1-this.options.barWidthFillFraction)/2; +} +this.minxdelta=_102; +this.bars=new Array(); +var i=0; +for(var _107 in this.datasets){ +var _108=this.datasets[_107]; +if(PlotKit.Base.isFuncLike(_108)){ +continue; +} +for(var j=0;j<_108.length;j++){ +var item=_108[j]; +var rect={y:((parseFloat(item[0])-this.minxval)*this.xscale)+(i*_105)+_106,x:0,h:_105,w:((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_107}; +if(rect.y<=0){ +rect.y=0; +} +if(rect.y>=1){ +rect.y=1; +} +if((rect.x>=0)&&(rect.x<=1)){ +this.bars.push(rect); +} +} +i++; +} +}; +PlotKit.Layout.prototype._evaluateLineCharts=function(){ +var _111=PlotKit.Base.items; +var _112=_111(this.datasets).length; +this.points=new Array(); +var i=0; +for(var _113 in this.datasets){ +var _114=this.datasets[_113]; +if(PlotKit.Base.isFuncLike(_114)){ +continue; +} +_114.sort(function(a,b){ +return compare(parseFloat(a[0]),parseFloat(b[0])); +}); +for(var j=0;j<_114.length;j++){ +var item=_114[j]; +var _117={x:((parseFloat(item[0])-this.minxval)*this.xscale),y:1-((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_113}; +if(_117.y<=0){ +_117.y=0; +} +if(_117.y>=1){ +_117.y=1; +} +if((_117.x>=0)&&(_117.x<=1)){ +this.points.push(_117); +} +} +i++; +} +}; +PlotKit.Layout.prototype._evaluatePieCharts=function(){ +var _118=PlotKit.Base.items; +var sum=MochiKit.Iter.sum; +var _120=MochiKit.Base.itemgetter; +var _121=_118(this.datasets).length; +var _122=_118(this.datasets)[0][1]; +var _123=sum(map(_120(1),_122)); +this.slices=new Array(); +var _124=0; +for(var i=0;i<_122.length;i++){ +var _125=_122[i][1]/_123; +var _126=_124*Math.PI*2; +var _127=(_124+_125)*Math.PI*2; +var _128={fraction:_125,xval:_122[i][0],yval:_122[i][1],startAngle:_126,endAngle:_127}; +if(_122[i][1]!=0){ +this.slices.push(_128); +} +_124+=_125; +} +}; +PlotKit.Layout.prototype._evaluateLineTicksForXAxis=function(){ +var _129=MochiKit.Base.isUndefinedOrNull; +if(this.options.xTicks){ +this.xticks=new Array(); +var _130=function(tick){ +var _132=tick.label; +if(_129(_132)){ +_132=tick.v.toString(); +} +var pos=this.xscale*(tick.v-this.minxval); +if((pos>=0)&&(pos<=1)){ +this.xticks.push([pos,_132]); +} +}; +MochiKit.Iter.forEach(this.options.xTicks,bind(_130,this)); +}else{ +if(this.options.xNumberOfTicks){ +var _134=this._uniqueXValues(); +var _135=this.xrange/this.options.xNumberOfTicks; +var _136=0; +this.xticks=new Array(); +for(var i=0;i<=_134.length;i++){ +if((_134[i]-this.minxval)>=(_136*_135)){ +var pos=this.xscale*(_134[i]-this.minxval); +if((pos>1)||(pos<0)){ +continue; +} +this.xticks.push([pos,_134[i]]); +_136++; +} +if(_136>this.options.xNumberOfTicks){ +break; +} +} +} +} +}; +PlotKit.Layout.prototype._evaluateLineTicksForYAxis=function(){ +var _137=MochiKit.Base.isUndefinedOrNull; +if(this.options.yTicks){ +this.yticks=new Array(); +var _138=function(tick){ +var _139=tick.label; +if(_137(_139)){ +_139=tick.v.toString(); +} +var pos=1-(this.yscale*(tick.v-this.minyval)); +if((pos>=0)&&(pos<=1)){ +this.yticks.push([pos,_139]); +} +}; +MochiKit.Iter.forEach(this.options.yTicks,bind(_138,this)); +}else{ +if(this.options.yNumberOfTicks){ +this.yticks=new Array(); +var _140=PlotKit.Base.roundInterval; +var prec=this.options.yTickPrecision; +var _142=_140(this.yrange,this.options.yNumberOfTicks,prec); +for(var i=0;i<=this.options.yNumberOfTicks;i++){ +var yval=this.minyval+(i*_142); +var pos=1-((yval-this.minyval)*this.yscale); +if((pos>1)||(pos<0)){ +continue; +} +this.yticks.push([pos,MochiKit.Format.roundToFixed(yval,prec)]); +} +} +} +}; +PlotKit.Layout.prototype._evaluateLineTicks=function(){ +this._evaluateLineTicksForXAxis(); +this._evaluateLineTicksForYAxis(); +}; +PlotKit.Layout.prototype._evaluateBarTicks=function(){ +this._evaluateLineTicks(); +var _144=function(tick){ +return [tick[0]+(this.minxdelta*this.xscale)/2,tick[1]]; +}; +this.xticks=MochiKit.Base.map(bind(_144,this),this.xticks); +if(this.options.barOrientation=="horizontal"){ +var _145=this.xticks; +this.xticks=this.yticks; +this.yticks=_145; +var _146=function(tick){ +return [1-tick[0],tick[1]]; +}; +this.xticks=MochiKit.Base.map(_146,this.xticks); +} +}; +PlotKit.Layout.prototype._evaluatePieTicks=function(){ +var _147=MochiKit.Base.isUndefinedOrNull; +var _148=MochiKit.Format.numberFormatter("#%"); +this.xticks=new Array(); +if(this.options.xTicks){ +var _149=new Array(); +for(var i=0;i0){ +this.__init__(_158,_159,_160); +} +}; +PlotKit.CanvasRenderer.prototype.__init__=function(_161,_162,_163){ +var _164=MochiKit.Base.isUndefinedOrNull; +var _165=MochiKit.Color.Color; +this.options={"drawBackground":true,"backgroundColor":_165.whiteColor(),"padding":{left:30,right:30,top:5,bottom:10},"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"strokeColor":_165.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":_165.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":_165.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"pieRadius":0.4,"enableEvents":true}; +MochiKit.Base.update(this.options,_163?_163:{}); +this.layout=_162; +this.element=MochiKit.DOM.getElement(_161); +this.container=this.element.parentNode; +this.isIE=PlotKit.Base.excanvasSupported(); +if(this.isIE&&!_164(G_vmlCanvasManager)){ +this.IEDelay=0.5; +this.maxTries=5; +this.renderDelay=null; +this.clearDelay=null; +this.element=G_vmlCanvasManager.initElement(this.element); +} +this.height=this.element.height; +this.width=this.element.width; +if(_164(this.element)){ +throw "CanvasRenderer() - passed canvas is not found"; +} +if(!this.isIE&&!(PlotKit.CanvasRenderer.isSupported(this.element))){ +throw "CanvasRenderer() - Canvas is not supported."; +} +if(_164(this.container)||(this.container.nodeName.toLowerCase()!="div")){ +throw "CanvasRenderer() - needs to be enclosed in
      "; +} +this.xlabels=new Array(); +this.ylabels=new Array(); +this.isFirstRender=true; +this.area={x:this.options.padding.left,y:this.options.padding.top,w:this.width-this.options.padding.left-this.options.padding.right,h:this.height-this.options.padding.top-this.options.padding.bottom}; +MochiKit.DOM.updateNodeAttributes(this.container,{"style":{"position":"relative","width":this.width+"px"}}); +}; +PlotKit.CanvasRenderer.prototype.render=function(){ +if(this.isIE){ +try{ +if(this.renderDelay){ +this.renderDelay.cancel(); +this.renderDelay=null; +} +var _166=this.element.getContext("2d"); +} +catch(e){ +this.isFirstRender=false; +if(this.maxTries-->0){ +this.renderDelay=MochiKit.Async.wait(this.IEDelay); +this.renderDelay.addCallback(bind(this.render,this)); +} +return; +} +} +if(this.options.drawBackground){ +this._renderBackground(); +} +if(this.layout.style=="bar"){ +this._renderBarChart(); +this._renderBarAxis(); +}else{ +if(this.layout.style=="pie"){ +this._renderPieChart(); +this._renderPieAxis(); +}else{ +if(this.layout.style=="line"){ +this._renderLineChart(); +this._renderLineAxis(); +} +} +} +}; +PlotKit.CanvasRenderer.prototype._renderBarChartWrap=function(data,_168){ +var _169=this.element.getContext("2d"); +var _170=this.options.colorScheme.length; +var _171=this.options.colorScheme; +var _172=MochiKit.Base.keys(this.layout.datasets); +var _173=_172.length; +for(var i=0;i<_173;i++){ +var _174=_172[i]; +var _175=_171[i%_170]; +_169.save(); +_169.fillStyle=_175.toRGBString(); +if(this.options.strokeColor){ +_169.strokeStyle=this.options.strokeColor.toRGBString(); +}else{ +if(this.options.strokeColorTransform){ +_169.strokeStyle=_175[this.options.strokeColorTransform]().toRGBString(); +} +} +_169.lineWidth=this.options.strokeWidth; +var _176=function(obj){ +if(obj.name==_174){ +_168(_169,obj); +} +}; +MochiKit.Iter.forEach(data,bind(_176,this)); +_169.restore(); +} +}; +PlotKit.CanvasRenderer.prototype._renderBarChart=function(){ +var bind=MochiKit.Base.bind; +var _178=function(_179,bar){ +var x=this.area.w*bar.x+this.area.x; +var y=this.area.h*bar.y+this.area.y; +var w=this.area.w*bar.w; +var h=this.area.h*bar.h; +if((w<1)||(h<1)){ +return; +} +if(this.options.shouldFill){ +_179.fillRect(x,y,w,h); +} +if(this.options.shouldStroke){ +_179.strokeRect(x,y,w,h); +} +}; +this._renderBarChartWrap(this.layout.bars,bind(_178,this)); +}; +PlotKit.CanvasRenderer.prototype._renderLineChart=function(){ +var _182=this.element.getContext("2d"); +var _183=this.options.colorScheme.length; +var _184=this.options.colorScheme; +var _185=MochiKit.Base.keys(this.layout.datasets); +var _186=_185.length; +var bind=MochiKit.Base.bind; +var _187=MochiKit.Base.partial; +for(var i=0;i<_186;i++){ +var _188=_185[i]; +var _189=_184[i%_183]; +var _190=this.options.strokeColorTransform; +_182.save(); +_182.fillStyle=_189.toRGBString(); +if(this.options.strokeColor){ +_182.strokeStyle=this.options.strokeColor.toRGBString(); +}else{ +if(this.options.strokeColorTransform){ +_182.strokeStyle=_189[_190]().toRGBString(); +} +} +_182.lineWidth=this.options.strokeWidth; +var _191=function(ctx){ +ctx.beginPath(); +ctx.moveTo(this.area.x,this.area.y+this.area.h); +var _193=function(ctx_,_195){ +if(_195.name==_188){ +ctx_.lineTo(this.area.w*_195.x+this.area.x,this.area.h*_195.y+this.area.y); +} +}; +MochiKit.Iter.forEach(this.layout.points,_187(_193,ctx),this); +ctx.lineTo(this.area.w+this.area.x,this.area.h+this.area.y); +ctx.lineTo(this.area.x,this.area.y+this.area.h); +ctx.closePath(); +}; +if(this.options.shouldFill){ +bind(_191,this)(_182); +_182.fill(); +} +if(this.options.shouldStroke){ +bind(_191,this)(_182); +_182.stroke(); +} +_182.restore(); +} +}; +PlotKit.CanvasRenderer.prototype._renderPieChart=function(){ +var _196=this.element.getContext("2d"); +var _197=this.options.colorScheme.length; +var _198=this.layout.slices; +var _199=this.area.x+this.area.w*0.5; +var _200=this.area.y+this.area.h*0.5; +var _201=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); +if(this.isIE){ +_199=parseInt(_199); +_200=parseInt(_200); +_201=parseInt(_201); +} +for(var i=0;i<_198.length;i++){ +var _202=this.options.colorScheme[i%_197]; +_196.save(); +_196.fillStyle=_202.toRGBString(); +var _203=function(){ +_196.beginPath(); +_196.moveTo(_199,_200); +_196.arc(_199,_200,_201,_198[i].startAngle-Math.PI/2,_198[i].endAngle-Math.PI/2,false); +_196.lineTo(_199,_200); +_196.closePath(); +}; +if(Math.abs(_198[i].startAngle-_198[i].endAngle)>0.001){ +if(this.options.shouldFill){ +_203(); +_196.fill(); +} +if(this.options.shouldStroke){ +_203(); +_196.lineWidth=this.options.strokeWidth; +if(this.options.strokeColor){ +_196.strokeStyle=this.options.strokeColor.toRGBString(); +}else{ +if(this.options.strokeColorTransform){ +_196.strokeStyle=_202[this.options.strokeColorTransform]().toRGBString(); +} +} +_196.stroke(); +} +} +_196.restore(); +} +}; +PlotKit.CanvasRenderer.prototype._renderBarAxis=function(){ +this._renderAxis(); +}; +PlotKit.CanvasRenderer.prototype._renderLineAxis=function(){ +this._renderAxis(); +}; +PlotKit.CanvasRenderer.prototype._renderAxis=function(){ +if(!this.options.drawXAxis&&!this.options.drawYAxis){ +return; +} +var _204=this.element.getContext("2d"); +var _205={"style":{"position":"absolute","fontSize":this.options.axisLabelFontSize+"px","zIndex":10,"color":this.options.axisLabelColor.toRGBString(),"width":this.options.axisLabelWidth+"px","overflow":"hidden"}}; +_204.save(); +_204.strokeStyle=this.options.axisLineColor.toRGBString(); +_204.lineWidth=this.options.axisLineWidth; +if(this.options.drawYAxis){ +if(this.layout.yticks){ +var _206=function(tick){ +if(typeof (tick)=="function"){ +return; +} +var x=this.area.x; +var y=this.area.y+tick[0]*this.area.h; +_204.beginPath(); +_204.moveTo(x,y); +_204.lineTo(x-this.options.axisTickSize,y); +_204.closePath(); +_204.stroke(); +var _207=DIV(_205,tick[1]); +_207.style.top=(y-this.options.axisLabelFontSize)+"px"; +_207.style.left=(x-this.options.padding.left-this.options.axisTickSize)+"px"; +_207.style.textAlign="right"; +_207.style.width=(this.options.padding.left-this.options.axisTickSize*2)+"px"; +MochiKit.DOM.appendChildNodes(this.container,_207); +this.ylabels.push(_207); +}; +MochiKit.Iter.forEach(this.layout.yticks,bind(_206,this)); +} +_204.beginPath(); +_204.moveTo(this.area.x,this.area.y); +_204.lineTo(this.area.x,this.area.y+this.area.h); +_204.closePath(); +_204.stroke(); +} +if(this.options.drawXAxis){ +if(this.layout.xticks){ +var _206=function(tick){ +if(typeof (dataset)=="function"){ +return; +} +var x=this.area.x+tick[0]*this.area.w; +var y=this.area.y+this.area.h; +_204.beginPath(); +_204.moveTo(x,y); +_204.lineTo(x,y+this.options.axisTickSize); +_204.closePath(); +_204.stroke(); +var _208=DIV(_205,tick[1]); +_208.style.top=(y+this.options.axisTickSize)+"px"; +_208.style.left=(x-this.options.axisLabelWidth/2)+"px"; +_208.style.textAlign="center"; +_208.style.width=this.options.axisLabelWidth+"px"; +MochiKit.DOM.appendChildNodes(this.container,_208); +this.xlabels.push(_208); +}; +MochiKit.Iter.forEach(this.layout.xticks,bind(_206,this)); +} +_204.beginPath(); +_204.moveTo(this.area.x,this.area.y+this.area.h); +_204.lineTo(this.area.x+this.area.w,this.area.y+this.area.h); +_204.closePath(); +_204.stroke(); +} +_204.restore(); +}; +PlotKit.CanvasRenderer.prototype._renderPieAxis=function(){ +if(!this.options.drawXAxis){ +return; +} +if(this.layout.xticks){ +var _209=new Array(); +for(var i=0;iMath.PI*2){ +_216=_216-Math.PI*2; +}else{ +if(_216<0){ +_216=_216+Math.PI*2; +} +} +var _217=_210+Math.sin(_216)*(_212+10); +var _218=_211-Math.cos(_216)*(_212+10); +var _219={"position":"absolute","zIndex":11,"width":_213+"px","fontSize":this.options.axisLabelFontSize+"px","overflow":"hidden","color":this.options.axisLabelColor.toHexString()}; +if(_216<=Math.PI*0.5){ +_219["textAlign"]="left"; +_219["verticalAlign"]="top"; +_219["left"]=_217+"px"; +_219["top"]=(_218-this.options.axisLabelFontSize)+"px"; +}else{ +if((_216>Math.PI*0.5)&&(_216<=Math.PI)){ +_219["textAlign"]="left"; +_219["verticalAlign"]="bottom"; +_219["left"]=_217+"px"; +_219["top"]=_218+"px"; +}else{ +if((_216>Math.PI)&&(_216<=Math.PI*1.5)){ +_219["textAlign"]="right"; +_219["verticalAlign"]="bottom"; +_219["left"]=(_217-_213)+"px"; +_219["top"]=_218+"px"; +}else{ +_219["textAlign"]="right"; +_219["verticalAlign"]="bottom"; +_219["left"]=(_217-_213)+"px"; +_219["top"]=(_218-this.options.axisLabelFontSize)+"px"; +} +} +} +var _220=DIV({"style":_219},this.layout.xticks[i][1]); +this.xlabels.push(_220); +MochiKit.DOM.appendChildNodes(this.container,_220); +} +} +}; +PlotKit.CanvasRenderer.prototype._renderBackground=function(){ +var _221=this.element.getContext("2d"); +_221.save(); +_221.fillStyle=this.options.backgroundColor.toRGBString(); +_221.fillRect(0,0,this.width,this.height); +_221.restore(); +}; +PlotKit.CanvasRenderer.prototype.clear=function(){ +if(this.isIE){ +try{ +if(this.clearDelay){ +this.clearDelay.cancel(); +this.clearDelay=null; +} +var _222=this.element.getContext("2d"); +} +catch(e){ +this.isFirstRender=false; +this.clearDelay=MochiKit.Async.wait(this.IEDelay); +this.clearDelay.addCallback(bind(this.clear,this)); +return; +} +} +var _222=this.element.getContext("2d"); +_222.clearRect(0,0,this.width,this.height); +MochiKit.Iter.forEach(this.xlabels,MochiKit.DOM.removeElement); +MochiKit.Iter.forEach(this.ylabels,MochiKit.DOM.removeElement); +this.xlabels=new Array(); +this.ylabels=new Array(); +}; +PlotKit.CanvasRenderer.prototype._initialiseEvents=function(){ +var _223=MochiKit.Signal.connect; +var bind=MochiKit.Base.bind; +_223(this.element,"onclick",bind(this.onclick,this)); +}; +PlotKit.CanvasRenderer.prototype._resolveObject=function(e){ +var x=(e.mouse().page.x-PlotKit.Base.findPosX(this.element)-this.area.x)/this.area.w; +var y=(e.mouse().page.y-PlotKit.Base.findPosY(this.element)-this.area.y)/this.area.h; +var _225=this.layout.hitTest(x,y); +if(_225){ +return _225; +} +return null; +}; +PlotKit.CanvasRenderer.prototype._createEventObject=function(_226,e){ +if(_226==null){ +return null; +} +e.chart=_226; +return e; +}; +PlotKit.CanvasRenderer.prototype.onclick=function(e){ +var _227=this._resolveObject(e); +var _228=this._createEventObject(_227,e); +if(_228!=null){ +MochiKit.Signal.signal(this,"onclick",_228); +} +}; +PlotKit.CanvasRenderer.prototype.onmouseover=function(e){ +var _229=this._resolveObject(e); +var _230=this._createEventObject(_229,e); +if(_230!=null){ +signal(this,"onmouseover",_230); +} +}; +PlotKit.CanvasRenderer.prototype.onmouseout=function(e){ +var _231=this._resolveObject(e); +var _232=this._createEventObject(_231,e); +if(_232==null){ +signal(this,"onmouseout",e); +}else{ +signal(this,"onmouseout",_232); +} +}; +PlotKit.CanvasRenderer.prototype.onmousemove=function(e){ +var _233=this._resolveObject(e); +var _234=this._createEventObject(_233,e); +if((_233==null)&&(this.event_isinside==null)){ +return; +} +if((_233!=null)&&(this.event_isinside==null)){ +signal(this,"onmouseover",_234); +} +if((_233==null)&&(this.event_isinside!=null)){ +signal(this,"onmouseout",_234); +} +if((_233!=null)&&(this.event_isinside!=null)){ +signal(this,"onmousemove",_234); +} +this.event_isinside=_233; +}; +PlotKit.CanvasRenderer.isSupported=function(_235){ +var _236=null; +try{ +if(MochiKit.Base.isUndefinedOrNull(_235)){ +_236=MochiKit.DOM.CANVAS({}); +}else{ +_236=MochiKit.DOM.getElement(_235); +} +var _237=_236.getContext("2d"); +} +catch(e){ +var ie=navigator.appVersion.match(/MSIE (\d\.\d)/); +var _239=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1); +if((!ie)||(ie[1]<6)||(_239)){ +return false; +} +return true; +} +return true; +}; +PlotKit.Canvas={}; +PlotKit.Canvas.CanvasRenderer=PlotKit.CanvasRenderer; +PlotKit.Canvas.EXPORT=["CanvasRenderer"]; +PlotKit.Canvas.EXPORT_OK=["CanvasRenderer"]; +PlotKit.Canvas.__new__=function(){ +var m=MochiKit.Base; +m.nameFunctions(this); +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +}; +PlotKit.Canvas.__new__(); +MochiKit.Base._exportSymbols(this,PlotKit.Canvas); +try{ +if(typeof (PlotKit.Layout)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "PlotKit depends on MochiKit.{Base,Color,DOM,Format} and PlotKit.Layout"; +} +PlotKit.SVGRenderer=function(_240,_241,_242){ +if(arguments.length>0){ +this.__init__(_240,_241,_242); +} +}; +PlotKit.SVGRenderer.NAME="PlotKit.SVGRenderer"; +PlotKit.SVGRenderer.VERSION=PlotKit.VERSION; +PlotKit.SVGRenderer.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +PlotKit.SVGRenderer.toString=function(){ +return this.__repr__(); +}; +PlotKit.SVGRenderer.SVGNS="http://www.w3.org/2000/svg"; +PlotKit.SVGRenderer.prototype.__init__=function(_243,_244,_245){ +var _246=MochiKit.Base.isUndefinedOrNull; +this.options={"drawBackground":true,"backgroundColor":Color.whiteColor(),"padding":{left:30,right:30,top:5,bottom:10},"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[1]),"strokeColor":Color.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":Color.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":Color.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"axisLabelUseDiv":true,"pieRadius":0.4,"enableEvents":true}; +MochiKit.Base.update(this.options,_245?_245:{}); +this.layout=_244; +this.element=MochiKit.DOM.getElement(_243); +this.container=this.element.parentNode; +this.height=parseInt(this.element.getAttribute("height")); +this.width=parseInt(this.element.getAttribute("width")); +this.document=document; +this.root=this.element; +try{ +this.document=this.element.getSVGDocument(); +this.root=_246(this.document.documentElement)?this.element:this.document.documentElement; +} +catch(e){ +} +this.element.style.zIndex=1; +if(_246(this.element)){ +throw "SVGRenderer() - passed SVG object is not found"; +} +if(_246(this.container)||this.container.nodeName.toLowerCase()!="div"){ +throw "SVGRenderer() - No DIV's around the SVG."; +} +this.xlabels=new Array(); +this.ylabels=new Array(); +this.defs=this.createSVGElement("defs"); +this.area={x:this.options.padding.left,y:this.options.padding.top,w:this.width-this.options.padding.left-this.options.padding.right,h:this.height-this.options.padding.top-this.options.padding.bottom}; +MochiKit.DOM.updateNodeAttributes(this.container,{"style":{"position":"relative","width":this.width+"px"}}); +}; +PlotKit.SVGRenderer.prototype.render=function(){ +if(this.options.drawBackground){ +this._renderBackground(); +} +if(this.layout.style=="bar"){ +this._renderBarChart(); +this._renderBarAxis(); +}else{ +if(this.layout.style=="pie"){ +this._renderPieChart(); +this._renderPieAxis(); +}else{ +if(this.layout.style=="line"){ +this._renderLineChart(); +this._renderLineAxis(); +} +} +} +}; +PlotKit.SVGRenderer.prototype._renderBarOrLine=function(data,_247,_248,_249){ +var _250=this.options.colorScheme.length; +var _251=this.options.colorScheme; +var _252=MochiKit.Base.keys(this.layout.datasets); +var _253=_252.length; +for(var i=0;i<_253;i++){ +var _254=_252[i]; +var _255=new Array(); +var _256=_251[i%_250]; +if(this.options.shouldFill){ +_255["fill"]=_256.toRGBString(); +}else{ +_255["fill"]="none"; +} +if(this.options.shouldStroke&&(this.options.strokeColor||this.options.strokeColorTransform)){ +if(this.options.strokeColor){ +_255["stroke"]=this.options.strokeColor.toRGBString(); +}else{ +if(this.options.strokeColorTransform){ +_255["stroke"]=_256[this.options.strokeColorTransform]().toRGBString(); +} +} +_255["strokeWidth"]=this.options.strokeWidth; +} +if(_248){ +_248(_255); +} +var _257=function(obj){ +if(obj.name==_254){ +_247(_255,obj); +} +}; +MochiKit.Iter.forEach(data,bind(_257,this)); +if(_249){ +_249(_255); +} +} +}; +PlotKit.SVGRenderer.prototype._renderBarChart=function(){ +var bind=MochiKit.Base.bind; +var _258=function(_259,bar){ +var x=this.area.w*bar.x+this.area.x; +var y=this.area.h*bar.y+this.area.y; +var w=this.area.w*bar.w; +var h=this.area.h*bar.h; +this._drawRect(x,y,w,h,_259); +}; +this._renderBarOrLine(this.layout.bars,bind(_258,this)); +}; +PlotKit.SVGRenderer.prototype._renderLineChart=function(){ +var bind=MochiKit.Base.bind; +var _260=function(_261,_262){ +this._tempPointsBuffer+=(this.area.w*_262.x+this.area.x)+","+(this.area.h*_262.y+this.area.y)+" "; +}; +var _263=function(_264){ +this._tempPointsBuffer=""; +this._tempPointsBuffer+=(this.area.x)+","+(this.area.y+this.area.h)+" "; +}; +var _265=function(_266){ +this._tempPointsBuffer+=(this.area.w+this.area.x)+","+(this.area.h+this.area.y); +_266["points"]=this._tempPointsBuffer; +var elem=this.createSVGElement("polygon",_266); +this.root.appendChild(elem); +}; +this._renderBarOrLine(this.layout.points,bind(_260,this),bind(_263,this),bind(_265,this)); +}; +PlotKit.SVGRenderer.prototype._renderPieChart=function(){ +var _268=this.options.colorScheme.length; +var _269=this.layout.slices; +var _270=this.area.x+this.area.w*0.5; +var _271=this.area.y+this.area.h*0.5; +var _272=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); +if(_269.length==1&&(Math.abs(_269[0].startAngle)-Math.abs(_269[0].endAngle)<0.1)){ +var _273={"cx":_270,"cy":_271,"r":_272}; +var _274=this.options.colorScheme[0]; +if(this.options.shouldFill){ +_273["fill"]=_274.toRGBString(); +}else{ +_273["fill"]="none"; +} +if(this.options.shouldStroke&&(this.options.strokeColor||this.options.strokeColorTransform)){ +if(this.options.strokeColor){ +_273["stroke"]=this.options.strokeColor.toRGBString(); +}else{ +if(this.options.strokeColorTransform){ +_273["stroke"]=_274[this.options.strokeColorTransform]().toRGBString(); +} +} +_273["style"]="stroke-width: "+this.options.strokeWidth; +} +this.root.appendChild(this.createSVGElement("circle",_273)); +return; +} +for(var i=0;i<_269.length;i++){ +var _273=new Array(); +var _274=this.options.colorScheme[i%_268]; +if(this.options.shouldFill){ +_273["fill"]=_274.toRGBString(); +}else{ +_273["fill"]="none"; +} +if(this.options.shouldStroke&&(this.options.strokeColor||this.options.strokeColorTransform)){ +if(this.options.strokeColor){ +_273["stroke"]=this.options.strokeColor.toRGBString(); +}else{ +if(this.options.strokeColorTransform){ +_273["stroke"]=_274[this.options.strokeColorTransform]().toRGBString(); +} +} +_273["style"]="stroke-width:"+this.options.strokeWidth; +} +var _275=0; +if(Math.abs(_269[i].endAngle-_269[i].startAngle)>Math.PI){ +_275=1; +} +var x1=Math.cos(_269[i].startAngle-Math.PI/2)*_272; +var y1=Math.sin(_269[i].startAngle-Math.PI/2)*_272; +var x2=Math.cos(_269[i].endAngle-Math.PI/2)*_272; +var y2=Math.sin(_269[i].endAngle-Math.PI/2)*_272; +var rx=x2-x1; +var ry=y2-y1; +var _282="M"+_270+","+_271+" "; +_282+="l"+x1+","+y1+" "; +_282+="a"+_272+","+_272+" 0 "+_275+",1 "+rx+","+ry+" z"; +_273["d"]=_282; +var elem=this.createSVGElement("path",_273); +this.root.appendChild(elem); +} +}; +PlotKit.SVGRenderer.prototype._renderBarAxis=function(){ +this._renderAxis(); +}; +PlotKit.SVGRenderer.prototype._renderLineAxis=function(){ +this._renderAxis(); +}; +PlotKit.SVGRenderer.prototype._renderAxis=function(){ +if(!this.options.drawXAxis&&!this.options.drawYAxis){ +return; +} +var _283={"style":{"position":"absolute","textAlign":"center","fontSize":this.options.axisLabelFontSize+"px","zIndex":10,"color":this.options.axisLabelColor.toRGBString(),"width":this.options.axisLabelWidth+"px","overflow":"hidden"}}; +var _284={"stroke":this.options.axisLineColor.toRGBString(),"strokeWidth":this.options.axisLineWidth}; +if(this.options.drawYAxis){ +if(this.layout.yticks){ +var _285=function(tick){ +var x=this.area.x; +var y=this.area.y+tick[0]*this.area.h; +this._drawLine(x,y,x-3,y,_284); +if(this.options.axisLabelUseDiv){ +var _286=DIV(_283,tick[1]); +_286.style.top=(y-this.options.axisLabelFontSize)+"px"; +_286.style.left=(x-this.options.padding.left+this.options.axisTickSize)+"px"; +_286.style.textAlign="left"; +_286.style.width=(this.options.padding.left-3)+"px"; +MochiKit.DOM.appendChildNodes(this.container,_286); +this.ylabels.push(_286); +}else{ +var _287={y:y+3,x:(x-this.options.padding.left+3),width:(this.options.padding.left-this.options.axisTickSize)+"px",height:(this.options.axisLabelFontSize+3)+"px",fontFamily:"Arial",fontSize:this.options.axisLabelFontSize+"px",fill:this.options.axisLabelColor.toRGBString()}; +var _286=this.createSVGElement("text",_287); +_286.appendChild(this.document.createTextNode(tick[1])); +this.root.appendChild(_286); +} +}; +MochiKit.Iter.forEach(this.layout.yticks,bind(_285,this)); +} +this._drawLine(this.area.x,this.area.y,this.area.x,this.area.y+this.area.h,_284); +} +if(this.options.drawXAxis){ +if(this.layout.xticks){ +var _285=function(tick){ +var x=this.area.x+tick[0]*this.area.w; +var y=this.area.y+this.area.h; +this._drawLine(x,y,x,y+this.options.axisTickSize,_284); +if(this.options.axisLabelUseDiv){ +var _288=DIV(_283,tick[1]); +_288.style.top=(y+this.options.axisTickSize)+"px"; +_288.style.left=(x-this.options.axisLabelWidth/2)+"px"; +_288.style.textAlign="center"; +_288.style.width=this.options.axisLabelWidth+"px"; +MochiKit.DOM.appendChildNodes(this.container,_288); +this.xlabels.push(_288); +}else{ +var _289={y:(y+this.options.axisTickSize+this.options.axisLabelFontSize),x:x-3,width:this.options.axisLabelWidth+"px",height:(this.options.axisLabelFontSize+3)+"px",fontFamily:"Arial",fontSize:this.options.axisLabelFontSize+"px",fill:this.options.axisLabelColor.toRGBString(),textAnchor:"middle"}; +var _288=this.createSVGElement("text",_289); +_288.appendChild(this.document.createTextNode(tick[1])); +this.root.appendChild(_288); +} +}; +MochiKit.Iter.forEach(this.layout.xticks,bind(_285,this)); +} +this._drawLine(this.area.x,this.area.y+this.area.h,this.area.x+this.area.w,this.area.y+this.area.h,_284); +} +}; +PlotKit.SVGRenderer.prototype._renderPieAxis=function(){ +if(this.layout.xticks){ +var _290=new Array(); +for(var i=0;iMath.PI*2){ +_297=_297-Math.PI*2; +}else{ +if(_297<0){ +_297=_297+Math.PI*2; +} +} +var _298=_291+Math.sin(_297)*(_293+10); +var _299=_292-Math.cos(_297)*(_293+10); +var _300={"position":"absolute","zIndex":11,"width":_294+"px","fontSize":this.options.axisLabelFontSize+"px","overflow":"hidden","color":this.options.axisLabelColor.toHexString()}; +var _301={"width":_294+"px","fontSize":this.options.axisLabelFontSize+"px","height":(this.options.axisLabelFontSize+3)+"px","fill":this.options.axisLabelColor.toRGBString()}; +if(_297<=Math.PI*0.5){ +MochiKit.Base.update(_300,{"textAlign":"left","verticalAlign":"top","left":_298+"px","top":(_299-this.options.axisLabelFontSize)+"px"}); +MochiKit.Base.update(_301,{"x":_298,"y":(_299-this.options.axisLabelFontSize),"textAnchor":"left"}); +}else{ +if((_297>Math.PI*0.5)&&(_297<=Math.PI)){ +MochiKit.Base.update(_300,{"textAlign":"left","verticalAlign":"bottom","left":_298+"px","top":_299+"px"}); +MochiKit.Base.update(_301,{"textAnchor":"left","x":_298,"y":_299}); +}else{ +if((_297>Math.PI)&&(_297<=Math.PI*1.5)){ +MochiKit.Base.update(_300,{"textAlign":"right","verticalAlign":"bottom","left":_298+"px","top":_299+"px"}); +MochiKit.Base.update(_301,{"textAnchor":"right","x":_298-_294,"y":_299}); +}else{ +MochiKit.Base.update(_300,{"textAlign":"left","verticalAlign":"bottom","left":_298+"px","top":_299+"px"}); +MochiKit.Base.update(_301,{"textAnchor":"left","x":_298-_294,"y":_299-this.options.axisLabelFontSize}); +} +} +} +if(this.options.axisLabelUseDiv){ +var _302=DIV({"style":_300},this.layout.xticks[i][1]); +this.xlabels.push(_302); +MochiKit.DOM.appendChildNodes(this.container,_302); +}else{ +var _302=this.createSVGElement("text",_301); +_302.appendChild(this.document.createTextNode(this.layout.xticks[i][1])); +this.root.appendChild(_302); +} +} +} +}; +PlotKit.SVGRenderer.prototype._renderBackground=function(){ +var opts={"stroke":"none","fill":this.options.backgroundColor.toRGBString()}; +this._drawRect(0,0,this.width,this.height,opts); +}; +PlotKit.SVGRenderer.prototype._drawRect=function(x,y,w,h,_304){ +var _305={x:x+"px",y:y+"px",width:w+"px",height:h+"px"}; +if(_304){ +MochiKit.Base.update(_305,_304); +} +var elem=this.createSVGElement("rect",_305); +this.root.appendChild(elem); +}; +PlotKit.SVGRenderer.prototype._drawLine=function(x1,y1,x2,y2,_306){ +var _307={x1:x1+"px",y1:y1+"px",x2:x2+"px",y2:y2+"px"}; +if(_306){ +MochiKit.Base.update(_307,_306); +} +var elem=this.createSVGElement("line",_307); +this.root.appendChild(elem); +}; +PlotKit.SVGRenderer.prototype.clear=function(){ +while(this.element.firstChild){ +this.element.removeChild(this.element.firstChild); +} +if(this.options.axisLabelUseDiv){ +for(var i=0;i=6)&&(!_313)){ +var _314=_312["width"]?_312["width"]:"100"; +var _315=_312["height"]?_312["height"]:"100"; +var eid=_312["id"]?_312["id"]:"notunique"; +var html=""; +var _318=document.createElement(html); +var _319=_318.getSVGDocument().createElementNS(PlotKit.SVGRenderer.SVGNS,"svg"); +_319.setAttribute("width",_314); +_319.setAttribute("height",_315); +_318.getSVGDocument().appendChild(_319); +return _318; +}else{ +return PlotKit.SVGRenderer.prototype.createSVGElement("svg",_312); +} +}; +PlotKit.SVGRenderer.isSupported=function(){ +var _320=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1); +var _321=navigator.appVersion.match(/MSIE (\d\.\d)/); +var _322=navigator.userAgent.match(/AppleWebKit\/(\d+)/); +var _323=navigator.userAgent.match(/Opera\/(\d*\.\d*)/); +var _324=navigator.userAgent.match(/rv:(\d*\.\d*).*Gecko/); +var _325="http://www.w3.org/TR/SVG11/feature#SVG"; +if(_321&&(_321[1]>=6)&&!_320){ +return document.implementation.hasFeature(_325,"1.1"); +} +if(_323&&(_323[1]>8.9)){ +return true; +} +if(_324&&(_324>1.7)){ +return true; +} +return false; +}; +PlotKit.SVG={}; +PlotKit.SVG.SVGRenderer=PlotKit.SVGRenderer; +PlotKit.SVG.EXPORT=["SVGRenderer"]; +PlotKit.SVG.EXPORT_OK=["SVGRenderer"]; +PlotKit.SVG.__new__=function(){ +var m=MochiKit.Base; +m.nameFunctions(this); +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +}; +PlotKit.SVG.__new__(); +MochiKit.Base._exportSymbols(this,PlotKit.SVG); +try{ +if(typeof (PlotKit.CanvasRenderer)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "SweetCanvas depends on MochiKit.{Base,Color,DOM,Format} and PlotKit.{Layout, Canvas}"; +} +if(typeof (PlotKit.SweetCanvasRenderer)=="undefined"){ +PlotKit.SweetCanvasRenderer={}; +} +PlotKit.SweetCanvasRenderer=function(_326,_327,_328){ +if(arguments.length>0){ +this.__init__(_326,_327,_328); +} +}; +PlotKit.SweetCanvasRenderer.NAME="PlotKit.SweetCanvasRenderer"; +PlotKit.SweetCanvasRenderer.VERSION=PlotKit.VERSION; +PlotKit.SweetCanvasRenderer.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +PlotKit.SweetCanvasRenderer.toString=function(){ +return this.__repr__(); +}; +PlotKit.SweetCanvasRenderer.prototype=new PlotKit.CanvasRenderer(); +PlotKit.SweetCanvasRenderer.prototype.constructor=PlotKit.SweetCanvasRenderer; +PlotKit.SweetCanvasRenderer.__super__=PlotKit.CanvasRenderer.prototype; +PlotKit.SweetCanvasRenderer.prototype.__init__=function(el,_330,opts){ +var _331=PlotKit.Base.officeBlue(); +MochiKit.Base.update(_331,opts); +PlotKit.SweetCanvasRenderer.__super__.__init__.call(this,el,_330,_331); +}; +PlotKit.SweetCanvasRenderer.prototype._renderBarChart=function(){ +var bind=MochiKit.Base.bind; +var _332=Color.blackColor().colorWithAlpha(0.1).toRGBString(); +var _333=function(_334,x,y,w,h){ +_334.fillStyle=_332; +_334.fillRect(x-2,y-2,w+4,h+2); +_334.fillStyle=_332; +_334.fillRect(x-1,y-1,w+2,h+1); +}; +var _335=this.options.colorScheme.length; +var _336=this.options.colorScheme; +var _337=PlotKit.Base.keys(this.layout.datasets); +var _338=_337.length; +var _339=function(name){ +for(var i=0;i<_338;i++){ +if(name==_337[i]){ +return _336[i%_335]; +} +} +return _336[0]; +}; +var _340=function(_341,bar){ +var x=this.area.w*bar.x+this.area.x; +var y=this.area.h*bar.y+this.area.y; +var w=this.area.w*bar.w; +var h=this.area.h*bar.h; +if((w<1)||(h<1)){ +return; +} +_341.save(); +_341.shadowBlur=5; +_341.shadowColor=Color.fromHexString("#888888").toRGBString(); +if(this.isIE){ +_341.save(); +_341.fillStyle="#cccccc"; +_341.fillRect(x-2,y-2,w+4,h+2); +_341.restore(); +}else{ +_333(_341,x,y,w,h); +} +if(this.options.shouldFill){ +_341.fillStyle=_339(bar.name).toRGBString(); +_341.fillRect(x,y,w,h); +} +_341.shadowBlur=0; +_341.strokeStyle=Color.whiteColor().toRGBString(); +_341.lineWidth=2; +if(this.options.shouldStroke){ +_341.strokeRect(x,y,w,h); +} +_341.restore(); +}; +this._renderBarChartWrap(this.layout.bars,bind(_340,this)); +}; +PlotKit.SweetCanvasRenderer.prototype._renderLineChart=function(){ +var _342=this.element.getContext("2d"); +var _343=this.options.colorScheme.length; +var _344=this.options.colorScheme; +var _345=PlotKit.Base.keys(this.layout.datasets); +var _346=_345.length; +var bind=MochiKit.Base.bind; +for(var i=0;i<_346;i++){ +var _347=_345[i]; +var _348=_344[i%_343]; +var _349=this.options.strokeColorTransform; +_342.save(); +var _350=function(ctx){ +ctx.beginPath(); +ctx.moveTo(this.area.x,this.area.y+this.area.h); +var _351=function(ctx_,_352){ +if(_352.name==_347){ +ctx_.lineTo(this.area.w*_352.x+this.area.x,this.area.h*_352.y+this.area.y); +} +}; +MochiKit.Iter.forEach(this.layout.points,partial(_351,ctx),this); +ctx.lineTo(this.area.w+this.area.x,this.area.h+this.area.y); +ctx.lineTo(this.area.x,this.area.y+this.area.h); +ctx.closePath(); +}; +if(this.options.shouldFill){ +_342.save(); +if(this.isIE){ +_342.fillStyle="#cccccc"; +}else{ +_342.fillStyle=Color.blackColor().colorWithAlpha(0.2).toRGBString(); +} +_342.translate(-1,-2); +bind(_350,this)(_342); +if(this.options.shouldFill){ +_342.fill(); +} +_342.restore(); +} +_342.shadowBlur=5; +_342.shadowColor=Color.fromHexString("#888888").toRGBString(); +_342.fillStyle=_348.toRGBString(); +_342.lineWidth=2; +_342.strokeStyle=Color.whiteColor().toRGBString(); +if(this.options.shouldFill){ +bind(_350,this)(_342); +_342.fill(); +} +if(this.options.shouldStroke){ +bind(_350,this)(_342); +_342.stroke(); +} +_342.restore(); +} +}; +PlotKit.SweetCanvasRenderer.prototype._renderPieChart=function(){ +var _353=this.element.getContext("2d"); +var _354=this.options.colorScheme.length; +var _355=this.layout.slices; +var _356=this.area.x+this.area.w*0.5; +var _357=this.area.y+this.area.h*0.5; +var _358=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); +if(this.isIE){ +_356=parseInt(_356); +_357=parseInt(_357); +_358=parseInt(_358); +} +if(!this.isIE){ +_353.save(); +var _359=Color.blackColor().colorWithAlpha(0.2); +_353.fillStyle=_359.toRGBString(); +_353.shadowBlur=5; +_353.shadowColor=Color.fromHexString("#888888").toRGBString(); +_353.translate(1,1); +_353.beginPath(); +_353.moveTo(_356,_357); +_353.arc(_356,_357,_358+2,0,Math.PI*2,false); +_353.closePath(); +_353.fill(); +_353.restore(); +} +_353.save(); +_353.strokeStyle=Color.whiteColor().toRGBString(); +_353.lineWidth=2; +for(var i=0;i<_355.length;i++){ +var _360=this.options.colorScheme[i%_354]; +_353.fillStyle=_360.toRGBString(); +var _361=function(){ +_353.beginPath(); +_353.moveTo(_356,_357); +_353.arc(_356,_357,_358,_355[i].startAngle-Math.PI/2,_355[i].endAngle-Math.PI/2,false); +_353.lineTo(_356,_357); +_353.closePath(); +}; +if(Math.abs(_355[i].startAngle-_355[i].endAngle)>0.0001){ +if(this.options.shouldFill){ +_361(); +_353.fill(); +} +if(this.options.shouldStroke){ +_361(); +_353.stroke(); +} +} +} +_353.restore(); +}; +PlotKit.SweetCanvasRenderer.prototype._renderBackground=function(){ +var _362=this.element.getContext("2d"); +if(this.layout.style=="bar"||this.layout.style=="line"){ +_362.save(); +_362.fillStyle=this.options.backgroundColor.toRGBString(); +_362.fillRect(this.area.x,this.area.y,this.area.w,this.area.h); +_362.strokeStyle=this.options.axisLineColor.toRGBString(); +_362.lineWidth=1; +var _363=this.layout.yticks; +var _364=false; +if(this.layout.style=="bar"&&this.layout.options.barOrientation=="horizontal"){ +_363=this.layout.xticks; +_364=true; +} +for(var i=0;i<_363.length;i++){ +var x1=0; +var y1=0; +var x2=0; +var y2=0; +if(_364){ +x1=_363[i][0]*this.area.w+this.area.x; +y1=this.area.y; +x2=x1; +y2=y1+this.area.h; +}else{ +x1=this.area.x; +y1=_363[i][0]*this.area.h+this.area.y; +x2=x1+this.area.w; +y2=y1; +} +_362.beginPath(); +_362.moveTo(x1,y1); +_362.lineTo(x2,y2); +_362.closePath(); +_362.stroke(); +} +_362.restore(); +}else{ +PlotKit.SweetCanvasRenderer.__super__._renderBackground.call(this); +} +}; +PlotKit.SweetCanvas={}; +PlotKit.SweetCanvas.SweetCanvasRenderer=PlotKit.SweetCanvasRenderer; +PlotKit.SweetCanvas.EXPORT=["SweetCanvasRenderer"]; +PlotKit.SweetCanvas.EXPORT_OK=["SweetCanvasRenderer"]; +PlotKit.SweetCanvas.__new__=function(){ +var m=MochiKit.Base; +m.nameFunctions(this); +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +}; +PlotKit.SweetCanvas.__new__(); +MochiKit.Base._exportSymbols(this,PlotKit.SweetCanvas); +try{ +if(typeof (PlotKit.SVGRenderer)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "SweetSVG depends on MochiKit.{Base,Color,DOM,Format} and PlotKit.{Layout, SVG}"; +} +if(typeof (PlotKit.SweetSVGRenderer)=="undefined"){ +PlotKit.SweetSVGRenderer={}; +} +PlotKit.SweetSVGRenderer=function(_365,_366,_367){ +if(arguments.length>0){ +this.__init__(_365,_366,_367); +} +}; +PlotKit.SweetSVGRenderer.NAME="PlotKit.SweetSVGRenderer"; +PlotKit.SweetSVGRenderer.VERSION=PlotKit.VERSION; +PlotKit.SweetSVGRenderer.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +PlotKit.SweetSVGRenderer.toString=function(){ +return this.__repr__(); +}; +PlotKit.SweetSVGRenderer.prototype=new PlotKit.SVGRenderer(); +PlotKit.SweetSVGRenderer.prototype.constructor=PlotKit.SweetSVGRenderer; +PlotKit.SweetSVGRenderer.__super__=PlotKit.SVGRenderer.prototype; +PlotKit.SweetSVGRenderer.prototype.__init__=function(_368,_369,_370){ +var _371=PlotKit.Base.officeBlue(); +MochiKit.Base.update(_371,_370); +PlotKit.SweetSVGRenderer.__super__.__init__.call(this,_368,_369,_371); +}; +PlotKit.SweetSVGRenderer.prototype._addDropShadowFilter=function(){ +var _372=this.createSVGElement("filter",{x:0,y:0,"id":"dropShadow"}); +var _373=this.createSVGElement("feOffset",{"in":"SourceGraphic","dx":0,"dy":0,"result":"topCopy"}); +var blur=this.createSVGElement("feGaussianBlur",{"in":"SourceAlpha","StdDeviation":2,"result":"shadow"}); +var _375=this.createSVGElement("feOffset",{"in":"shadow","dx":-1,"dy":-2,"result":"movedShadow"}); +var _376=this.createSVGElement("feMerge"); +var _377=this.createSVGElement("feMergeNode",{"in":"topCopy"}); +var _378=this.createSVGElement("feMergeNode",{"in":"movedShadow"}); +_376.appendChild(_377); +_376.appendChild(_378); +_372.appendChild(_373); +_372.appendChild(blur); +_372.appendChild(_375); +_372.appendChild(_376); +this.defs.appendChild(_372); +}; +PlotKit.SweetSVGRenderer.prototype._renderBarChart=function(){ +var bind=MochiKit.Base.bind; +var _379=Color.blackColor().toRGBString(); +var _380="fill:"+_379+";fill-opacity:0.15"; +var _381="stroke-width: 2.0; stroke:"+Color.whiteColor().toRGBString(); +var _382=function(_383,bar){ +var x=this.area.w*bar.x+this.area.x; +var y=this.area.h*bar.y+this.area.y; +var w=this.area.w*bar.w; +var h=this.area.h*bar.h; +if((w<1)||(h<1)){ +return; +} +_383["style"]=_381; +this._drawRect(x-2,y-1,w+4,h+2,{"style":_380}); +this._drawRect(x,y,w,h,_383); +}; +this._renderBarOrLine(this.layout.bars,bind(_382,this)); +}; +PlotKit.SweetSVGRenderer.prototype._renderLineChart=function(){ +var bind=MochiKit.Base.bind; +var _384=Color.blackColor().toRGBString(); +var _385="fill:"+_384+";fill-opacity:0.15"; +var _386="stroke-width: 2.0; stroke:"+Color.whiteColor().toRGBString(); +var _387=function(_388,_389){ +this._tempPointsBuffer+=(this.area.w*_389.x+this.area.x)+","+(this.area.h*_389.y+this.area.y)+" "; +}; +var _390=function(_391){ +this._tempPointsBuffer=""; +this._tempPointsBuffer+=(this.area.x)+","+(this.area.y+this.area.h)+" "; +}; +var _392=function(_393){ +this._tempPointsBuffer+=(this.area.w+this.area.x)+","+(this.area.h+this.area.y); +_393["points"]=this._tempPointsBuffer; +_393["stroke"]="none"; +_393["transform"]="translate(-2, -1)"; +_393["style"]=_385; +var _394=this.createSVGElement("polygon",_393); +this.root.appendChild(_394); +_393["transform"]=""; +_393["style"]=_386; +var elem=this.createSVGElement("polygon",_393); +this.root.appendChild(elem); +}; +this._renderBarOrLine(this.layout.points,bind(_387,this),bind(_390,this),bind(_392,this)); +}; +PlotKit.SweetSVGRenderer.prototype._renderPieChart=function(){ +var _395=this.area.x+this.area.w*0.5; +var _396=this.area.y+this.area.h*0.5; +var _397=Color.blackColor().toRGBString(); +var _398=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); +var _399="fill:"+_397+";fill-opacity:0.15"; +var _400=this.createSVGElement("circle",{"style":_399,"cx":_395+1,"cy":_396+1,"r":_398+1}); +this.root.appendChild(_400); +PlotKit.SweetSVGRenderer.__super__._renderPieChart.call(this); +}; +PlotKit.SweetSVGRenderer.prototype._renderBackground=function(){ +var _401={"fill":this.options.backgroundColor.toRGBString(),"stroke":"none"}; +if(this.layout.style=="bar"||this.layout.style=="line"){ +this._drawRect(this.area.x,this.area.y,this.area.w,this.area.h,_401); +var _402=this.layout.yticks; +var _403=false; +if(this.layout.style=="bar"&&this.layout.options.barOrientation=="horizontal"){ +_402=this.layout.xticks; +_403=true; +} +for(var i=0;i<_402.length;i++){ +var x=0; +var y=0; +var w=0; +var h=0; +if(_403){ +x=_402[i][0]*this.area.w+this.area.x; +y=this.area.y; +w=1; +h=this.area.w; +}else{ +x=this.area.x; +y=_402[i][0]*this.area.h+this.area.y; +w=this.area.w; +h=1; +} +this._drawRect(x,y,w,h,{"fill":this.options.axisLineColor.toRGBString()}); +} +}else{ +PlotKit.SweetSVGRenderer.__super__._renderBackground.call(this); +} +}; +PlotKit.SweetSVG={}; +PlotKit.SweetSVG.SweetSVGRenderer=PlotKit.SweetSVGRenderer; +PlotKit.SweetSVG.EXPORT=["SweetSVGRenderer"]; +PlotKit.SweetSVG.EXPORT_OK=["SweetSVGRenderer"]; +PlotKit.SweetSVG.__new__=function(){ +var m=MochiKit.Base; +m.nameFunctions(this); +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +}; +PlotKit.SweetSVG.__new__(); +MochiKit.Base._exportSymbols(this,PlotKit.SweetSVG); +try{ +if(typeof (PlotKit.CanvasRenderer)=="undefined"){ +throw ""; +} +} +catch(e){ +throw "PlotKit.EasyPlot depends on all of PlotKit's components"; +} +if(typeof (PlotKit.EasyPlot)=="undefined"){ +PlotKit.EasyPlot={}; +} +PlotKit.EasyPlot.NAME="PlotKit.EasyPlot"; +PlotKit.EasyPlot.VERSION=PlotKit.VERSION; +PlotKit.EasyPlot.__repr__=function(){ +return "["+this.NAME+" "+this.VERSION+"]"; +}; +PlotKit.EasyPlot.toString=function(){ +return this.__repr__(); +}; +PlotKit.EasyPlot=function(_404,_405,_406,_407){ +this.layout=new Layout(_404,_405); +this.divElem=_406; +this.width=parseInt(_406.getAttribute("width")); +this.height=parseInt(_406.getAttribute("height")); +this.deferredCount=0; +if(this.width<1){ +this.width=this.divElem.width?this.divElem.width:300; +} +if(this.height<1){ +this.height=this.divElem.height?this.divElem.height:300; +} +if(isArrayLike(_407)){ +for(var i=0;i<_407.length;i++){ +if(typeof (_407[i])=="string"){ +this.deferredCount++; +var d=MochiKit.Async.doSimpleXMLHttpRequest(_407[i]); +d.addCallback(MochiKit.Base.bind(PlotKit.EasyPlot.onDataLoaded,this)); +}else{ +if(isArrayLike(_407[i])){ +this.layout.addDataset("data-"+i,_407[i]); +} +} +} +}else{ +if(!isUndefinedOrNull(_407)){ +throw "Passed datasources are not Array like"; +} +} +if(CanvasRenderer.isSupported()){ +this.element=CANVAS({"id":this.divElem.getAttribute("id")+"-canvas","width":this.width,"height":this.height},""); +this.divElem.appendChild(this.element); +this.renderer=new SweetCanvasRenderer(this.element,this.layout,_405); +}else{ +if(SVGRenderer.isSupported()){ +this.element=SVGRenderer.SVG({"id":this.divElem.getAttribute("id")+"-svg","width":this.width,"height":this.height,"version":"1.1","baseProfile":"full"},""); +this.divElem.appendChild(this.element); +this.renderer=new SweetSVGRenderer(this.element,this.layout,_405); +} +} +if((this.deferredCount==0)&&(PlotKit.Base.keys(this.layout.datasets).length>0)){ +this.layout.evaluate(); +this.renderer.clear(); +this.renderer.render(); +} +}; +PlotKit.EasyPlot.onDataLoaded=function(_409){ +var _410=new Array(); +var _411=_409.responseText.split("\n"); +for(var i=0;i<_411.length;i++){ +var _412=MochiKit.Format.strip(_411[i]); +if((_412.length>1)&&(_412.charAt(0)!="#")){ +_410.push(_412.split(",")); +} +} +this.layout.addDataset("data-ajax-"+this.deferredCount,_410); +this.deferredCount--; +if((this.deferredCount==0)&&(PlotKit.Base.keys(this.layout.datasets).length>0)){ +this.layout.evaluate(); +this.renderer.clear(); +this.renderer.render(); +} +}; +PlotKit.EasyPlot.prototype.reload=function(){ +this.layout.evaluate(); +this.renderer.clear(); +this.renderer.render(); +}; +PlotKit.EasyPlotModule={}; +PlotKit.EasyPlotModule.EasyPlot=PlotKit.EasyPlot; +PlotKit.EasyPlotModule.EXPORT=["EasyPlot"]; +PlotKit.EasyPlotModule.EXPORT_OK=[]; +PlotKit.EasyPlotModule.__new__=function(){ +var m=MochiKit.Base; +m.nameFunctions(this); +this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; +}; +PlotKit.EasyPlotModule.__new__(); +MochiKit.Base._exportSymbols(this,PlotKit.EasyPlotModule); + + diff --git a/interfaces/smpl/templates/static/excanvas/excanvas.js b/interfaces/smpl/templates/static/excanvas/excanvas.js new file mode 100644 index 0000000..3e1aedf --- /dev/null +++ b/interfaces/smpl/templates/static/excanvas/excanvas.js @@ -0,0 +1,785 @@ +// Copyright 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +// Known Issues: +// +// * Patterns are not implemented. +// * Radial gradient are not implemented. The VML version of these look very +// different from the canvas one. +// * Clipping paths are not implemented. +// * Coordsize. The width and height attribute have higher priority than the +// width and height style values which isn't correct. +// * Painting mode isn't implemented. +// * Canvas width/height should is using content-box by default. IE in +// Quirks mode will draw the canvas using border-box. Either change your +// doctype to HTML5 +// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) +// or use Box Sizing Behavior from WebFX +// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) +// * Optimize. There is always room for speed improvements. + +// only add this code if we do not already have a canvas implementation +if (!window.CanvasRenderingContext2D) { + +(function () { + + // alias some functions to make (compiled) code shorter + var m = Math; + var mr = m.round; + var ms = m.sin; + var mc = m.cos; + + // this is used for sub pixel precision + var Z = 10; + var Z2 = Z / 2; + + var G_vmlCanvasManager_ = { + init: function (opt_doc) { + var doc = opt_doc || document; + if (/MSIE/.test(navigator.userAgent) && !window.opera) { + var self = this; + doc.attachEvent("onreadystatechange", function () { + self.init_(doc); + }); + } + }, + + init_: function (doc) { + if (doc.readyState == "complete") { + // create xmlns + if (!doc.namespaces["g_vml_"]) { + doc.namespaces.add("g_vml_", "urn:schemas-microsoft-com:vml"); + } + + // setup default css + var ss = doc.createStyleSheet(); + ss.cssText = "canvas{display:inline-block;overflow:hidden;" + + // default size is 300x150 in Gecko and Opera + "text-align:left;width:300px;height:150px}" + + "g_vml_\\:*{behavior:url(#default#VML)}"; + + // find all canvas elements + var els = doc.getElementsByTagName("canvas"); + for (var i = 0; i < els.length; i++) { + if (!els[i].getContext) { + this.initElement(els[i]); + } + } + } + }, + + fixElement_: function (el) { + // in IE before version 5.5 we would need to add HTML: to the tag name + // but we do not care about IE before version 6 + var outerHTML = el.outerHTML; + + var newEl = el.ownerDocument.createElement(outerHTML); + // if the tag is still open IE has created the children as siblings and + // it has also created a tag with the name "/FOO" + if (outerHTML.slice(-2) != "/>") { + var tagName = "/" + el.tagName; + var ns; + // remove content + while ((ns = el.nextSibling) && ns.tagName != tagName) { + ns.removeNode(); + } + // remove the incorrect closing tag + if (ns) { + ns.removeNode(); + } + } + el.parentNode.replaceChild(newEl, el); + return newEl; + }, + + /** + * Public initializes a canvas element so that it can be used as canvas + * element from now on. This is called automatically before the page is + * loaded but if you are creating elements using createElement you need to + * make sure this is called on the element. + * @param {HTMLElement} el The canvas element to initialize. + * @return {HTMLElement} the element that was created. + */ + initElement: function (el) { + el = this.fixElement_(el); + el.getContext = function () { + if (this.context_) { + return this.context_; + } + return this.context_ = new CanvasRenderingContext2D_(this); + }; + + // do not use inline function because that will leak memory + el.attachEvent('onpropertychange', onPropertyChange); + el.attachEvent('onresize', onResize); + + var attrs = el.attributes; + if (attrs.width && attrs.width.specified) { + // TODO: use runtimeStyle and coordsize + // el.getContext().setWidth_(attrs.width.nodeValue); + el.style.width = attrs.width.nodeValue + "px"; + } else { + el.width = el.clientWidth; + } + if (attrs.height && attrs.height.specified) { + // TODO: use runtimeStyle and coordsize + // el.getContext().setHeight_(attrs.height.nodeValue); + el.style.height = attrs.height.nodeValue + "px"; + } else { + el.height = el.clientHeight; + } + //el.getContext().setCoordsize_() + return el; + } + }; + + function onPropertyChange(e) { + var el = e.srcElement; + + switch (e.propertyName) { + case 'width': + el.style.width = el.attributes.width.nodeValue + "px"; + el.getContext().clearRect(); + break; + case 'height': + el.style.height = el.attributes.height.nodeValue + "px"; + el.getContext().clearRect(); + break; + } + } + + function onResize(e) { + var el = e.srcElement; + if (el.firstChild) { + el.firstChild.style.width = el.clientWidth + 'px'; + el.firstChild.style.height = el.clientHeight + 'px'; + } + } + + G_vmlCanvasManager_.init(); + + // precompute "00" to "FF" + var dec2hex = []; + for (var i = 0; i < 16; i++) { + for (var j = 0; j < 16; j++) { + dec2hex[i * 16 + j] = i.toString(16) + j.toString(16); + } + } + + function createMatrixIdentity() { + return [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1] + ]; + } + + function matrixMultiply(m1, m2) { + var result = createMatrixIdentity(); + + for (var x = 0; x < 3; x++) { + for (var y = 0; y < 3; y++) { + var sum = 0; + + for (var z = 0; z < 3; z++) { + sum += m1[x][z] * m2[z][y]; + } + + result[x][y] = sum; + } + } + return result; + } + + function copyState(o1, o2) { + o2.fillStyle = o1.fillStyle; + o2.lineCap = o1.lineCap; + o2.lineJoin = o1.lineJoin; + o2.lineWidth = o1.lineWidth; + o2.miterLimit = o1.miterLimit; + o2.shadowBlur = o1.shadowBlur; + o2.shadowColor = o1.shadowColor; + o2.shadowOffsetX = o1.shadowOffsetX; + o2.shadowOffsetY = o1.shadowOffsetY; + o2.strokeStyle = o1.strokeStyle; + o2.arcScaleX_ = o1.arcScaleX_; + o2.arcScaleY_ = o1.arcScaleY_; + } + + function processStyle(styleString) { + var str, alpha = 1; + + styleString = String(styleString); + if (styleString.substring(0, 3) == "rgb") { + var start = styleString.indexOf("(", 3); + var end = styleString.indexOf(")", start + 1); + var guts = styleString.substring(start + 1, end).split(","); + + str = "#"; + for (var i = 0; i < 3; i++) { + str += dec2hex[Number(guts[i])]; + } + + if ((guts.length == 4) && (styleString.substr(3, 1) == "a")) { + alpha = guts[3]; + } + } else { + str = styleString; + } + + return [str, alpha]; + } + + function processLineCap(lineCap) { + switch (lineCap) { + case "butt": + return "flat"; + case "round": + return "round"; + case "square": + default: + return "square"; + } + } + + /** + * This class implements CanvasRenderingContext2D interface as described by + * the WHATWG. + * @param {HTMLElement} surfaceElement The element that the 2D context should + * be associated with + */ + function CanvasRenderingContext2D_(surfaceElement) { + this.m_ = createMatrixIdentity(); + + this.mStack_ = []; + this.aStack_ = []; + this.currentPath_ = []; + + // Canvas context properties + this.strokeStyle = "#000"; + this.fillStyle = "#000"; + + this.lineWidth = 1; + this.lineJoin = "miter"; + this.lineCap = "butt"; + this.miterLimit = Z * 1; + this.globalAlpha = 1; + this.canvas = surfaceElement; + + var el = surfaceElement.ownerDocument.createElement('div'); + el.style.width = surfaceElement.clientWidth + 'px'; + el.style.height = surfaceElement.clientHeight + 'px'; + el.style.overflow = 'hidden'; + el.style.position = 'absolute'; + surfaceElement.appendChild(el); + + this.element_ = el; + this.arcScaleX_ = 1; + this.arcScaleY_ = 1; + }; + + var contextPrototype = CanvasRenderingContext2D_.prototype; + contextPrototype.clearRect = function() { + this.element_.innerHTML = ""; + this.currentPath_ = []; + }; + + contextPrototype.beginPath = function() { + // TODO: Branch current matrix so that save/restore has no effect + // as per safari docs. + + this.currentPath_ = []; + }; + + contextPrototype.moveTo = function(aX, aY) { + this.currentPath_.push({type: "moveTo", x: aX, y: aY}); + this.currentX_ = aX; + this.currentY_ = aY; + }; + + contextPrototype.lineTo = function(aX, aY) { + this.currentPath_.push({type: "lineTo", x: aX, y: aY}); + this.currentX_ = aX; + this.currentY_ = aY; + }; + + contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, + aCP2x, aCP2y, + aX, aY) { + this.currentPath_.push({type: "bezierCurveTo", + cp1x: aCP1x, + cp1y: aCP1y, + cp2x: aCP2x, + cp2y: aCP2y, + x: aX, + y: aY}); + this.currentX_ = aX; + this.currentY_ = aY; + }; + + contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { + // the following is lifted almost directly from + // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes + var cp1x = this.currentX_ + 2.0 / 3.0 * (aCPx - this.currentX_); + var cp1y = this.currentY_ + 2.0 / 3.0 * (aCPy - this.currentY_); + var cp2x = cp1x + (aX - this.currentX_) / 3.0; + var cp2y = cp1y + (aY - this.currentY_) / 3.0; + this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, aX, aY); + }; + + contextPrototype.arc = function(aX, aY, aRadius, + aStartAngle, aEndAngle, aClockwise) { + aRadius *= Z; + var arcType = aClockwise ? "at" : "wa"; + + var xStart = aX + (mc(aStartAngle) * aRadius) - Z2; + var yStart = aY + (ms(aStartAngle) * aRadius) - Z2; + + var xEnd = aX + (mc(aEndAngle) * aRadius) - Z2; + var yEnd = aY + (ms(aEndAngle) * aRadius) - Z2; + + // IE won't render arches drawn counter clockwise if xStart == xEnd. + if (xStart == xEnd && !aClockwise) { + xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something + // that can be represented in binary + } + + this.currentPath_.push({type: arcType, + x: aX, + y: aY, + radius: aRadius, + xStart: xStart, + yStart: yStart, + xEnd: xEnd, + yEnd: yEnd}); + + }; + + contextPrototype.rect = function(aX, aY, aWidth, aHeight) { + this.moveTo(aX, aY); + this.lineTo(aX + aWidth, aY); + this.lineTo(aX + aWidth, aY + aHeight); + this.lineTo(aX, aY + aHeight); + this.closePath(); + }; + + contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { + // Will destroy any existing path (same as FF behaviour) + this.beginPath(); + this.moveTo(aX, aY); + this.lineTo(aX + aWidth, aY); + this.lineTo(aX + aWidth, aY + aHeight); + this.lineTo(aX, aY + aHeight); + this.closePath(); + this.stroke(); + }; + + contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { + // Will destroy any existing path (same as FF behaviour) + this.beginPath(); + this.moveTo(aX, aY); + this.lineTo(aX + aWidth, aY); + this.lineTo(aX + aWidth, aY + aHeight); + this.lineTo(aX, aY + aHeight); + this.closePath(); + this.fill(); + }; + + contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { + var gradient = new CanvasGradient_("gradient"); + return gradient; + }; + + contextPrototype.createRadialGradient = function(aX0, aY0, + aR0, aX1, + aY1, aR1) { + var gradient = new CanvasGradient_("gradientradial"); + gradient.radius1_ = aR0; + gradient.radius2_ = aR1; + gradient.focus_.x = aX0; + gradient.focus_.y = aY0; + return gradient; + }; + + contextPrototype.drawImage = function (image, var_args) { + var dx, dy, dw, dh, sx, sy, sw, sh; + + // to find the original width we overide the width and height + var oldRuntimeWidth = image.runtimeStyle.width; + var oldRuntimeHeight = image.runtimeStyle.height; + image.runtimeStyle.width = 'auto'; + image.runtimeStyle.height = 'auto'; + + // get the original size + var w = image.width; + var h = image.height; + + // and remove overides + image.runtimeStyle.width = oldRuntimeWidth; + image.runtimeStyle.height = oldRuntimeHeight; + + if (arguments.length == 3) { + dx = arguments[1]; + dy = arguments[2]; + sx = sy = 0; + sw = dw = w; + sh = dh = h; + } else if (arguments.length == 5) { + dx = arguments[1]; + dy = arguments[2]; + dw = arguments[3]; + dh = arguments[4]; + sx = sy = 0; + sw = w; + sh = h; + } else if (arguments.length == 9) { + sx = arguments[1]; + sy = arguments[2]; + sw = arguments[3]; + sh = arguments[4]; + dx = arguments[5]; + dy = arguments[6]; + dw = arguments[7]; + dh = arguments[8]; + } else { + throw "Invalid number of arguments"; + } + + var d = this.getCoords_(dx, dy); + + var w2 = sw / 2; + var h2 = sh / 2; + + var vmlStr = []; + + var W = 10; + var H = 10; + + // For some reason that I've now forgotten, using divs didn't work + vmlStr.push(' ' , + '', + ''); + + this.element_.insertAdjacentHTML("BeforeEnd", + vmlStr.join("")); + }; + + contextPrototype.stroke = function(aFill) { + var lineStr = []; + var lineOpen = false; + var a = processStyle(aFill ? this.fillStyle : this.strokeStyle); + var color = a[0]; + var opacity = a[1] * this.globalAlpha; + + var W = 10; + var H = 10; + + lineStr.push(' max.x) { + max.x = c.x; + } + if (min.y == null || c.y < min.y) { + min.y = c.y; + } + if (max.y == null || c.y > max.y) { + max.y = c.y; + } + } + } + lineStr.push(' ">'); + + if (typeof this.fillStyle == "object") { + var focus = {x: "50%", y: "50%"}; + var width = (max.x - min.x); + var height = (max.y - min.y); + var dimension = (width > height) ? width : height; + + focus.x = mr((this.fillStyle.focus_.x / width) * 100 + 50) + "%"; + focus.y = mr((this.fillStyle.focus_.y / height) * 100 + 50) + "%"; + + var colors = []; + + // inside radius (%) + if (this.fillStyle.type_ == "gradientradial") { + var inside = (this.fillStyle.radius1_ / dimension * 100); + + // percentage that outside radius exceeds inside radius + var expansion = (this.fillStyle.radius2_ / dimension * 100) - inside; + } else { + var inside = 0; + var expansion = 100; + } + + var insidecolor = {offset: null, color: null}; + var outsidecolor = {offset: null, color: null}; + + // We need to sort 'colors' by percentage, from 0 > 100 otherwise ie + // won't interpret it correctly + this.fillStyle.colors_.sort(function (cs1, cs2) { + return cs1.offset - cs2.offset; + }); + + for (var i = 0; i < this.fillStyle.colors_.length; i++) { + var fs = this.fillStyle.colors_[i]; + + colors.push( (fs.offset * expansion) + inside, "% ", fs.color, ","); + + if (fs.offset > insidecolor.offset || insidecolor.offset == null) { + insidecolor.offset = fs.offset; + insidecolor.color = fs.color; + } + + if (fs.offset < outsidecolor.offset || outsidecolor.offset == null) { + outsidecolor.offset = fs.offset; + outsidecolor.color = fs.color; + } + } + colors.pop(); + + lineStr.push(''); + } else if (aFill) { + lineStr.push(''); + } else { + lineStr.push( + '' + ); + } + + lineStr.push(""); + + this.element_.insertAdjacentHTML("beforeEnd", lineStr.join("")); + + this.currentPath_ = []; + }; + + contextPrototype.fill = function() { + this.stroke(true); + } + + contextPrototype.closePath = function() { + this.currentPath_.push({type: "close"}); + }; + + /** + * @private + */ + contextPrototype.getCoords_ = function(aX, aY) { + return { + x: Z * (aX * this.m_[0][0] + aY * this.m_[1][0] + this.m_[2][0]) - Z2, + y: Z * (aX * this.m_[0][1] + aY * this.m_[1][1] + this.m_[2][1]) - Z2 + } + }; + + contextPrototype.save = function() { + var o = {}; + copyState(this, o); + this.aStack_.push(o); + this.mStack_.push(this.m_); + this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); + }; + + contextPrototype.restore = function() { + copyState(this.aStack_.pop(), this); + this.m_ = this.mStack_.pop(); + }; + + contextPrototype.translate = function(aX, aY) { + var m1 = [ + [1, 0, 0], + [0, 1, 0], + [aX, aY, 1] + ]; + + this.m_ = matrixMultiply(m1, this.m_); + }; + + contextPrototype.rotate = function(aRot) { + var c = mc(aRot); + var s = ms(aRot); + + var m1 = [ + [c, s, 0], + [-s, c, 0], + [0, 0, 1] + ]; + + this.m_ = matrixMultiply(m1, this.m_); + }; + + contextPrototype.scale = function(aX, aY) { + this.arcScaleX_ *= aX; + this.arcScaleY_ *= aY; + var m1 = [ + [aX, 0, 0], + [0, aY, 0], + [0, 0, 1] + ]; + + this.m_ = matrixMultiply(m1, this.m_); + }; + + /******** STUBS ********/ + contextPrototype.clip = function() { + // TODO: Implement + }; + + contextPrototype.arcTo = function() { + // TODO: Implement + }; + + contextPrototype.createPattern = function() { + return new CanvasPattern_; + }; + + // Gradient / Pattern Stubs + function CanvasGradient_(aType) { + this.type_ = aType; + this.radius1_ = 0; + this.radius2_ = 0; + this.colors_ = []; + this.focus_ = {x: 0, y: 0}; + } + + CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { + aColor = processStyle(aColor); + this.colors_.push({offset: 1-aOffset, color: aColor}); + }; + + function CanvasPattern_() {} + + // set up externs + G_vmlCanvasManager = G_vmlCanvasManager_; + CanvasRenderingContext2D = CanvasRenderingContext2D_; + CanvasGradient = CanvasGradient_; + CanvasPattern = CanvasPattern_; + +})(); + +} // if diff --git a/interfaces/smpl/templates/static/feed-icon-14x14.png b/interfaces/smpl/templates/static/feed-icon-14x14.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c949d2244f2c0c81d65e74719af2a1b56d06a3 GIT binary patch literal 689 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 literal 0 HcmV?d00001 diff --git a/interfaces/smpl/templates/static/images/drive.png b/interfaces/smpl/templates/static/images/drive.png new file mode 100644 index 0000000000000000000000000000000000000000..37b7c9b27d39acaaecf06951b024ac08afbfd4d2 GIT binary patch literal 346 zcmV-g0j2(lP)`6pHR4C7- zkv&QTK@f$%UVGNSAB4p~7X&kJu`rW(3s2w)1kd9QoMeZ&fx$)tn+OJimk zjCT$JD?{UrQ?3~v=-g&C?-zWP;E3TkpyGrhTDFaQSzpwKU?tq9Uh&CO=Y?-R7%>t` z!bl_(!*h(_r3OLS;FuM!k+?!xBDEihL=?r53TBrP2>202N!*Y~*dL6MvS5Ku!P&n9 sT@vv>?encL=G!4ixo5^&>-PTUFAyGx1U4B=kpKVy07*qoM6N<$g0$g{=l}o! literal 0 HcmV?d00001 diff --git a/interfaces/smpl/templates/static/images/drive_go.png b/interfaces/smpl/templates/static/images/drive_go.png new file mode 100644 index 0000000000000000000000000000000000000000..fc53379efcda49dc4b2fc0eb7bc12bf908425a53 GIT binary patch literal 661 zcmV;G0&4wR5;6} zQ_E@-Q5gPaa(xuUD*8Dh=U) zD{du|NeqWWL?V$HXdX!Y!C-(yB7saML!ujex*;{2O`)Djr7#|kPuQhW2q;Ms0)c=~ zkH_PP#bVGj4c%_H7$kMFPPNjeXf!IqSD$x6*>zo*ripw$k5;R-5hNwUFfba8!~yx6 z=rAe!W9?@Z6U#s;`2>;BIVg%EToOTn*l9o@UXrjZ%kl{a6J?6!^cr66Z{p$NQ>dy+ zm_m?Lsa6Uipdf-Tsn=YYU!iM*@iq1QD%O^6;K(%ay#ENB>Pu0!An<`?HJ8hY-2KIH zcfAb9D}@EUQ{QK< v0Jmp<;WRC~B^izzSeUp@_IuU)>d*fH-<_8fCSRm-00000NkvXXu0mjfp(G(wMI1vk5SfQe37IQtHVc)ZBr0VL zNlHnkIRCW|75D0Xy6)%oef_@Q|9xuNd#$~m^T8? z08mz5^3wz055w5l7X6or0m!iffSP*Ie}E8xUCxjJ5(=<^4rKstxB z7AWKYF8+bx$TNg+I2-`UgTQ$TUiFRu&Q~~4hJ^9S0N_~wKqU_B9KnG|81@PYU(XDH zyfFZ_=Ku(81R!@7P&~x}({UW|o5z7I131ut#1mHsz&RCws7^2j{n<#EDHaNJ2Y?+= z2o`<-nqgQe4$wb`*NdNk?F0_A!Fb8g3HQP7uo{4fR-ikE1LZJ&F~Y;h0l*erD7Pg5mZ4zV5DcSY07J;L1{@%K0@eH#uKKuo@F zcz>n|0GZtYi-cRB1>$}1s%i~@x+4I_egN2?2f(`ofRH)>68iz*-v)r#b^!Ff0N9@d zz~Kx40?Gk6_Y~B^H1d#iXc+-u*bD&A762r*08lUkz#;??!8`%?TmXE_0Ep=VfSDJ7 z%|bwS5C_(G;s9$Ge4aW20EY;;1Jfx*(h^btA@J&s=uE>2fQLB1i0Hi*x^n2speunc zcN!Rfzya-19Kf{V011>4JZcutcbgP!1lK=%*Yp3Y=1z77(kiwOCy?mJ0e)Ct*kKu=TVS|ZAOL$#!a8~i0GkK^F3$nr5DV*iB5V_% z0XUcfK>8SLOKGsK!ZLNs1|aqo06td$IR6}gw~;60Rk7`lGwo!9fb4-;1>v_xs=9 zqr?dZNtmWvd-md^#jPc(LS`~A7;C~Zrm9&;at$M!- z&wn#$Rm|mq|4pz}(pnC+>isG_|IMIPF_#DaH^Ej(YdO^K_Sq|vS;e!M=86Zu4Eh&; zxdv9~Y!%NcYW%%et1vFd{eHhnVk?4HNoK|KMb9d+ei`%~d6fvim-6q$S|$0F$iEq3 zH6|o%MJ|4s)+(`9CiovCtc?ECw+iF$1^r9{xm$&2WrSb(R$=_Tpp^-(!m~2MuY9X8 z{$9|^1Xtl%8R1vHRTzISXk~({@T`pRE8i-NzZbMJ!Bu!xM);L)6~^BSTAAPqo>e@H zu~&JpBIxhL`WJt>23DwX70=(%>?-Ulf|lcczh4ny70>^5{O@}BZ(LWX@4u1Y-%R6w zJAQ&Kqy&pPgTwmz`giZLv9SdN1XL<21_lOJRgnY*si{>52eY$>)GD7Dq^aAPepW^0 z;>Eq$qVD624sbu{Ph%-eO&6}8|1Mz=_;|Sx!nLXq zL}!bBaA&;iAh|leZ5Og7_FL4|)rINu-=oH{2#v_Dh?gBoPeKBPUy>eyA4K5Ks=U9L zl_e_bUJu2G`xk$bKLIA$)dhDzeuF5Hs0seUf%*Xf2sBhYlpRq$9(@`7qV^GZ6(4lg zUeOQZQYg%s|_3z{@5;()IsT$yQm3KqJ_Aa76X^qW>=a_rk|(AAxsgM8t=C zI)9QsgIO0zHi7a#W?(ZCEk2$auW|%>5gT9cAUaa>s$tDz5BX8|7U8q9KYXZXyxb@` zVYnK;P~Tz(;AYKVk~sn|m{1?^9TrhLq$-ldY7fzW!Y|f6r0%1$VC94G4w89>`K#dD z2@T!R#peL-Uj7C7>q7ER^jU!p_5NM+i10|e3qh*hPxy;a`-^QaZz6v+{NbTJX)Xy! z;=2Cfzs8S8D6a3MV%2gYfrKa?QT;ObL43{qYZ?_wT|l7CqAIF2N&p58v@h!osI6SPdU9zMRV)=C0?@5gfQ@ z`v;2lhh%PUucj7UUA+Px7Wy)DsCsdHv011l0xL3pa1qo61BEegHNXSyP`yo71 z^N>LYDj(_gFT;+{5NhAbN}|D@CD%>lqb2brSK<4a8%OMr$`4Dw-=&Y)B01T@7Qr$% zKe{3VFd(j<6Vd&0<>R5@A6Vs~=y=&-qp#b!SoCnnMZ+=o!xH>r;TJa8BjV%X5%DuO zX5cdb)!z^CA*Cb=BKS++j4b6M4${bH%a4#m@bpRKlSpnY9(fTRU+%EcL3pTpyztB6 zVZZxl?cdMb!<=Gakt{Brm}vV7(**|>ND1)>TI34(k&x)~E2$%n28z8TInv^x?2G7& zx`(~q59yb|Bigq_v=7D4bcr@Ii}@2FXn&R;30+Px@pVW~gAlB9i0D7j-y=njhaX1< zy(M@nSoeMuKBE0mmzd=#F27$PK3FA_F=m20;SdYyCw4j~C+EARiU-m0?H*RWAMi-s zLkb^X_hIGR=(1YEh(7*M|5wX^nLj7Kn>|T$MmZz|sfEfXk%Cw8`5}Bg((snU+q1YW zH9bW9k&!#U!2e_WU#Sh~gXI=&&UxnKNg8GLWlf?wq|OIc`z75&cn4(0fvs+HLuY5>D;`qxNVfywmm2;uc&PmhJ3Bo7 zZ=n4-ikX?Lxz8Xn60OVu3?!lKFP|S zk3-Y^90XU~v8zDYVZDb%zu4^{%3p#fhW+l?{l$(~DCNAYtn8Zc_tph{p9UwJK6TCb z?wqSZ{|HkIQpqobx<`7wKf-4S4Iy*B#5Lm|I@Dn{el`&Q3b6Vg_^eVbtI+-nzSI4# zd_?-u5xZeH>ZZM+O6)jv=+K(v@93a3V|=HGfBjh<9|;Wz2p+fpjC8uN+kw39F^r>8Y1I53F{^AeYDYlUO9O4|?U5*zStIO$NLgNvc6U_BG7n7XC78m0w2YTvYBj z;cMPC(QA#}8rVS56!UX3GBWdjU;6+c_@5aKJxK?z~p~bLX7fMI3lF z>U4(AL%lzb60t1o36Y@QZ_`vvM^1ZyWhh<}5Dfnlxq=Q6E!+;k?m`fdAIoNw1eVt_-HL zCixNk42csr{nk!A_x=%nnX}!Or+Q>-r%kkdaS>3CM{B8nWn~f0LiWbH^wv(-H6eak zS=pNKBO)T&_OS48;#oT#_v(v*$wVAji~I(PgDwgjvdjivezmod<(cujPDA6r|ut_dH>IFXsfXbAodT}v#9z!n>%p}XUV8ZR z&$SYgd!p906TqY9+P@n3R|EfQ;D4zGpzV+U zSz4(l+#mKP0{-={P|&~nSfLIO@CS<(u%G;%dCKdbJ!Jd06@THZ~#ESn^9R4uKlJ}G zy;b!2Ge>xJEz2=poy+`xeEzQ=sXsqU_+Nee&+6lk_47CVRo|N+D?YnFJBTHJ@Av0Q zi_d>_C;^N9A05u3_eT@P_by9e|Ic2K7c^z)u+Sm)$MA%F!u_34@CI>^pb&UFVF&Sc z!rTEnw4sF9UBcT5^C|$K0tYmpov@$w!6Ly6I{te~AHF~nBak}WVav=Q|c z#(9dwgLc9Yn^jB*<}Do1g?5~XpdBg1J{V$uDiMhT?SaW7w#A_BFTCwA_sh^W6SVV% z*!+Taz<}?qpEkb`8%>DaFBNNOC(99dBetTT{Vx{8UKe5uEAlDcjuohZes&RP_Y3}> z1+i!K!}b@nV};leJCuR9`-RxnLTq%AL;GuZdtcCg7-IJcvH5iw$s3Z_2hc6E?SbqSpUT9N` z4yH*8b%(cQh1mE)Y*{(LUp(wjT(tFt*wy-O=PSN<(Z1KYwnh71(5@FaSr5SJhj`mn zh^@5-=ny+_en|N%!|&R6K)YhlhL$2MOMuvJgEqYoTXlF_XLZnj54tF8TcS|L|Apvu9%1_-nJPK-wE@o z1?vSYE5sJt7Cl&I`am18GbV3>w?76HO!4;XfPw|I(FW@}w1bDYNr%{KQ?&scPPdJyts(B(9bt-5LnRgNbTsCb0E(EB_4 z&mYD$*%wI^=&Gw{k}YQ!suoIud0wPEJU1dcWQW4XI<&K55s+bj~2sq~-4wd*{F@R9o>!p{Z^2?@c8(IQo62Jg;8 z_z-e)TjFj!625`MW`|}SkT?u8~z|b z)|~^AyL+LmxA&3aC?7ePdBHY|c!Q3l#Dj4HPgZah*9^A0s1+uHUN&yLT1Gk-zVe3dbz*;)Ai{USf8{Q6~)$cZ_;y&D^8 zq2Q4FAuKqU`S^s6B>hsRt2!|E_7PtLzCyx(dH!{Y9e@e^w+NrUyeD>Vgfc)4xEISs zNADKIqeI=5LgA6zm+YzxASWMR{B+?5`}Z5^drcfF`FVKC=ZF$?aDcKSs^4-D(S7sz zk|Mq@M&D!q`RY%8US-*jF*u^*MMMm~vlGMIn@65C`eV&omW=J)5|yPYxOj1Qph|+W zBj^ZwQRF$hPe0!BmN72f-qSQ!alO2ZTrC?D;5H$`-hyY}x8Wn4GXILm{UlV72Dpsa zEV&ZlhYm~V1r%Xp-wSP(MD7k3xGntQoA^2}OD8>kemr_X#IDd$@>Lj@f;5LI+?4kJ zk-nX_jMg!ih&)#i5zZHU;_k2c{f5Hba_0U>2j-?vxvJ@%3lHZzd)8D_^Vj@RgAHyc zSNW!aNSVM2%JX$iiYX!+#JPMr_W-fxg-ymFmK=fiW`8ztHulxUK$6DnDa-XYkkj1O29M)LMT* zJu{~C^uOjme*2;uUEg02HKFO7zu>p#Rd?G1e|hvvN|P}?4qv^0MZLF#+$4AY1+izD z{?%6-yvOF<6yT2=eo2SknclwrD|Gl8|C-UwdEH;ormd#k-M{94ee;Xkw$#5M%5u|N z@Rk2p^ol6M4W;lGziZ%5H$8UjSKI)+A{ymDvHS(0(t}Fn(M#izX~ z3W6tI-uNs2m%h3ii;!OtuS!L`Y`eOi{{=rF^5}Z~7xc>G<=($yhbHcCc>ERJfJV{( zrT?Y|ezk!4Z4o43dhx3CKXv_%ySV+sy0j1Teg6fnyjLL^`o7=tW1r>w;;hmVKkHI{ zsg{O&qF#gzZrt?3Kahx)!l{BN z-d;b*ox!g^A?t34jsF@XtwzgX+_Ud5jW0Se(gVvqmQ7r4gy4uFJSAP?6+y=HLub1h!Nw2`&SeCUufE~24B z?DLy_gjaY*1F|N%`6av;g==@R@Evcv4FG%3!1cd-aJ{n$AZw=s2#+M3G$H3ZAZv|q zO&OR60k99QW#+*`bIDj-GYqMPYsBq~Yr4o9F|y|QeQg(6e?-=d`Q?_@a@7Ekg98C_ zJ_B+d!)|Z5W{QRDm0@sQIvlQze#NhcgRIYs>y^m)3*JR=y&87@$hxdQoCKb2hU=vj zOXn}#$DfseUpqz4K9JGJuag2LxVDI#a{<>5@#jh)Ys7|d07K3(usVf5*8`-DF0KQo zz=;uZUd55i@N9<;xIX^`t^?nMdjt&t7SQ6E3~4n{CEa$91dFQvRFjN#wYEiK6y&j z9RFPXM+}EU@igb7_rysh?KR#iBg-I&e;$N%;RtD(Sc=Dx#KtEk!^fenr;os10aA$Q z;w$5B(-;Vxcr^J!YVg)jw5qv|kB6k1$sr0u3~b(D;{nfb9rFtp_DUN&yU3tb&w8Ho zawjrzG7Q>}30wywXzKgv?{ zNY;MR306)CJni6&JZZWmM1;}r=R%ZSg4oohL%p!Y3%3O9(3ZX#IryG;UR^v}{kBGMl@VUSub!|= ziTEce(XrXBcy6}`MY`;FK?*42mCFt5WVazpbl-`0m-ZiC$LPfjmi?~70877NMfz~- zPRM3C{o(1ay~uryE4J4$J zQ$xoF-H&<7(!2x)EzVJv{4hEk&))+4JjEmce=ZQR2Z}%A2{}&+?kOU34E)(f$hkjo zPN6>r{m7mvJQqj?&H;dJ-lf&)#c>Rt$%EfhrG*Uz?gM(y!nnxzrwHc+@T?|~F@`^*3ptx9 z1<4mYa|k5%EuM>noL7XL$8>oXbRo}>F%&u52pKDp@ew(*3GQj)$6@6BBDin3A33WD zj@$UXczEs=eq2ZP6yd%h{>&`6KMgKT0CzZ#I|TRq9g+AY&=o_6%t?@Qxc;SoHSm8z z18^|}e0PfiLI2V}#Q*&n5{CCL{r%zp6F)uzJ~lZ}W!u8VMYRbn1^u*~OaPE+2s7#_ zQcJ=}JEf7)Z@s<{iGUXIZWc}@JR|Ea!p(FWWf>?i+<3pT95c^$8cIjp?DxkW$U7BL-dZEb!r33~i8mD!lB?p=&;aL z5v}fesbKe|ze}Bhl!+9^rqI+-Gx*-I5+hRp%OjUz&%p*X)l`g*UKlHX5Y6=Lp8h^O$7QOH3Y}{$i`7enQ17) zB-<3qGf*fdE57!ihYuCv!(TIW#S$4y8yar)h-`ew{mK%@LDOe@_-t~LKhD+Iczo@2 zD~tN3g0dEWkNS2+u40i^S$Tz_`=v_bUmh@AU@q@(PT_=sjF#3COcbZH#0|7UZcTE2 zp4OmNQOXoWs?*pCMG1cQEbGD-Z4G$b>Wn+ zX7wp%5;sy1kr#`~`psW36-{%Se#cm1tuXk$nPz`(0}N-RBvKooac4fCL*f+8cK%eC z$EAjbAnNNu^c;tteDHkhdHhR4y!l@9eICxH=c~I>cc)m7;Hvj|d$T_NDEee{k~qkQ z{eeF_v5m~Vq3P)jm2+dF)6aTvycG+d4bv27EiGw&v7AP*YUS8 zte+lC`9EaEnFf%koE4^XFMuy5c!Y6N&A5G8|7mFMl@5TDw^}XKZVo_u=a5^IiGd|0R8~4GT zx5o7=O{7>aY{=^K5}EcYdHPgUa`#L{HrMH$miPBne0wchk`~bHCdKgpqlzgkEJnQ% z59Ena&LZx8|0OYIz|?OxrE-8ZV6twOF{6=POSsuzI$cflvu_t=)8~3CK>4C zZmn2YkHVzO~<1XI&6*fAZN$+6AWScmq1@g1m!i zq-?NSx%T$=(FcPPB=&8)Gc?nge#G5d=k8sdl1i10p@qf8w3t9%?A>!R=Qc)$`b|uJ zoC&L(515&Kq{kSkUY6W*h!PWmwh$)XJ}FCmls<9)0f|;S?pmdZlj(xT*(Fw4-J6yUl&j z{OrUTuS2s%gnTktl&MvLJ!|3Q=8sGUsvbz7^lVHWSdDrQo(H@TzCw4JMsysZMAdJFz?s@D|Yd|#1 z^0qAVX{ZUY@a_Yr%t;9JXnm+qQCb=Xr|8TyZMTIMh=<#i2{!|A&2_4dYFUECEmX&l zN`ZS1P(s4OC@Ber=j3Ra;}2W|=C^JuYdc{qR#My*+U#I9T6>V{r7-swTTsLlU9#aT zBUfK38SA>C*Gz^=&1{d>)2L}bz7taFJjldlUdGMluyb3*(5&kCyBDlx7PlK_XXWnt z3J50OQivG8s_O-MqW_FFWeVp24DzU8-6ICak)rWl&D%+jZstlynOhv^ zI77H^CoOCY6{xz|7W|C+`Celsr4z&fpH7$s5c_>@wHZ#YeHV${Qp%X|vTc0Y>_Fz1 zW8?$-UWVaLD;--P^Pi^npCp=YHk_U%HnAH-+Z)^`uxIW#r@F;DF>YR7Esq%VWKMW!NNr{-)y$0LtE}kRy|8fHngloCGHt39 z_%&e4H4~?VQu@|AHg#0*EjkjbzWsQ>!pCXXg`oiUnMgOkOq~G!xD>JQSm&rra^hg2 zM{F$OOlcne{xyAl?04_p4d2Nrm)g>BJ9jGNc8fE4Nr{Z2U-jU9ey8M)51ogrkLYF3 z&AJ>t5P~C8##Itk%vHa9|B3xc7@Q_6;aF!FdcxATg^X<&B=znRn4>eP^F^o9H?^HA zcm%b_>hA8};wHnTNxOrZqS|r~2(I3sUXt!{%>PX63pHh4>WA&lL;|gquMFd>ro3%O zTN8Ts<2H?#eCcN3%XKSeJ+1yBxome%ReH@koYtH=jv>H3X?%!uZz@0ft+!`9a3G9T z@YRg3CogW1J>k)Ge~>V^8Vd{YQfx$$@WEnV-{?B>uue6(kLg{K$r*(CcS>Fxi2CLc z2%dOuPDr`1rw0H{`X;5bo}A)4qw#b-dk8N!GD1rCRQ>j78Pziv$JO7RxP^ z^GW)?6Ka;nHb)){J{Gy%hFpcpla*REE|4haUFk)E$83)zqPcj^a9rf$(4=jXa?ufR zD<)ynwX3g1J-N&|%4ZH-4G*$Qp*dBh`4yB=(uU4*56m! zLUUA#><*=JeO#OCdetO~#D4OJllEI;N-GMl=3b$+E_5;_8xEu1lPskHDDw9jc z)HT(G3sv9SS3y!GjVg4qwS2@TrJ`KA`;Ll|E1?t}|FJ{r`A-5wj!a#B5WP2eh6fb- zIF@hQM?qZJSn1rO$=8PMJz07B)NXMsUnJ^itoRfLY~Ay?b_>0I=m+XFkW8U+7}dmv z&G+o(*ocW>!;%ma=c5&0QUJCI%wxan`r?}vCc-4^wT*5^#@>`p#W1OWV|gWIy2(|n zJH|yzNJt;wXBleH;TawU$%Lb?<>;{_>$*;Z)qnRze-}`sc)l&s=K@xTCwIZF z?TBZktK3jJI1GG;I=}66bi|1}1~ePkZT29i!?b$=dX#=80@MSajZ;IdmcX_IW7LrmH)|V3GY1w4WM+{A29&fw;;3?Mp_WI{mRLVLem@SNO zSjv8&`0C?@YLyuwF_SWzV_X@nXela3gU8_yLCG`G{Ks#4)2l7%lv&<027Y!Kav;hP z+*sNZNq9g+LW^E`G8QOLNS|PVIttCxJ+BuZR}}P$kovy0F|qyUy50exdoqt8QTIb! z%(pGuHasRqgUQcL%8_mRyT09|x~xNRT#C%3C~Ox&N5sZdx!S4qTW!0a5To6QJTxzi zRPvc(@>A^`2r)ay6;M)i$v{H)%ZE!D?Ktb3MVbdNsH*oQR!#c77uH{E&tHdeUD!(F zLWuPVB@O*g@xNevj{ij4?9z<;q-!g%_= zec(p3c)K0!`jbk{NJae6*;TFZ<$$t}weFzp0*B##sf;gNk7eG91BtXk&_*1jIxXn% zs(8ZzHmGMUf86!g@5KSnCN|y2dZQR?lIO~AKW!eeN--TPFK3?61vjyK7&7E`8qoXc zp__w}=Z*E&8SElBPN{!@3q{<16wKk?nFqc<&Ec1DfLS7SBrlP?ZpWZK8^xA+ilH>{ zp07yr(}O~>nF)#B(^57UpJMlpZl(7wQa7#HLpZ9Or$40Q}*S4fqb?OAs|(`)7`@2c-%Y*Io!zjCr`{$M}FyYm758^^z? zUN3X)G)%AE!o}IRE-E~3oGP+U;3VhtJL=-Fub)25DB5&=Bu?HA&T+F%68UP1u@|al zkZaHRzH&Mh?;mL5qZ<}QVe3Zngs`qtY}YeYJx&|&iC84mZ40)R?C3Gl++dDANe@Np zC*Nk!!^t3glIMD*>-vBk#w!2YGd64o`4&^H8~MP-iyPa{%y2ZjeG)KtJ<8teM+bT}ZqIJi&@K+P z6Oa0QRw}#lYphKgMsf4?P=;7Sr3m)B*hiwaeuTT%ZEtS{-In|m0Y|bi3x33=+qtKM z&(qGz1RGId@=4Jh5rksR2PFugmh?aQA7RayZZRVrG{Xw%5%)Ks{g_W(nP&bEg~_TK(FTx$6!xAW!oO6*n!w<8q8 z1h+QViUrB+R!ui<8nKIq)(8ZPV3V)Aode%x3Er`6`=`v$w7^#z3b;$ z{lpCI*5jHX2?kLrG=?5wn?DlYNPcD|A{X|C>EiCqWy4G&B5^rNcd!H6*&`)8#m-z8 zEs-uCdqkuPSFRhQ{A?5N&35vW=bic1>4eMKLkQcqvHfAHb=Mluv7~_#v5`qs@I7I? zn+=0Gkv&F}ud&~cvKF%|4!&Kl-Cl|O>DL8~hg zt9|QEQ0K6lXYsdL$+1p#aW1*2{RPf+Rgx3i9Q7~z8+|3pY?yOyrnWz`@scLlSv#9V zmmNmuv4tv!ESI5t9E&yX*mr~bL&oNK@q{h3*r-8HW1 zE$h7)+ggCF({bN8YcBg4uBhX8iwVSs#YKVw^Jv5$W(x4=PX^G5!`HsrW5G2NEZP|H z-D3{w3)#GZU8-hGJ=ECnxV!+83$>>^zN!xkWNbZS6e_B1Y@9}XW>=!=k>r4o4ap=A zxuRTsgixizQ4YSlFgt|wFU91PHwKt@(PL3a)$OAUc^Y_SHg^LjUp7k8T!-|X18#`; zid2OWfop$Y+q7JAz_C11uX7?sW!>47@3~u~$W_f=Wy(HRn~bPi=P05ShRGK~Niyoh zNr(;h)$FExJOA3|NM72dOnb2&j6RXzI%*lwyI(eEe+j~wT)DL6G@F)31nx6tZ))vG z8SN~eiS>SqX$uwEKD(pOPimtjg;7r>&SF$E>-~m40YQ0vEtJSX$|zZ0tYwC-h`!;` zsJKBn>idV32RAB*lF}qmY%aT!&868Mnf*ymw4Lojmd9WZ6{m5UbNpW7Lghmh>w_0I zylp(8xWzgkV3W48T+b%g;@Hh6EP-jjUChye%_{eGpRRCen$_61Q^{S@QTN>2S)p51|)sS zP|4Z1j;=sm{^o1XzAzqYY`v6ob1_Y$eAWXn8~ym;b1JDv?R?t=^8<>*UTwCz+}o|( z`6fk01}#mosV&nitC@o2fUc00HaOzk>mr2Oy4mI~=`q&Ci}Ql%+X6At;{uk(H=GZ*H&FPSFolH;fJV4yQEw*r* zuK}Y*L83Fgz|)cCb5+yEPKl1Zok-{!Wuh1o@z|loUejKAP15amr9uA`UZ2GDBu?txo6t^y;KdKtksj9qqPtZ%-ePQH?(A4485C=HNc(E56gL+L6s|Q@E{wLto#U=*lY!Lu$uD>>YO;9oYjZ>Ipqyak-!# z9qUa-N_)AEBRY^pIzm6$dTwSwQ0CcF=Ts`82v-(?kfC!|PJQj7jWK;Q!oj@H<)qok z&aGvbiXGlnBI{`#S?3m-D_d}9A9KU0cuv*5)~JiML-y7VD5087VMmT*Vx>lUyPqYU zd21bRl=lHv^4+q2e8e5ZnGddRLfv4^N)0W&IqWXeKwI_VLo~LK9p!et+$;4P^9HAi z9qL&mpzu~a-;v6yep03N?>Z0oDa3poDU+BI-6_UA@@c9*JyL(3yW@ z;PkCDFj+(LjIo^Pv-6+h-3z|-nM1Re!GSmUU2pWX(w zj}MFNvpM0N9@DM2~Aw|weN)P0uQ=6u!l zGu7>Kw#u@b+4Nt&;-T$QDD?9TYLl4IRfDUL8GQ1Dxlwf;$|5An9?kyxs;(gc!~^UX ztg3IPX?0!tLQcM0i!bGczJ(HZ`<(p^F5S~4_nfse^360HV?N$6;?3xC*!k6XX5m9J zYKEIh2Mu2gQ*8QKn8>Q$J@=p*AY$ZaBH-NU#EMgGO?Q=2T(6z|;-;%!9-&2Tmh{ah zL)U~()vyOnIgwOd`uLG{`?JyO1%zWb2F7M?kn&X14k@fY_S()w-ntc|o)?161%V=hB!p4&3|;$xIL z13o7d$Y-0Id)t2{+y?q!;RfUpKu^YluU85%7N3oGsOmghy*wM~-Y#qt8aW*ka zP#)7xO95TV_WgNts{Hg|qJ+E~S@84{v#9b+%o9@7JB;<^tZ!wlb-Ud8Kyq@n?cF!W zheb_o{pYZEx!72WF3=Gitdye_8%|+EmFuPIx%OPVL_MqjHW{;BnUX~3z_)z$oD$YX zRomw`4Lg;1B-APDUeRHXRo7n&JD5Zn5*>WuO$7a&QPJn|%EGt2cPVY+H|)_VQP8@; z!L+*rtDiV>LzH5WV^a!7E6C*~tx*G}X(p$G6joFA`}a`wv|=B2YV1z5FSeFFT;=z% zoDw6oOy{msj=w5j z(ls7CSDk|ym(On9p>({*(&mts0x>cwf$G-!dU|=;>=7 z)K+@i+vu5sn`wGarN0SD#egfXz(gfqKTv*BIuwWrukYl(mvvsCOPceGfjNEM<2$@Q zeOa_LGBrslPls%Hb2wPoeK%>_nCN6Yq-~UFpcQv{GUicA;59+~2Gw$LM3&x`e_Wtx zE9!uB-$5UC$E_MA!(%&Gd3Tg6>hBdG(?V~$s8Q9@6U-f~ zatwDt<~3i%!eDfji*R6yJ<*YFnpoZm&waEy74=S^u=h@MOrbVZ+m13ZvV|y1wHqb6 zqQ%6XSk1fgkXF*2QMTdlVUEcS(`rc{Q1laf{<33w=Jc#)S#L^`_v`Gd6El<%C1VE; zmr8j%lH|Iu-=0f2_|C=HiEPC82BvA=K32Ni?E~Y%ew1-B)?MS-Vjv4gS;h1oc_Y{hvsi@H_zWDJ42bRZsw}N zAuIbW^hs|J*Et|-OP}2Gj*_88B1-(aK|5U|cc|S#p=!0Tqx+*;_D@uHOq-JrXo#Lq zDr@khCEopHKKeXofu>D7x4yBM(SDLQ!&`I9TAlZx@0?iYm~MGM z*k!ES$HlSg;LZ8BuRGrQ^PZcrV)q&*~$>#{}QgodX*ErK=B|PnJ zF+F9T<1ur5%0!>o!e8L^Rf4m`O~hOHN3GD?F?m@pToP<*XsgcTY|<4y)B8$DyNWyT zP9oOohV!{r%_^79J<7dxXLHKclT?mJFjowH8~53kkU)N}^VsbhT6bUPYzQ@^^beyB z^1iEG@Y=z_C1tS8#rtbTZN~@Bmt&M;-txRbUHwJGY`S!9Ttod|q#1Hcj?I7b*sCz7 zFr2GynZ`<|o)rZ0qpy4|_%IPWNUBpupynR#{xQ7MXscs}Kmm>YyHa7%I2Gk2_BT<7zJ>Og*QdOV zt=3G4Ic!Q|`S$BIpVQZh+75d;dEF5zI(+roo#yiSk5}h=eLw{ob|8W+G^Ih!0)%Uky(QSB~}c+{OYV||i~iB6rE_k!Pe0|KvdLffB)|o?cX+f^$4W46_Kwq&bNb4T%~wS;EQ3p= zZTLuSeVivxmRVaJ0z6jektnQFz%#ykuKP%;>}?)XRvOh4yqX|&jAXo`+3=2_zF&Mk zizzxjJjz_lPhsewXAK*<(@ED{mr9C|$0EvmZUezlDzh%x-Wb+-vWkh?N*ib2$gxxf zxOF_{Jy$@qAjeEzX^^8veAx3sx3 zdFy8R>m=2&naM94YEo#Gi<8@j)yQ^-p6SmuC}V%x_1fk|NXcQrl>7ttcA$&7_0`eF zA}Zb96NOy&>zF=1rfqD^(p0{q?fpnoyQ-LPJ-te-0Aus*T>EwJhb?C-KU?JxCq>_< zF)zFkUf?}fB@-}_JkSX%Osq`H(dpOev>`0<2?^$VO|AyACAwt3N(Rv~{Vz-_hfD(| z113Jd*neTO0;lGO8qT~xJ|Q3pFxT14US>Ts5f9p@7%b5mc$%BgrLsLu+VtY}IN@Gz zb)n`IyzHiu){0r~;r;62JGa-g$jQr39k|(b%+iMbFx-)EXgxaf z#&BW$Zsp*+&mm97`-=|up4cvvKB1iM(9xlgCTDkr`2pz+mf)fTh0B zHQV#87#f`ik6?co&26(e1y^E@vyN-FqgnG#Oi2GhVw@u{cdrl{+>iRQl zjuUz8BsOQF%NBp|z_3_E&)gzF*>w!?)5XUpm|Iv}e3mTSeUk^vn~saFWw3U0|9Xat zvF8D;*7*%g;^_>JF(;1j(y0fLVRosD-yJ-h5KC>LjrA1>?2~wyguwR^a*B%L2u#o)2#h!S=t%1Ne;7}x=q)nP%BVta_Q^!B8WYPLo0X$cRDioXvUF;*r7u$x*qaEhjQh(LCqsy+fES zx9%ZkfHqJUJu_d@6wq?f;W-^>orSAm=4SFc_bpJ;~~dsMpp;*-ht6LP`_MkVzqZrtNNA|_h8 zL0LW|PVxGf)ZPvGH@cX*xlfWtqy!9_ty@+M3T(-JodJ5=W&|*3;MPs`aF@!g2CRGXPs_Z zUFh_BU6`XARvzpiE1PoIXV?B=r@4kt#Mj7*OIl>*<@Y%|pXEE_nD(^;L*1}XB5Bv_ z{U=DgO>FXr=5Ope#u(~-Dck;HPn%zUjKf3*IunC?LjUDu?0(GErkb_~m&&YU(#Oc! zqfjl}O=lnJ9^LItV^BC(%#N1lpqxA$nD<`LNv%)n+5BGIwbn2vLzAfR`FdAcI=6j7 z*$wY4HV19mbEa$(^-3qBNzf%sYrOOL{p7F@viTBQvz?!hMctJ5HrX@r;c|&B)l9Kk z{Q1*~a8LBvvkkR<=xi3$*nohiRteCje6 ziSfA;uQm5uT~?h??HlM)o)Tw07JRxOU{`6=!Mt zg#tIR zRMQ*xB>IIHQ(RF7QI{AsqoZ>8Ur-qE!iv1`kY}vrQJ!M6j7dT31*%@p%O}PaTQ2!A zm0n-akq!vnxu0)?FWsgm-MJ$7``SEN4hg@f4eWNDOWira*Sqwa!MWqP^83)WNP%P%ijd7jMzND^q1XvN2J#_7)gEiX6eaQ97Pcw{?$6!jb02 zhZA9swuLMHqr1&4pqb=-rHDX!2L;nuVvR8> z#cxi^v9!yEE>L_&{>%PLZ!@S1w-H`0ah9?po80=W^T=rcUpo`3&Pl$BKgrj!Z>}&@ zhx~lIF=clhd>4CEIPs?I)qu;{%>MJwOuiYvAKpdd|FjTGF>+ny;!7vuhuw$msJ8HL zYb%3CG}UO-6CRpJ)ZR{I79qCN{sO3vEZ?v(oz`s! zeIB%7%xS2bxa#)FX!Y4CD{_9cVOY?}Xma-$%ugw`j-3&@yyXFlZT^nbj*8QSySuZxkL#N$P6l4%&9ZW)JlSE}K2*?5YdSBpD$$i;uWDdRMWdN+av;Y#p9G zcBaj;p`yZTuaCY#oS@AfWp9&=>o+oYgd0DNHf4HLEN1Grzb&_ogTvO`pv>kIMAGq53V3m&o=c9;Q|HJlU#nIQfy$4yg}h-eu+5 zTSVLwPY4$s{AMq&XxC4WW7rjUDpUqN%4qzI9Ag$(UwCV0+&Z6$uf-*MO~nsnNrflA zQ z<|!yB_%b)YDT4H#H0sbt|FBe|p8dmpk+)_1A3A&{PvX`XZ5~wNbKyv(YG?8qi+@O5 zNAm3og$l!4iJ3Z~N}9_IANDv>IDT*~s1q>kIc&WlA9IiLYsF4O#^%EnH#M;}!hG4& z_Us`u*(@Aaf`e~x+h}C8+b3Xz&f1yWw~4E7NwIetdZ?x1k$UE6RhJ{-`+T*|{zN(Z z=aykLFU3sa-H5w~PFm);2v)so81kJ;ix}rUy_qAeG35vOS`+Z?60GM6&bUNz}2sqZ-P)6x#&egl4;# zTZ|=o(WU_2ev^*!GiTG|h7zFK%c|BCe+o7O0cp+Tg;mg)z+cy^xZPk57W{ z)Q79(<<0Njy_;hsdptV%qI)jnBTvxLZN0Po6v3qome%*wa>QlC1A$j$~# z4U|g&BWCEKqmO7cCVid?taG8goNV66gStzZ@!`&46L8p(^Tzm$S0iy0hD(U<>;|OT{!p2bYI(BG^3U7X0C@H zzr8VVAibzIKVN;~`3nz=0f}puXAXT$-AQZQV=BII-Pwr6kftv^N%QhGJ{>CZqIsbs zd2MguxI4xR&wYR^ey2c6`EiqxKnN8Dvolf5O~OpARWyUw<)q1Cmsytu5yvjW$N zJN$Y2|10fEJ1nGsAlPU|J!_HanqeVmXmsqH%X4dkAIJ~=v)!t>sCrno3R{?f^r>e8j(2+GW% z<40NBXOC|&YpH2I?Sq+hE(0gs79=2SqX-$!^o zU)PK9%j`8A@FUlXW*1LePJ~onV8xT`0a@fH)-y#2kWH}lYIzmj@ZU{}m4a&>mq)br zU|JBBK4JDw4{MphE<}tlQjV;m%3a=~GvFSODTt$<(wHzssFNHK3qnPxaox-YdJhhm zR$MIdwIfdu8F9$>h;)93QqeMSZ;gebzu|?!R5UgkPu50pJJYzYiZw7iTR%Pe3?=CJyVd}uq;)9_4q*-d3z18ww8P~cpytc*wJ&) zidoV`%*6kT_dK^|;mLw(v#2jh3tZy4w1t`W$fN`zJ&m!|`eOLvL)$MGhGs-jn%%Qv z(k^F|;Mj4q0!O^!#1n~&o$%jAOAF_je@GYSnEY3J%9}$jGzXKWkml55#hx#BJ}0F2 z!?N{1h_lp?-URTLRqZEi+QElk$Wjn6idsUT<+@~Gq z^L5XZEEh`zES)u;6qc)?1^Y@&VDuOB?q>?(p64EInP~p2;?7@<*nCE;!@7H?UAFkH zQN(}C~W0ynTpb#TD9vz>h+m3Wbx3$LHsia!nGUU&g` z2`_7G{E)^Y=BeC`cyO)jL(_&Izu<_wIxAH8)s=|)V-zh_W|Ik+87wNi?fa&Up00qS z8M}0SV&9$|E?9=#(&o7_#-fofD=2nQWpZU78zA-oA}uUROGHGZvPUJuCB=CcIUq=C z>A8nm{hy@5c6mDbQ8}N2cZn@CljBPQL=L#OHE}Q?A#xh8>=K>ue(VX31Wh zpQ}>F{+H6yist4p;yU5de9ttFLR5#*q3n=ipTDUcT|HZoZ9Wc(yRPwUX`QcoFe71{ z(UV?tANC16Z`D{czxQqa|x#h5cVc?b;@W{+(>Q9aHXo8J6Vj zF3C!Z;ChxEM?}iiudmiNN7pwi$cs`?Cf=3z;laUa>FGQ{O}yzwtDUMXaac`&CS99k z&Lr^$$Mgl0SdooRD$DiP@Yjn`;&5Y=tBLjbR!Vw zNqt`!$Q__3Q#=)R#i>ieKy=K$*WhCY=CuY}dpB!X@UW#UxWMa8ER#pAA=gHE`N6y5 zxvsiJ5{b0C*h*z#X=!C=2WM=zNjsC9U;jfuTM5X(|1OixWrEJwGfGMX+EiEXwOm&` zxt7`iW*34{jb|aEiugnP^KB#Fcpg=-oum=C-ZaZJ@<0q^I`rkWzt0pqTIM>a#nTm@ zhLKNEs|8A#p&#Zrh@4BaW=U{I)6mZq^+JwD>DCvyS@%qZ`a0H8X06-ii4qK6_TkcG~TUM`jZ(UNLY_1bX02SuX49 zQfbM}oAg?ww}5`p+&Q0=fQEtjvuB7>FIcWnqB!N?%1T9uH{FB6 ze?YtOm1-*ll#8|&f)!i`ejydwMws3ot=wg5H}a=Bnac_KW&a_6V?x1%1NZdwsyVg1 z43B}1R!S`Iqd@4@dAA2=EXu*q-CGN18cdht9ir3G$yZ;_2L;yq;Yag0a|=9QDAsXtYCa@&DiS+vBS$qqB6H@0G+BR^ptF6=Fjv)?8iLFn!fz@}`!KcA7?Y&wZ~^yLmUyeH@vL z4?J2k;oY8@oplWjO%G@=4!ClF8bvJ}th zkO?aXAC9LLRGLBDCVdrQ4oipEA+w~9BTv!g#tqNro^lfZ*+b?mvPPWMN!UBK&y|XH zySMwx*v4fKTKgJe$SAZ8=yQCXvg4b`2Oe+H%a3e<6)oJ*{A;ozH^!mA;8j=!8o;Y< zH_>{&AMe$&$MA&@kO{2Jqt}!Ba?)={PN)*op!y!FW{VY-m3Ldh$>ZT}OHC{Q5mvfL zm@$j$RQTPR8JB{E>`{l+wKRuEI~yrEe`ST6v#bWI1~J~x0T!jxT}Lme*TMIcU9Gi%x|L%{Sl6GKd0y_sSHdK_vhob z+i76{5gU*b=RcT3)pVm2Baw9p@9jTChwYP|g*Qw_JwNqx%oN>~tn!tY|FXZ#ywTaj z)oRQHQ&F#@qGVl4J#4j_uGMvIw&RLCW(^iImYZgI>vOxYFG9Uo35uQkwAlME3OFBk zG5rFH#ew_R^>*p#LLpYa)ptuCx{+m{5u-%i*qhs#HLJp}89zKv>vq#i6Cuhl9mdWC ze<|TB`x;8PBQ{l2Q`7b5k7!?C-;?+OGIQ9GIvDT*-0vFA&7HPK)_>|0H@_pN0gKh9 zqRBJn%uv(%ELi?nTESgu7ZxdY`MrhXW6Ti<+uqYD&fSzE;B%JX!-7q7%mVfr^lRUuv(u+7b3LP$agF31;Z@L3F9* z)!PaD<>KSKO64SAsu#<1F)LXG{OT1Qxz_c0Yk9nj=b5vB6%2W*{ z6~V8BFSJ4VA}E?EK_33z@jj)`=rm8nl);+J_XH(gsk&_o^T*S;_5}V6tO)##%CnOm zI|Z4xIRr#_zm>gjsfbE}=Z_8_T==WD5P8R_k3J`=rwf-V&3n(-ScCYdF*OH0i0l9& zRTi@;);FPPjv0ew&r(jwCWmd6Q%er}S-m?6%fAxB{u9#UnkGfOTkPGIdk;~n_Vc{8 zy|HA0XW&py_6!q;*96d@?SXF=gve&~XUL53<3p8;@{YBQ8{fzET{}2I5dt8V{OoT- z1MY27r#*tT7k1{pzL4>&L{kisYl128s#5{$S|RR3s87RJ1+wXPVX73NKhqwVQokp* zrsW64aXZ|X?bZ(JOK`{YMzmaQ-Ng(hDC%Ry{m|8Dtpiye`Na}vNehqWMjz+iW=*=z zAFQ9e;wwLC?|RP#ch5%&Okqj$w<#sXcXU-+46R5ri=S9=1!(EM`KocRZ8LCW45{-WdR>0|RLh3kPgwrUeGV1DJS zv>b+J(XcBV{(wn_FQRF^-q=}#yb!>GXDl-}l#7~>8X8z8V1=^tPPoWNvX#23zpGvJ zqFslAh5tEHsZ|}6>Ymuk0Gd~ zw-;u-^Hc2vl0MHm)H3zUW6H(%g#FX#b)Bn%!ooIG(pA%*@7va8LrydYB=>fW7lT=+ z02X_HvP$%WIxyT(ysvlW#UO{LDOA^sIx~sWGj8^vo4%a0%D}q}%2e6dXe{hhA@<3@X zs7YnyLdy3#9f8MCWu_()j6qb9K@Au!O0%Rz9qP{Ug`x8Qx?Qb$4I6+o5f zb{OdC*Ftu>suu;L8zm0btGn$3&$D_z)Er9XGu)q8Aydde=IIQ=gOolMt7Aqe0hXMPhN8hQqr^Y@;*+Ynyp%s3Z!NS8O;2-C zQU`haHe%?K5i>4=A7r*udvQdrRI8P~ zKT<9{1QPxppiDq>x4~nF#x;-!XuBl)^zG*_NZ#g&>S3eiZ*WC_iPbX;KURw>z_VwY zpXr2SeosJr?M`6}_AY}dzeQ`8SuRA!AT3-2lg=XYoaI_&l|$1zstv*To$n#&kwHp@ z*4dRa=EQT4T0gKOUYJcYUYJco=LMH#0{qU;R*3H7lE|oB`+|vUI&fFWwT#yF+>;jW zHoQ#M?U-}U>7oQJ^Gn*j*IQ)ri+=m*I&z_{K=*HMY$<+D{Emq9J-}Md4y3KrGbk;t zc7njx37$T|*4AbJ*a59>x?+LIQiLF^r~dBV^S0oe;?U$t-tyoUx`W%4Fxu4AG~(Wj z7eDpwq9YJWuCZyBg>OSBVQ3|ncXNviV}B~RS{fc_P{JQCtYo0Rl-F@XMJ?juT9Jm< zg+Jq_-J(4>{gM_yI`S@=@#7^<(=xcDUX&d}iH}3gDfYeoeR$=;LE7DO&r^SF=JVWY zgk@IcTCUGMX0{|uC%vS;qb?$)6$NFNw2ElBwp|n{UXl9LAV#RXy=oTCwlQo!?dG?M zqYb*1nM!c+Gb{e#h9=c9v_Y|N0k{!&&Fp)ZX`HyHi@;7gTn;kzL0ZxwQ3lJVwyR$qw2#}Xir@l~-czRooz$=z;^G=B_A^l<@{oZhf$uqAJ`dVTFopgcr zZoC!$!%hAf+Alt;zgjg+7F~>|k5#pILv3d3;UhQ3TJ+_YzlY2wDFR9KvyWsXzA*yR z@eO<1+krO&J+BZv!=QLPRPb2^B0?#Ufza*}u>|=a{v8~}@rmjMTRxgu`xQe~1mxE3>LClKoZFVb_Fjux7Z(E)#K4+Cr0dx3`Zd z^ybB-uY~`O?`FQ^u>O1FA72XWy3;gL|JT0;uDSqE_2jXa!(K+-W8eB*859^8!W;fC_im}^wW z+S`|JYs9U9zcFg;bKstJf!Z(s50{HqsU%gO;i)OjQ5icvmyiC}j{ov)@t%hpw;;Fv T$v;-27zEJOGP+x$=@|KcRm7|R literal 0 HcmV?d00001 diff --git a/interfaces/smpl/templates/static/images/key_enter.png b/interfaces/smpl/templates/static/images/key_enter.png new file mode 100644 index 0000000000000000000000000000000000000000..19e00c95f0946fe060498a7ecef774e823ebc570 GIT binary patch literal 3511 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 literal 0 HcmV?d00001 diff --git a/interfaces/smpl/templates/static/images/nuvola/kgpg.png b/interfaces/smpl/templates/static/images/nuvola/kgpg.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9517a00778ce176bd5f649479c483c4dab3822 GIT binary patch literal 865 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 FV1iH=H8TJJ literal 0 HcmV?d00001 diff --git a/interfaces/smpl/templates/static/stylesheets/colorschemes/black.css b/interfaces/smpl/templates/static/stylesheets/colorschemes/black.css new file mode 100644 index 0000000..0b0894a --- /dev/null +++ b/interfaces/smpl/templates/static/stylesheets/colorschemes/black.css @@ -0,0 +1,113 @@ +body { + background-color: #111; + color: #777; +} +#Container { +color:white; +} + +#Content{ + border-top: 1px dotted #222; + + +} + +.left-border { +border-left: 1px dotted #222; +} +.right-border { +border-right: 1px dotted #222; +} + +#Footer{ +border-top: 1px dotted #222; +} + +#progressBar { + background-color: #fff; + border: 1px solid #000; +} +#progressBartop { + background-color: #fff; + border: 1px solid #ccc; +} +#percentageBar { + background-color: #4B4545; +} + + +h1{ +background-color:#4B4545; +color:#fff; +} + +#title{ +color:#fff; +} + + +a, a:visited { +color:#888; +} +a.config{ +color:#666; +} +a:hover{ +color:blue; +} + +.paused{background-color:red;padding:2px;color:black;} +.downloading{background-color:#00FF00;padding:2px;color:black;} +.idle{background-color:yellow;padding:2px;color:black;} +.spacer{color:white;margin-top:100px;margin-bottom:100px;} + +#feed{color:white;} + + + +hr +{ +color:#222; +background-color:#222; +} + +th{background-color:#000;color:white;} +tr{background-color:#222;} + +td{border:1px solid #333 !important;} +table{border-spacing:0;} + +.finished{background-color:#ff5151; color:black;} +.active{background-color:#4aff5f; color:black;} +.waiting{background-color:#fff44a; color:black;} + + + +input, select { +background-color:#232323; +border-color:#3a3a3a; +color:white; +} + +tr.High {background-color:#111;} +tr.Normal {background-color:#222;} +tr.Low {background-color:#333;} + +legend{color:white} +.job_progress{background-color: #444;} + +.pattern, .result{background-color:#111;} + +a.unselected { + border: 1px solid #C4C4C4; + color:#C4C4C4; +} +span.unselected { + border: 1px solid #555; + color:#555; +} +.selected, a.unselected:hover { + color: white; + background-color:#333; + border: 1px solid #555; +} \ No newline at end of file diff --git a/interfaces/smpl/templates/static/stylesheets/colorschemes/white.css b/interfaces/smpl/templates/static/stylesheets/colorschemes/white.css new file mode 100644 index 0000000..b33594e --- /dev/null +++ b/interfaces/smpl/templates/static/stylesheets/colorschemes/white.css @@ -0,0 +1,108 @@ +body { + background-color: #fff; + color: #000; +} +#Container { +color:black; +} + +#Content{ + border-top: 1px dotted #ccc; + + +} + +.left-border { +border-left: 1px dotted #ccc; +} +.right-border { +border-right: 1px dotted #ccc; +} + +#Footer{ +border-top: 1px dotted #ccc; +} + +#progressBar { + background-color: #fff; + border: 1px solid #000; +} +#progressBartop { + background-color: #fff; + border: 1px solid #ccc; +} +#percentageBar { + background-color: #4B4545; +} + + +h1{ +background-color:#4B4545; +color:#fff; +} + +#title{ +color:#fff; +} + +a:visited{ +color:#000; + +} +a { +color:black; +} +a.config{ +color:#4B4545; +} +a:hover{ +color:red; +} + +.paused{background-color:red;padding:2px;} +.downloading{background-color:#00FF00;padding:2px;} +.idle{background-color:yellow;padding:2px;} +.spacer{color:white;margin-top:100px;margin-bottom:100px;} + +#feed{color:white;} + + + +hr +{ +color:#ccc; +background-color:#ccc; +} + +th{background-color:#4B4545;color:white;} +tr{background-color:#f5f5f5;} + +td{border:1px solid #eeeeee !important;} +table{border-spacing:0;} + +.finished{background-color:#ffd9d9;} +.active{background-color:#deffd9;} +.waiting{background-color:#ffffd9;} + + +tr.High {background-color:#ececec;} +tr.Normal {background-color:#f5f5f5;} +tr.Low {background-color:#fafafa;} + +a.unselected { + padding:1px 5px 1px 5px; + border: 1px solid #555; + color:#555; + text-decoration:none; +} +span.unselected { + padding:1px 5px 1px 5px; + border: 1px solid #C4C4C4; + color:#C4C4C4; +} +.selected, a.unselected:hover { + padding:1px 5px 1px 5px; + color: white; + background-color:#333; + border: 1px solid #555; +} \ No newline at end of file diff --git a/interfaces/smpl/templates/static/stylesheets/smpl.css b/interfaces/smpl/templates/static/stylesheets/smpl.css new file mode 100644 index 0000000..ac510dc --- /dev/null +++ b/interfaces/smpl/templates/static/stylesheets/smpl.css @@ -0,0 +1,369 @@ +body { + background-color: #fff; + color: #000; + font:normal 13px arial; + line-height: 18px; + padding: 0px; + margin: 0px; + text-align: center; + + +} +#hide{ display:none;} +#Container { +margin: 0 auto; +text-align: left; +width:90%; +color:black; +min-width:700px; +margin-top:3px; + +} + +#testing{ +display:inline; +} +#Content{ + border-top: 1px dotted #ccc; + + +} +#Left { +width:100px; +height:100%; +float:left; +padding:0px; +margin:0px; +} +#Content{width:100%;margin:0;padding:0;} + +#RightContainer { +/*height:600px;*/ +margin-left: 100px; +padding:10px 0 10px 10px; +/*overflow:auto;*/ + +} +#Right{ + width:100%; +} +#Right_bottom{ + width:100%; +} +#Content{ +clear:both; + +} + +#Footer{ +clear:both; +border-top: 1px dotted #ccc; +padding:15px; +text-align: center; +/*line-height:30px;*/ +} + +#menu{ +list-style-type: none; +padding:10px; +margin:0px; +position:relative; +} + +.progressBar { + background-color: #fff; + border: 1px solid #000; + height: 6px; + width: 99%; + margin: 0px; + margin-left: auto; + margin-right: auto; + padding: 0px; + text-align: left; +} +.progressBartop { + background-color: #fff; + border: 1px solid #ccc; + height: 14px; + width: 99%; + margin: 0px; + margin-left: auto; + margin-right: auto; + padding: 0px; + text-align: left; +} +.percentageBar { + position: relative; + background-color: #4B4545; + height: 100%; +} + + +h1{ +background-color:#4B4545; +color:#fff; +padding:8px; +width:100px; +font-size:20px; +display:inline; +} +h2{ +font-size:12px; +margin:0 0 0 8px; +} +h3{ +display:inline; +line-height: 20px; +} +#title{ +border:none; +color:#fff; +display:inline; + +} +#rss{border:none;} + +a:visited{ +color:#000; +display:inline; +margin-top:-5px; +} +a { +color:black; +cursor:pointer; +text-decoration:underline; +} +a.config{ +color:#4B4545; +} +a:hover{ +color:red; +} + +fieldset.EntryFieldSet { + vertical-align: top; + display: inline; + padding: 7px; + margin: 5px; +} +.secondul{ +padding-left:10px; +margin:0px; +list-style-type: none; +} +.kbs{padding-left:2px;} + +#divchart,#divpie{ +margin: 0 auto; +} +.status{float:right;padding:0px;line-height: 22px;margin:0px 0px 10px 0px;} + +.paused{background-color:red;padding:2px;} +.downloading{background-color:#00FF00;padding:2px;} +.idle{background-color:yellow;padding:2px;} +.spacer{color:white;margin-top:100px;margin-bottom:100px;} + +#divpie2,#divpie3{display:inline;clear:none;} +#feed{display:inline;text-decoration: none;color:white;} +.bold{font-weight: bold; } + + +fieldset { + margin-bottom: 10px; + width:100%; + border:none; +} +form.cmxform .label,form.cmxform input { + display: block; + width: 150px; + float: left; + margin-bottom: 15px; +} +input.schedulesubmit { + display: inline; + width: 30px; + float: none; + margin: 0; + margin-left: 3px;; +} +.addnewselect{ + display: block; + width: 90px; + height:22px; + float: left; + margin-bottom: 15px; +} +.scriptselect{ + display: block; + width: 100px; + height:22px; + float: left; + margin-bottom: 15px; +} +form.cmxform .label { + text-align: left; + width: 150px; + padding-right: 20px; + padding-left:10px; +} + +.clear{ + clear: left; +} +form.cmxform input.radio{ + width:15px;float:none;display:inline;margin-bottom: 0px; +} + +.submitindent{ + margin-left: 183px;/*margin-bottom:-5px;*/} + +.submitindent2{ + display: inline; + float: none; + height:22px; + width:80px; +} + +.select{width:154px} +.tips { + margin-left:30px; +} + +hr +{ +margin-top:-6px; +margin-bottom:20px; +color:#ccc; +background-color:#ccc; +border:none; +height:1px; +/*width:500px;*/ +} +#queueTable,#catTable, #rssTable, #historyTable{width:100%;} +th{background-color:#4B4545;color:white;} +tr{background-color:#f5f5f5;} +#versions{font-size:8pt;} +#downloadinfo{font-size:8pt;} +#help{float:right;} +.finished{background-color:#ffd9d9;} +.active{background-color:#deffd9;} +.waiting{background-color:#ffffd9;} + +.delicon, .pauseicon, .resumeicon{ +border:none; +color:#fff; +display:inline; +margin:0px; +padding:0px; +margin-bottom:-3px; +} +.imglink{ +border:none; +} +#sortable_table{ +width:99%; +} +.submitstatus{ +display:inline; +padding-left:10px; +} +.centerLinks{ +/*display:inline; +margin-left:20px;*/ +text-align:center; +} + + +.server{ +float:left; +width:360px; +padding-right:50px; +} +.float{float:left;} +#logo{float:left;} +/*#divchart{float:left;margin-left:50px;}*/ + +#warnings{ +height:200px; +width:100%; +overflow:auto;} + +.job_progress{position: relative; background-color: #9bf; height: 6px;} + +.normalheight, .doubleheight, .tripleheight, .pattern, .result, .heading1, .heading2, .heading3 {float:left;} +.normalheight, .doubleheight, .tripleheight, .heading1 {width:125px;} +.normalheight {} +.doubleheight {height:30px;} +.tripleheight {height:60px;} +.row{clear:left;} +.pattern, .heading2 {width:70px; background-color:#f5f5f5;} +.result, .heading3 {width:125px;background-color:#f4f4f4;} +#Keytable {text-align:center; } +.heading1, .heading2, .heading3{font-weight:bold; background-color:black; color:white;} +.feedEnabled{color:green;} +.feedDisabled{color:red;} +#speedbox{width:36px;display:inline;} +.small{font-size:10px;} +#Keytable,#Keytable2,#Keytable3,.hidden{display:none;} +.actionTD{min-width:113px;} +.left-margin{padding-left:20px;} +.line-height{line-height:22px;} +td {padding:4px !important;} +.center{text-align:center;} +.expander { + text-decoration:none; + margin:0px 2px 0px 2px; + padding:0px 2px 0px 2px; +} +a.expander:hover { + color:white; + background-color:black; +} +.expander-minus { + margin:0px 2px 0px 2px; + padding:0px 4px 1px 4px; +} + +.fail_message{color:red;} +.right_align{text-align:right;} +.row_hidden{visibility:collapse;} +a.columnLinks{color:white} +.expandColumn, .orderColumn{width:10px;} +.timeleftColumn, .sizeColumn{width:80px;} +.ageColumn, .editColumn, .actionsColumn, .linksColumn{width:50px;} +.statusColumn{width:100px;} +.searchBox{float:right; display:inline;} +.header-margin{padding-top:34px;} +.light-grey a{color:#999;} +.action_message{color:green;} +.fill-td{width:97%;} +a.unselected { + padding:1px 5px 1px 5px; + text-decoration:none; +} +span.unselected { + padding:1px 5px 1px 5px; +} +.selected, a.unselected:hover { + padding:1px 5px 1px 5px; +} + +#hiddenNav { + /*display:none;*/ +} + +.underline{text-decoration:underline;} +#hiddenTimedPause{display:none;} + +.server-test { + border: 1px dotted #ccc; + padding:5px; +} + +.success { + color: green; +} + +.failure { + color: red; +} \ No newline at end of file diff --git a/interfaces/wizard/README.TXT b/interfaces/wizard/README.TXT new file mode 100644 index 0000000..7ca7878 --- /dev/null +++ b/interfaces/wizard/README.TXT @@ -0,0 +1,21 @@ +# +# Copyright 2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# +# This is the quick setup wizard for SABnzbd +# It is used when first starting up sabnzbd +# diff --git a/interfaces/wizard/five.html b/interfaces/wizard/five.html new file mode 100644 index 0000000..1cb0285 --- /dev/null +++ b/interfaces/wizard/five.html @@ -0,0 +1,35 @@ + + + +

      +

      $T('wizard-restarting')

      + +
      +
      +
      +
      +

      +
      + + + + +
      +
      + + \ No newline at end of file diff --git a/interfaces/wizard/four.html b/interfaces/wizard/four.html new file mode 100644 index 0000000..b0feee8 --- /dev/null +++ b/interfaces/wizard/four.html @@ -0,0 +1,39 @@ + + +
      +

      $T('wizard-index-explain')

      +
      +

      Newzbin.com ($T('wizard-optional'))

      + +
      + +
      + >
      + + +

      NZBMatrix.com ($T('wizard-optional'))

      + +
      + +
      + +

      +
      + + + + + + +
      +
      + + + $step + +
      +
      +
      + + + \ No newline at end of file diff --git a/interfaces/wizard/inc_bottom.tmpl b/interfaces/wizard/inc_bottom.tmpl new file mode 100644 index 0000000..6792708 --- /dev/null +++ b/interfaces/wizard/inc_bottom.tmpl @@ -0,0 +1,4 @@ +
      +
      + + \ No newline at end of file diff --git a/interfaces/wizard/inc_top.tmpl b/interfaces/wizard/inc_top.tmpl new file mode 100644 index 0000000..2d14a5e --- /dev/null +++ b/interfaces/wizard/inc_top.tmpl @@ -0,0 +1,15 @@ + + + $T('wizard-quickstart') + + + + + +
      +
      +
      +
      $T('wizard-version') $version
      +

      $T('wizard-quickstart')

      $num


      +
      + \ No newline at end of file diff --git a/interfaces/wizard/index.html b/interfaces/wizard/index.html new file mode 100644 index 0000000..563744f --- /dev/null +++ b/interfaces/wizard/index.html @@ -0,0 +1,47 @@ + + + +
      +
      +

      Language

      +Please choose your prefered language

      +
      + + + + + + + + + + + +
      +
      + +
      +

      >
      +
      +
      +
      +
      +
      +
      + + + + +
      +
      + + + \ No newline at end of file diff --git a/interfaces/wizard/language/de-de.txt b/interfaces/wizard/language/de-de.txt new file mode 100644 index 0000000..affa528 --- /dev/null +++ b/interfaces/wizard/language/de-de.txt @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Deutschland # Deutsch +# Translation by Severin Heiniger + +quickstart SABnzbd-Einrichtungsassistent +version SABnzbd-Version + +previous Zurück +next Weiter +zoom Vergrössern + +skin Oberfläche +explain-skin Welche Oberfläche möchten Sie verwenden? + +access Zugriff +access-anypc Alle Rechner in meinem Netzwerk sollen auf SABnzbd zugreifen können. +access-mypc Nur mein Rechner soll auch SABnzbd zugreifen können. +access-pass Passwortgeschützter Zugriff auf SABnzbd (empfohlen) +access-https Zugriff auf SABnzbd über HTTPS ermöglichen + +misc Verschiedenes +misc-browser SABnzbd in meinem Webbrowser öffnen, wenn es gestartet wird. + +server Server-Details +explain-server Geben Sie bitte die Informationen zu Ihrem Usenet-Provider an. +server-help Hilfe +server-help1 Um aus dem Usenet herunterladen zu können, benötigen Sie Zugriff auf einen Usenet-Provider.\ + Ihr ISP bieten dies möglicherweise an, jedoch werden kostenpflichtige Provider empfohlen. +server-help2@1 Wenn Sie noch keinen Usenet-Provider haben, empfehlen wir Ihnen %s. +server-con-explain Die Anzahl der Verbindungen, die der Provider erlaubt. +server-ssl-explain Nur auswählen, wenn der Provider SSL-Verbindungen erlaubt. +server-text Klicken um die eingegebenen Informationen zu überprüfen. +server-required Dieses Feld wird benötigt. +server-number Bitte geben Sie eine ganze Zahl ein. + +index-explain Wenn Sie Mitglied von Newzbin oder NZBMatrix sind,\ + können Sie hier den jeweiligen Benutzernamen und das\ + Passwort angeben, so dass NZB-Dateien von diesen Seiten\ + abgerufen werden können. Wenn Sie keinen dieser beiden\ + Dienste verwenden, können Sie diesen Schritt überspringen. +index-bookmark Mit Lesezeichen versehene Beiträge automatisch herunterladen. +optional Optional +example Z. B. +button-testServer Server überprüfen + +restarting SABnzbd wird neu gestartet... +complete Die Einrichtung ist nun abgeschlossen. +tip1 SABnzbd läuft nun im Hintergrund. +tip2 Das Schliessen des Browser-Fensters oder -Tabs beendet SABnzbd NICHT. +tip3@1 Nachdem SABnzbd neu gestartet wurde, haben Sie Zugriff darauf von folgenden Orten%s +tip4 Es ist empfehlenswert, diese Seite\ + mit einem Lesezeichen zu versehen und dieses verwenden,\ + um SABnzbd aufzurufen, wenn es im Hintergrund läuft. +tip-wiki Weiterführende Informationen finden Sie in unserem +goto SABnzbd anzeigen + +step-one Schritt 1 +step-two Schritt 2 +step-three Schritt 3 +step-four Schritt 4 +step-five Schritt 5 diff --git a/interfaces/wizard/language/fr-fr.txt b/interfaces/wizard/language/fr-fr.txt new file mode 100644 index 0000000..b45cfa7 --- /dev/null +++ b/interfaces/wizard/language/fr-fr.txt @@ -0,0 +1,53 @@ +# -*- coding: latin-1 -*- +# France # Français + +quickstart SABnzbd Assistant Configuration +version SABnzbd Version + +previous Précédent +next Suivant +zoom Zoom + +skin Thème +explain-skin Quel thème voulez-vous utiliser pour SABnzbd? + +access Accès +access-anypc Je veux que SABnzbd soit accessible de tous les ordinateurs de mon réseau. +access-mypc Je veux que SABnzbd ne soit accessible que depuis mon ordinateur. +access-pass Protection de l'interface de SABnzbd par un mot de passe (recommendé) +access-https Activer l'accès via HTTPS à SABnzbd. + +misc Autres +misc-browser Lancer mon navigateur internet avec l'adresse de SABnzbd au démarrage de l'application. + +server Serveurs +explain-server Entrez les informations sur votre principal fournisseur usenet. +server-help Aide +server-help1 Pour pouvoir télécharger sur les newsgroups, il est nécessaire d'avoir un fournisseur usenet. Votre FAI peut vous en fournir un, un fournisseur usenet premium est tout de même recommandé. +server-help2@1 Vous n'avez pas de fournisseur usenet ? Nous vous recommendons d'essayer %s. +server-con-explain Le nombre de connexions autorisées par votre fournisseur usenet +server-ssl-explain Cochez uniquement si votre fournisseur usenet permet les connexions SSL. +server-text Cliquez pour tester les informations entrées. +server-required Ce champs est obligatoire. +server-number Entrez un numéro. + +index-explain Si vous être membres de newzbin ou nzbmatrix, vous pouvez entrer vos identifiants et mot de passe pour pouvoir utiliser ces services. Si vous n'utilisez pas ces services, vous pouvez passer à l'étape suivante. +index-bookmark Télécharger automatiquement les marque-pages. +optional Optionnel +example Par ex. : +button-testServer Tester le serveur + +restarting Redémarrage de SABnzbd en cours... +complete La configuration est terminée ! +tip1 SABnzbd s'exécute en arrière plan. +tip2 Fermer la fenêtre/onglet de votre navigateur NE QUITTERA PAS SABnzbd. +tip3@1 Une fois le rédemarrage de SABnzbd effectué, vous pourrez y accéder via l'adresse%s +tip4 Il est recommandé de mettre un marque-page sur cette adresse pour la retrouver facilement ultérieurement. +tip-wiki De l'aide peut être trouvée sur le +goto Aller à SABnzbd + +step-one Etape 1 +step-two Etape 2 +step-three Etape 3 +step-four Etape 4 +step-five Etape 5 \ No newline at end of file diff --git a/interfaces/wizard/language/nl-du.txt b/interfaces/wizard/language/nl-du.txt new file mode 100644 index 0000000..e3c686c --- /dev/null +++ b/interfaces/wizard/language/nl-du.txt @@ -0,0 +1,56 @@ +# -*- coding: UTF-8 -*- +# Nederland # Nederlands + +quickstart SABnzbd Snelstart Hulp + +previous Vorige +next Volgende +zoom Inzoomen + +skin Uiterlijk +explain-skin Welk uiterlijk moet SABnzbd gebruiken? + +access Toegang +access-anypc Ik wil SABnzbd kunnen gebruiken vanaf iedere PC in mijn thuisnetwerk. +access-mypc Ik wil SABnzbd alleen vanaf deze PC kunnen gebruiken. +access-pass Wachtwoord beveiliging voor SABnzbd (aanbevolen) +access-https Maak HTTPS (beveiligd) verkeer mogelijk. + +misc Diversen +misc-browser Start de web browser wanneer SABnzbd opstart. + +server Server instellingen +explain-server Vul hier de gegevens van je primaire Usenet server in. +server-help Hulp +server-help1 Om te kunnen downloaded van Usenet, heb je een provider nodig.\ + Je Internet bedrijf heeft misschien een server,\ + maar we bevelen een betaalde server aan. +server-help2@1 Heb je nog geen Usenet provider? Wij bevelen %s aan. +server-con-explain Het aantal verbindingen dat je provider toestaat. +server-ssl-explain Vink dit alleen aan als je provider SSL verbindingen toestaat. +server-text Klik om de verbinding te testen. +server-required Verplicht veld +server-number Vul hier een geheel getal in. + +index-explain Wanneer je een Newzbin of een nzbmatrix abonnement hebt, kun je hier je gegevens invullen,\ + zodat SABnzbd de NZB bestanden kan ophalen.\ + Je kunt dit overslaan als je deze diensten niet gebruikt. +index-bookmark Automatisch ophalen van newzbin bookmarks. +optional Niet verplicht +example Voorbeeld +button-testServer Test Server + +restarting SABnzbd herstart nu... +complete Het instellen is klaar! +tip1 SABnzbd werkt op de achtergrond. +tip2 Afsluiten van de browser vensters zal SABnzbd niet stoppen. +tip3@1 Nadat SABnzbd de herstart heeft uitgevoerd, kun je naar lokatie %s gaan voor de bediening. +tip4 Tip: maak een "Bladwijzer" of "Favoriet" voor deze lokatie, zodat je SABnzbd gemakkelijk terug kunt vinden. +tip-wiki Voor meer informatie: zie onze +goto Ga naar SABnzbd + +step-one Stap Een +step-two Stap Twee +step-three Stap Drie +step-four Stap Vier +step-five Stap Vijf diff --git a/interfaces/wizard/language/sv-se.txt b/interfaces/wizard/language/sv-se.txt new file mode 100644 index 0000000..00a26ef --- /dev/null +++ b/interfaces/wizard/language/sv-se.txt @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# Sverige # Svenska +# Translation by "Kristoffer (Malmis) Malmström" + +quickstart SABnzbd Snabbstart Guide +version SABnzbd Version + +previous FöregÃ¥ende +next Nästa +zoom Zooma + +skin Skin +explain-skin Vilket skin vill du använda till SABnzbd? + +access Ã…tkomst +access-anypc Jag vill att SABnzbd ska bli nÃ¥bart frÃ¥n vilken dator som helst i mitt nätverk. +access-mypc Jag vill att SABnzbd ska bli nÃ¥bart enbart frÃ¥n min dator. +access-pass Lösenordsskydda Ã¥tkomst till SABnzbd (rekommenderas) +access-https Aktivera HTTPS Ã¥tkomst till SABnzbd. + +misc Diverse +misc-browser Starta webbläsaren med SABnzbd's sida när programet startas. + +server Serveruppgifter +explain-server Fyll i uppgifter om din primära usenet leverantör. +server-help Hjälp +server-help1 För att ladda ner frÃ¥n usenet du behöver tillgÃ¥ng till en leverantör. Din internetleverantör kan ge dig tillgÃ¥ng, men en premie leverantör rekommenderas. +server-help2@1 Har du inte nÃ¥gon usenet leverantör? Vi rekommenderar att prova %s. +server-con-explain Antalet anslutningar som tillÃ¥ts av din leverantör +server-ssl-explain Välj bara om din leverantör tillÃ¥ter SSL-anslutningar. +server-text Klicka här för att testa dina angivna serveruppgifter. +server-required Detta fält krävs. +server-number Ange ett heltal. + +index-explain Om du är medlem pÃ¥ newzbin eller nzbmatrix kan du ange ditt användarnamn och lösenord här sÃ¥ kan vi hämta deras nzb filer. Detta stadium kan hoppas över om du inte använder deras tjänster. +index-bookmark Ladda automatiskt ned bokmärkta poster. +optional Valfritt +example Ex. +button-testServer Test Server + +restarting Startar om SABnzbd... +complete Installationen är nu utförd! +tip1 SABnzbd kommer nu att köras i bakgrunden. +tip2 SABnzbd kommer inte att stängas av om du stänger ett fönster eller en tab i webbläsaren. +tip3@1 Efter att SABnzbd har startat om kommer du att ha kunna komma Ã¥t SABnzbd pÃ¥ denna plats: %s +tip4 Det är rekommenderat att du sparar denna plats som ett bokmärke för att komma Ã¥t SABnzbd när det körs i bakgrunden. +tip-wiki Övrig hjälp kan du hitta pÃ¥ vÃ¥ran +goto GÃ¥ till SABnzbd + +step-one Steg ett +step-two Steg tvÃ¥ +step-three Steg tre +step-four Steg fyra +step-five Steg fem \ No newline at end of file diff --git a/interfaces/wizard/language/us-en.txt b/interfaces/wizard/language/us-en.txt new file mode 100644 index 0000000..eb5416f --- /dev/null +++ b/interfaces/wizard/language/us-en.txt @@ -0,0 +1,53 @@ +# -*- coding: latin-1 -*- +# United States # English + +quickstart SABnzbd Quick-Start Wizard +version SABnzbd Version + +previous Previous +next Next +zoom Zoom + +skin Skin +explain-skin Which skin would you like to use for SABnzbd? + +access Access +access-anypc I want SABnzbd to be viewable by any pc on my network. +access-mypc I want SABnzbd to be viewable from my pc only. +access-pass Password protect access to SABnzbd (recommended) +access-https Enable HTTPS access to SABnzbd. + +misc Misc +misc-browser Launch my internet browser with the SABnzbd page when the program starts. + +server Server Details +explain-server Please enter in the details of your primary usenet provider. +server-help Help +server-help1 In order to download from usenet you will require access to a provider. Your ISP may provide you with access, however a premium provider is recommended. +server-help2@1 Don't have a usenet provider? We recommend trying %s. +server-con-explain The number of connections allowed by your provider +server-ssl-explain Select only if your provider allows SSL connections. +server-text Click to test the entered details. +server-required This field is required. +server-number Please enter a whole number. + +index-explain If you are a member of newzbin or nzbmatrix, you may enter your username and password here so we can fetch their nzb's. This stage can be skipped if you don't use either services. +index-bookmark Automatically download bookmarked posts. +optional Optional +example E.g. +button-testServer Test Server + +restarting Restarting SABnzbd... +complete Setup is now complete! +tip1 SABnzbd will now be running in the background. +tip2 Closing any browser windows/tabs will NOT close SABnzbd. +tip3@1 After SABnzbd has finished restarting you will be able to access it at the following location%s +tip4 It is recommended you right click and bookmark this location and use this bookmark to access SABnzbd when it is running in the background. +tip-wiki Further help can be found on our +goto Go to SABnzbd + +step-one Step One +step-two Step Two +step-three Step Three +step-four Step Four +step-five Step Five \ No newline at end of file diff --git a/interfaces/wizard/one.html b/interfaces/wizard/one.html new file mode 100644 index 0000000..1df9c03 --- /dev/null +++ b/interfaces/wizard/one.html @@ -0,0 +1,76 @@ + + + +
      +
      +

      $T('wizard-skin')

      +$T('wizard-explain-skin')

      +
      + + + + + + + + + + + +
      +
      + +
      +
      + +$T('wizard-zoom') +
      +
      + +
      +
      + +$T('wizard-zoom') +
      +
      + +
      +
      + +$T('wizard-zoom') +

      >

      >

      >
      +
      +
      +
      +
      +
      +
      + + + + + + +
      + + +
      + + + $step + +
      +
      +
      + + + \ No newline at end of file diff --git a/interfaces/wizard/static/images/classic-th.png b/interfaces/wizard/static/images/classic-th.png new file mode 100644 index 0000000000000000000000000000000000000000..f01386fa0c16f10140dca77b3821c7e621861ef5 GIT binary patch literal 18667 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

      *q- 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 literal 0 HcmV?d00001 diff --git a/interfaces/wizard/static/images/favicon.ico b/interfaces/wizard/static/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..47fe4207752f7d5f67a5e073ecbd00bfe0ae990f GIT binary patch literal 45452 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 T$v;-27zEJOGP+x$=@|KcRm7|R literal 0 HcmV?d00001 diff --git a/interfaces/wizard/static/images/flags/de-de.png b/interfaces/wizard/static/images/flags/de-de.png new file mode 100644 index 0000000000000000000000000000000000000000..31dbefb7862c7da6b1e410fab190c9f6d12b8c07 GIT binary patch literal 307 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 Qb&>r61l-Jk0CRcp9~fV;#sB~S literal 0 HcmV?d00001 diff --git a/interfaces/wizard/static/images/flags/sv-se.png b/interfaces/wizard/static/images/flags/sv-se.png new file mode 100644 index 0000000000000000000000000000000000000000..97d23bb5de64d92f4b67b6f158eaa54a21f30b85 GIT binary patch literal 5854 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 B&-wrW literal 0 HcmV?d00001 diff --git a/interfaces/wizard/static/images/plush-th.png b/interfaces/wizard/static/images/plush-th.png new file mode 100644 index 0000000000000000000000000000000000000000..8647f9ed06e0809877db5921533b6443b14f56c0 GIT binary patch literal 27290 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

      )}_7J;pn3)&o?1ch5^FnjJ2p90~op#D- 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 literal 0 HcmV?d00001 diff --git a/interfaces/wizard/static/images/smpl-th.png b/interfaces/wizard/static/images/smpl-th.png new file mode 100644 index 0000000000000000000000000000000000000000..6eafda97202bd550f12e8b6eb90d5067481aadc6 GIT binary patch literal 23708 zcmV)@K!LxBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BKPWN%_+AW3auXJt}lVPtu6$z?nM09*`7L_t(|UhQ24TvSaE|I=M6AS!mZV0Sl) zg@xTM)@OGY2DYMJF#;j21E=97*P1zcJ!0(?$FTCKy-98^bHJ9#oRpG4fUHhZ}9f@Yp5tI zBQz`wRjXG=?%cUEq@A~J-b8Rv5EK*@5k_UVXw@o1$`uRA*%s#x`><@?8hK4j z;P2;$@slT`|DZwHZiL2;7=cR{ECu2xu>*(r=yLq-8{j6!!Uq$FwE?VOx`HB@Ytc?%u-Gi!%icnria4>4ts+D17iv{Iu4E$Au{_^>ADATz&Dk=)4%aqBM zBlGgb3q(`>-5Xw?KjY5r+lZmOWh+!biIOFMt1pOzSH3ZD1+uK$qAFf=qwsVeb(4#$982z{5cGghrwfyjsmK_bp4B4@9Ch`73R?TWdJ z7X5}sM|*oXIyk`l#}BB{d0QoxCFR7<3Gdt2uQ+h@s35WCaOB`YETeMt^!4%c=TB_e zz8!OC&B7~MT(n6jMO!EW{QXgh2-eBfH9>vj$Be;=W5)z;ARjFh?q|-Rb+cypLW_hJ z?T}o8%@=~sR#uop#3Tj2_>?PN947hl3Bs?WfcLp{*|OMk=#cPw*ua6{tUK=yBOI(+ zw+`0bx(WD@-WK>%xl3$q(Y9T?B+J~qVFT+f#*@8_C-)V{FZ_Df&X2E&igCIEi15Wh6xQW%3QlG7Go5wc>EwhZ3l<;`3COqriciiMB8muNEyIaz95rrS zf~N8bUz@JP_+;kiO)jvCqCBA_XwsqGJQrO<8RyL_NYym3Ql58s`2>BGPIZ%+99!^_jr(@P)};~WAfMh?oMtkK z@uNozi(F!8*03QQh=94kk++NEFqm+|30_(*C-mC2YbQGeo)ZpuoyAI&NaZvUljU>_ zWICZQU%Xh5Dsz^Yf8QcD{OYY+xJ;i7G+`67jppUcONfhhr>|eWpbhP6m*{Tz_M=C_ z*^@5>{0v?o(RI|lyLSbm=4W4C7eD|0H+?z|)4h5rV)OZ#l`jIE5O>ky6Cb>ZsChol zfDNV~iS3H5k+Jg*)R@(UsoDR9aD2qMT{efq$? za8A4fh71w1{3OB+3JerD8eSj2@8$%%g*X>`T6{RS!u!V|A1xHliP~AGYE>vwKEC*I z+_dl55f`pq!yUp+$1YvK>*K)7HLF%Fc|w2s6wy>qjT$v_`ur8!pGpj5Dxvd<%_lCO z)Eqd=9iK=ND|2*c(?;0!Il=L>wcVyo7*A(OO(HhV0eqvKmlFvur+T~{ixaiCx3}<) z6XaK7>o3!8+rC2w;XJ=~<3{0Loda)+Ke6yq;OW27xmJ44<^*)=;zcxU+*nvldiLri zoOd~J;?Uv8fLLfig0!I{N234W!5BavPMin#?-#E2I6?Ep>I9v^rNCtcoa+$Eij_CG zoji$(boX7hTsbTxmYN?CIPl&66LBO`m`IBVzfs_e8OOuIWy>&zxFIgH;1C$QfbhTh zA)-R8G@o-%ypPhOMF7b!xJ-iM)0`F#A$`0woO=@C@54Z*5_%qDp*cItcVNy|ej_5P zMglR;dM1Y3w8OuD_fD9|oK5f0sS|1w3oQk%@g?1{`HoemUcI?)aPym+rXk zZf?+{v%Wy|w2*NDW@7k6w+_;~c`4iegjjkm#pl90&h7B`oXZe!NauLItMi)+{+@q0 zXVip*kRtqj7|7Heoui8jiSE(_=BzD03-d|FCmVm>xqbUMj6S0@O0?_q_qsHxxo|5! z9HYsu9;*z)^}>06De(Ja>2;JKIVTo6KI|X~zIH63aANM(qetB98t0DPkMqH-B+sAbWdiU!W_d5Q$ znd2dxa1|fc5`OsNDU?m^%$sPTi=UQr4ZN@MZ!G@4X)X3BF$OY~&_~e~7gq$40%yr3 zGGz$tD?h_af$wB|0pLW%cjtMuQ*xGnI}y$n63TG`=I^->EAg(&pK*{Xiaepo%z^Lp z{Hjh`4_7X6+P(W%dx)R{NjSyx@x`TjA}RDkT9^b@I#xnnt!B-*yaP$f&dcXzbBTUk zy7uDAI!?5x@Q*VcMK;*k3DR*6faN4@C|{tGGINUzrZq!q}IH39VDi)|IsClKM^!9b=d z%Zc^Id3M?EPNx@|;P4>LR0&{}q0y!?!;u7TM zEn5m_@7J$h30Ge|={jp*?3ESI+mX)XoM5>CjxQ8kJB%+Re5dC3(wv>;&m2inhHJP< zfm@LMH-5Yz8{oV5$~9{e2mlw5VCwwYv%)cf-vV5t^E$6%#gZl1Pj~A42qBeb^Myi6 zjMDNskw2z33(7Inr?RA6Q6xkMIcye}1q*tsB( z=jFfoF^GTja`|!L3)RKB0nXjJ1aO?AxJnDKR37l}O!t4crgju$T|8st6HyqePNg41RhR=!zW}px>sLB679=Glw2E* z=U0lou9FTMUoiNt%N1mN=$efm3;0zOCnkP8s6oaZ4`~OCPvktW8)>Tr(5}vR#E&07 z{PzABNzFMs&CBHkCY9u$JAGOZit&7$nE8j-%b!U>GHaVgsQWWLUYYqThE$-2}6 z?G3m1iaks7t0AcrI{t9Ip~?P?1XrBc_%2+4q~KMOG3?;^xKW4no}VvD{7Ni7c#`9hdc_U|dRSA3s6Fp#N)o;|uKwnD^!h=ELF-9^-j7!Wa# zeJ~&rdiEI$u_Yn~G7SSFp=TOu#ezi)WFHKOgr0rILTrhMflR}INa&e{TCrde1K9@y zBB5uWu@GA#Vj$BnAQwVkIJg5wj-QGFy}IGx$#YoZd{%}I1>){2iGzi-!s8dO0N>k~ zxBXIDv!*Hiqo)!T-1u;M`y6;kv|&>ZUN^AP^+u}FCoDf@9J#KX53f{}EGGIZFu)_V z$ODE|0do(bn*80EYT??ff4_e0<_}5DBigrR^IWh0YKG4})}u#HHq+@MJ$uJyZ9BzeTQ-qmAS z-~NNx>q!3VU0nHV??|fbO)l&b;3ziVYj-=UyOWTnEotxG5c(y;zkmU*y(SkJR-K59 z6SnsehQhrVi#Wj)>i@@P)YfO5bS9Svb9ygn%7bI>%+1Z7k%w~j+3PBU`3S}$&oUJ2 z!yYbd$7a)no>Wv6z_R5wO>F&V1u3d~P=NrA%)^5qz zS4URZ+L2AGp~X%RwVhc%mfi7@)Z35Ra5{{!(bd3QZ(X4>OVHEz%;o%hHm0JQq@9&j z*o7OX7)-iQn@%!R8Np`N$raa!3q-=&YW3o9+E@#WFDt!@gE_k&WZGuq>DOJRRemg+ zTGyDp^8YL>44?g9F{3)u*o-F1Z0l!Q#AspM;9;9#E8t0)m6!9Ug(@<7Yy>(=6nVl(6I*|LcHnrTbw>)%;LoF;LMV6HH}& zKueu$sl!Mu6}bB}3fz{gVa-yweCGpDi5wj=aNTr#VXy}FhvHcjp*DW{SVS$l5OGwR!C%3LC&!*a`B~XvxB_FJmQYbZ141xF^uVstF-3%b0|TP2 zd&+B}m_o!rj>mxfS@#@|GO+_9267$-L_*JbV(F_7~xAQF1c z8#A%RA_mfoflLv`NxibBxi#4=1NXre-}ihrYo6E~5d*2lK&B9Ss%y{Y3Exsc#Ue?B zO3voZ7Mmwx;5Q72tot7(h1AcyIB!G@5fs}mVjvY5kQ<@TsM#7XV;dCz?^Lug z`z7(Y2i4f9C<+RyxZ|DunkcqN#6Wxu$c@l-a^*p;*qV(@453ATdmdYj))qsBK#C6z zU%=XxL$KuFBe>fR!AytqLh5HnR#KWFki-(r9#9~+8K#_}0FY!|>U(-Js^%##G;CqN zi3p(YvpeQt|DEr`v;8XuqEDax@E3lCVqS`AvPU1qR{Uicke4;?`tD6wt9}F6(4hla zG4)z3g4{7RX|RZ@f6N;7*vU3qm16GX@nvpZ9d?YoyiB+3PHFD44kM3KnxCvn%L(#o zYFs^U-n{v}&cM^OE|pL4oXDI#qbIa#lC?NvHsnpG+m4Uy$*R`Ou;B>iw0%0|sS{^+ zo_v}ba_^&9;lF_ax$WqIe)-^NzZDxcY{8he6%ZWu0{RUb(Xv?%#n~e;m1d|#9$$2H zJEAsudC48EiKw8TaKB)ON#hq$nB;bHUt)R4<=;S?JlH_u{PF(2J;L{6`Y6$db1B?e zO|D!zFwoJ&feZKXNlUBUd1>1U;B?~ZsMNYdns1;C0=aR&LrciI`$S0}!L3P0xIxCcKk= z`$IFAJ``w$@c#J;PR^1YR9@gmam#tA=cM4=_UYLFAOiV~^odj1gfpJ+!7e*vzVk~o zZk!KlB|5^=%t$z+AAbt8w^<2`^166)(HTp2{yB}j`X|=&?_fY~gq{;o`X@rqiTx4V z{O@8wZmj#ii(;|oA_lS^10tbk{TPTX5HXPH7?30D9s%px4WU}L6rR7+!?iQ3GQD%M zRv@zOvSLuopItB@w;kP~ZyWSFcMbMix8vI4JZQAYgOp*8g5n$Cy32my`(>p8=-&vWQ>aHvCXO47A3xZ!`bbw2%<+9?e~%9+dWJ< zT^8m2q$c_e7=lXX6>#P~595;*_`vPt>t8QI&!R}-c(>^e8$*{SU_VcF3N9;9#l^w_0Tt4?d^>q0rM z)Gyd|p*Xg0+k^*q9>M1pSAvShP>a@B?M_j5;RlD+%P_D~t+ih-dGp-^uD5^0m40EzEZ9ujjv@uQ_QZE8qdoesaYxA6&1l!!THsb+x&5x* zof&Q1=DH&`9*~^007ta3U~@;d6~YfKyzqsEyN_eltj4pZh1&=%uD-Tf ziPu@%_9dAEJ=of#At^)qu}+=l&|6>DDxS*oqGkmI_2`+knlm2A%GHra-hIz%TdrqY zx|UA0>a=rT8%6r>sn^sq~AY;SN9a zD^rXIQ!Uz$et%(&`mSV$hqhxpi0$s)joBFrA0~k34%TuqMFRe8&zg@u#y+0g&Pc19 zZLqA*o`k(-1IKW+?(3{w66)QV(MGq4eYkqIe893pXDF8}4sVsxm@{Vn_C=yveEw>o;#2Yt%T_ zXzATXrc!fSf{K^7=+1)a$?8^p=zo7!scb_wZ~idW$z~nf(S3;Ioit60p2F@a zfQfg@g+1!BzT+maUY$C#Gyat6_Da^G!zk9I6|diubscb+zGGM^tvrlJ{FcBoR;EZ3 zHokKUw)`58a!&?W?ZNDCCB&6Q^{Q-a|Jtnk+&k>>gf48*qNS{TMMEl;vC4Wz6kMCJ zRlOt}tUTH%$LqB;Z4lWav3R|f`eEp7)g6UQ^OGO^DB7{3;p-O+y(CneRrGR0H98o6 zK@yRiHkmK0M$;~@tNdI@6X%NEla`ma0t0szp<|1{6{{l44*hDMpcC zkM_${s!nr3SKWhK1rM0ijDA}I{Eu7)DnFF73{ur?x+>nf6D0z-x4F-wyL!ufylWhF@0? z?!UaxJoGq+xx=Sm#vUh0mlIuOWB?w-B18=Q)fkW)>%O5!Q@E)YMj0*!k_W9(W-x&k1T z1tq#i345Ku`wYLDDNLBLT0ic$s|P0OlTyzUDAM>wgEgh&&Deg6PV^MPSVP9xU;P%BGp@=tjF)( zXQ0~_+Lx-KL`UwLNdyrC{}u)YkKBciH%_7M+j%%k`UiV<+T+E&P`tkskI4>Nut(5CB)kZ2WXDUoX?(n;|32}W+=D&r@#43hFblSjD9 zFtu)t0nOW@ouy@_jGmBbb!0G&C9I_2l9x)76Tn&X@pTKVYQZ9OM za6L+Q7>?~78lax@W>__M#FMN2{F7-<$aYQ5_(3Anpj3gV_;Z01z0~}_}Hry z&a^#^tz8SoRq_1bDl9tj3GYvwhoh$}W{rK0?Y2hpW8E{Nvz5C{%+~jn8PP|v3=sp# zVPH!i6ByQLi5pcGq7EfGbmb+=6#GTwJl}CL?+!H}H_8f6@a1PDyuHaBN7XQA?dbBJ z0^*J?Z;XreWflhHCUsxdvMQSQAB_IJ>!a@svS#@cgq}zDq0XpMuu@#An{(@9%F!n{ zc<4c@aPjr~A`t_BI|k%N=uELJcG_=-z2hYmzhX;q*n)8Q=rh9a7wkRC z-2r@-NDG%81T^%aqHc`6lM7%TnJIHvaaI9~+LnNtCJ&Pkg~4rGW9`Wg@V()Pw{$Ic zYu7ToCq?5E&^o6-050@Z3jVax@iwt)C>Ore$TS^s%CXGg=jLH{wFzYHgDt0MX3Kq><;y8Cp<9`w*OPQm1 z;p)VPMxkMObM$Lg4>OMba-j9)#0-?K*cMGEtrPMOs#_bD)yre%u}{M9QG0grivzh4x`D12hL4*Bn^6{E zO=dt}u`&YB4a4*W%b=Uv7&qL{Lam4~^bI~EG>X`B1(F;Rte;i}?H!cRN|Sylt0O2R z2FqtmL}a)cd_RPMYs;62yoW-hV*C2$3A7$p>ceTxNQ^zQHbo>(TIhtT1-J#< zRVXyv47XD!u(yvLTt@B2)fac*`ObsfSSjPe<2%@XdIj$7Jrh@^-R$Rh{_rTK2HeDh zs2>O|+Z%^G&fu2oSxOTM6O&eWITMOLEoXQYlKMu z?+77VVV+h)H4-gawu5Cl6>CJPdy4Zr2PFtapH`jFY36#gt5x_{yTgxA9KD&e5Zp)W zCL=Jc+CAK8a|tul_F?h6y!d$j2)dUGLQvzCuq>Oj%;)j$HPC3=3QMNE!sa!k%vHl2 zn)RyTnV%8G(7lH5xys|@;k$VF@)8Bv{Dwj1tx$69Sxl_WIa?#5pg9KCAbkv+n}TQ=g53^IPIjJ`-quDguZ7GX>vwtJ+zk{SjyIu%9<~F2v~V zfw+0PJGu{gja^&nqG!vka5*tW($_Tj5c%hliXLYEwjsa9V9+97r$Pk(g;DgxZ*M;a zqsFXJVHIZ7eT5{==ya!Boek;Jjd}P=I<&f_HXC^8r|`E$jpo94 zEgi6CxDWmCc4y6-wPi)hbfzEQS(!3bn01@3?BMGN z7I@E@o%zJr+f6pCV%r|9+Q8{T{sE0kvG!(V*^(=t*{o@^g=fygJF@!LJz3YGYvbB6 zy+$kcfquCrdN-zHX;!abF}B-}v7oz7>@3wKH`YA|@py4f6lfr=9gmLmz znE9}OJZd)Shmz$Q3PB)55HawtV?b_%E-!_db4QQjJZpd(XSZXIRXBFO_}7P6?7xTs zl3R0zUml29+PWvYxVs1v!u#tj@vinfxUP8ySNp=~G~gp_tpj1)sIOpNSIc1&R!n*V z$Bk7{uiH*sc5Q=J13htkYXS5e@eO9dJ28I8E^N1Mh@un6;?UE&sC2y^!uvhN{dK*u zVJo?uihP2SO*i1>MZ0u&FFDqI^M(yrwR}0Ww78bu-v`0L!I(aKw$QQp^!>N?Gx5lM z|Mm^<=~Kwq7)JET$&k1&awPQL=_!&55En^E!{EPsy|v*R))&h&1j{16+@>EkNp6Q#=qgW*obo3DVIje!&Z|YP ziDhbvTr&p+1;J**1ffn_TF}&0l@S&Z1!Yw=`a9`pf+E*)r z&etTDL@-c9!WHkK}fA$1NLh=xrVx z=pBuc%_m|0sSnUQ(2cy*KBrwzom6_&5g8l=zW{$6d+`bzT2;i^@1*9dN}&yyGW4~S z@xwcil!7#~PN={g^n+&sPWm6!IMpIi?2*2b{%3#WhF^E!B zhaRbO`v-=QQW&7Ft%I1*0K%6tROx*LRG~-8n|@&ox%D#k7%1&aQRAj~^X-iM2tE4_ zZ}Kfmj?g!)S&5>Z$Kla5a~yrCjG zjq_viL3b#4hr&E;H?~Fg$ME8wSUhJd#%^8*Yx4m(cxM|9?Y{}jmLX_2@-dEVAB8oO z2H=Rtn?JDrSwBOh#8I)^d_0_A5>>mcf}xHILPA4Py3H)i@2&}-JdJRAY%5e+c^qYb z9>A2@?=f#hLonq+m_Mu?K5BHrVf!w)@h&&ad>v7L)+1a$wg6xJ6tHnnTbTZL8ohJh z!AZZuXc@d0b)8k=F~10ESn8Hl9D({O+>Xx+Q-;lhZ#E(oUam7%0TijzORkn4(G_;6)r-j2v?IqTn492kT`Qf_nA=Hu) z=E~k7MX1w!m7^^98=BT`iUIu^q0JD76x-jrXg>7qzkqCavL7g`Yvaq2X&AD_3p;l1 zM9{7Qn0LYluP->`hG!@Y)n1|3h-FxLcnX|1??PDUZFC>u3Mcn<_;mgfl$C$NZP$J} z$HvCl&3;{!v`CR|J3imQ$?pZ>Le^2or}V?E&~MbYC0M$320YGQ!jrQuxIw0$y0msV z9dtkdEnbLvi%u(7VD-qZ_^S96%N$-{`oN|L4bT3|Z+Ssluh$~ODJ+E|38?7WEh>V9R1svWr%1-KbiKx+`0psFsHsDZ z?w^9gqOvWaC%#@&A$Q!7(Jby7QPQ_4sFEqL0!gSPeO5qdpg#g~HN&lA<596xJs6o7 z3+#GWND!D(@>h`Z8qbvK`P20pg>R*WDgsJMG+q0JVV71@ibmni zOR#BlVchY`jYmtn!|`4K6r#fEK%)dr@}&^X=LqeuA$rB(eqgSF3Cnu$^=jq5LD$JxqVTK6*hi?cBbL*!A<5`;}BNS$$!sxao zgcdfMxi#8!64bqDi)@6I~T zCQ~AULEWdYO+804U;5kDqCb5ovKe zTdXV-F(5b1I8re{{kpACyOsfty>Eg?dxm0S%ccm|R7TlFC!jRB4|>uWZ)@v*80J0$ zBPYH?jZeGLch@EiXwnjLVx1)0*%jL^g|JV+SJp&bD;gi!a z=B|w*Nvp1UjjBR99yf0jOP8`XvNExblr>3EP*6lfL<9;IE(9YZLqta>P+dtA-qh68 zNS2_SVn5SVs2mcf1@DoO31tR+taNmA@b2AvynFi|irGM&F}?kf_9ZYdP;jFqH$u1U z*agLl6hsuA^;8ri@q@xI>E})=?2-Y(W5YE?l9!lpU($guTol@2k1=K09XjjE&r0P_ zgnsMR9aOI_A=2dF=Dp|8*VFrr*d;_BPC+L9QMPOuA^ZLNkElHJ6iMOh_aE>LB&Cf+ zDS4Uxq@ZJ7sWh%#xr!P!sv#;$q86w?f*%%dbx@!MfYE}G9Pmk^O4mJ{&{NaT6dNt) z1gXWl6hG4D#n6p`wzf7dT)2dW4eQIf)w0i{`2CUgh09wM6}du_oQzsz!J6~JUO4%@ z0-PM>cRuIs{S%>kc-$dkN}kZqT)K^#=4I&GN#Qp_S5{HMk<)ij*hmYd%ao2K^oJ=f z96aHkqZeV-wifxxOt>3yLJy5#xc~T#psiN9N+p5N6-oQf&&36rw6ZfUND3oCTCrl# zYuy?#AxS&Xj8Et(^;4E{&5XQh!FzIqe(BOx)UVHDp=3Rzw?A=&PWA`dTI%w=UQ0jH ztfxB3oygPH+HdIG-U9P>U5d-5qM}R^XGK!OjYdQiNm;{Ugb)8aG%T8Y-_b6c45$9? zf(xvB^gws3&e;Ei8&>>+Jo@TF{={YSderHTMvw~gU7YXWMC87U79nrRlF+SM6?z2< zK(9#?7}G-IyM8?s=zUt?`LRtnD{)Lp;EVk(e?GpXrRvNy<5$Hs zN0IXJ{Jb1q9xs=d&+Fm!#V=QZ*mM#GKyl+nM8AFw)UAt{`}d(VbSSW30hD+f==_#i z2njca$E`tV(x3Y;*MpX>J{fdeLY3-`(YSgQoTp>I+u%m1J8&$@m$ej%-8{W5MvWYW z9?N&8wi=nzap6^Z@t$CW7G)L@ufaM#O0Fp~am_aFTZ zgLT{P7~8P|`fu@+sV_XU%>ALZk%%^H3H{-Yd1$s|D@KhOgZ0}s;nTx6)U_zAo<0o+ zZ*X!Az|~_%F@NrSd=OOR!sERQ#4#s(xZnDUr{|n7f6fBDrHQ6%pqDM|p*al&lgVa2 zQW{ycYB>fC8X`!+7tNoGFP}dVeI+A0Pho0st1+IRm&42B^n)FphylT(gM+uK~OE&4uci8!TF~*jB{yWYtJn>>TwR| zJdR?E^){&J7KQ!RRantT2Ty6qUAg=t^o{g!YoZN)c~nnJt!Yb}@pxCq?(=KNBsCoD zr5BNTG%P!>gY(+Wn4kX>g;j_`=dQ88^L@l^s3UKP7eewi!Gb}>)7JPTQfE|uQoo$b z+~nU2xO_7NX2exSyuC^a|BInys0Y`%voUi10%)FIjMu@wSat9%rqAqzb(=5az@i0l z?>vLNvEL&Kt*hn5=jdvfP6h+37VINUrPQ;c8P%nxey@c|ywCnC8pa9EiR2ia%Smf0 zmw^E$k%5cN*wOex&JCgkeemQ7Jt{1mgm{wHZSG--1}nzKHC3|0#|Y){@_4ztd|nT) zPs+RVf&E^t96ocQohR)qiz&hfvFmKxHqhN0-qCxX{Q1Ep@Tr9;GTQMYCZX%Lb2wP5 z3LYt_qgKrr?0ZEeyxIp=vpOP!0^mnK{R4uCBnlv3tqPboa~|xSS0iD7-_+Kc)^zE| zd(t&MN3}Zpv3~U$G%Ci3tQGL$%~K)izT0#OG96y5DB#et5HWwA* zRW5MnBykH54~MC#DFOmw9WceA2V})_Kr`;mc*I$K7%j8dZdAwX+KCdT! znbCB8R5#$Z>xY^<0_zND=U~%#tL0}fLouR+SC>8+O@+A!i3RCOJ6jm$}y54uut9LiFcX>j63WC&*pCcDJIkp!esx-g zbXcbT`Z9zP9@2DC)~?j1>wS{1%ugQ2afM$%=DE3yd= zk3s*wT@$>EjNuaIAUt~KO>Uhu$q@qG8PcXEe>TM!`$!l!qx-MB*GP&J7apZVmP4AP z6Rr*=WfkF@fA};1Ai4`rW>YWRuqT{jg>jwACFD?i1H$9Vj9)GPr;?%) zA}BB-c_yP!N<_d!1tG!V(9}>wAjMnL(WGmsNHPKa?Oik}rD)N;GL@kaO%m-W)HE|E zc1!kqP+1jbu6jHqe_fhM%GZ^ZRLC8XUz!zW-hKK`p{o3UJLB^y7er_DnpG>}Y9fUh zMN)oIB;^+=#L)fvpLX(`t}v5Yyyp~!ne_BWdXLWg$Q7Tml+e??Y|AO5tSYdobeH}o zrPfGVl+vmKtHM=alaZ8jVhGu|ONOFTEG!E# zAnxdYK)$Ryx@goQ|Cya$BM{zF(WoVp#>;i`AUrlKi`)?*&@Iyt11#g6tHW+%(vq)O zI*SWH$a~3{@o2Pq1zp(44`e-~r`EWF_eeBq$+&S%E#7m=89hDyNo>?2e*ty;@l-5` znd5C>Gi6#Vk%wdLjA;}E-iv(WYC=bsyTA>?l0^&Q8LCUMrGZb^_G0!7Tfqh4n&KvQ*#oTaOYr8stVT{=0S|YSSh}ZrzGVJ39oNIwcspqy|#zXKKoj zXPUI*{rA=>l3+NyfXw|-P$rWH%`CWyiibfBEnh5HVT+}6=MW(SN2ZTK+j$ERzIQ3U zG7adF#CpTb8TfC?ROp7jrECA!*m~O(v*-20#CfiGvTrr2O&9`)!ILm#&K%TK_RhMX ziavL7_>pg1?_@DX5RF>WPiC^%u3Zz| zis?}-GarNm=7tiB5aO@B++~NaxpE_qo~hilui}rCX35q#;V=W?q`DeM=rR~rh(;}` zri0%S%4`IZMAaMO40HC-TOSlxD1qU<8lj$*4F+^D!?Zo$v9C{CT&K4#U0UNVXf7J& z!S~}+P_O-XjO$bxGtc_r=EDnccXLJ07AsOT2Fi$eB$SaIj9NaDZo3l&NwkgqY&q+V zVkQbGR+wS+iv7r=cpV$BN25~i2sG%`1Z$S9fPXGs((9%j|L!(?GBJWZ@pylXrAwuTIovW*4UH_vVZGBy6bUYZ zZ3l1Q%kDkUHZmb|7BZ^JV@N4@Y&NoLYqbaiD+VCiun;`YKR~B;ebArOfenmxk~aow zsD=yircy@rC*$2ureQH2KYn}~QfKd^EIOR*!Q&qsemAZtUAnYjj6xbOe5p;gL%$of zJWRwX{4#2JPO7bOMlA+3#bO0~Qlpk|GHS`sjau&BB})_k1V$~PWYnU^-AbhrwegKw zI+f5wP`$0_7i-iq2HdEnF(O}{h%;)*7tg4rd9iX?X4H~eyeEx@QgMbk&5Ko{9{H2! zA%9Bhiy%RT*cTCG9vl|rNm`xc`|sX$6r-_KRMo=H?p089*FE%!a7VN8!3d1<7lK^` z1w^2FLy0laZ+N2(!#KgzNdG(%`jZ`uT2eW`azrxaB8_2HIbjgN^co|GMlG@pd3y1l zbge2lw^?eK!*%<0(QRM@`qoCz*zXQj=CIsw0E;`cN8tf0kdO9ui!SEqvFjY{I(5X@ zCHFAZsxlglv4Z`2C-mr38x@l^2Kr?<6vw`&(>O}VA8XViD$M+0PRZgk?)=p|C{m;- zyvfmJV&fHlee><>Cz$A~rrBrQkyBSuuuw6?kbEOP@N2N#`kG{k`Wed6p>aOrROxEv z4aNNC7Hoo($R9sov~VGcl3jXoMlCtnXIxtFo)dh=rMExQdvw>`dvWS?7F(~epB@-J zYy#|7&c?9WPDzs7{o|*}Ffa%=ZvXB#hI^CYQO>dg{$ys#+ta9yIX-{-NOpIjBs5I; zQHTygfxL!@NpMM>I!6>0%a#C(4E(K3UXR!3kK~ZDyrAzc1y0Nb$$eCHvc9V3;DGAx z?kHHke5x(iQtD?`;Qmi_rXBCUmzH=D&B{K?+MmvyI*=oftyyc-a(?LuL=ISo=Hz_B z%fkb{8iB}Dt_l1u?uK52uK0H23RJanK_&baM$YiSfs^atL$>GJjy=HWd2?`S-ZG$$ zF#@A2!Ma%`yeDOv?Z-c1>O32$hQG(6h4#o_s~vi`OxcZcQiCb03T$eP5qRCH_3JJg zwfvdvxYRwhco&UY(_n4#1Z-!HR}b|&S`;*9=@dEH3b?&9q?uTc(hwJ6t-);F?)1rjGN~UbMGr?vuZuQ zpE-qmO`8i^b!i3Bs3ol!6Vqo`3}opU{le~pXxO!bfSVh(!=N~71MV%J2;*v9pzL`V zK1GMa;I0cAPV0yb8~iY-?MKYKRS9!D78UZiPMr&jg)?z{<|0`9*BIT#96`HkgE3l~zN@p$za^X!(T>waC<9bGhPk^i(8jano)&ox|STvT7QRk|AlB!`fOp+R!! z?#`h@rEx&IV`!wLL!>)~?vRi!=}tj91m5s}?|r!+?uUEM@7#U%S$plXmaa|d@oz+B z!{dNjYsF1VyHBGO)5vl*jo};6UWiyDb7{r<;Q8suw7p+_@%&je8w+9!Ndl_dkzua0 z2V5QI;f!^*n+w|p)%qf+sBhS1tU5^Th{?iO#3~o4e?-Rbb)?luY(COg(2zGoBp6N! z+j7(S%91u%9mIAxKY>V-P&9ZI;)xH!fJ{tChr%f4U_bRKUI`+haP65HS)>(qhod8! zv_FBfFeg_(6H4MBQeqEjBqWfIUU)}v-gu0;#gL`2LKYpdcAhGg7F_`ySXT1Dv9Naw z%BFc!FTJpywDsf*M+&ld3NLYA_~+n6ZBw4zKyjZ8Se))=`Q8^og|4jivD##?h* zhOr80L@&#@1p5BtrW>}7Ckb6^zdB=2&JWV)FXsj@M+A$@H~?us{{j`cH-v#g1AgWF z-I-~XyR$TP5K@Av=*-=yw`@*of=9& zAmEaYa&QutJc0l8+7eZD-0-MDxi>Zw^N*1bH6x`^6uCh0`YYxRm-v2CNnQtq=T|?2 zZt7B}<1)#lR)y@mmb&;-V517&{{zidMkHn(!8REigUdc-1)rji4ZO)XF0pwsV-8tgO6 ze+)BvcMS#635HK$^6VNvrp3_dNTldms`Ml)X%w_mh<(p{K2^Wx=oFG0ERH7IJTz!2 zuz^ZCo)u`HCyE;8Ep z?%a3FaKpG@WnqcV4=wvr4htWyY^rT5rao1eCl8h&KzPS%L3_kIC5Cl(OMWGwlwVu_ zp*_%tF=TVXXg%-38^Q>6V3!KFI(}ITdtQ6We~oOQXVZ4)vtknF29fR*Bq}T2yrl&p z!PYOLc&>=qYvSgEC;t}5dzB?B+ajEE(96atonzX}6=>TBi1Rg~vD~|1ItEY)zcOLH z%)e1H5&b_~NPgBIL;$|`ZV~| z^oEz{H$Quenc6d9UO~8y;8Gn;a^~*uZ_4zE99@^`B)QUiuKXbqQ8moiDa5+WN9OdKr zj`){ag=iP#DkFFdZfz?tdKsR<)2bELxSJ1izJ^jPHK+!$h7^x)>xqk4x`4#Gun%S> zphy5uMs$hr`PTlXS6HT+{2>F!;W%!*bnrKqRH6)_=`)b{jl2wkhwMc$2SEQP^gb9S zC(p-B%_#H4YqYl|Zj(&1aFi4O-(m7j)?wJZRzVTGyLE+_#$!p6uKWrHRdL?Rq{~zj z$8*@FvVsUQM&7tPDg5}(g;>jn+x_+EbbnC|BJzaOzI?9^c&Ca2^Emr6=S#8Jgz*-4 z1qwFkjdE@$8?vr-5)JjL9H%aXJecg~HDFgyC!$`q!o z5!+;g571>sGX%(RnV&N9do1mAjs`4Sot3!7yJ*A+nB2UFA{F~5Sf_*o8fCl<={d?+>hY1E>Gq%;<6F68k;Y9t;{|@lbsgiCPqR-GM4LINa zW1RF8jTX1$K2-U2K?YN1pvz_XySN_8)X;^IsQ5B7^dSoCB1|`fw?)0Zknmmp=%QufAvu>tzCfAYM6Y3#{V+vu9+OVtKr)FX_k(zJOs#}Bk zA0kO=DC`gKncVzqgEf?VLerBbuO_O&j@unAufL_n1wSHF@5fhg7R!agH5YcX5txJ9 zCuMPDS(pkSK9~t$uAK<*r?MAkP?RV{=WP@axNTtc)p&m zZ}(*OvfEJ+&UA^g^{N|7<1B#KM2ryfP2rh=4vJ5p$N3Ui0ahZbPU|}BkPik<;l2Eb z>niy~gBOl?6y!M9Q_()B+%sxcmz#TjSYH^~B$E|r(^&ilesqsBEzThM&3ERX)-HnR zQ)fVM#HfXCx-#6PX}>4GFb%0{Otig zLhRzksO0fVOC(P2BhaQoz1O{bh6-zIlTC0+s}yW{_;FU?8u4hlHx4D|U#(2BIcX_iYn+^AQ@jB_G9RRN20vD0`6?G=0f+R}0=e?=bfbOk z!yE3qq=0}|X&D&+k<7j%cWgW}c7crYGDZGR&~WSWwVvWTcbUs;fmF}k;{|09}y zDF10l#N3Q0a%C~P3Nk&0F8ZG`rch$bz&>#ZzR$dmV-#%bK**+OM2OQXm@W!mkH45< zR7g(pq??!6{POOCwjH9@V$E{q{4GL~PF8|lP3e3l5p%?LM>4h2L}S{U;7VhwX^1_m zH6zdBS3)z_6v2sDYHva?=FsgJ?g=`sPB^FR7;nDB_a`)2_PW}+sxRaZtT)^6MdcO| z`I9RfQ|dbC>&>cMg^yOH=78qJ6 z^@){95Q%R%XL*)YFH*3q|1MceTPGB7SDFOEx=W3Yd^5%X#Mpd*wt5`lG_daB37;xC z{LRk1S_;KXl{eKEHwj56OP`viX3o11!|=nfSJx^oNkA8M&Jsb3!yW-tfq1FfqPtS~ zv^MIk=-YG@*LUg$Nn4yTSxT1&_L(c041&sM5u?Dp$EN8MiG|V0I>`JD_)?G)cwQgC zDudH6-If-_`cE_?=JUxgHj&2b;H2+BGm?S(t4!(#`Y@CBlm5zuSetkLid4RBu8~ti zxIVr+2H*bOGt6C{f@zdKU-n`SY*e-|Lx*p43&B9>!72tVCntENn-1bbo!0(QD9R3D zs#--yIJWBtjyWSYjL_$M-?a+Yo>khnKDYUov>1@Qc~@^78T>M}U+%-mn`{ z-CR{GK*nz4wV%rS@z6irPmqXwwD)NOZrl%9#E4QoMk^5@^BWHKMs?~ zvTqH>4em!0f~9i0gHgePcX4mI-MLV(--by_gNRNf9 zKm@Ql6<3?`kx5!sqrT8Y1B2{l5})vskl~=~o{I8qe2)@I;OOHpjx4)DNGnzq|9+_` zk?;qJj}>NyqyIk*0DKzS6=FBBo96`=Ka3`oBi>hcI$17=VJr9}PN!+@K3Sm_r0`w~ z{bqEUuqOTV$@rCR(@ygU_5nKgPf}W!Vwr*zakXIRz?VuE%83pyT;s(x%(`DF=4SQ4 z4?m}L;xlOq?vsjS*^R+A_ZUXyrj1CLHckMgTy2TuHQOoIx+p&6r zDI6wYyH{boqY{QP_b-@-#2}3M5uPOG%x@pm3sVUAAv3DD_Qt~JKNoV2@k)@R zkb!P(*aOP{aHnl>15qvp{%iO=Ss>l|z7ZLNxXtuIz>}E<`ZY%cx#fr-EfV!G`{dbcV;ue?4;a)7ZoNd}5K@F&%oi72Yxy`RVb+Igo)I$uowQ+M z;;=5`uUx+BF7>DW1mPz}`QRMO=Jg2*EdeC+4=VoqdiH@@bzucW=w~=W{*q*CN?bYo z#Eb_L#twDx9}nM=4tt6=MI%fFDQwm&Qo-0s#o4nANsn~4#EzK36=-HTk=cWS~3Hx|$D zOHJa+5o7P|nP%i`x6%nDjxn^NTe{pPfkQw25naC(y?7c`H7!bD4IQ~^Uu9lpL{~iN zzTMM(thRb6Ms#3)6bne9NKHirKTiXTZ){Y9o$z$FU!MJdmJg`r*(Z^5*kUUe(&v=) ze@rkw{KK^yu^i9#@r~p%1tf5cwq&EcTR8q#mOVX~Pk*)0< z9BeACmMSC1s?VzFa|v)elLhNF6@y1Fd{P+!G8xn9q(KL2AOHG6&{l>G%=d7Dw-5wh zzz!TE^PUfProwkb>S6TbU+7oOPX>n5&oF6&ha`5WA@8LjsQ00HLQBPjvU}~Sc%fQp z+3sTM?%Sn54Gsmv+W2i?St=*^peIzna}MW$LriuxDAZ-(qiCk8Xx=x$3VJE7A`!0I zVu<@TNy_nRj4!IdGse0Eh6^6hamt6`>SVY@y zD)p@%O#jt86NGErn6312lV}>=={+`|As`_M!hig2epT5zF*(UN2;;2b<3FD2gKoB+S7+vYeVJ;ks^*1MKeL6MLe{HiY$_U6ZuooDbZMbb`3-v)sD( zh$hp3=zeV%gWE1ET#l&rfBJ*iUXX{<{h$oV3-aJ!&DIajrbFpowg`&1LXr7&FyBNy zimEsR_M(3?e7bn4ggX!#y)k#5_e1#iYo{g-6}^xYXqp^|?1fMc%UqkLT9CNm&%U*n z6rB;^IM(Ee7Pd1IM5r@H09LdR*qBU*=-98X&IwJB*Anj%1v1kwBkdB^mKY29w)v1@ zVPp3<<0+F1!*)D5n5Vw;H&(dI^uCF%Hi6E7Fv!cQ^Am8gr@$X}&f_KorUok_`5~Ep z_bMLaP;P`f9WdI@&-b_-M~&uwflkeYPY9>MgO(4mC#2MuRGj;354j6#f!PpDU*ok& z!uITx{*y)DTvJs(6MVx>G|^zdlU0dLrUe#ZM2+jW?&b|oyr1NqJsfvljs@mlFqgfb zDR;-tH#!7Dks)<&gK>R>*Cw$AFBaayE-k9Zx~YyTcV$>>8PVxd^vQ!1Xfyt-Xo-qi zDM6lV-nh^Oq{ay#hy80H3I6jW1p+0EbiGPqj19(Kob$iCC!QqYj*_!g!g)z?15&bd z@${vB=l>GU+}A3Mm@0KKvYi+bjIKL;WxBf*H@;rpvO7JqcS0i7r*8!uukeU-IN$*MImgb!kFXA9CA)w)(-ByTLzyDbB|1qn0 z-uHCd^d^pC?xn;itYzbNr|0pcZtHDQ{`wP;o6l`bR=j7R%0Oy%^+oc$f`Gn$2N+RvRZ0ot(->>=UIWx)iQG}aAQg859B1&#)hvDk{_w+x z-z$Lk0)*G{bZJH4wdb3l^IX-AbFMNIB1hZN0Q=wI>hipB%W>3Pb3+V97)G8VveZuj zR*sy(geyU>n|COh28<t2leI?$?LQ z(Z}PN+8wqKKOxm`efj$j+y69DIw&m>cVRU=n1j^5pd4F|1s&XQ zhX@7USp24Diu3^7sr=H{8W!F?z46qJ(@x#H>2 zO-v!g@JAZS(eQ^CZdtVM{ks%S3yHn}Bt*Clz{$?Al^NyIF@#@=f*b3(>6((TZOC-_ z5D<9?_)lxr35E+F{wxoYV^(H$H=gVP%YD$uE?#rSRmeI<=LJ=LMGfcd8uw%xsQg@P z_9R&A@t*CyM>i%djS(qI)5jQ{Pn;n*ZO%r){3MiJA0baiQzSgGqM0eZJvZ9`~W4c9YUj!|Aj_Pfm zj>&jfcoJ7vY+}MGELiW|3C}+rnWnB>`S%@uHc;veTFkc0{$SbE%@*&+?lAN9uKIJi z0=Kny-M4aGBUDMS%~oD`$zkIUt|S)T$Vk^$DBFz%P18>(u2>9RD=Ro>cW206*eW4*ILor2UPa67+dN& zP^fe8XczKJ8%cV2&wcpOlNRa}F^GrF@fF z44%xW+-gprX;8L3+iezWFzs82rL}p3qb%tCZjq$K1z_O-PBLKL>xjt-+2%OT8CNoz zWlp4}7R58{h_KhbsG+PNxvXTc0+_LDo_Yz!M6Ix{FAY~2Lu(z}x$?F7m^#Jl6IrJP z@PuJkc!U+N;DXs-h6uzrL#70n2Ej#WeJO?`7cr5e1BmLhv6RKdeJKAj^MILa4w%&NZ|PvTKY7Y-2D@eg9=M1fQvr7YL~oMMlbCZGU*NOL_N|E#e`hjPiFujitVe zPhlsn8E@BArI*X6L1lf<`k-*?v*SN9qohyN<2kJ{SDMJ=#J;58NY@V{SqX|V^pVpr zueE?Po|GI^J9)2HbKM?1(_oMFT!8B}_X){)!kdnmo}IY)jR_CB@~5}4lD;Oc*AbBw zZ-DVQFQcO>J48IDzWya5K3S}W&gOGzjaHsm9>9rmSw&c;3(iy}6 zm58hc-~0W1g2Rz*^RaL2$n~QJH2dImH3;|Vlm1;P1HY%vpmXY5edA7QermBGe)4T? zz%~)ponAqr?`vO`dq%feG(#D6WUn5rl*VGjI13WE$r$;IXtZbvG1t|B%_8VMLTF3x z8Ct*cG@0TMdap@T8}~+M2~&Jd4^s)>YZ+5eA!thwnLMf!0owzhx5L;|XY6%OyMN-i zuS2sJcgLpA!t^SM(M2gG$6aPXHpKUMA-FU*Rcew78GNsSmaZ{CF}U!HtRiJV9rb*)7Pr8Nq(HG z&m5KE-||u>tMum8%%m%9ur*hR5+<}_Sb$*uL5Wz#%h7=fxG7u=xW>l|ED>w#?&YCS zF85+C*Z1OdLQSrTjM1ObZ39L2f>cP^y5LJ=MUck7d66C~mLBc{eGxzCwdOf)I0~xh zEvw;HNIpM3*4RAz9-e;2%BMq631Mi?#Fu;- ehu3`FKle}YdBDA`E!;f(m4b|_bS20<=zjphw;4kK literal 0 HcmV?d00001 diff --git a/interfaces/wizard/static/images/smpl.png b/interfaces/wizard/static/images/smpl.png new file mode 100644 index 0000000000000000000000000000000000000000..d7297cd53edcd0ddb1fb02824e82a71bb77df3f6 GIT binary patch literal 62655 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 Hm3#jKW0q@O literal 0 HcmV?d00001 diff --git a/interfaces/wizard/static/javascript/checkserver.js b/interfaces/wizard/static/javascript/checkserver.js new file mode 100644 index 0000000..5d0bdb0 --- /dev/null +++ b/interfaces/wizard/static/javascript/checkserver.js @@ -0,0 +1,109 @@ +function checkRequired() +{ + if ($("#host").val() && $("#connections").val()) + { + $("#next-button").removeAttr("disabled"); + } else { + $("#next-button").attr("disabled","disabled"); + } +} + +$(document).ready(function() { + checkRequired() + $("#serverTest").click(function(){ + $('#serverResponse').html(txtChecking); + $.getJSON( + "/tapi?mode=config&name=test_server&output=json", + $("form").serialize(), + function(result) { + if (result.value.result){ + cls = "success" + } else { + cls = "failed" + } + r = '' + result.value.message + ''; + $('#serverResponse').html(r); + } + ); + }); + $(".validate-text").blur(function(){ + if (this.value || this.checked){ + $(this).removeClass("incorrect"); + $(this).addClass("correct"); + } else { + $(this).removeClass("correct"); + } + }); + $(".validate-text-required").blur(function(){ + if (this.value || this.checked){ + $(this).removeClass("incorrect"); + $(this).addClass("correct"); + } else { + $(this).removeClass("correct"); + $(this).addClass("incorrect"); + } + }); + $(".validate-numeric").blur(function(){ + if (this.value && isFinite(this.value)){ + $(this).removeClass("incorrect"); + $(this).addClass("correct"); + } else { + $(this).removeClass("correct"); + } + }); + $(".validate-numeric-required").blur(function(){ + if (this.value && isFinite(this.value)){ + $(this).removeClass("incorrect"); + $(this).addClass("correct"); + } else { + $(this).removeClass("correct"); + $(this).addClass("incorrect"); + } + }); + + $("#connections").bind('keyup blur',function(){ + if (this.value && isFinite(this.value)){ + $(this).removeClass("incorrect"); + $(this).addClass("correct"); + $("#connections-tip").removeClass("hidden"); + $("#connections-error").addClass("hidden"); + checkRequired(); + } else { + $(this).removeClass("correct"); + $(this).addClass("incorrect"); + $("#connections-tip").addClass("hidden"); + $("#connections-error").removeClass("hidden"); + checkRequired(); + } + }); + + $("#port").bind('keyup blur',function(){ + if (!this.value || isFinite(this.value)){ + $(this).removeClass("incorrect"); + $(this).addClass("correct"); + $("#port-tip").removeClass("hidden"); + $("#port-error").addClass("hidden"); + } else { + $(this).removeClass("correct"); + $(this).addClass("incorrect"); + $("#port-tip").addClass("hidden"); + $("#port-error").removeClass("hidden"); + } + }); + + $("#host").bind('keyup blur',function(){ + if (this.value){ + $(this).removeClass("incorrect"); + $(this).addClass("correct"); + $("#host-tip").removeClass("hidden"); + $("#host-error").addClass("hidden"); + checkRequired(); + } else { + $(this).removeClass("correct"); + $(this).addClass("incorrect"); + $("#host-tip").addClass("hidden"); + $("#host-error").removeClass("hidden"); + checkRequired(); + } + }); +}); \ No newline at end of file diff --git a/interfaces/wizard/static/javascript/jquery.js b/interfaces/wizard/static/javascript/jquery.js new file mode 100644 index 0000000..396646c --- /dev/null +++ b/interfaces/wizard/static/javascript/jquery.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-01-13 12:50:31 -0500 (Tue, 13 Jan 2009) + * Revision: 6104 + */ +(function(){var l=this,g,x=l.jQuery,o=l.$,n=l.jQuery=l.$=function(D,E){return new n.fn.init(D,E)},C=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;n.fn=n.prototype={init:function(D,G){D=D||document;if(D.nodeType){this[0]=D;this.length=1;this.context=D;return this}if(typeof D==="string"){var F=C.exec(D);if(F&&(F[1]||!G)){if(F[1]){D=n.clean([F[1]],G)}else{var H=document.getElementById(F[3]);if(H){if(H.id!=F[3]){return n().find(D)}var E=n(H);E.context=document;E.selector=D;return E}D=[]}}else{return n(G).find(D)}}else{if(n.isFunction(D)){return n(document).ready(D)}}if(D.selector&&D.context){this.selector=D.selector;this.context=D.context}return this.setArray(n.makeArray(D))},selector:"",jquery:"1.3",size:function(){return this.length},get:function(D){return D===g?n.makeArray(this):this[D]},pushStack:function(E,G,D){var F=n(E);F.prevObject=this;F.context=this.context;if(G==="find"){F.selector=this.selector+(this.selector?" ":"")+D}else{if(G){F.selector=this.selector+"."+G+"("+D+")"}}return F},setArray:function(D){this.length=0;Array.prototype.push.apply(this,D);return this},each:function(E,D){return n.each(this,E,D)},index:function(D){return n.inArray(D&&D.jquery?D[0]:D,this)},attr:function(E,G,F){var D=E;if(typeof E==="string"){if(G===g){return this[0]&&n[F||"attr"](this[0],E)}else{D={};D[E]=G}}return this.each(function(H){for(E in D){n.attr(F?this.style:this,E,n.prop(this,D[E],F,H,E))}})},css:function(D,E){if((D=="width"||D=="height")&&parseFloat(E)<0){E=g}return this.attr(D,E,"curCSS")},text:function(E){if(typeof E!=="object"&&E!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(E))}var D="";n.each(E||this,function(){n.each(this.childNodes,function(){if(this.nodeType!=8){D+=this.nodeType!=1?this.nodeValue:n.fn.text([this])}})});return D},wrapAll:function(D){if(this[0]){var E=n(D,this[0].ownerDocument).clone();if(this[0].parentNode){E.insertBefore(this[0])}E.map(function(){var F=this;while(F.firstChild){F=F.firstChild}return F}).append(this)}return this},wrapInner:function(D){return this.each(function(){n(this).contents().wrapAll(D)})},wrap:function(D){return this.each(function(){n(this).wrapAll(D)})},append:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.appendChild(D)}})},prepend:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.insertBefore(D,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this)})},after:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this.nextSibling)})},end:function(){return this.prevObject||n([])},push:[].push,find:function(D){if(this.length===1&&!/,/.test(D)){var F=this.pushStack([],"find",D);F.length=0;n.find(D,this[0],F);return F}else{var E=n.map(this,function(G){return n.find(D,G)});return this.pushStack(/[^+>] [^+>]/.test(D)?n.unique(E):E,"find",D)}},clone:function(E){var D=this.map(function(){if(!n.support.noCloneEvent&&!n.isXMLDoc(this)){var H=this.cloneNode(true),G=document.createElement("div");G.appendChild(H);return n.clean([G.innerHTML])[0]}else{return this.cloneNode(true)}});var F=D.find("*").andSelf().each(function(){if(this[h]!==g){this[h]=null}});if(E===true){this.find("*").andSelf().each(function(H){if(this.nodeType==3){return}var G=n.data(this,"events");for(var J in G){for(var I in G[J]){n.event.add(F[H],J,G[J][I],G[J][I].data)}}})}return D},filter:function(D){return this.pushStack(n.isFunction(D)&&n.grep(this,function(F,E){return D.call(F,E)})||n.multiFilter(D,n.grep(this,function(E){return E.nodeType===1})),"filter",D)},closest:function(D){var E=n.expr.match.POS.test(D)?n(D):null;return this.map(function(){var F=this;while(F&&F.ownerDocument){if(E?E.index(F)>-1:n(F).is(D)){return F}F=F.parentNode}})},not:function(D){if(typeof D==="string"){if(f.test(D)){return this.pushStack(n.multiFilter(D,this,true),"not",D)}else{D=n.multiFilter(D,this)}}var E=D.length&&D[D.length-1]!==g&&!D.nodeType;return this.filter(function(){return E?n.inArray(this,D)<0:this!=D})},add:function(D){return this.pushStack(n.unique(n.merge(this.get(),typeof D==="string"?n(D):n.makeArray(D))))},is:function(D){return !!D&&n.multiFilter(D,this).length>0},hasClass:function(D){return !!D&&this.is("."+D)},val:function(J){if(J===g){var D=this[0];if(D){if(n.nodeName(D,"option")){return(D.attributes.value||{}).specified?D.value:D.text}if(n.nodeName(D,"select")){var H=D.selectedIndex,K=[],L=D.options,G=D.type=="select-one";if(H<0){return null}for(var E=G?H:0,I=G?H+1:L.length;E=0||n.inArray(this.name,J)>=0)}else{if(n.nodeName(this,"select")){var M=n.makeArray(J);n("option",this).each(function(){this.selected=(n.inArray(this.value,M)>=0||n.inArray(this.text,M)>=0)});if(!M.length){this.selectedIndex=-1}}else{this.value=J}}})},html:function(D){return D===g?(this[0]?this[0].innerHTML:null):this.empty().append(D)},replaceWith:function(D){return this.after(D).remove()},eq:function(D){return this.slice(D,+D+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(D){return this.pushStack(n.map(this,function(F,E){return D.call(F,E,F)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=n.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild,D=this.length>1?I.cloneNode(true):I;if(H){for(var G=0,E=this.length;G0?D.cloneNode(true):I)}}if(F){n.each(F,y)}}return this;function K(N,O){return M&&n.nodeName(N,"table")&&n.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};n.fn.init.prototype=n.fn;function y(D,E){if(E.src){n.ajax({url:E.src,async:false,dataType:"script"})}else{n.globalEval(E.text||E.textContent||E.innerHTML||"")}if(E.parentNode){E.parentNode.removeChild(E)}}function e(){return +new Date}n.extend=n.fn.extend=function(){var I=arguments[0]||{},G=1,H=arguments.length,D=false,F;if(typeof I==="boolean"){D=I;I=arguments[1]||{};G=2}if(typeof I!=="object"&&!n.isFunction(I)){I={}}if(H==G){I=this;--G}for(;G-1}},swap:function(G,F,H){var D={};for(var E in F){D[E]=G.style[E];G.style[E]=F[E]}H.call(G);for(var E in F){G.style[E]=D[E]}},css:function(F,D,H){if(D=="width"||D=="height"){var J,E={position:"absolute",visibility:"hidden",display:"block"},I=D=="width"?["Left","Right"]:["Top","Bottom"];function G(){J=D=="width"?F.offsetWidth:F.offsetHeight;var L=0,K=0;n.each(I,function(){L+=parseFloat(n.curCSS(F,"padding"+this,true))||0;K+=parseFloat(n.curCSS(F,"border"+this+"Width",true))||0});J-=Math.round(L+K)}if(n(F).is(":visible")){G()}else{n.swap(F,E,G)}return Math.max(0,J)}return n.curCSS(F,D,H)},curCSS:function(H,E,F){var K,D=H.style;if(E=="opacity"&&!n.support.opacity){K=n.attr(D,"opacity");return K==""?"1":K}if(E.match(/float/i)){E=v}if(!F&&D&&D[E]){K=D[E]}else{if(p.getComputedStyle){if(E.match(/float/i)){E="float"}E=E.replace(/([A-Z])/g,"-$1").toLowerCase();var L=p.getComputedStyle(H,null);if(L){K=L.getPropertyValue(E)}if(E=="opacity"&&K==""){K="1"}}else{if(H.currentStyle){var I=E.replace(/\-(\w)/g,function(M,N){return N.toUpperCase()});K=H.currentStyle[E]||H.currentStyle[I];if(!/^\d+(px)?$/i.test(K)&&/^\d/.test(K)){var G=D.left,J=H.runtimeStyle.left;H.runtimeStyle.left=H.currentStyle.left;D.left=K||0;K=D.pixelLeft+"px";D.left=G;H.runtimeStyle.left=J}}}}return K},clean:function(E,J,H){J=J||document;if(typeof J.createElement==="undefined"){J=J.ownerDocument||J[0]&&J[0].ownerDocument||document}if(!H&&E.length===1&&typeof E[0]==="string"){var G=/^<(\w+)\s*\/?>$/.exec(E[0]);if(G){return[J.createElement(G[1])]}}var F=[],D=[],K=J.createElement("div");n.each(E,function(O,Q){if(typeof Q==="number"){Q+=""}if(!Q){return}if(typeof Q==="string"){Q=Q.replace(/(<(\w+)[^>]*?)\/>/g,function(S,T,R){return R.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?S:T+">"});var N=n.trim(Q).toLowerCase();var P=!N.indexOf("",""]||!N.indexOf("",""]||N.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
      "]||!N.indexOf("",""]||(!N.indexOf("",""]||!N.indexOf("",""]||!n.support.htmlSerialize&&[1,"div

      "]||[0,"",""];K.innerHTML=P[1]+Q+P[2];while(P[0]--){K=K.lastChild}if(!n.support.tbody){var M=!N.indexOf(""&&N.indexOf("=0;--L){if(n.nodeName(M[L],"tbody")&&!M[L].childNodes.length){M[L].parentNode.removeChild(M[L])}}}if(!n.support.leadingWhitespace&&/^\s/.test(Q)){K.insertBefore(J.createTextNode(Q.match(/^\s*/)[0]),K.firstChild)}Q=n.makeArray(K.childNodes)}if(Q.nodeType){F.push(Q)}else{F=n.merge(F,Q)}});if(H){for(var I=0;F[I];I++){if(n.nodeName(F[I],"script")&&(!F[I].type||F[I].type.toLowerCase()==="text/javascript")){D.push(F[I].parentNode?F[I].parentNode.removeChild(F[I]):F[I])}else{if(F[I].nodeType===1){F.splice.apply(F,[I+1,0].concat(n.makeArray(F[I].getElementsByTagName("script"))))}H.appendChild(F[I])}}return D}return F},attr:function(I,F,J){if(!I||I.nodeType==3||I.nodeType==8){return g}var G=!n.isXMLDoc(I),K=J!==g;F=G&&n.props[F]||F;if(I.tagName){var E=/href|src|style/.test(F);if(F=="selected"&&I.parentNode){I.parentNode.selectedIndex}if(F in I&&G&&!E){if(K){if(F=="type"&&n.nodeName(I,"input")&&I.parentNode){throw"type property can't be changed"}I[F]=J}if(n.nodeName(I,"form")&&I.getAttributeNode(F)){return I.getAttributeNode(F).nodeValue}if(F=="tabIndex"){var H=I.getAttributeNode("tabIndex");return H&&H.specified?H.value:I.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)?0:g}return I[F]}if(!n.support.style&&G&&F=="style"){return n.attr(I.style,"cssText",J)}if(K){I.setAttribute(F,""+J)}var D=!n.support.hrefNormalized&&G&&E?I.getAttribute(F,2):I.getAttribute(F);return D===null?g:D}if(!n.support.opacity&&F=="opacity"){if(K){I.zoom=1;I.filter=(I.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(J)+""=="NaN"?"":"alpha(opacity="+J*100+")")}return I.filter&&I.filter.indexOf("opacity=")>=0?(parseFloat(I.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}F=F.replace(/-([a-z])/ig,function(L,M){return M.toUpperCase()});if(K){I[F]=J}return I[F]},trim:function(D){return(D||"").replace(/^\s+|\s+$/g,"")},makeArray:function(F){var D=[];if(F!=null){var E=F.length;if(E==null||typeof F==="string"||n.isFunction(F)||F.setInterval){D[0]=F}else{while(E){D[--E]=F[E]}}}return D},inArray:function(F,G){for(var D=0,E=G.length;D*",this).remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(D,E){n.fn[D]=function(){return this.each(E,arguments)}});function j(D,E){return D[0]&&parseInt(n.curCSS(D[0],E,true),10)||0}var h="jQuery"+e(),u=0,z={};n.extend({cache:{},data:function(E,D,F){E=E==l?z:E;var G=E[h];if(!G){G=E[h]=++u}if(D&&!n.cache[G]){n.cache[G]={}}if(F!==g){n.cache[G][D]=F}return D?n.cache[G][D]:G},removeData:function(E,D){E=E==l?z:E;var G=E[h];if(D){if(n.cache[G]){delete n.cache[G][D];D="";for(D in n.cache[G]){break}if(!D){n.removeData(E)}}}else{try{delete E[h]}catch(F){if(E.removeAttribute){E.removeAttribute(h)}}delete n.cache[G]}},queue:function(E,D,G){if(E){D=(D||"fx")+"queue";var F=n.data(E,D);if(!F||n.isArray(G)){F=n.data(E,D,n.makeArray(G))}else{if(G){F.push(G)}}}return F},dequeue:function(G,F){var D=n.queue(G,F),E=D.shift();if(!F||F==="fx"){E=D[0]}if(E!==g){E.call(G)}}});n.fn.extend({data:function(D,F){var G=D.split(".");G[1]=G[1]?"."+G[1]:"";if(F===g){var E=this.triggerHandler("getData"+G[1]+"!",[G[0]]);if(E===g&&this.length){E=n.data(this[0],D)}return E===g&&G[1]?this.data(G[0]):E}else{return this.trigger("setData"+G[1]+"!",[G[0],F]).each(function(){n.data(this,D,F)})}},removeData:function(D){return this.each(function(){n.removeData(this,D)})},queue:function(D,E){if(typeof D!=="string"){E=D;D="fx"}if(E===g){return n.queue(this[0],D)}return this.each(function(){var F=n.queue(this,D,E);if(D=="fx"&&F.length==1){F[0].call(this)}})},dequeue:function(D){return this.each(function(){n.dequeue(this,D)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.1 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var N=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,I=0,F=Object.prototype.toString;var E=function(ae,S,aa,V){aa=aa||[];S=S||document;if(S.nodeType!==1&&S.nodeType!==9){return[]}if(!ae||typeof ae!=="string"){return aa}var ab=[],ac,Y,ah,ag,Z,R,Q=true;N.lastIndex=0;while((ac=N.exec(ae))!==null){ab.push(ac[1]);if(ac[2]){R=RegExp.rightContext;break}}if(ab.length>1&&G.match.POS.exec(ae)){if(ab.length===2&&G.relative[ab[0]]){var U="",X;while((X=G.match.POS.exec(ae))){U+=X[0];ae=ae.replace(G.match.POS,"")}Y=E.filter(U,E(/\s$/.test(ae)?ae+"*":ae,S))}else{Y=G.relative[ab[0]]?[S]:E(ab.shift(),S);while(ab.length){var P=[];ae=ab.shift();if(G.relative[ae]){ae+=ab.shift()}for(var af=0,ad=Y.length;af0){ah=D(Y)}else{Q=false}while(ab.length){var T=ab.pop(),W=T;if(!G.relative[T]){T=""}else{W=ab.pop()}if(W==null){W=S}G.relative[T](ah,W,M(S))}}if(!ah){ah=Y}if(!ah){throw"Syntax error, unrecognized expression: "+(T||ae)}if(F.call(ah)==="[object Array]"){if(!Q){aa.push.apply(aa,ah)}else{if(S.nodeType===1){for(var af=0;ah[af]!=null;af++){if(ah[af]&&(ah[af]===true||ah[af].nodeType===1&&H(S,ah[af]))){aa.push(Y[af])}}}else{for(var af=0;ah[af]!=null;af++){if(ah[af]&&ah[af].nodeType===1){aa.push(Y[af])}}}}}else{D(ah,aa)}if(R){E(R,S,aa,V)}return aa};E.matches=function(P,Q){return E(P,null,null,Q)};E.find=function(V,S){var W,Q;if(!V){return[]}for(var R=0,P=G.order.length;R":function(U,Q,V){if(typeof Q==="string"&&!/\W/.test(Q)){Q=V?Q:Q.toUpperCase();for(var R=0,P=U.length;R=0){if(!R){P.push(Q[T])}}else{if(R){Q[T]=false}}}return false},ID:function(P){return P[1].replace(/\\/g,"")},TAG:function(Q,P){for(var R=0;!P[R];R++){}return M(P[R])?Q[1]:Q[1].toUpperCase()},CHILD:function(P){if(P[1]=="nth"){var Q=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(P[2]=="even"&&"2n"||P[2]=="odd"&&"2n+1"||!/\D/.test(P[2])&&"0n+"+P[2]||P[2]);P[2]=(Q[1]+(Q[2]||1))-0;P[3]=Q[3]-0}P[0]="done"+(I++);return P},ATTR:function(Q){var P=Q[1];if(G.attrMap[P]){Q[1]=G.attrMap[P]}if(Q[2]==="~="){Q[4]=" "+Q[4]+" "}return Q},PSEUDO:function(T,Q,R,P,U){if(T[1]==="not"){if(T[3].match(N).length>1){T[3]=E(T[3],null,null,Q)}else{var S=E.filter(T[3],Q,R,true^U);if(!R){P.push.apply(P,S)}return false}}else{if(G.match.POS.test(T[0])){return true}}return T},POS:function(P){P.unshift(true);return P}},filters:{enabled:function(P){return P.disabled===false&&P.type!=="hidden"},disabled:function(P){return P.disabled===true},checked:function(P){return P.checked===true},selected:function(P){P.parentNode.selectedIndex;return P.selected===true},parent:function(P){return !!P.firstChild},empty:function(P){return !P.firstChild},has:function(R,Q,P){return !!E(P[3],R).length},header:function(P){return/h\d/i.test(P.nodeName)},text:function(P){return"text"===P.type},radio:function(P){return"radio"===P.type},checkbox:function(P){return"checkbox"===P.type},file:function(P){return"file"===P.type},password:function(P){return"password"===P.type},submit:function(P){return"submit"===P.type},image:function(P){return"image"===P.type},reset:function(P){return"reset"===P.type},button:function(P){return"button"===P.type||P.nodeName.toUpperCase()==="BUTTON"},input:function(P){return/input|select|textarea|button/i.test(P.nodeName)}},setFilters:{first:function(Q,P){return P===0},last:function(R,Q,P,S){return Q===S.length-1},even:function(Q,P){return P%2===0},odd:function(Q,P){return P%2===1},lt:function(R,Q,P){return QP[3]-0},nth:function(R,Q,P){return P[3]-0==Q},eq:function(R,Q,P){return P[3]-0==Q}},filter:{CHILD:function(P,S){var V=S[1],W=P.parentNode;var U="child"+W.childNodes.length;if(W&&(!W[U]||!P.nodeIndex)){var T=1;for(var Q=W.firstChild;Q;Q=Q.nextSibling){if(Q.nodeType==1){Q.nodeIndex=T++}}W[U]=T-1}if(V=="first"){return P.nodeIndex==1}else{if(V=="last"){return P.nodeIndex==W[U]}else{if(V=="only"){return W[U]==1}else{if(V=="nth"){var Y=false,R=S[2],X=S[3];if(R==1&&X==0){return true}if(R==0){if(P.nodeIndex==X){Y=true}}else{if((P.nodeIndex-X)%R==0&&(P.nodeIndex-X)/R>=0){Y=true}}return Y}}}}},PSEUDO:function(V,R,S,W){var Q=R[1],T=G.filters[Q];if(T){return T(V,S,R,W)}else{if(Q==="contains"){return(V.textContent||V.innerText||"").indexOf(R[3])>=0}else{if(Q==="not"){var U=R[3];for(var S=0,P=U.length;S=0:S==="~="?(" "+U+" ").indexOf(Q)>=0:!R[4]?P:S==="!="?U!=Q:S==="^="?U.indexOf(Q)===0:S==="$="?U.substr(U.length-Q.length)===Q:S==="|="?U===Q||U.substr(0,Q.length+1)===Q+"-":false},POS:function(T,Q,R,U){var P=Q[2],S=G.setFilters[P];if(S){return S(T,R,Q,U)}}}};for(var K in G.match){G.match[K]=RegExp(G.match[K].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var D=function(Q,P){Q=Array.prototype.slice.call(Q);if(P){P.push.apply(P,Q);return P}return Q};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(J){D=function(T,S){var Q=S||[];if(F.call(T)==="[object Array]"){Array.prototype.push.apply(Q,T)}else{if(typeof T.length==="number"){for(var R=0,P=T.length;R";var P=document.documentElement;P.insertBefore(Q,P.firstChild);if(!!document.getElementById(R)){G.find.ID=function(T,U){if(U.getElementById){var S=U.getElementById(T[1]);return S?S.id===T[1]||S.getAttributeNode&&S.getAttributeNode("id").nodeValue===T[1]?[S]:g:[]}};G.filter.ID=function(U,S){var T=U.getAttributeNode&&U.getAttributeNode("id");return U.nodeType===1&&T&&T.nodeValue===S}}P.removeChild(Q)})();(function(){var P=document.createElement("div");P.appendChild(document.createComment(""));if(P.getElementsByTagName("*").length>0){G.find.TAG=function(Q,U){var T=U.getElementsByTagName(Q[1]);if(Q[1]==="*"){var S=[];for(var R=0;T[R];R++){if(T[R].nodeType===1){S.push(T[R])}}T=S}return T}}P.innerHTML="";if(P.firstChild.getAttribute("href")!=="#"){G.attrHandle.href=function(Q){return Q.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var P=E;E=function(T,S,Q,R){S=S||document;if(!R&&S.nodeType===9){try{return D(S.querySelectorAll(T),Q)}catch(U){}}return P(T,S,Q,R)};E.find=P.find;E.filter=P.filter;E.selectors=P.selectors;E.matches=P.matches})()}if(document.documentElement.getElementsByClassName){G.order.splice(1,0,"CLASS");G.find.CLASS=function(P,Q){return Q.getElementsByClassName(P[1])}}function L(Q,W,V,Z,X,Y){for(var T=0,R=Z.length;T0){T=P;break}}}P=P[Q]}Y[S]=T}}}var H=document.compareDocumentPosition?function(Q,P){return Q.compareDocumentPosition(P)&16}:function(Q,P){return Q!==P&&(Q.contains?Q.contains(P):true)};var M=function(P){return P.documentElement&&!P.body||P.tagName&&P.ownerDocument&&!P.ownerDocument.body};n.find=E;n.filter=E.filter;n.expr=E.selectors;n.expr[":"]=n.expr.filters;E.selectors.filters.hidden=function(P){return"hidden"===P.type||n.css(P,"display")==="none"||n.css(P,"visibility")==="hidden"};E.selectors.filters.visible=function(P){return"hidden"!==P.type&&n.css(P,"display")!=="none"&&n.css(P,"visibility")!=="hidden"};E.selectors.filters.animated=function(P){return n.grep(n.timers,function(Q){return P===Q.elem}).length};n.multiFilter=function(R,P,Q){if(Q){R=":not("+R+")"}return E.matches(R,P)};n.dir=function(R,Q){var P=[],S=R[Q];while(S&&S!=document){if(S.nodeType==1){P.push(S)}S=S[Q]}return P};n.nth=function(T,P,R,S){P=P||1;var Q=0;for(;T;T=T[R]){if(T.nodeType==1&&++Q==P){break}}return T};n.sibling=function(R,Q){var P=[];for(;R;R=R.nextSibling){if(R.nodeType==1&&R!=Q){P.push(R)}}return P};return;l.Sizzle=E})();n.event={add:function(H,E,G,J){if(H.nodeType==3||H.nodeType==8){return}if(H.setInterval&&H!=l){H=l}if(!G.guid){G.guid=this.guid++}if(J!==g){var F=G;G=this.proxy(F);G.data=J}var D=n.data(H,"events")||n.data(H,"events",{}),I=n.data(H,"handle")||n.data(H,"handle",function(){return typeof n!=="undefined"&&!n.event.triggered?n.event.handle.apply(arguments.callee.elem,arguments):g});I.elem=H;n.each(E.split(/\s+/),function(L,M){var N=M.split(".");M=N.shift();G.type=N.slice().sort().join(".");var K=D[M];if(n.event.specialAll[M]){n.event.specialAll[M].setup.call(H,J,N)}if(!K){K=D[M]={};if(!n.event.special[M]||n.event.special[M].setup.call(H,J,N)===false){if(H.addEventListener){H.addEventListener(M,I,false)}else{if(H.attachEvent){H.attachEvent("on"+M,I)}}}}K[G.guid]=G;n.event.global[M]=true});H=null},guid:1,global:{},remove:function(J,G,I){if(J.nodeType==3||J.nodeType==8){return}var F=n.data(J,"events"),E,D;if(F){if(G===g||(typeof G==="string"&&G.charAt(0)==".")){for(var H in F){this.remove(J,H+(G||""))}}else{if(G.type){I=G.handler;G=G.type}n.each(G.split(/\s+/),function(L,N){var P=N.split(".");N=P.shift();var M=RegExp("(^|\\.)"+P.slice().sort().join(".*\\.")+"(\\.|$)");if(F[N]){if(I){delete F[N][I.guid]}else{for(var O in F[N]){if(M.test(F[N][O].type)){delete F[N][O]}}}if(n.event.specialAll[N]){n.event.specialAll[N].teardown.call(J,P)}for(E in F[N]){break}if(!E){if(!n.event.special[N]||n.event.special[N].teardown.call(J,P)===false){if(J.removeEventListener){J.removeEventListener(N,n.data(J,"handle"),false)}else{if(J.detachEvent){J.detachEvent("on"+N,n.data(J,"handle"))}}}E=null;delete F[N]}}})}for(E in F){break}if(!E){var K=n.data(J,"handle");if(K){K.elem=null}n.removeData(J,"events");n.removeData(J,"handle")}}},trigger:function(H,J,G,D){var F=H.type||H;if(!D){H=typeof H==="object"?H[h]?H:n.extend(n.Event(F),H):n.Event(F);if(F.indexOf("!")>=0){H.type=F=F.slice(0,-1);H.exclusive=true}if(!G){H.stopPropagation();if(this.global[F]){n.each(n.cache,function(){if(this.events&&this.events[F]){n.event.trigger(H,J,this.handle.elem)}})}}if(!G||G.nodeType==3||G.nodeType==8){return g}H.result=g;H.target=G;J=n.makeArray(J);J.unshift(H)}H.currentTarget=G;var I=n.data(G,"handle");if(I){I.apply(G,J)}if((!G[F]||(n.nodeName(G,"a")&&F=="click"))&&G["on"+F]&&G["on"+F].apply(G,J)===false){H.result=false}if(!D&&G[F]&&!H.isDefaultPrevented()&&!(n.nodeName(G,"a")&&F=="click")){this.triggered=true;try{G[F]()}catch(K){}}this.triggered=false;if(!H.isPropagationStopped()){var E=G.parentNode||G.ownerDocument;if(E){n.event.trigger(H,J,E,true)}}},handle:function(J){var I,D;J=arguments[0]=n.event.fix(J||l.event);var K=J.type.split(".");J.type=K.shift();I=!K.length&&!J.exclusive;var H=RegExp("(^|\\.)"+K.slice().sort().join(".*\\.")+"(\\.|$)");D=(n.data(this,"events")||{})[J.type];for(var F in D){var G=D[F];if(I||H.test(G.type)){J.handler=G;J.data=G.data;var E=G.apply(this,arguments);if(E!==g){J.result=E;if(E===false){J.preventDefault();J.stopPropagation()}}if(J.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(G){if(G[h]){return G}var E=G;G=n.Event(E);for(var F=this.props.length,I;F;){I=this.props[--F];G[I]=E[I]}if(!G.target){G.target=G.srcElement||document}if(G.target.nodeType==3){G.target=G.target.parentNode}if(!G.relatedTarget&&G.fromElement){G.relatedTarget=G.fromElement==G.target?G.toElement:G.fromElement}if(G.pageX==null&&G.clientX!=null){var H=document.documentElement,D=document.body;G.pageX=G.clientX+(H&&H.scrollLeft||D&&D.scrollLeft||0)-(H.clientLeft||0);G.pageY=G.clientY+(H&&H.scrollTop||D&&D.scrollTop||0)-(H.clientTop||0)}if(!G.which&&((G.charCode||G.charCode===0)?G.charCode:G.keyCode)){G.which=G.charCode||G.keyCode}if(!G.metaKey&&G.ctrlKey){G.metaKey=G.ctrlKey}if(!G.which&&G.button){G.which=(G.button&1?1:(G.button&2?3:(G.button&4?2:0)))}return G},proxy:function(E,D){D=D||function(){return E.apply(this,arguments)};D.guid=E.guid=E.guid||D.guid||this.guid++;return D},special:{ready:{setup:A,teardown:function(){}}},specialAll:{live:{setup:function(D,E){n.event.add(this,E[0],c)},teardown:function(F){if(F.length){var D=0,E=RegExp("(^|\\.)"+F[0]+"(\\.|$)");n.each((n.data(this,"events").live||{}),function(){if(E.test(this.type)){D++}});if(D<1){n.event.remove(this,F[0],c)}}}}}};n.Event=function(D){if(!this.preventDefault){return new n.Event(D)}if(D&&D.type){this.originalEvent=D;this.type=D.type;this.timeStamp=D.timeStamp}else{this.type=D}if(!this.timeStamp){this.timeStamp=e()}this[h]=true};function k(){return false}function t(){return true}n.Event.prototype={preventDefault:function(){this.isDefaultPrevented=t;var D=this.originalEvent;if(!D){return}if(D.preventDefault){D.preventDefault()}D.returnValue=false},stopPropagation:function(){this.isPropagationStopped=t;var D=this.originalEvent;if(!D){return}if(D.stopPropagation){D.stopPropagation()}D.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=t;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(E){var D=E.relatedTarget;while(D&&D!=this){try{D=D.parentNode}catch(F){D=this}}if(D!=this){E.type=E.data;n.event.handle.apply(this,arguments)}};n.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(E,D){n.event.special[D]={setup:function(){n.event.add(this,E,a,D)},teardown:function(){n.event.remove(this,E,a)}}});n.fn.extend({bind:function(E,F,D){return E=="unload"?this.one(E,F,D):this.each(function(){n.event.add(this,E,D||F,D&&F)})},one:function(F,G,E){var D=n.event.proxy(E||G,function(H){n(this).unbind(H,D);return(E||G).apply(this,arguments)});return this.each(function(){n.event.add(this,F,D,E&&G)})},unbind:function(E,D){return this.each(function(){n.event.remove(this,E,D)})},trigger:function(D,E){return this.each(function(){n.event.trigger(D,E,this)})},triggerHandler:function(D,F){if(this[0]){var E=n.Event(D);E.preventDefault();E.stopPropagation();n.event.trigger(E,F,this[0]);return E.result}},toggle:function(F){var D=arguments,E=1;while(E=0){var D=F.slice(H,F.length);F=F.slice(0,H)}var G="GET";if(I){if(n.isFunction(I)){J=I;I=null}else{if(typeof I==="object"){I=n.param(I);G="POST"}}}var E=this;n.ajax({url:F,type:G,dataType:"html",data:I,complete:function(L,K){if(K=="success"||K=="notmodified"){E.html(D?n("
      ").append(L.responseText.replace(//g,"")).find(D):L.responseText)}if(J){E.each(J,[L.responseText,K,L])}}});return this},serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?n.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(D,E){var F=n(this).val();return F==null?null:n.isArray(F)?n.map(F,function(H,G){return{name:E.name,value:H}}):{name:E.name,value:F}}).get()}});n.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(D,E){n.fn[E]=function(F){return this.bind(E,F)}});var q=e();n.extend({get:function(D,F,G,E){if(n.isFunction(F)){G=F;F=null}return n.ajax({type:"GET",url:D,data:F,success:G,dataType:E})},getScript:function(D,E){return n.get(D,null,E,"script")},getJSON:function(D,E,F){return n.get(D,E,F,"json")},post:function(D,F,G,E){if(n.isFunction(F)){G=F;F={}}return n.ajax({type:"POST",url:D,data:F,success:G,dataType:E})},ajaxSetup:function(D){n.extend(n.ajaxSettings,D)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(L){L=n.extend(true,L,n.extend(true,{},n.ajaxSettings,L));var V,E=/=\?(&|$)/g,Q,U,F=L.type.toUpperCase();if(L.data&&L.processData&&typeof L.data!=="string"){L.data=n.param(L.data)}if(L.dataType=="jsonp"){if(F=="GET"){if(!L.url.match(E)){L.url+=(L.url.match(/\?/)?"&":"?")+(L.jsonp||"callback")+"=?"}}else{if(!L.data||!L.data.match(E)){L.data=(L.data?L.data+"&":"")+(L.jsonp||"callback")+"=?"}}L.dataType="json"}if(L.dataType=="json"&&(L.data&&L.data.match(E)||L.url.match(E))){V="jsonp"+q++;if(L.data){L.data=(L.data+"").replace(E,"="+V+"$1")}L.url=L.url.replace(E,"="+V+"$1");L.dataType="script";l[V]=function(W){U=W;H();K();l[V]=g;try{delete l[V]}catch(X){}if(G){G.removeChild(S)}}}if(L.dataType=="script"&&L.cache==null){L.cache=false}if(L.cache===false&&F=="GET"){var D=e();var T=L.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+D+"$2");L.url=T+((T==L.url)?(L.url.match(/\?/)?"&":"?")+"_="+D:"")}if(L.data&&F=="GET"){L.url+=(L.url.match(/\?/)?"&":"?")+L.data;L.data=null}if(L.global&&!n.active++){n.event.trigger("ajaxStart")}var P=/^(\w+:)?\/\/([^\/?#]+)/.exec(L.url);if(L.dataType=="script"&&F=="GET"&&P&&(P[1]&&P[1]!=location.protocol||P[2]!=location.host)){var G=document.getElementsByTagName("head")[0];var S=document.createElement("script");S.src=L.url;if(L.scriptCharset){S.charset=L.scriptCharset}if(!V){var N=false;S.onload=S.onreadystatechange=function(){if(!N&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){N=true;H();K();G.removeChild(S)}}}G.appendChild(S);return g}var J=false;var I=L.xhr();if(L.username){I.open(F,L.url,L.async,L.username,L.password)}else{I.open(F,L.url,L.async)}try{if(L.data){I.setRequestHeader("Content-Type",L.contentType)}if(L.ifModified){I.setRequestHeader("If-Modified-Since",n.lastModified[L.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}I.setRequestHeader("X-Requested-With","XMLHttpRequest");I.setRequestHeader("Accept",L.dataType&&L.accepts[L.dataType]?L.accepts[L.dataType]+", */*":L.accepts._default)}catch(R){}if(L.beforeSend&&L.beforeSend(I,L)===false){if(L.global&&!--n.active){n.event.trigger("ajaxStop")}I.abort();return false}if(L.global){n.event.trigger("ajaxSend",[I,L])}var M=function(W){if(I.readyState==0){if(O){clearInterval(O);O=null;if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}}else{if(!J&&I&&(I.readyState==4||W=="timeout")){J=true;if(O){clearInterval(O);O=null}Q=W=="timeout"?"timeout":!n.httpSuccess(I)?"error":L.ifModified&&n.httpNotModified(I,L.url)?"notmodified":"success";if(Q=="success"){try{U=n.httpData(I,L.dataType,L)}catch(Y){Q="parsererror"}}if(Q=="success"){var X;try{X=I.getResponseHeader("Last-Modified")}catch(Y){}if(L.ifModified&&X){n.lastModified[L.url]=X}if(!V){H()}}else{n.handleError(L,I,Q)}K();if(L.async){I=null}}}};if(L.async){var O=setInterval(M,13);if(L.timeout>0){setTimeout(function(){if(I){if(!J){M("timeout")}if(I){I.abort()}}},L.timeout)}}try{I.send(L.data)}catch(R){n.handleError(L,I,null,R)}if(!L.async){M()}function H(){if(L.success){L.success(U,Q)}if(L.global){n.event.trigger("ajaxSuccess",[I,L])}}function K(){if(L.complete){L.complete(I,Q)}if(L.global){n.event.trigger("ajaxComplete",[I,L])}if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}return I},handleError:function(E,G,D,F){if(E.error){E.error(G,D,F)}if(E.global){n.event.trigger("ajaxError",[G,E,F])}},active:0,httpSuccess:function(E){try{return !E.status&&location.protocol=="file:"||(E.status>=200&&E.status<300)||E.status==304||E.status==1223}catch(D){}return false},httpNotModified:function(F,D){try{var G=F.getResponseHeader("Last-Modified");return F.status==304||G==n.lastModified[D]}catch(E){}return false},httpData:function(I,G,F){var E=I.getResponseHeader("content-type"),D=G=="xml"||!G&&E&&E.indexOf("xml")>=0,H=D?I.responseXML:I.responseText;if(D&&H.documentElement.tagName=="parsererror"){throw"parsererror"}if(F&&F.dataFilter){H=F.dataFilter(H,G)}if(typeof H==="string"){if(G=="script"){n.globalEval(H)}if(G=="json"){H=l["eval"]("("+H+")")}}return H},param:function(D){var F=[];function G(H,I){F[F.length]=encodeURIComponent(H)+"="+encodeURIComponent(I)}if(n.isArray(D)||D.jquery){n.each(D,function(){G(this.name,this.value)})}else{for(var E in D){if(n.isArray(D[E])){n.each(D[E],function(){G(E,this)})}else{G(E,n.isFunction(D[E])?D[E]():D[E])}}}return F.join("&").replace(/%20/g,"+")}});var m={},d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function s(E,D){var F={};n.each(d.concat.apply([],d.slice(0,D)),function(){F[this]=E});return F}n.fn.extend({show:function(I,K){if(I){return this.animate(s("show",3),I,K)}else{for(var G=0,E=this.length;G").appendTo("body");J=H.css("display");if(J==="none"){J="block"}H.remove();m[F]=J}this[G].style.display=n.data(this[G],"olddisplay",J)}}return this}},hide:function(G,H){if(G){return this.animate(s("hide",3),G,H)}else{for(var F=0,E=this.length;F=0;G--){if(F[G].elem==this){if(D){F[G](true)}F.splice(G,1)}}});if(!D){this.dequeue()}return this}});n.each({slideDown:s("show",1),slideUp:s("hide",1),slideToggle:s("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(D,E){n.fn[D]=function(F,G){return this.animate(E,F,G)}});n.extend({speed:function(F,G,E){var D=typeof F==="object"?F:{complete:E||!E&&G||n.isFunction(F)&&F,duration:F,easing:E&&G||G&&!n.isFunction(G)&&G};D.duration=n.fx.off?0:typeof D.duration==="number"?D.duration:n.fx.speeds[D.duration]||n.fx.speeds._default;D.old=D.complete;D.complete=function(){if(D.queue!==false){n(this).dequeue()}if(n.isFunction(D.old)){D.old.call(this)}};return D},easing:{linear:function(F,G,D,E){return D+E*F},swing:function(F,G,D,E){return((-Math.cos(F*Math.PI)/2)+0.5)*E+D}},timers:[],timerId:null,fx:function(E,D,F){this.options=D;this.elem=E;this.prop=F;if(!D.orig){D.orig={}}}});n.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(n.fx.step[this.prop]||n.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(E){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var D=parseFloat(n.css(this.elem,this.prop,E));return D&&D>-10000?D:parseFloat(n.curCSS(this.elem,this.prop))||0},custom:function(H,G,F){this.startTime=e();this.start=H;this.end=G;this.unit=F||this.unit||"px";this.now=this.start;this.pos=this.state=0;var D=this;function E(I){return D.step(I)}E.elem=this.elem;n.timers.push(E);if(E()&&n.timerId==null){n.timerId=setInterval(function(){var J=n.timers;for(var I=0;I=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var D=true;for(var E in this.options.curAnim){if(this.options.curAnim[E]!==true){D=false}}if(D){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(n.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){n(this.elem).hide()}if(this.options.hide||this.options.show){for(var H in this.options.curAnim){n.attr(this.elem.style,H,this.options.orig[H])}}}if(D){this.options.complete.call(this.elem)}return false}else{var I=F-this.startTime;this.state=I/this.options.duration;this.pos=n.easing[this.options.easing||(n.easing.swing?"swing":"linear")](this.state,I,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};n.extend(n.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(D){n.attr(D.elem.style,"opacity",D.now)},_default:function(D){if(D.elem.style&&D.elem.style[D.prop]!=null){D.elem.style[D.prop]=D.now+D.unit}else{D.elem[D.prop]=D.now}}}});if(document.documentElement.getBoundingClientRect){n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}var F=this[0].getBoundingClientRect(),I=this[0].ownerDocument,E=I.body,D=I.documentElement,K=D.clientTop||E.clientTop||0,J=D.clientLeft||E.clientLeft||0,H=F.top+(self.pageYOffset||n.boxModel&&D.scrollTop||E.scrollTop)-K,G=F.left+(self.pageXOffset||n.boxModel&&D.scrollLeft||E.scrollLeft)-J;return{top:H,left:G}}}else{n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}n.offset.initialized||n.offset.initialize();var I=this[0],F=I.offsetParent,E=I,N=I.ownerDocument,L,G=N.documentElement,J=N.body,K=N.defaultView,D=K.getComputedStyle(I,null),M=I.offsetTop,H=I.offsetLeft;while((I=I.parentNode)&&I!==J&&I!==G){L=K.getComputedStyle(I,null);M-=I.scrollTop,H-=I.scrollLeft;if(I===F){M+=I.offsetTop,H+=I.offsetLeft;if(n.offset.doesNotAddBorder&&!(n.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(I.tagName))){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}E=F,F=I.offsetParent}if(n.offset.subtractsBorderForOverflowNotVisible&&L.overflow!=="visible"){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}D=L}if(D.position==="relative"||D.position==="static"){M+=J.offsetTop,H+=J.offsetLeft}if(D.position==="fixed"){M+=Math.max(G.scrollTop,J.scrollTop),H+=Math.max(G.scrollLeft,J.scrollLeft)}return{top:M,left:H}}}n.offset={initialize:function(){if(this.initialized){return}var K=document.body,E=document.createElement("div"),G,F,M,H,L,D,I=K.style.marginTop,J='
      ';L={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(D in L){E.style[D]=L[D]}E.innerHTML=J;K.insertBefore(E,K.firstChild);G=E.firstChild,F=G.firstChild,H=G.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(F.offsetTop!==5);this.doesAddBorderForTableAndCells=(H.offsetTop===5);G.style.overflow="hidden",G.style.position="relative";this.subtractsBorderForOverflowNotVisible=(F.offsetTop===-5);K.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(K.offsetTop===0);K.style.marginTop=I;K.removeChild(E);this.initialized=true},bodyOffset:function(D){n.offset.initialized||n.offset.initialize();var F=D.offsetTop,E=D.offsetLeft;if(n.offset.doesNotIncludeMarginInBodyOffset){F+=parseInt(n.curCSS(D,"marginTop",true),10)||0,E+=parseInt(n.curCSS(D,"marginLeft",true),10)||0}return{top:F,left:E}}};n.fn.extend({position:function(){var H=0,G=0,E;if(this[0]){var F=this.offsetParent(),I=this.offset(),D=/^body|html$/i.test(F[0].tagName)?{top:0,left:0}:F.offset();I.top-=j(this,"marginTop");I.left-=j(this,"marginLeft");D.top+=j(F,"borderTopWidth");D.left+=j(F,"borderLeftWidth");E={top:I.top-D.top,left:I.left-D.left}}return E},offsetParent:function(){var D=this[0].offsetParent||document.body;while(D&&(!/^body|html$/i.test(D.tagName)&&n.css(D,"position")=="static")){D=D.offsetParent}return n(D)}});n.each(["Left","Top"],function(E,D){var F="scroll"+D;n.fn[F]=function(G){if(!this[0]){return null}return G!==g?this.each(function(){this==l||this==document?l.scrollTo(!E?G:n(l).scrollLeft(),E?G:n(l).scrollTop()):this[F]=G}):this[0]==l||this[0]==document?self[E?"pageYOffset":"pageXOffset"]||n.boxModel&&document.documentElement[F]||document.body[F]:this[0][F]}});n.each(["Height","Width"],function(G,E){var D=G?"Left":"Top",F=G?"Right":"Bottom";n.fn["inner"+E]=function(){return this[E.toLowerCase()]()+j(this,"padding"+D)+j(this,"padding"+F)};n.fn["outer"+E]=function(I){return this["inner"+E]()+j(this,"border"+D+"Width")+j(this,"border"+F+"Width")+(I?j(this,"margin"+D)+j(this,"margin"+F):0)};var H=E.toLowerCase();n.fn[H]=function(I){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+E]||document.body["client"+E]:this[0]==document?Math.max(document.documentElement["client"+E],document.body["scroll"+E],document.documentElement["scroll"+E],document.body["offset"+E],document.documentElement["offset"+E]):I===g?(this.length?n.css(this[0],H):null):this.css(H,typeof I==="string"?I:I+"px")}})})(); \ No newline at end of file diff --git a/interfaces/wizard/static/javascript/pagetwo.js b/interfaces/wizard/static/javascript/pagetwo.js new file mode 100644 index 0000000..0939a7a --- /dev/null +++ b/interfaces/wizard/static/javascript/pagetwo.js @@ -0,0 +1,23 @@ +function toggleWebPass() +{ + var web + web = $('#enable_webpass').attr('checked') + if ($('#enable_webpass').attr('checked') == 1) + { + $('#web_user').attr("disabled",""); + $('#web_pass').attr("disabled",""); + + } else { + $('#web_user').attr("disabled","disabled"); + $('#web_pass').attr("value",""); + $('#web_pass').attr("disabled","disabled"); + $('#web_user').attr("value",""); + } +}; + +$(document).ready(function() { + toggleWebPass(); + $('#enable_webpass').bind('change click focus', function() { + toggleWebPass(); + }); +}); \ No newline at end of file diff --git a/interfaces/wizard/static/javascript/restart.js b/interfaces/wizard/static/javascript/restart.js new file mode 100644 index 0000000..df43f72 --- /dev/null +++ b/interfaces/wizard/static/javascript/restart.js @@ -0,0 +1,17 @@ +function complete(){ + $(".hidden").fadeIn("slow"); + $(".disabled").removeAttr('disabled'); + $('#restarting').addClass("hidden"); + $('#complete').removeClass("hidden"); + $('#tips').removeClass("hidden"); +} +$(document).ready(function() { + $.ajax({ + type: "POST", + url: "../tapi", + data: "mode=restart&apikey="+$('#apikey').val() , + complete: function(result){ + setTimeout(complete,7000); + } + }); +}); \ No newline at end of file diff --git a/interfaces/wizard/static/style.css b/interfaces/wizard/static/style.css new file mode 100644 index 0000000..a6f22e3 --- /dev/null +++ b/interfaces/wizard/static/style.css @@ -0,0 +1,232 @@ +body { + font-size:13px; + font-family: sans-serif; + background:#DEDEAF; + padding-left:5%; + padding-right:5%; + padding-bottom:10px; + text-align:center; +} + +#page { + /*background-color: #ccc;*/ + /*margin:30px;*/ + border: 1px solid #000; + text-align:left; + padding:8px; + background-color: #fff; +} + +#inner { + background-color: #fff; + padding:4px 32px 20px 32px; + /*margin:5px;*/ + border: 1px dotted #999966; +} +#content { + min-height:520px; +} + +#logo { + float:center; + /*margin-top:30px;*/ + z-index:40; + margin-bottom:-40px; +} + +hr { + color:#fff; + background-color:#fff; + border: 1px dotted #ccc; + border-style:none none dotted; +} + +.float { + float:left; +} + +.clear { + clear: left; +} + +.inline{display:inline;} + + +.quoteBlock { + padding:5px; + border: 1px dotted #000; + background-color:#f5f5f5; +} + +.success { + color:green; +} + +.failed { + color:red; +} + +#serverBlock { + width:300px; + float:right; +} + +#rightGreyText { + color:#ccc; + width:100%; + text-align:right; + padding-top:3px; + font-style:italic; +} + +.indented { + padding-left:10px; +} + + +.label { + text-align: left; + width: 100px; + padding-right: 20px; + padding-left:10px; +} + +#serverDetails .label{ + display: block; + width: 100px; + float: left; + margin-bottom: 15px; +} +#serverDetails input { + /*width: 150px;*/ +} + +.sup { + vertical-align: sup !important; + +} + +h2 { + /*display:inline;*/ +} + +h1,h2 { + display:inline; +} + +.align-right { + text-align:right; +} + +.align-center { + text-align:center; +} +.float-center { + float:center; +} + +.unselected { + padding:1px 5px 1px 5px; + border: 1px solid red; + margin-left:8px; + margin-right:8px; + color:red; +} + +.selected { + padding:1px 5px 1px 5px; + color: white; + background-color:red; + border: 1px solid red; + margin-left:8px; + margin-right:8px; +} + +.bigger { + font-size:14px; +} + +.padded { + padding:12px; +} + +.bigger input { + font-size:16px; +} + +.required-star { + color:red; +} + +.full-width { + width:100%; +} + +.bigbutton { + font-size:18px !important; +} + +.bold { + font-weight:bold; +} + +.correct { + border: 2px solid #00cc22; +} + +.incorrect { + border: 2px solid red; +} + +.hidden { + display:none !important; +} + +.text-input{ + width:130px; +} +.text-input-wide{ + width:230px; +} +.text-input-thin{ + width:50px; +} +/*Fix for inputs messing up when adding a class in chrome */ +.clearinput +{ + margin-bottom:6px; +} + +.disabled-text { + text-decoration: line-through; + color:#ccc; +} + +#serverQuote{ + width:100%; + height:16px; + display:inline; +} + +.skin-select { + height:190px; +} + +.skin-select img{ + cursor: pointer; +} + +.skin-select-plush img{ + margin-top:30px; +} + +.tips { + display:inline; + font-style:italic; + color:#888; +} + +.error-text { + display:inline; + color:red; +} \ No newline at end of file diff --git a/interfaces/wizard/three.html b/interfaces/wizard/three.html new file mode 100644 index 0000000..07e5bd4 --- /dev/null +++ b/interfaces/wizard/three.html @@ -0,0 +1,63 @@ + + + + + +

      $T('wizard-server')

      +$T('wizard-explain-server') +
      $T('wizard-server-help')
      + $T('wizard-server-help1')

      + + $msg

      + +
      +

      +
      +
      + +
      $T('wizard-example') news.giganews.com
      + +
      + +
      E.g. 119 or 563 for SSL
      + +

      + +
      + +

      + +
      $T('wizard-server-con-explain') E.g. 8 or 20
      + +
      + +
      $T('wizard-server-ssl-explain')
      +
      +
      +
      + +
      $T('wizard-server-text')
      +
      +

      +
      + + + + + + +
      +
      + + + $step + +
      +
      +
      + + \ No newline at end of file diff --git a/interfaces/wizard/two.html b/interfaces/wizard/two.html new file mode 100644 index 0000000..8415ff9 --- /dev/null +++ b/interfaces/wizard/two.html @@ -0,0 +1,50 @@ + + + +
      +
      +

      $T('wizard-access')

      + + >
      + >
      +
      + +
      +
      +
      + +
      + +
      +
      + + >
      +
      +

      $T('wizard-misc')

      + >
      + +
      + + + +
      +

      +
      + + + + + + +
      +
      + + + $step + +
      +
      +
      + + + \ No newline at end of file diff --git a/language/de-de.txt b/language/de-de.txt new file mode 100644 index 0000000..501ce80 --- /dev/null +++ b/language/de-de.txt @@ -0,0 +1,887 @@ +# -*- coding: utf-8 -*- +# Deutsch +# Translation by Severin Heiniger + +special-decimal . +special-1000 , + +# General texts +yes Ja +no Nein +default Standard +none Nichts +KBs KB/s +MB MB +GB GB +hour Stunde +hours Stunden +minute Minuten +minutes Minuten +second Sekunde +seconds Sekunden +month Monat +year Jahr +day Tag +days Tage +daily Täglich +monday Montag +tuesday Dienstag +wednesday Mittwoch +thursday Donnerstag +friday Freitag +saturday Samstag +sunday Sonntag +day-of-month Tag im Monat +filename Dateiname + +# General template elements +signOn Automatisiertes Programm für Usenet-Downloads +button-save Speichern +queued In der Warteschlange +button-back Zurück +button-x X + +# Header +menu-home Startseite +menu-queue Warteschlange +menu-history Verlauf +menu-config Einstellungen +menu-cons Verbindungen +menu-help Hilfe +menu-wiki Wiki +menu-forums Forum +menu-irc IRC +cmenu-general Allgemein +cmenu-folders Ordner +cmenu-switches Schalter +cmenu-servers Server +cmenu-scheduling Planung +cmenu-rss RSS +cmenu-email E-Mail +cmenu-newzbin Index-Seiten +cmenu-cat Kategorien +cmenu-sorting Sortierung + +# Footer +ft-download Downloads +ft-complete Fertige Downloads +ft-speed Geschwindigkeit +ft-queued Warteschlange +ft-paused ANGEHALTEN +ft-buffer@2 %s Artikel im Cache (%s) +ft-sysload Systemlast +ft-warning WARNUNGEN +ft-newRelease@1 Neue Version %s verfügbar unter + +# Main page +addNewJobs Neue Downloads hinzufügen +shutdownOK? Möchten Sie SABnzbd wirklich beenden? +link-shutdown Beenden +link-pause Anhalten +link-resume Fortsetzen +button-add Hinzufügen +add Hinzufügen einer +reportId ID +addFile Datei hinzufügen +category Kategorie +pp Verarbeiten +script Skript +priority Priorität +pp-none Download +pp-repair +Reparieren +pp-unpack +Entpacken +pp-delete +Löschen +pp-n +pp-r R +pp-u E +pp-d L +pr-force Erzwingen +pr-normal Normal +pr-high Hoch +pr-low Gering +enterURL URL +enterID  oder Report-ID + +# Queue page +link-sortByName Nach Name sortieren +link-sortByAge Nach Alter sortieren +link-sortBySize Nach Grösse sortieren +link-hideFiles Dateien verbergen +link-showFiles Dateien anzeigen +onQueueFinish Wenn fertig +shutdownPc Rechner ausschalten +standbyPc Rechner in Bereitschaft versetzen +hibernatePc Rechner in den Ruhezustand versetzen +shutdownSab SABnzbd beenden +speedLimit Geschwindigkeitsbegrenzung +pauseFor Anhalten für +mode Verarbeiten +order Reihenfolge +name Name +remainTotal Verbleibend/Insgesamt +eta ETA +age Alter +button-del Löschen +button-resume Fortsetzen +button-pause Anhalten +unknown unbekannt +fetchingNewzbin@1 Abrufen der Download-ID %s von newzbin.com +error-fetchNewzbin@1 Fehler beim Abrufen der Download-ID %s von newzbin.com -\ + Überprüfen Sie, ob der Benutzername und das Passwort korrekt\ + eingegeben wurden. +fetchNZB@1 Versuche NZB-Datei von %s abzurufen +eoq-actions Aktionen +eoq-scripts Skripts +purgeQueue Warteschlange leeren +purgeQueueConf Alle Elemente in der Warteschlange löschen? + +# History page +purgeHist Verlauf leeren +purgeHistConf Alle Elemente im Verlauf löschen? +hideDetails Details verbergen +showDetails Details anzeigen +sizeHist Grösse des Verlaufs +completed Fertiggestellt +size Grösse +status Status +msg-reAdded@1 Auftrag "%s" wurde wieder zur Warteschlange hinzugefügt + +# Connections page +link-forceDisc Verbindung trennen +askTestEmail Sendet eine Test-E-Mail an Ihr Konto. +link-showLog Protokoll anzeigen +link-showWeblog Web-Protokoll anzeigen +link-testEmail E-Mail testen +logging Protokoll +log-errWarn Fehler/Warnungen +log-info + Info +log-debug + Fehlersuche +connections Verbindungen +thread Thread +emailResult Resultat des E-Mail-Tests +lastWarnings Neuste Warnungen +clearWarnings Leeren +server-blocked Freigeben +warning WARNUNG: +error FEHLER: +server-resolving  Adresse wird aufgelöst... + +# Configuration +configuration Einstellungen +confgFile Konfigurationsdatei +explain-Restart Der Knopf unten startet SABnzbd neu.\n\ + Benutzen Sie ihn, falls ein Stabilitätsproblem vorliegt.\n\ + Die Downloads werden vor dem Neustart angehalten und danach\ + fortgesetzt. +button-restart Neu starten +version Version +uptime Zeit seit Start +error Fehler +badParm Fehlerhafter Parameter +error-badValue@2 Fehlerhafter Wert für %s: %s +error-noFolder@1 Ordner "%s" existiert nicht +error-QnotEmpty Fehler: Ordner kann nicht geändert werden, da die\ + Warteschlange nicht leer ist. +error-noUNC@1 UNC-Pfad "%s" ist hier nicht erlaubt +error-notOctal@1 %s ist kein gültiger Oktal-Wert + +# Config->General +generalConfig Allgemeine Einstellungen +restartRequired Änderungen benötigen einen Neustart von SABnzbd! +webServer SABnzbd-Webserver +opt-host SABnzbd-Host +explain-host Host, auf dem SABnzbd auf Anfragen warten soll. +opt-port SABnzbd-Port +explain-port Port, auf dem SABnzbd auf Anfragen warten soll. +opt-web_dir Web-Oberfläche +explain-web_dir Gestaltung der Web-Oberfläche verändern. +opt-web_dir2 Sekundäre Weboberfläche +explain-web_dir2 Gestaltung der sekundären Web-Oberfläche verändern. +webAuth Authentifizierung für Web-Server +opt-web_username SABnzbd-Benutzername +explain-web_username Optionaler Benutzername für Authentifizierung. +opt-web_password SABnzbd-Passwort +explain-web_password Optionales Passwort für Authentifizierung. +httpsSupport HTTPS-Unterstützung +opt-enable_https HTTPS aktivieren +opt-notInstalled nicht installiert +explain-enable_https Zugriff auf die Oberfläche über HTTPS-Adressen erlauben +opt-https_port HTTPS-Port +explain-https_port Port, auf dem SABnzbd auf HTTPS-Anfragen warten soll. +opt-https_cert HTTPS-Zertifikat +explain-https_cert Dateiname oder Pfad des HTTPS-Zertifikats. +opt-https_key HTTPS-Schlüssel +explain-https_key Dateiname oder Pfad des HTTPS-Schlüssels. +tuning Feinabstimmung +opt-refresh_rate Warteschlange automatisch neu laden +explain-refresh_rate Zeitintervall zwischen dem erneuten Laden der\ + Warteschlange (in Sekunden). 0 schaltet die Funktion ab. +opt-rss_rate RSS-Überprüfung +explain-rss_rate Zeitinterval zwischen dem Auffrischen der RSS-Feeds\ + (in Minuten, Minimalwert ist 15). +opt-bandwidth_limit Begrenzung der Downloadgeschwindigkeit +explain-bandwidth_limit In KB/s, Kilobytes pro Sekunde. +opt-cache_limitstr Begrenzung des Artikel-Caches +explain-cache_limitstr Artikel werden zwischengespeichert, um die Anzahl der\ + Zugriffe auf die Festplatte zu reduzieren.\n\ + In Bytes, gefolgt von einem optionalen K, M oder G.\ + Zum Beispiel: "64M" oder "128M" +opt-cleanup_list Unerwünschte Dateien +explain-cleanup_list Liste der Dateiendungen, die nach dem Herunterladen\ + gelöscht werden sollen.\n\ + Zum Beispiel: .nfo or .nfo, .sfv +button-saveChanges Änderungen speichern +opt-language Sprache +explain-language Wählen Sie die Sprache der Weboberfläche. +opt-apikey API-Schlüssel +explain-apikey Dieser Schlüssel wird verwendet, um anderen Anwendungen\ + Zugriff auf SABnzbd zu gewähren. +button-apikey Neuen Schlüssel generieren +opt-disableApikey API-Key deaktivieren +explain-disableApikey Keinen API-Schlüssel verwenden. +explain-disableApikeyWarn AUF EIGENE GEFAHR VERWENDEN! +restart1 Neustart wird durchgeführt...\n +restart2  \n\ + SABnzbd wurde beendet.\n\ + Warten Sie 5 Sekunden und klicken Sie danach auf\ + folgenden Knopf.\n\n\ + Aktualisieren\n + +# Config->Folders +folderConfig Ordner-Einstellungen +explain-folderConfig HINWEIS: Ordner werden beim Speichern\ + automatisch erstellt.\ + Sie können absolute Pfade angeben, um Ordner ausserhalb\ + der standardmässigen Ordner zu verwenden. +userFolders Benutzer-Ordner +in In +opt-download_dir Temporärer Download-Ordner +explain-download_dir Hier werden noch nicht verarbeitete Downloads abgelegt.\n\ + Kann nur geändert werden wenn die Warteschlange leer ist. +opt-download_free Minimaler freier Speicherplatz im temporären Ordner +explain-download_free SABnzbd hält automatisch an, wenn der freie Speicherplatz\ + unter diesen Wert fällt.\n\ + In Bytes, gefolgt von einem optionalen K, M oder G.\ + Zum Beispiel: "800M" or "8G" +opt-complete_dir Ordner für fertige Downloads +explain-complete_dir Hier werden fertige, verarbeitete Downloads abgelegt.\n\ + Kann von benutzerdefinierten Kategorien ausser Kraft\ + gesetzt werden. +opt-permissions Rechte für fertige Downloads +explain-permissions Rechte für Dateien und Ordner festlegen.\n\ + In oktaler Notation. Zum Beispiel: "755" oder "777" +opt-dirscan_dir Überwachte Ordner +explain-dirscan_dir Ordner, die auf neue NZB-Dateien überwacht werden sollen.\n\ + Erkennt auch ZIP-, RAR- und TAR.GZ-Archive mit NZB-Dateien. +opt-dirscan_speed Geschwindigkeit der Ordner-Überwachung +explain-dirscan_speed Anzahl der Sekunden zwischen zwei Überprüfungen. +opt-script_dir Ordner mit Nachbearbeitungs-Skripts +explain-script_dir Ordner, der benutzerdefinierte Skripts für die\ + Nachbearbeitung von Downloads enthält. +opt-email_dir Ordner mit E-Mail-Vorlagen +explain-email_dir Ordner, der benutzerdefinierte E-Mail-Vorlagen enthält. +systemFolders System-Ordner +opt-cache_dir Cache-Ordner +explain-cache_dir Wird als temporärer Speicherplatz verwendet.\n\ + Kann nur geändert werden, wenn die Warteschlange leer ist.\n\ + Benötigt einen Neustart von SABnzbd! +opt-log_dir Protokoll-Ordner +explain-log_dir Hier werden Protokoll-Dateien von SABnzbd abgelegt.\n\ + Benötigt einen Neustart von SABnzbd! +opt-nzb_backup_dir NZB-Backup-Ordner +explain-nzb_backup_dir Hier werden NZB-Dateien abgelegt. + +# Config->Switches +switchesConfig Verschiedene Schalter +processingSwitches Verarbeitungs-Schalter +opt-quick_check Schnelle Überprüfung aktivieren +explain-quick_check PAR2-Überprüfung überspringen, wenn die Dateien 100%\ + korrekt sind. +opt-enable_unrar unrar aktivieren +explain-enable_unrar Eingebaute Entpack-Funktion für RAR-Archive aktivieren. +opt-enable_unzip unzip aktivieren +explain-enable_unzip Eingebaute Entpack-Funktion für ZIP-Archive aktivieren. +opt-enable_filejoin Zusammenfügen von Dateien aktivieren +explain-enable_filejoin Dateien, die mit .001, .002 usw. enden, zu einer Datei\ + zusammenfügen. +opt-enable_tsjoin Zusammenfügen von TS-Dateien aktivieren +explain-ts_join Dateien, die mit .001.ts, .002.ts usw. enden, zu einer\ + Datei zusammenfügen. +opt-enable_par_cleanup PAR-Dateien aufräumen +explain-enable_par_cleanup PAR-Dateien entfernen, wenn die Überprüfung und\ + Reparatur erfolgreich war. +opt-fail_on_crc yEnc-CRC-Fehler nicht ignorieren +explain-fail_on_crc Bei yEnc-CRC-Fehlern Ersatz-Server verwenden. +opt-top_only Nur Artikel für obersten Warteschlangen-Eintrag herunterladen +explain-top_only Für geringere Speicher-Verwendung aktivieren.\n\ + Deaktivieren, um zu verhindern, dass langsame Aufträge\n\ + die anderen Einträge in der Warteschlange blockieren. +opt-safe_postproc Nur überprüfte Aufträge nachbearbeiten +explain-safe_postproc Die Nachbearbeitung nur für Aufträge durchführen,\n\ + die alle PAR2-Überprüfungen bestanden haben. +opt-no_dupes Herunterladen von Duplikaten verhindern +explain-no_dupes Überspringt einen Auftrag, wenn bereits eine NZB-Datei\n\ + mit dem gleichen Namen existiert. +opt-dirscan_opts Standardmässige Nachbearbeitung +explain-dirscan_opts Wird verwendet, wenn die Kategorie keine\ + Nachbearbeitung vorschreibt. +opt-dirscan_script Standardmässiges Benutzer-Skript +explain-dirscan_script Wird verwendet, wenn die Kategorie kein\ + Benutzer-Skript vorschreibt. +opt-dirscan_priority Standardmässige Priorität +explain-dirscan_priority Wird verwendet, wenn die Kategorie keine Priorität\ + vorschreibt. +opt-par_option Zusätzliche PAR2-Parameter +explain-par_option Lesen Sie dazu die Hilfe im Wiki! +opt-par2_multicore MultiCore Par2 aktivieren +explain-par2_multicore Lesen Sie dazu die Hilfe im Wiki! +opt-nice Nice-Parameter +explain-nice Lesen Sie dazu die Hilfe im Wiki! +opt-ionice IONice-Parameter +explain-ionice Lesen Sie dazu die Hilfe im Wiki! +otherSwitches Andere Schalter +opt-auto_disconnect Bei leerer Warteschlange Verbindung trennen +explain-auto_disconnect Verbindung zu Usenet-Servern trennen,\n\ + wenn die Warteschlange leer ist oder SABnzbd angehalten wurde. +opt-send_group Gruppe senden +explain-send_group Gruppen-Befehl senden, bevor Artikeln angefordert werden. +opt-auto_sort Nach Alter sortieren +explain-auto_sort Einträge automatisch nach ihrem (durchschnittlichen)\ + Alter sortieren. +opt-check_new_rel Auf neue Version prüfen +explain-check_new_rel Wöchentlich überprüfen, ob eine neue SABnzbd-Version\ + verfügbar ist. +opt-replace_spaces Leerzeichen in Ordnernamen ersetzen +explain-replace_spaces Leerzeichen in Ordnernamen durch Unterstriche ersetzen. +opt-replace_illegal Ungültige Zeichen in Ordnernamen ersetzen +explain-replace_illegal Ungültige Zeichen in Ordnernamen durch äquivalente\ + Zeichen ersetzen\n\ + (oder ansonsten entfernen). +opt-auto_browser Browser beim Start öffnen +explain-auto_browser Den Standard-Browser öffnen, wenn SABnzbd gestartet wird. +opt-pause_on_post_processing Downloads während der Nachbearbeitung anhalten +explain-pause_on_post_processing Hält die Downloads zu Beginn der\ + Nachbearbeitung an\n\ + und setzt sie danach fort. +opt-ignore_samples Beispieldateien ignorieren +explain-ignore_samples Beispieldateien herausfiltern (z.B. Videoausschnitte) +igsam-off Nein +igsam-del Nach dem Download löschen +igsam-not Nicht herunterladen +opt-ssl_type SSL-Typ +explain-ssl_type V23 verwenden, ausser wenn der Provider etwas anderes\ + benötigt. + + +# Config->Server +configServer Server-Einstellungen +addServer Server hinzufügen +srv-host Adresse +srv-port Port +srv-username Benutzername +srv-password Passwort +srv-timeout Zeitüberschreitung +srv-connections Verbindungen +srv-ssl SSL +srv-fillserver Ersatz-Server +srv-optional Optional +srv-enable Aktivieren +button-addServer Server hinzufügen +button-delServer Server entfernen +error-needServer Server-Adresse wird benötigt +button-testServer Server überprüfen +srv-testing Server-Angaben werden überprüft... +srv-testHint Unten Klicken zum Überprüfen. +srv-success Verbindung erfolgreich hergestellt! +srv-noHost Der Hostname wurde nicht angegeben +srv-noConnections Keine Verbindungen angegeben.\ + Bitte geben Sie mindestens eine Verbindung ein. +srv-starredPass Passwort ist als ****** maskiert. Bitte erneut eingeben. +srv-invalidDetails Ungültige Server-Angaben +srv-timedoutSSL Zeitüberschreitung: Versuchen Sie, SSL oder einen\ + anderen Port zu verwenden. +srv-timedout Zeitüberschreitung +srv-failedAuth Authentifizierung fehlgeschlagen. Überprüfen Sie\ + Benutzername und Passwort. +srv-noAuth Server benötigt ein Benutzername und ein Passwort. +srv-tooManyConnections Zu viele Verbindungen. Bitte halten Sie die Downloads an oder versuchen Sie es später erneut. +srv-generalFail@1 Die Verbindung konnte nicht überprüft werden. (%s) + +# Config->Scheduling +configSchedule Planung + +addSchedule Regel hinzufügen +sch-frequency Häufigkeit +sch-action Aktion +sch-arguments Argumente +button-addSchedule Regel hinzufügen +button-delSchedule Entfernen +currentSchedules Aktuelle Regeln +sch-task Aufgabe +sch-disable_server Server deaktivieren +sch-enable_server Server aktivieren +sch-resume Fortsetzen +sch-pause Anhalten +sch-shutdown Beenden +sch-restart Neu starten +sch-speedlimit Geschwindigkeitsbegrenzung +sch-pause_all Alle anhalten +sch-pause_post Nachbearbeiten anhalten +sch-resume_post Nachbearbeiten fortsetzen + +# Config->RSS +configRSS RSS-Einstellungen +newFeedURI Neue Feed-URL +explain-RSS Aktivieren Sie das Feld neben dem Feed-Namen,\ + wenn automatisch auf neue Einträge geprüft werden soll.\n\ + Die Häufigkeit der Überprüfungen kann in den allgemeinen\ + Einstellungen gewählt werden.\n\ + Wenn ein Feed hinzugefügt wird, werden nur neue Einträge\ + verarbeitet und nicht diejenigen, die bereits im RSS-Feed\ + enthalten waren, ausser Sie klicken "Download erzwingen". +feedDefinition Feed-Definition +feed Feed +button-delFeed Feed löschen +button-preFeed Vorschau +button-forceFeed Download erzwingen +rss-order Reihenfolge +rss-type Typ +rss-filter Filter +rss-accept Akzeptieren +rss-reject Verwerfen +rss-must Benötigt +rss-mustcat BenötigtKat +rss-delFilter X +rss-matched Entspricht +rss-notMatched Entspricht nicht +rss-done Heruntergeladen +rss-downloaded Bis jetzt heruntergeladen +link-download Herunterladen +explain-rssStar Aufträge, die mit '*' markiert sind, werden nicht\ + automatisch heruntergeladen. + +# Config->Email +configEmail Email-Benachrichtigung +emailOptions Email-Optionen +opt-email_endjob Email-Benachrichtigung beim Fertigstellen von Aufträgen +email-never Nie +email-always Immer +email-errorOnly Nur bei Fehlern +opt-email_full Benachrichtigung bei voller Festplatte +explain-email_full E-Mail senden, wenn die Festplatte voll ist und SABnzbd\ + angehalten wird. +opt-email_dir Ordner mit E-Mail-Vorlagen +explain-email_dir Ordner, der die benutzerdefinierten E-Mail-Vorlagen enthält.\n\ + Relativ zu +emailAccount E-Mail-Kontoeinstellungen +opt-email_server SMTP-Server +explain-email_server ISP-Server für ausgehende E-Mails angeben. +opt-email_to E-Mail-Empfänger +explain-email_to E-Mail-Adresse, an die die E-Mails gesendet werden. +opt-email_from E-Mail-Absender +explain-email_from Wer soll die E-Mail versandt haben? +opt-email_account Optionaler Konto-Benutzername +explain-email_account Für authentifizierte E-Mails wird der Kontoname benötigt. +opt-email_pwd Optionales Konto-Passwort +explain-email_pwd Für authentifizierte E-Mails wird das Passwort benötigt. +error-badEmailAd@1 %s ist keine gültige E-Mail-Adresse +opt-email_rss RSS-Benachrichtigungen senden +explain-email_rss E-Mail senden, wenn ein RSS-Feed einen Auftrag zur\ + Warteschlange hinzufügt. + +# Config->Newzbin +explain-newzbin Wenn Sie ein Konto bei www.newzbin.com haben,\ + können Sie die entsprechenden Informationen hier eintragen.\n\ + Dies gibt weitere Funktionen frei. +accountInfo Konto-Informationen +opt-username_newzbin Newzbin-Benutzername +explain-username_newzbin Hier den Konto-Benutzernamen eingeben. +opt-password_newzbin Newzbin-Passwort +explain-password_newzbin Hier das Konto-Passwort eingeben. +newzbinBookmarks Verarbeiten von Lesezeichen +opt-newzbin_bookmarks Lesezeichen automatisch abrufen +explain-newzbin_bookmarks Automatisch Aufträge basierend Ihren Lesezeichen erzeugen. +link-getBookmarks Jetzt Lesezeichen abrufen +link-HideBM Verarbeitete Lesezeichen verbergen +link-ShowBM Verarbeitete Lesezeichen anzeigen +opt-newzbin_unbookmark Lesezeichen entfernen, wenn der Download fertig ist +explain-newzbin_unbookmark Lesezeichen aus der Lesezeichenliste entfernen, wenn der Download fertig ist. +opt-bookmark_rate Überprüfungs-Interval +explain-bookmark_rate In Minuten (mindestens 15 Minuten). +processedBM Verarbeitete Lesezeichen +explain-nzbmatrix Wenn Sie ein Konto bei www.nzbmatrix.com haben,\ + können Sie die entsprechenden Informationen hier eintragen.\n\ + Dies wird benötigt, wenn Sie RSS-Feeds von dieser Seite verwenden möchten. +opt-username_matrix NzbMatrix-Benutzername +explain-username_matrix Hier den Konto-Benutzernamen eingeben. +opt-password_matrix NzbMatrix-Passwort +explain-password_matrix Hier das Konto-Passwort eingeben. +opt-apikey_matrix NzbMatrix-API-Schlüssel +explain-apikey_matrix Hier den API-Schlüssel eingeben. + +# Config->Cat +configCat Benutzerdefinierte Kategorien +explain-configCat Beeinflusst die Nachbearbeitung und Speicherung von Downloads. +explain-catNewzbin Die Newzbin-Spalte verknüpft Newzbin-Kategorien mit Ihren eigenen. +link-initCat Klicken Sie hier, um die Newzbin-Kategorien einzurichten. +explain-relFolder Relative Ordner basieren auf +catFolderPath Ordner/Pfad +catNewzbin NewzBin +catGroups Gruppen +button-delCat X + +# Config->Sorting +configSort Sortier-Einstellungen +seriesSorting Sortieren von TV-Serien +sort-show Sendung +sort-name Name +opt-tvsort TV-Sortierung aktivieren +explain-tvsort Sortieren und Umbenennen von Episoden aktivieren. +sort-legenda Muster-Schlüssel +button-clear Löschen +presetSort Voreinstellungen +example Beispiel +genericSort Allgemeines Sortieren +opt-movieSort Film-Sortierung aktivieren +explain-movieSort Allgemeines Sortieren und Umbenennen von Dateien aktivieren. +opt-movieExtra Unbestimmte Downloads in einem zusätzlichen Ordner speichern. +explain-movieExtra Aktivieren, wenn Downloads nicht in ihre eigenen Ordner abgelegt werden. +affectedCat Betroffene Kategorien +sort-meaning Bedeutung +sort-pattern Muster +sort-result Resultat +button-Season1x05 1x05 Staffel-Ordner +button-SeasonS01E05 S01E05 Staffel-Ordner +button-Ep1x05 1x05 Episoden-Ordner +button-EpS01E05 S01E05 Episoden-Ordner +sort-title Titel +movie-sp-name Film Name +movie-dot-name Film.Name +movie-us-name Film_Name +show-name Sendungs-Name +show-sp-name Sendungs Name +show-dot-name Sendungs.Name +show-us-name Sendungs_Name +show-seasonNum Staffel-Nummer +show-epNum Episoden-Nummer +ep-name Episoden-Name +ep-sp-name Episoden Name +ep-dot-name Episoden.Name +ep-us-name Episoden_Name +fileExt Dateiendung +extension Endung +partNumber Teilnummer +decade Jahrzehnt +orgFilename Ursprünglicher Dateiname +lowercase Kleinschreibung +TEXT TEXT +text text +sort-File datei +sortString Sortieranweisung +multiPartLabel Markierung für mehrere Teile +button-inFolders In Ordnern +button-noFolders Keine Ordner +dateSorting Sortieren nach Datum +opt-dateSort Sortieren nach Datum aktivieren +explain-dateSort Sortieren und Umbenennen von Dateien mit Daten im Dateinamen aktivieren. +button-ShowNameF Ordner mit Name der Sendung +button-YMF Jahr-Monat-Ordner +button-DailyF Tägliche Ordner + +# NZO +nzoDetails NZB-Details bearbeiten +nzoName Name +nzo-delete Löschen +nzo-top Ganz nach oben +nzo-up Nach oben +nzo-down Nach unten +nzo-bottom Ganz nach unten +nzo-all Alle +nzo-none Keine +nzo-invert Invertieren +nzo-filename Dateiname +nzo-subject Betreff +nzo-age Alter +nzo-selection Auswahl + +# Internal texts +msg-warning-ambiLocalhost Warnung: localhost ist mehrdeutig. Verwenden Sie eine numerische IP-Adresse. +msg-invalidServer@2 Server-Adresse "%s:%s" ist ungültig. + +warn-missingKey Sitzungs-Schlüssel fehlt +error-missingKey Fehler: Sitzungs-Schlüssel wird benötigt +warn-badSession Sitzungs-Schlüssel ungültig +error-badKey Fehler: Sitzungs-Schlüssel ungültig +warn-authMissing Authentifizierung fehlt. Bitte Benutzernamen und\ + Passwort aus Einstellungen->Allgemein in die externe\ + Anwendung eingeben: +error-authMissing Fehler: Authentifizierung fehlt +warn-apikeyNone API-Schlüssel fehlt. Bitte API-Schlüssel aus\ + Einstellungen->Allgemein in die externe Anwendung\ + eingeben: +warn-apikeyBad API-Schlüssel ungültig. Bitte API-Schlüssel aus\ + Einstellungen->Allgemein in die externe Anwendung\ + eingeben: +error-noSecUI Fehler: Keine sekundäre Oberfläche angegeben. + +his-badArchive Fehlgeschlagen. Unültige Archiv-Datei. +his-cannotGetReport Abrufen des Newzbin-Berichts fehlgeschlagen +his-failedURL Hinzufügen der URL fehlgeschlagen +his-retryURL1@1 Abrufen der URL fehlgeschlagen; %s +his-retryURL2 Erneut versuchen + +# Errors and Warnings +error-noPar2 par2-Programmdatei nicht gefunden! +error-noWebUi Fehler beim Starten der Weboberfläche. +error-noYEnc _yenc-Modul nicht gefunden! +error-sameHTTP-HTTPS HTTP- und HTTPS-Ports dürfen nicht gleich sein. +warn-0000 Bitte beachten Sie, dass der 0.0.0.0-Hostname eine\ + IPv6-Adresse benötigen wird für den externen Zugriff. +warn-noCertKey HTTPS wegen fehlenden Zertifikats- und\ + Schlüsseldateien deaktiviert. +warn-noSkin@1 Konnte Web-Vorlage nicht finden: %s Versuche die\ + Standard-Vorlage zu verwenden. +warn-noUnrar unrar-Programmdatei nicht gefunden! +warn-noUnzip unzip-Programmdatei nicht gefunden! +error-failMkstemp Fehler in tempfile.mkstemp +error-fetchReport@1 Fehler beim Abrufen von %s von newzbin.com - +error-hibernate Fehler beim Wechsel in den Ruhezustand +error-loading@1 Fehler beim Laden von %s +error-saveX@1 Fehler beim Speichern von %s +error-saveXtoY@2 Fehler beim Speichern von %s nach %s +error-standby Fehler beim Wechsel in den Bereitschaftsmodus +error-tempFile@1 Temporäre Datei für %s konnte nicht angelegt werden +warn-noServer@1 Versuche Status für nicht existierenden Server %s zu setzen +warn-noSpace Angehalten wegen zu wenig freiem Speicherplatz +warn-signal@1 Signal %s erkannt. Speichern und beenden... +warn-flushFailed@1 Flushing von %s fehlgeschlagen. Keine Artikel-ID. +error-diskError@1 Festplatten-Fehler beim Anlegen der Datei %s +error-diskFull Festplatte voll! Downloads werden angehalten. +warn-artMissing@1 %s fehlt +error-badIni@1 Ungültige Konfigurationsdatei %s +error-createIni@1 Konfigurationsdatei %s kann nicht angelegt werden +error-encPw@1 Ungültig kodiertes Passwort %s +error-version@2 Ungültige Version %s in %s +error-badHisNewline@1 Ungültiges Stufen-Protokoll im Verlauf für %s (\\r\\n) +error-badHisSemic@1 Ungültiges Stufen-Protokoll im Verlauf für %s (;) +error-sqlClose Fehler beim Schliessen der Datenbank. Beachten Sie das\ + Nachrichtenprotokoll. +error-sqlCmd SQL-Befehl fehlgeschlagen. Beachten Sie das\ + Nachrichtenprotokoll. +error-sqlCommit SQL-Commit fehlgeschlagen. Beachten Sie das\ + Nachrichtenprotokoll. +error-decode@1 Fehler beim Dekodieren von %s. +error-decodeUnknown@1 Unbekannter Fehler %s beim Dekodieren +warn-artAllMissing@1 %s wurde auf keinem Server gefunden und daher übersprungen +warn-badYEnc@1 Ungültiger yEnc-Artikel in %s +warn-crcError@3 CRC-Fehler in %s (%s -> %s) +error-readWatched@1 Überwachter Ordner %s kann nicht gelesen werden +error-remove@1 Fehler beim Entfernen von %s +warn-noRead@1 %s kann nicht gelesen werden +error-except Ausnahme? +error-noInit@3 Initialisierung fehlgeschlagen %s@%s:%s +error-serverFailed@4 Verbindung zu %s@%s:%s konnte nicht hergestellt werden. %s +error-serverLogin@1 Anmelden beim Server fehlgeschlagen. %s +error-serverNoConn@2 Verbindung zum Server %s kann nicht hergestellt werden. %s +error-serverTooMany@2 Zu viele Verbindungen zum server %s:%s +warn-ignoreServer@2 Server %s wird für %s Minuten ignoriert +warn-noConnectServer@2 Verbindung zum Server %s kann nicht hergestellt werden. %s +error-accountSharing Möglicherweise wird das Konto geteilt +error-serverCred@1 Server %s benötigt ein Benutzername und ein Passwort +warn-thread@3 Thread %s@%s:%s: +error-mailAuth Authentifizierung beim Mail-Server fehlgeschlagen +error-mailNoConn Verbindung zum Mail-Server konnte nicht hergestellt werden +error-mailSend Senden des E-Mails fehlgeschlagen +error-mailTempl@1 In %s konnten keine E-Mail-Vorlagen gefunden werden +error-mailTLS Aufbau der TLS-Verbindung fehlgeschlagen +warn-noEmailClose Schliessen der Mail-Verbindung fehlgeschlagen +msg-emailOK E-Mail erfolgreich versendet +error-regex@1 Kompilieren des regulären Ausdrucks für den Suchbegriff %s fehlgeschlagen. +error-accessDir@2 Zugriff auf das Verzeichnis %s fehlgeschlagen: %s +error-createDir@1 Verzeichnis %s konnte nicht angelegt werden +error-makeFile@1 Erstellen von %s fehlgeschlagen +error-moveFile@2 Verschieben von %s nach %s fehlgeschlagen +error-portNoAccess@1 Sie haben nicht die Berechtigung, Port %s zu verwenden +error-regConnect Verbindung zu Registry-Umgebung HKEY_CURRENT_USER konnte nicht hergestellt werden. +error-regOpen@1 Registry-Schlüssel %s konnte nicht geöffnet werden. +error-regSpecial Lesen der Registry-Schlüssel für spezielle Ordner fehlgeschlagen. +error-sslFiles Fehler beim Anlegen des SSL-Schlüssels und -Zertifikats. +error-urlGet@2 Fehler beim Abrufen der URL %s (Fehler = %s) +warn-noBrowser Der Standard-Browser konnte nicht gestartet werden, da er wahrscheinlich nicht gefunden wurde. +warn-pyopenssl pyopenssl-Modul fehlt. Bitte installieren für SSL-Unterstützung. +error-fileJoin@2 Fehler "%s" beim Ausführen von file_join auf %s +error-filePar2@2 Fehler "%s" beim Ausführen von par2_repair auf %s +error-fileRead@1 notrar(): Lesen von %s fehlgeschlagen +error-fileUnrar@2 Fehler "%s" beim Ausführen von rar_unpack auf %s +error-fileUnzip@2 Fehler "%s" beim Ausführen von unzip auf %s +warn-cannotFind@1 %s konnte nicht gefunden werden. +warn-crcFailed@1 CRC-Fehler in %s. +warn-delFailed@1 Löschen von %s fehlgeschlagen! +warn-encrypted Fehler: Verschlüsselte Datei: +warn-error@1 Fehler: %s +warn-MissExpectedFile@1 Erwartete Datei %s nicht gefunden. Unrar-Fehler? +warn-writeError@1 Fehler beim Schreiben: %s +error-connect@1 Verbindung konnte nicht hergestellt werden: %s +error-newsSSL Dieser Server erlaubt auf diesem Port keine SSL-Verschlüsselung. +error-noSSL Fehler beim Importieren des OpenSSL-Moduls. Stelle Verbindung ohne SSL her. +error-nbInfo@1 Newzbin-Server konnte keine Informationen zu %s bereitstellen +error-nbProtocol Das Protokoll des Newzbin-Servers wurde geändert +error-nbReport@1 Newzbin-Bericht %s nicht gefunden +error-nbUnkownError@1 Newzbin gibt einen undokumentierten Fehler-Code zurück: (%s) +error-nbUnkownError@2 Newzbin gibt einen undokumentierten Fehler-Code zurück: (%s, %s) +error-nbUpdate@1 Aktualisieren des Newzbin-Auftrages %s fehlgeschlagen. +warn-nbCredit Ihr Newzbin-Konto verfügt über keine Credits. +warn-nbNoAuth Zugriff verweigert. Überprüfen Sie den Newzbin-Benutzernamen und -Passwort +warn-nbNoDelBM@1 Newzbin-Lesezeichen %s konnte nicht gelöscht werden. +error-qAdd@1 Fehler beim Hinzufügen von %s. Entferne. +error-qBad Inkompatible Warteschlangen-Datei gefunden. Fortsetzen nicht möglich. +error-qCorruptFile@1 Fehler beim Laden von %s. Beschädigte Datei gefunden. +warn-unknownEncoding@1 %s -> Unbekannte Kodierung +error-qDupPart@3 Doppelt vorhandener Teil %s mit unterschiedlichen IDs (%s // %s) +error-qImport@1 Fehler beim Importieren von %s +warn-badImport@2 Importieren von %s Dateien von %s fehlgeschlagen +warn-badNZB@3 Ungültige NZB-Datei %s wird übersprungen: %s auf Zeile %s +warn-emptyFile@1 Die Datei %s ist leer und wird daher übersprungen +warn-skipDup@1 Überspringe doppelt vorhandene NZB-Datei %s. +error-ppCleanup@1 Aufräumen von %s fehlgeschlagen +error-ppDelFailed@1 Entfernen von %s fehlgeschlagen +error-ppDelNzo Fehler beim Entfernen der NZB-Datei von der\ + Nachbearbeitungs-Warteschlange (id) +error-ppDelWorkdir@1 Fehler beim Entfernen des Arbeitsverzeichnisses %s. +error-ppFailed@1 Nachbearbeitung von %s fehlgeschlagen +error-ppLogFile@1 Protokolldatei %s konnte nicht angelegt werden +error-ppPermissions@1 Rechte von %s konnten nicht geändert werden +error-ppRename@2 Fehler beim Umbenennen von "%s" nach "%s" +warn-badPPQueue@2 Laden der Nachbearbeitungs-Warteschlange fehlgeschlagen: Falsche Version (benötige %s anstatt %s) +error-rssBadFeed@1 Ungültige RSS-Feed-Beschreibung "%s" +error-rssRegex@1 Regulärer Ausdruck konnte nicht kompiliert werden: %s +warn-emptyRSS@1 Leerer RSS-Feed gefunden: %s +warn-failRSS@1 Abrufen des RSS-Feeds von %s fehlgeschlagen. +warn-failRSS@2 Abrufen des RSS-Feeds von %s fehlgeschlagen: %s +warn-badSched@3 Ungültige Regel %s um %s:%s +warn-badSchedAction@1 Unbekannte Aktion: %s +warn-schedNoServer@1 Regel für nicht existierenden Server %s. +error-tvInfo@1 Fehler beim Abrufen der TV-Informationen: %s +error-tvRename@2 Umbenennen von %s nach %s fehlgeschlagen. +error-tvSimRename@2 Umbenennen der gleichen Datei von %s nach %s fehlgeschlagen. +error-tvTemp@1 Temporäre Datei für %s konnte nicht angelegt werden. +warn-matrixBadRep@1 Ungültige nzbmatrix.com-Bericht-ID %s. +warn-matrixFail@1 Problem beim Zugriff auf den nzbmatrix.com-Server (%s) +warn-noRepair Kein PAR2-Programm gefunden. Eine Reparatur ist nicht möglich\n +warn-noUnpack Kein UNRAR-Programm gefunden. Das Entpacken von RAR-Dateien ist nicht möglich\n +warn-badUnrar Das verwendete UNRAR-Programm wird nicht empfohlen.\ + Laden Sie UNRAR stattdessen herunter von\ + http://www.rarlab.com/rar_add.htm\n +warn-missingFiles \nWarnung: Nicht alle Dateien wurden entpackt. Beachten Sie das Protokoll. +error-joinMismatch Die tatsächliche Grösse entsprach nicht der erwarteten Grösse. +error-joinFail@1 Fehler beim Zusammenfügen von %s +error-joinFail@2 [%s] Fehler "%s" beim Zusammenfügen der Dateien +msg-joinOK@2 [%s] %s Dateien zusammengefügt +error-unpackFail@1 Entpacken fehlgeschlagen. %s +error-unpackFail@2 [%s] Fehler "%s" beim Entpacken der RAR-Dateien +error-badArchive Öffnen des Hauptarchivs fehlgeschlagen. Es ist verschlüsselt oder beschädigt. +error-unpackFailed@1 Entpacken fehlgeschlagen. Konnte %s nicht finden. +error-unpackCRC Entpacken fehlgeschlagen. CRC-Fehler +error-unpackFull Entpacken fehlgeschlagen. Fehler beim Schreiben oder volle Festplatte? +error-unpackFailLog Entpacken fehlgeschlagen. Beachten Sie das Protokoll. +error-unpackPassword Entpacken fehlgeschlagen. Archiv benötigt ein Passwort. +error-unpackMissing Entpacken fehlgeschlagen. Eine erwartete Datei wurde nicht entpackt. +msg-unpackDone@2 %s Datei(en)/Ordner entpackt in %s +msg-unzipDone@2 %s Dateien in %s +msg-QuickCheck Ausführen der schnellen Überprüfung... +msg-QuickChecking Schnelle Überprüfung +msg-QuickOK@1 [%s] Schnelle Überprüfung erfolgreich +msg-startRepair Beginn der Reparatur +error-repairFailed@1 Reparatur fehlgeschlagen. %s +error-repairBad@2 Fehler "%s" beim Ausführen von par2_repair auf dem Satz %s +msg-verify Überprüfen... +msg-verifyOK@2 [%s] Überprüft in %s. Alle Dateien fehlerfrei. +msg-repairNeeded Reparatur wird benötigt +msg-repairNeeded@2 [%s] Überprüft in %s. Reparatur wird benötigt. +error-noMainPacket Hauptpaket nicht gefunden... +error-repairBlocks@1 Reparatur fehlgeschlagen. Nicht genug Reparatur-Blöcke vorhanden (%s zu wenig) +msg-fetchBlocks@1 %s Blöcke werden abgerufen... +msg-repairing Reparieren +msg-repairDone@2 [%s] Repariert in %s +msg-verifying Überprüfen +msg-DownloadedIn@2 Heruntergeladen in %s mit einer Durchschnittsgeschwindigkeit von %sB/s +msg-noParSets@1 [%s] Keine PAR2-Sätze +msg-noPostProc Keine Nachbearbeitung wegen fehlgeschlagener Überprüfung +msg-sentToQ@1 %s wurde an die Warteschlange gesendet +msg-runScript@1 Ausführen des Benutzer-Skripts %s +msg-ranScript@1 %s ausgeführt +link-more Mehr +link-viewSc Skript-Ausgabe anzeigen +warn-OutRetention Fehler beim Herunterladen. Ist die Datei zu alt? +warn-PostCrash Nachbearbeitung ist abgestürzt. Beachten Sie das Nachrichtenprotokoll. +msg-moving Verschieben +msg-running Ausführen des Skripts +msg-joining Zusammenfügen +msg-unpacking Entpacken +msg-repair Reparieren +msg-fetching Abrufen +msg-path Pfad + +stage-download Herunterladen +stage-repair Reparieren +stage-filejoin Dateien zusammenfügen +stage-unpack Entpacken +stage-script Skript + +post-Completed Fertig +post-Failed Fehler +post-Queued In der Warteschlange +post-Repairing Reparieren... +post-Extracting Entpacken... +post-Moving Verschieben... +post-Running Ausführen des Skripts... +post-Fetching Abrufen von zusätzlichen Blöcken... +post-QuickCheck Schnelle Überprüfung... +post-Verifying Überprüfen... + +#Growl Messages +grwl-notif-startup Start/Beenden +grwl-notif-dl NZB hinzugefügt +grwl-notif-pp Nachbearbeitung +grwl-notif-other Andere Meldung +grwl-shutdown-begin-msg Beenden... +grwl-shutdown-end-msg SABnzbd wurde beendet +grwl-paused-msg Angehalten +grwl-nzbadd-title NZB zur Warteschlange hinzugefügt +grwl-newversion-msg Neue Version verfügbar + +#OSX Menu +osx-menu-warnings Warnungen +osx-menu-status-idle Leerlauf +osx-menu-status-paused Angehalten +osx-menu-pause Anhalten +osx-menu-min min. +osx-menu-resume Fortsetzen +osx-menu-queue Warteschlange +osx-menu-queuelimit Warteschlange mit den 10 obersten Einträgen +osx-menu-history Verlauf +osx-menu-historylimit Verlauf mit den letzten 10 Einträgen +osx-menu-speedlimit Geschwindigkeit begrenzen +osx-menu-none Nichts +osx-menu-getnewzbinbm Newzbin-Lesezeichen abrufen +osx-menu-complete Fertige Downloads\t\t\t +osx-menu-incomplete Unfertige Download\t\t +osx-menu-restart Neu starten +osx-menu-quit Beenden +osx-menu-config Einstellungen +osx-menu-purgequeue Warteschlange leeren +osx-menu-purgehistory Verlauf leeren +osx-menu-wizard Assistent öffnen +osx-menu-empty Leer +osx-menu-shutdowning Beenden... + +email-full@2 \ +to: %s\r\ +from: %s\r\ +subject: SABnzbd meldet eine volle Festplatte\r\ +\r\ +Hallo,\r\ +\r\ +SABnzbd hat mit dem Herunterladen aufgehört, da die Festplatte fast voll ist.\r\ +Bitte geben Sie manuell Speicherplatz frei und setzen Sie die Downloads danach fort.\r\ +\r diff --git a/language/email-de-de.tmpl b/language/email-de-de.tmpl new file mode 100644 index 0000000..35b69ac --- /dev/null +++ b/language/email-de-de.tmpl @@ -0,0 +1,43 @@ +#encoding UTF-8 +## Translation by Severin Heiniger +## +## Default Email template for SABnzbd +## This a Cheetah template +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Newlines and whitespace are significant! +## +## These are the email headers +to: $to +from: $from +date: $date +subject: SABnzbd Auftrag $name +X-priority: 5 +X-MS-priority: 5 +## After this comes the body, the empty line is required! + +Hi, + +SABnzbd hat "$name" heruntergeladen + +SABnzbd konnte "$name" nicht herunterladen + +Fertiggestellt: $end_time +Heruntergeladen: $size + +Ergebnis des Auftrages: + +Stufe $stage + + $result + + + +Ausgabe des Benutzerskripts "$script" (beendet mit Code $script_ret): +$script_output + + +Viel Spass! + +Entschuldigung! + diff --git a/language/email-fr-fr.tmpl b/language/email-fr-fr.tmpl new file mode 100644 index 0000000..d0e14aa --- /dev/null +++ b/language/email-fr-fr.tmpl @@ -0,0 +1,41 @@ +## +## Template Email pour SABnzbd +## Ceci est un template Cheetah +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Les retours à la ligne et les espaces sont importants ! +## +## Entêtes de l'email +to: $to +from: $from +date: $date +subject: SABnzbd du téléchargement $name +X-priority: 5 +X-MS-priority: 5 +## Le contenu du message, la ligne vide est obligatoire ! + +Bonjour, + +SABnzbd a téléchargé avec succès "$name" + +SABnzbd a téléchargé sans succès "$name" + +Terminé à $end_time +Téléchargé $size + +Résultat du téléchargement : + +Etape $stage + + $result + + + +Sortie du script utilisateur "$script" (Code Retour = $script_ret): +$script_output + + +A bientôt ! + +Désolé ! + diff --git a/language/email-nl-du.tmpl b/language/email-nl-du.tmpl new file mode 100644 index 0000000..b458a7c --- /dev/null +++ b/language/email-nl-du.tmpl @@ -0,0 +1,41 @@ +## +## Standaard Email sjabloon voor SABnzbd +## Dit is een Cheetah sjabloon +## Documentatie: http://sabnzbd.wikidot.com/email-templates +## +## Lege regels en witruimte zijn belangrijk! +## +## Dit zijn de email koppen +to: $to +from: $from +date: $date +subject: SABnzbd: opdracht $name is +X-priority: 5 +X-MS-priority: 5 +## Hier onder volgt de hoofdtekst, de lege regel is noodzakelijk! + +Hallo, + +SABnzbd heeft "$name" gedownload + +SABnzbd is niet geslaagd in het downloaden van "$name" + +Klaar om $end_time +Hoeveelheid gedownload $size + +Resultaat van de opdracht: + +Fase $stage + + $result + + + +Bericht van het script "$script" (Exit code = $script_ret): +$script_output + + +Veel plezier! + +Sorry! + diff --git a/language/email-sv-se.tmpl b/language/email-sv-se.tmpl new file mode 100644 index 0000000..613bf13 --- /dev/null +++ b/language/email-sv-se.tmpl @@ -0,0 +1,43 @@ +#encoding UTF-8 +## Translation by "Kristoffer (Malmis) Malmström" +## +## Default Email template for SABnzbd +## This a Cheetah template +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Newlines and whitespace are significant! +## +## These are the email headers +to: $to +from: $from +date: $date +subject: SABnzbd har jobb $name +X-priority: 5 +X-MS-priority: 5 +## After this comes the body, the empty line is required! + +Hej, + +SABnzbd har laddat ner "$name" + +SABnzbd misslyckades att ladda ner "$name" + +Slutade $end_time +Nedladdat $size + +Resulttat av jobbet: + +Steg $stage + + $result + + + +Utmatning frÃ¥n användarskript "$script" (Exit code = $script_ret): +$script_output + + +Lycka till! + +Tyvärr! + diff --git a/language/email-us-en.tmpl b/language/email-us-en.tmpl new file mode 100644 index 0000000..ff8137f --- /dev/null +++ b/language/email-us-en.tmpl @@ -0,0 +1,41 @@ +## +## Default Email template for SABnzbd +## This a Cheetah template +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Newlines and whitespace are significant! +## +## These are the email headers +to: $to +from: $from +date: $date +subject: SABnzbd has job $name +X-priority: 5 +X-MS-priority: 5 +## After this comes the body, the empty line is required! + +Hi, + +SABnzbd has downloaded "$name" + +SABnzbd has failed to download "$name" + +Finished at $end_time +Downloaded $size + +Results of the job: + +Stage $stage + + $result + + + +Output from user script "$script" (Exit code = $script_ret): +$script_output + + +Enjoy! + +Sorry! + diff --git a/language/fr-fr.txt b/language/fr-fr.txt new file mode 100644 index 0000000..3f9bf0a --- /dev/null +++ b/language/fr-fr.txt @@ -0,0 +1,833 @@ +# -*- coding: latin-1 -*- +# Français + +special-decimal . +special-1000 . + +# General texts +yes Oui +no Non +default Défaut +none Aucun +KBs KB/s +MB MB +GB GB +hour heure +hours heures +minute min +minutes mins +second sec +seconds secondes +month Mois +year Année +day Jour +days Jours +daily Quotidien +monday Lundi +tuesday Mardi +wednesday Mercredi +thursday Jeudi +friday Vendredi +saturday Samedi +sunday Dimanche +day-of-month Jour du mois +filename Nom de fichier + + +# General template elements +signOn Le téléchargement usenet tout inclus +button-save Enregistrer +queued En attente +button-back Retour +button-x X + +# Header +menu-home Accueil +menu-queue File D'Attente +menu-history Historique +menu-config Config +menu-cons Connexions +menu-help Aide +menu-wiki Wiki +menu-forums Forum +menu-irc IRC +cmenu-general Général +cmenu-folders Dossiers +cmenu-switches Options +cmenu-servers Serveurs +cmenu-scheduling Planification +cmenu-rss RSS +cmenu-email Email +cmenu-newzbin Sites Index +cmenu-cat Catégories +cmenu-sorting Classement + +# Footer +ft-download Dossier incomplets +ft-complete Dossier complets +ft-speed Débit de téléchargement +ft-queued En attente +ft-paused EN PAUSE +ft-buffer@2 %s articles dans %s +ft-sysload Sysload +ft-warning AVERTISSEMENTS +ft-newRelease@1 Une nouvelle version %s est disponible + +# Main page +addNewJobs Ajouter de nouveaux téléchargements +shutdownOK? Etes-vous sûrs de vouloir quitter SABnzbd ? +link-shutdown Eteindre +link-pause Pause +link-resume Reprendre +button-add Ajouter +add Ajouter +reportId Report-id +addFile Ajouter un fichier +category Catégorie +pp Traitement +script Script +priority Priorité +pp-none Télécharger +pp-repair +Réparer +pp-unpack +Décompresser +pp-delete +Supprimer +pp-n +pp-r R +pp-u D +pp-d S +pr-force Forcer +pr-normal Normale +pr-high Haute +pr-low Basse +enterURL URL +enterID  ou Report ID + +# Queue page +link-sortByName Trier par nom +link-sortByAge Trier par âge +link-sortBySize Trier par taille +link-hideFiles Masquer fichiers +link-showFiles Afficher fichiers +onQueueFinish En fin de file d'attente +shutdownPc Eteindre PC +standbyPc Mettre en veille PC +hibernatePc Mettre en hibernation PC +shutdownSab Quitter SABnzbd +speedLimit Limite de vitesse +pauseFor Pause pour +mode Mode +order Ordre +name Nom +remainTotal Restant/Total +eta TRE +age AGE +button-del Supprimer +button-resume Reprendre +button-pause Pause +unknown inconnu +fetchingNewzbin@1 récupération msgid %s depuis www.newzbin.com +error-fetchNewzbin@1 Erreur Récupération msgid %s depuis www.newzbin.com -\ + Vérifiez que vos identifiant / mot de passe soient bien renseignés +fetchNZB@1 Essai de récupération du NZB depuis %s +eoq-actions Actions +eoq-scripts Scripts +purgeQueue Vider file d'attente +purgeQueueConf Supprimer tous les éléments de la file d'attente ? + + +# History page +purgeHist Effacer l'historique +purgeHistConf Supprimer tous les éléments de l'historique ? +hideDetails Masquer détails +showDetails Afficher détails +sizeHist Taille Historique +completed Terminés +size Taille +status Statut +msg-reAdded@1 %s a été remis en file d'attente + +# Connections page +link-forceDisc Forcer Déconnexion +askTestEmail Envoyer un mail de test à votre adresse. +link-showLog Afficher les logs +link-showWeblog Afficher les weblogs +link-testEmail Test Email +logging Logging +log-errWarn Erreurs/Avertissements +log-info + Info +log-debug + Debug +connections Connexions +thread Thread +emailResult Résultat du test Email +lastWarnings Avertissements Récents +clearWarnings effacer +server-blocked Débloquer +warning AVERTISSEMENT: +error ERREUR: +server-resolving  Résoudre l'adresse + + +# Configuration +configuration Configuration +confgFile Fichier de Configuration +explain-Restart Le bouton ci-dessous redémarrera SABnzbd.\n\ + Utilisez le si vous pensez avoir un problème de stabilité.\n\ + Les téléchargements en cours seront mis en pause puis repris. +button-restart Redémarrer +version Version +uptime Démarré Depuis +error Erreur +badParm Paramètre incorrect +error-badValue@2 Valeur incorrecte pour %s: %s +error-noFolder@1 Le dossier "%s" n'existe pas +error-QnotEmpty Erreur : La file d'attente n'est pas vide, impossible de changer le dossier. +error-noUNC@1 Les chemins UNC "%s" ne sont pas permis ici +error-notOctal@1 %s n'est pas une valeur octale correcte + +# Config->General +generalConfig Configuration Générale +restartRequired Les modifications nécessiteront un redémarrage de SABnzbd ! +webServer SABnzbd Serveur Web +opt-host Hôte SABnzbd +explain-host Hôte sur lequel SABnzbd doit attendre les connexions. +opt-port Port SABnzbd +explain-port Port sur lequel SABnzbd doit attendre les connexions. +opt-web_dir Interface Web +explain-web_dir Choisissez un thème. +opt-web_dir2 Seconde Interface Web +explain-web_dir2 Choisissez un thème pour la 2nde interface web. +webAuth Autentification Serveur Web +opt-web_username Identifiant SABnzbd +explain-web_username Nom d'utilisateur pour l'autentification (optionnel). +opt-web_password Mot de passe SABnzbd +explain-web_password Mot de passe pour l'autentification (optionnel). +httpsSupport Support HTTPS +opt-enable_https Active HTTPS +opt-notInstalled non installé +explain-enable_https Active l'accès à l'interface via une adresse HTTPS. +opt-https_port Port HTTPS +explain-https_port Port sur lequel SABnzbd doit attendre les connexions HTTPS. +opt-https_cert Certificat HTTPS +explain-https_cert Fichier ou chemin du certificat HTTPS. +opt-https_key Clé HTTPS +explain-https_key Fichier ou chemin de la clé HTTPS. +tuning Tuning +opt-refresh_rate Intervalle de rafraîchissement de la file d'attente : +explain-refresh_rate Intervalle de rafraichissement dans l'interface web (en sec, 0=aucun). +opt-rss_rate Invervalle de vérification RSS +explain-rss_rate Intervalle de vérification (en minutes, minimum 15). +opt-bandwidth_limit Limite de vitesse de téléchargement +explain-bandwidth_limit Limite de vitesse de téléchargement en kilobytes par seconde (kB/s) +opt-cache_limitstr Limite d'Article en cache +explain-cache_limitstr Permet de mettre en cache en RAM les articles pour réduire les accès disques.\n\ + En bytes, peut être suivi de K,M,G. Par exemple : "64M" ou "128M" +opt-cleanup_list Liste de nettoyage +explain-cleanup_list Liste des extensions de fichiers qui doivent être supprimés après téléchargement\n\ + Par exemple: .nfo ou .nfo, .sfv +button-saveChanges Enregistrer les modifications +opt-language Langage +explain-language Séléction la langue de l'interface web. +opt-apikey Clé API +explain-apikey Cette clé doit être spécifiée par les programmes tiers pour l'interaction avec SABnzbd. +button-apikey Générer nouvelle clé +opt-disableApikey Désactiver la clé API +explain-disableApikey La clé API n'est plus nécessaire pour l'interaction avec SABnzbd. +explain-disableApikeyAttention AUX RISQUES ! +restart1 Initialisation du redémarrage...\n +restart2  \n\ + Extinction de SABnzbd terminée.\n\ + Veuillez attendre plus de 5 secondes et cliquer cliquer sur le bouton suivant.\n\n\ + Rafraîchir\n + +# Config->Folders +folderConfig Configuration des dossiers +explain-folderConfig NOTE: Les dossiers seront créés automatiquement lors de l'Enregistrement. Il est possible d'utiliser des chemins absolus. +userFolders Dossiers Utilisateur +in Dans +opt-download_dir Dossier Incomplets +explain-download_dir Pour le sotckage des téléchargements en cours, non post-traités.\n\ + Ne peut être modifié que lorsque la file d'attente est vide. +opt-download_free Espace disque minimum pour le Dossier Téléchargement Temporaire +explain-download_free Met en pause automatiquement les téléchargements si l'espace passe en dessous de ce montant.\n\ + En bytes, peut être suivi de K,M,G,T. Par exemple : "800M" ou "8G" +opt-complete_dir Dossier Complets +explain-complete_dir Pour le stockage des téléchargements terminés et post-traités.\n\ + peut être adapté par les catégories utilisateur. +opt-permissions Permissions pour le dossier de téléchargement terminés +explain-permissions Affecter les permissions pour les dossiers/fichiers des téléchargements terminés.\n\ + En notation octale. Par exemple : "755" ou "777" +opt-dirscan_dir Dossier NZB +explain-dirscan_dir Dossier à surveiller pour les fichiers .nzb.\n\ + Prends en compte également les nzb contenus dans les fichiers .zip, .rar et .tar.gz. +opt-dirscan_speed Intervalle de scan +explain-dirscan_speed Nombre de secondes entre les scans de fichiers .nzb. +opt-script_dir Dossier Scripts de Post-traitement +explain-script_dir Dossier contenant les scripts utilisés lors du post-traitement. +opt-email_dir Dossier Modèles d'email +explain-email_dir Dossier contenant les modèles d'email définis par l'utilisateur. +systemFolders Dossiers Systèmes +opt-cache_dir Dossier du Cache +explain-cache_dir pour le stockage temporaire.\n\ + Ne peut être modifié que lorsque la file d'attente est vide.\n\ + Redémarrage requis ! +opt-log_dir Dossier de Log +explain-log_dir pour le stockage des fichiers de log de SABnzbd.\n\ + Redémarrage requis ! +opt-nzb_backup_dir Dossier Sauvegarde NZB +explain-nzb_backup_dir pour la sauvegarde des fichier .nzb. + +# Config->Switches +switchesConfig Configuration des options +processingSwitches Options de traitement +opt-quick_check Activer Quick Check +explain-quick_check Ne pas vérifier avec par2 si tous les fichiers sont 100% valides. +opt-enable_unrar Activer Unrar +explain-enable_unrar Activer la fonctionnalité unrar intégrée. +opt-enable_unzip Activer Unzip +explain-enable_unzip Activer la fonctionnalité unzip intégrée. +opt-enable_filejoin Activer Concaténation +explain-enable_filejoin Concatène les fichiers en .001, .002, etc. en un fichier. +opt-enable_tsjoin Activer Concaténation TS +explain-ts_join Concatène les fichiers en .001.ts, .002.ts, etc. en un fichier. +opt-enable_par_cleanup Activer Nettoyage Par2 +explain-enable_par_cleanup Supprimer les fichiers Par2 (uniquement si la vérification/réparation a réussi). +opt-fail_on_crc Echec lors d'erreurs crc yEnc +explain-fail_on_crc Utilise les serveurs de soutient si il y a des erreurs crc yEnc. +opt-top_only Ne télécharge uniquement que les articles en tête de file d'attente +explain-top_only Activer pour dimininuer l'utilisation de la RAM. Désactiver pour éviter les téléchargement lents bloquant la file d'attente. +opt-safe_postproc Post-traiter uniquement les téléchargements vérifiés +explain-safe_postproc Limite le post-traitement aux téléchargements qui ont passés avec succès les vérifications par2. +opt-no_dupes Eviter les duplications de téléchargement +explain-no_dupes Si un .nzb sauvegargé du même nom existe, le téléchargement ne sera pas effectué. +opt-dirscan_opts Post-traitement par défaut +explain-dirscan_opts Utilisé quand la catégorie de précise pas de choix. +opt-dirscan_script Script utilisateur par défaut +explain-dirscan_script Utilisé quand la catégorie de précise pas de choix. +opt-dirscan_priority Priorité par défaut +explain-dirscan_priority Utilisé quand la catégorie de précise pas de choix. +opt-par2_multicore Utilisé MultiCore Par2 +explain-par2_multicore Consultez le Wiki pour plus d'info à ce sujet (en anglais) ! +opt-par_option Paramètres PAR2 supplémentaires +explain-par_option Consultez le Wiki pour plus d'info à ce sujet (en anglais) ! +opt-nice Paramètres Nice +explain-nice Consultez le Wiki pour plus d'info à ce sujet (en anglais) ! +opt-ionice Paramètres IONice +explain-ionice Consultez le Wiki pour plus d'info à ce sujet (en anglais) ! +otherSwitches Autres options +opt-auto_disconnect Déconnexion lorsque la file d'attente est vide +explain-auto_disconnect Déconnexion du serveur(s) Usenet lorsque la file d'attente est vide ou en pause. +opt-send_group Envoyer Group +explain-send_group Envoyer la commande group avant la demande des articles. +opt-auto_sort Trier par âge +explain-auto_sort Trie automatiquement les fichiers par âge (moyen). +opt-check_new_rel Vérifier la présence d'une nouvelle version +explain-check_new_rel Vérfie hebdomadairement la sortie d'une nouvelle version de SABnzbd. +opt-replace_spaces Remplacer les espaces dans les noms de dossier +explain-replace_spaces Remplace les espaces par des underscores dans les noms de dossiers. +opt-replace_illegal Remplacer les caractères illégaux dans les noms de dossier +explain-replace_illegal Remplace les caractères illégaux dans les noms de dossier par des équivalents (ou les supprime). +opt-auto_browser Lancer le navigateur web au démarrage +explain-auto_browser Lance le navigateur web au démarrage de SABnzbd. +opt-pause_on_post_processing Mettre en pause les téléchargement lors du post-traitement +explain-pause_on_post_processing Met en pause les téléchargements lors des post-traitement et les reprend ensuite. +opt-ignore_samples Ignorer les Samples +explain-ignore_samples Filtre les fichiers sample de la file d'attente. +igsam-off Non +igsam-del Supprimer après téléchargement +igsam-not Ne pas télécharger +opt-ssl_type SSL type +explain-ssl_type Utiliser V23 à moins que votre fournisseur exige autrement ! + +# Config->Server +configServer Configuration Serveur +addServer Ajouter un serveur +srv-host Hôte +srv-port Port +srv-username Identifiant +srv-password Mot de passe +srv-timeout Timeout +srv-connections Connexions +srv-ssl SSL +srv-fillserver Serveur de soutient +srv-optional Optionnel +srv-enable Actif +button-addServer Ajouter Serveur +button-delServer Supprimer Serveur +error-needServer Le nom d'hôte du serveur est obligatoire +button-testServer Tester Serveur +srv-testing Test des détails du serveur en cours... +srv-testHint Cliquer ci-dessous pour tester. +srv-success Connexion réussie ! +srv-noHost Le nom d'hôte n'est pas renseigné. +srv-noConnections Pas de connexions configurées. Veuillez en spécifier au moins une. +srv-starredPass Mot de passe masqué par ******, veuillez le re-saisir +srv-invalidDetails Informations de serveur invalides +srv-timedoutSSL Délai dépassé : Essayer d'activer SSL ou un port différent. +srv-timedout Délai dépassé +srv-failedAuth Echec d'autentification, vérifiez les identifiant/mot de passe. +srv-noAuth Le serveur requiert un identifiant et un mot de passe. +srv-tooManyConnections Trop de connexions, mettez en pause les téléchargements ou essayez plus tard +srv-generalFail@1 Impossible de déterminer le résultat de la connexion (%s) + +# Config->Scheduling +configSchedule Configuration de la plannification +addSchedule Ajouter plannification +sch-frequency Fréquence +sch-action Action +sch-arguments Arguments +button-addSchedule Ajouter plannification +button-delSchedule Supprimer +currentSchedules Plannifications actuelles +sch-task Tâches +sch-disable_server désactiver serveur +sch-enable_server activer serveur +sch-resume Reprendre +sch-pause Pause +sch-shutdown Eteindre +sch-restart Rédemarrer +sch-speedlimit Limite de vitesse +sch-pause_all Pause tout +sch-pause_post Pause post-traitement +sch-resume_post Reprendre post-traitement + +# Config->RSS +configRSS Configuration RSS +newFeedURI URI Nouveau Flux +explain-RSS La case à cocher à coté du nom du flux devrait être cochée pour que le flux soit activé et qu'il soit pris en compte dans la vérification pour de nouveaux téléchargements.\n\ + La fréquence de vérification est réglable dans la page de configuration générale.\n\ + Quant un flux est ajouté, seuls les nouveaux téléchargements seront pris en compte à moins de cliquer sur "Forcer téléchargements". +feedDefinition Définition du flux +feed Flux +button-delFeed Supprimer le flux +button-preFeed Prévisualiser +button-forceFeed Forcer téléchargements +rss-order Trier +rss-type Type +rss-filter Filtre +rss-accept Accepter +rss-reject Rejeter +rss-must Obligatoire +rss-mustcat ObligatoireCat +rss-delFilter X +rss-matched Correspond +rss-notMatched Ne correspond pas +rss-done Téléchargés +rss-downloaded Téléchargés jusqu'ici +link-download Télécharger +explain-rssStar Les éléments marqués avec '*' ne seront pas automatiquement téléchargés. + +# Config->Email +configEmail Notification par Email +emailOptions Options Email +opt-email_endjob Notification par Email lors de téléchargements terminés +email-never Jamais +email-always Toujours +email-errorOnly Erreurs-uniquement +opt-email_full Notifications de disque dur plein +explain-email_full Envoie un email lorsque le disque dur est plein et que SABnzbd a été mis en pause. +opt-email_dir Dossier contenant les modèles d'email +explain-email_dir Dossier contenant les modèles d'email définis par l'utilisateur.\n\ + Relatif à +emailAccount Paramètres du compte Email +opt-email_server Serveur SMTP +explain-email_server Entrez le serveur de courrier sortant de votre FAI. +opt-email_to Adresse Email de réception +explain-email_to Adresse Email à laquelle seront envoyés les notifications. +opt-email_from Adresse Email d'envoi +explain-email_from Adresse Email de provenance des notifications. +opt-email_account OPTIONNEL: Identifiant +explain-email_account Si une autentification pour l'envoi est requise, l'identifiant. +opt-email_pwd OPTIONAL: Mot de passe +explain-email_pwd Si une autentification pour l'envoi est requise, le mot de passe. +error-badEmailAd@1 %s n'est pas une adresse email valide +opt-email_rss Send RSS notifications +explain-email_rss Send email when an RSS feed adds jobs to the queue. + +# Config->Newzbin +explain-newzbin Si vous avez un compte sur www.newzbin.com,\ + vous pouvez entrer vos informations de compte ici.\n\ + Vous accéderez à d'avantage de possibilités. +accountInfo Paramètres de compte +opt-username_newzbin Identifiant Newzbin +explain-username_newzbin Entrez votre identifiant ici. +opt-password_newzbin Mot de passe Newzbin +explain-password_newzbin Entrez votre mot de passe ici. +newzbinBookmarks Traitement des favoris +opt-newzbin_bookmarks Téléchargement automatique des favoris +explain-newzbin_bookmarks Télécharge automatiquement les favoris +link-getBookmarks Récupérer Favoris Maintenant +link-HideBM Masquer les favoris traités +link-ShowBM Afficher les favoris traités +opt-newzbin_unbookmark Retirer le favori si il a été téléchargé +explain-newzbin_unbookmark Retire de la liste des favoris lorque le téléchargement est terminé. +opt-bookmark_rate Fréquence de vérification +explain-bookmark_rate En minutes (minimum 15 min). +processedBM Favoris traités +explain-nzbmatrix Si vous avez un compte sur www.nzbmatrix.com,\ + vous pouvez entrer vos informations de compte ici.\n\ + Obligatoire si vous désirez utilisez les flux RSS de ce site. +opt-username_matrix Identifiant NzbMatrix +explain-username_matrix Entrez votre identifiant ici. +opt-password_matrix Mot de passe NzbMatrix +explain-password_matrix Entrez votre mot de passe ici. +opt-apikey_matrix NzbMatrix clé API +explain-apikey_matrix Entrez votre NzbMatrix clé API ici. + +# Config->Cat +configCat Catégories utilisateur +explain-configCat Définit le post-traitement et le stockage. +explain-catNewzbin La colonne Newzbin associera la catégorie Newzbin à la votre. +link-initCat Cliquer ici pour mettre en place les catégories newzbin. +explain-relFolder Dossiers relatifs à +catFolderPath Dossier/Chemin +catNewzbin NewzBin +catGroups Groupes +button-delCat X + +# Config->Sorting +configSort Configuration des classements +seriesSorting Classement Series +sort-show Série +sort-name Nom +opt-tvsort Activer Classement TV +explain-tvsort Active le classement et le renommage des épisodes. +sort-legenda Toggle key +button-clear Effacer +presetSort Prédéfinitions +example Exemple +genericSort Classement Générique +opt-movieSort Activer Classement Films +explain-movieSort Active le classement et le renommage générique des fichiers. +opt-movieExtra Garder les téléchargements dans des dossiers +explain-movieExtra Activer si les téléchargement ne sont pas dans leur propre dossier. +affectedCat Catégories affectées +sort-meaning Signification +sort-pattern Modèle +sort-result Résultat +button-Season1x05 1x05 Dossier Saison +button-SeasonS01E05 S01E05 Dossier Saison +button-Ep1x05 1x05 Dossier Episode +button-EpS01E05 S01E05 Dossier Episode +sort-title Titre +movie-sp-name Nom Film +movie-dot-name Nom.Film +movie-us-name Nom_Film +show-name Nom Série +show-sp-name Nom Série +show-dot-name Nom.Série +show-us-name Nom_Série +show-seasonNum Numéro Saison +show-epNum Numéro Episode +ep-name Nom Episode +ep-sp-name Nom Episode +ep-dot-name Nom.Episode +ep-us-name Nom_Episode +fileExt Extension Fichier +extension Extension +partNumber Numéro Partie +decade Décade +orgFilename Nom De Fichier Original +lowercase Minuscule +TEXT TEXTE +text texte +sort-File fichier +sortString Chaîne de Classement +multiPartLabel Etiquette Multi-partie +button-inFolders Dans Dossiers +button-noFolders Pas De Dossiers +dateSorting Classement Par Date +opt-dateSort Activer Classement Par Date +explain-dateSort Active le classement et le renommage des fichiers par date. +button-ShowNameF Dossier Nom Série +button-YMF Dossiers Année-Mois +button-DailyF Dossiers Quotidiens + + +# NZO +nzoDetails Editer les détails du NZB +nzoName Nom +nzo-delete Supprimer +nzo-top Premier +nzo-up Monter +nzo-down Descendre +nzo-bottom Dernier +nzo-all Tous +nzo-none Auncun +nzo-invert inverser +nzo-filename Nom de fichier +nzo-subject Sujets +nzo-age Age +nzo-selection Sélection + +# Internal texts +msg-warning-ambiLocalhost Avertissement: LOCALHOST est ambigü, utilisez une adresse IP numérique. +msg-invalidServer@2 Adresse Serveur "%s:%s" non valide. + +warn-missingKey Clé de session manquante +error-missingKey Erreur : Clé de session requise +warn-badSession Clé de session incorrecte +error-badKey Erreur : Clé de session incorrecte +warn-authMissing Autentification manquante, entrez votre idenifiant/mot de passe de la configuration générale\ + dans votre application tierce : +error-authMissing Erreur : Autentification manquante +warn-apikeyNone Clé API manquante, entrez la clé API de la configuration générale\ + dans votre application tierce : +error-apikeyNone Clé API Requise +warn-apikeyBad Clé API incorrecte, utilisez la clé API de la configuration générale\ + dans votre application tierce : +error-apikeyBad Erreur : Clé API incorrecte +error-noSecUI Erreur : Pas d'interface secondaire définie. + +his-badArchive Echec, Fichier d'archive inutilisable +his-cannotGetReport Echec de récupération du rapport newzbin +his-failedURL Echec de l'ajout de l'URL +his-retryURL1@1 Echec de récupération de l'URL; %s +his-retryURL2 Essayer de nouveau + +# Errors and Warnings +error-noPar2 binaire par2... NON trouvé ! +error-noWebUi Echec du lancement de l'interface web +error-noYEnc module _yenc... NON trouvé! +error-sameHTTP-HTTPS Les ports HTTP et HTTPS ne peuvent être identiques +warn-0000 Attention le nom d'hôte 0.0.0.0 nécessite une addresse IPv6 pour les accès externes +warn-noCertKey HTTPS désactivé car le certificat et la clé n'ont pas été trouvés +warn-noSkin@1 Ne peut trouver le modèle pour l'interface web : %s, essai avec le modèle standard +warn-noUnrar binaire unrar... NON trouvé ! +warn-noUnzip binaire unzip... NON trouvé ! +error-failMkstemp Echec dans tempfile.mkstemp +error-fetchReport@1 Erreur de récupération du msgid %s depuis www.newzbin.com - +error-hibernate Echec de la mise en hibernatation +error-loading@1 Chargement %s echoué +error-saveX@1 Enregistrement %s echoué +error-saveXtoY@2 Enregistrement de %s vers %s echoué +error-standby Echec de la mise en veille +error-tempFile@1 Ne peut créer le fichier temporaire pour %s +warn-noServer@1 Essai de mise à jour de statut du serveur inexistant %s +warn-noSpace Espace disque faible PAUSE forcée +warn-signal@1 Signal %s intercepté, enregistrement et fermeture en cours... +warn-flushFailed@1 Ecriture %s echouée -> pas d'art_id +error-diskError@1 Erreur disque lors de la création du fichier %s +error-diskFull Disque plein ! Pause Forcée +warn-artMissing@1 %s manquant +error-badIni@1 Fichier de configuration invalide %s +error-createIni@1 Ne peut créer le fichier de configuration %s +error-encPw@1 Cryptage du mot de passe incorrect %s +error-version@2 Le numéro de version est incorrect %s dans %s" +error-badHisNewline@1 Etape de log incorrect dans l'historique pour %s (\\r\\n) +error-badHisSemic@1 Etape de log incorrect dans l'historique pour %s (;) +error-sqlClose Echec de fermeture de base de données, voir log +error-sqlCmd Echec de la commande SQL, voir log +error-sqlCommit Echec de du commit SQL, voir log +error-decode@1 Echec du décodage de %s +error-decodeUnknown@1 Erreur inconnue lors du décodage de %s +warn-artAllMissing@1 %s => non présent de tous les serveurs, rejeté +warn-badYEnc@1 Article yEnc malformé dans %s +warn-crcError@3 Erreur CRC dans %s (%s -> %s) +error-readWatched@1 Ne peut lire le Dossier à scanner %s +error-remove@1 Erreur lors de la suppression de %s +warn-noRead@1 Ne peut lire %s +error-except Exception ? +error-noInit@3 Echec de l'initialisation %s@%s:%s +error-serverFailed@4 Echec de la connexion à %s@%s:%s, message=%s +error-serverLogin@1 Echec de la connexion au serveur %s +error-serverNoConn@2 Ne peut se connecter au serveur %s [%s] +error-serverTooMany@2 Trop de connexions au serveur %s:%s +warn-ignoreServer@2 Le serveur %s sera ignoré pendant %s minutes +warn-noConnectServer@2 Impossible de se connecter au serveur %s [%s] +error-accountSharing Partage de compte probable +error-serverCred@1 Le serveur %s requiert des identifiant/mot de passe +warn-thread@3 Thread %s@%s:%s: +error-mailAuth Echec de l'autentification au serveur de mail +error-mailNoConn Echec de la connexion au serveur de mail +error-mailSend Echec de l'envoi du mail +error-mailTempl@1 Impossible de trouver les modèles de mail dans %s +error-mailTLS Echec de l'initiation de la connexion TLS +warn-noEmailClose Echec de la fermeture de la connexion mail +msg-emailOK Succès de l'envoi du mail +error-regex@1 Echec de la compilation de regex pour la recherche du terme : %s +error-accessDir@2 %s dossier : %s Erreur d'accès +error-createDir@1 Impossible de créer le dossier %s +error-makeFile@1 Echec lors de la création de (%s) +error-moveFile@2 Echec lors du déplacement de %s vers %s +error-portNoAccess@1 Le port %s n'est pas accessible +error-regConnect Impossible de se connecter au registre HKEY_CURRENT_USER. +error-regOpen@1 Impossible d'ouvrir la clé de registre "%s". +error-regSpecial Echec de la lecture des clés de registre pour les dossiers spéciaux +error-sslFiles Erreur lors de la création de la clé et du certificat SSL +error-urlGet@2 Erreur lors de la récupération de l'url %s (erreur = "%s") +warn-noBrowser Impossible de lancer le navigateur web, potentiellement non trouvé +warn-pyopenssl module pyopenssl manquant, nécessaire pour l'accès HTTPS +error-fileJoin@2 Erreur "%s" lors de l'exécution de file_join sur %s +error-filePar2@2 Erreur %s lors de l'exécutiion de par2_repair sur %s +error-fileRead@1 notrar(): echec de lecture de %s +error-fileUnrar@2 Erreur "%s" lors de l'exécution de rar_unpack sur %s +error-fileUnzip@2 Erreur "%s" lors de l'exécution de unzip sur %s +warn-cannotFind@1 ERREUR : impossoble de trouver "%s" +warn-crcFailed@1 ERREUR : echec CRC pour "%s" +warn-delFailed@1 Echec de la suppression de %s ! +warn-encrypted ERREUR : Fichier encryptés : +warn-error@1 ERREUR : %s +warn-MissExpectedFile@1 Le fichier attendu est manquant : %s => erreur unrar ? +warn-writeError@1 ERREUR : erreur d'écriture (%s) +error-connect@1 Impossible de se connecter : %s +error-newsSSL Ce serveur d'accèpte pas de SSL sur ce port +error-noSSL Erreur lors de l'importation du module OpenSSL. Connection sans SSL +error-nbInfo@1 Impossible d'obtenir les informations pour %s du serveur Newzbin +error-nbProtocol Le serveur Newzbin a changé son protocole +error-nbReport@1 Rapport Newzbin %s non trouvé +error-nbUnkownError@1 Erreur Newzbin non documentée (%s) +error-nbUnkownError@2 Erreur Newzbin non documentée (%s, %s) +error-nbUpdate@1 Echec de la mise à jour du rapport newzbin %s +warn-nbCredit Pas de crédits sur votre compte Newzbin +warn-nbNoAuth Non autorisé, vérifiez vos identifiant / mot de passe newzbin +warn-nbNoDelBM@1 Impossible de retirer le marque-page newzbin %s +error-qAdd@1 Erreur lors de l'ajout de %s, supprimé +error-qBad Fichier de file d'attente incompatible, impossible à traiter +error-qCorruptFile@1 Erreur lors du chargement de loading %s, fichier corrompu détécté +warn-unknownEncoding@1 %s -> Encodage inconnu +error-qDupPart@3 Partie dupliquée %s, mais ID-s différents (%s // %s) +error-qImport@1 Erreur lors de l'importation de %s +warn-badImport@2 Echec lors de l'importation des fichiers %s depuis %s +warn-badNZB@3 Fichier NZB invalide %s, rejeté (raison=%s, ligne=%s) +warn-emptyFile@1 Fichier %s vide, rejeté +warn-skipDup@1 Rejet du NZB dupliqué "%s" +error-ppCleanup@1 Echec du nettoyage de %s. +error-ppDelFailed@1 Echec de la suppression de %s +error-ppDelNzo Echec de la suppression du nzo de la qeueu de post-traitement (id) +error-ppDelWorkdir@1 Erreur lors de la suppression du dossier de travail (%s) +error-ppFailed@1 Echec du post-traitement pour %s +error-ppLogFile@1 Impossible de créer le fichier de log %s +error-ppPermissions@1 Impossible de changer les permissions pour %s +error-ppRename@2 Erreur lors du renommage de "%s" en "%s" +warn-badPPQueue@2 Echec lors du chargement de la file d'attente de post-traitement : Mauvaise version (nécessaire:%s, trouvée:%s) +error-rssBadFeed@1 Description du flux RSS incorrecte "%s" +error-rssRegex@1 Impossible de compiler la regex : %s +warn-emptyRSS@1 Entrée vide de flux RSS trouvée (%s) +warn-failRSS@1 Echec de la récupération RSS pour %s +warn-failRSS@2 Echec de la récupération RSS pour %s: %s +warn-badSched@3 Mauvaise plannification le %s à %s:%s +warn-badSchedAction@1 Action inconnue : %s +warn-schedNoServer@1 Plannification pour un serveur non existant %s +error-tvInfo@1 Erreur lors de l'obtention des information TV (%s) +error-tvRename@2 Echec du renommage : %s en %s +error-tvSimRename@2 Echec du renommange des fichiers similaires : %s en %s +error-tvTemp@1 Impossible de créer le fichier temporaire %s +warn-matrixBadRep@1 Numéro de rapport nzbmatrix invalide %s +warn-matrixFail@1 Problème d'accès au serveur nzbmatrix (%s) +warn-noRepair Le binaire PAR2 n'a pas été trouvé, les réparations ne sont pas possibles\n +warn-noUnpack Le binaire UNRAR n'a pas été trouvé, la décompression des fichiers RAR n'est pas possible\n +warn-badUnrar La version de votre binaire UNRAR n'est pas recommandée,\ + Vous pouvez l'obtenir ici http://www.rarlab.com/rar_add.htm\n +warn-missingFiles \nAttention : tous les fichiers n'ont pas été décompressés, voir le log +error-joinMismatch La taille ne correspond pas à la taille attendue +error-joinFail@1 La concaténation du fichiers %s a echoué +error-joinFail@2 [%s] Erreur "%s" lors de la concaténation des fichiers +msg-joinOK@2 [%s] Concaténation %s fichiers +error-unpackFail@1 Echec de la décompression, %s +error-unpackFail@2 [%s] Erreur "%s" lors de la décompression des fichiers RAR +error-badArchive Impossible d'ouvrir l'archive principale (encryptée ou corrompue) +error-unpackFailed@1 Echec de la décompression, %s n'a pas été trouvé +error-unpackCRC Echec de la décompression, erreur CRC +error-unpackFull Echec de la décompression, erreur d'écriture ou espace disque insuffisant ? +error-unpackFailLog Echec de la décompression, voir log +error-unpackPassword Echec de la décompression, l'archive nécessite un mot de passe +error-unpackMissing Echec de la décompression, un fichier attendu n'a pas été décompressé +msg-unpackDone@2 %s fichier(s)/dossier(s) décompressés en %s +msg-unzipDone@2 %s fichiers en %s +msg-QuickCheck Contrôle Rapide... +msg-QuickChecking Contrôle Rapide en cours +msg-QuickOK@1 [%s] Contrôle Rapide OK +msg-startRepair Réparation en cours +error-repairFailed@1 Echec de la réparation, %s +error-repairBad@2 Erreur "%s" lors la réparation de %s +msg-verify Vérification... +msg-verifyOK@2 [%s] Vérifié en %s, tous les fichiers sont corrects +msg-repairNeeded Réparation requise +msg-repairNeeded@2 [%s] Vérifié en %s, réparation requise +error-noMainPacket Le paquet principal n'a pas été trouvé... +error-repairBlocks@1 Echec de la réparation, blocs de réparation insuffisants (manque %s) +msg-fetchBlocks@1 Téléchargement de %s blocs... +msg-repairing Réparation en cours +msg-repairDone@2 [%s] Réparé en %s +msg-verifying Vérification en cours +msg-DownloadedIn@2 Téléchargé en %s à %sB/s en moyenne +msg-noParSets@1 [%s] Pas de fichiers par2 +msg-noPostProc Pas de post-traitement car la vérification a echoué +msg-sentToQ@1 %s mis en file d'attente +msg-runScript@1 Exécution du script utilisateur %s en cours +msg-ranScript@1 %s exécuté +link-more Plus +link-viewSc Voir le résultat du script +warn-OutRetention Echec de téléchargement - Rétention du serveur dépassée ? +warn-PostCrash Le post-traitement a planté, voir log +msg-moving Déplacement +msg-running Exécution de script +msg-joining Concaténation +msg-unpacking Décompression +msg-repair Réparation +msg-fetching Récupération +msg-path Chemin + +stage-download Téléchargement +stage-repair Réparation +stage-filejoin Concaténation +stage-unpack Décompression +stage-script Script + +post-Completed Terminé +post-Failed Echoué +post-Queued En file d'attente +post-Repairing Réparation en cours... +post-Extracting Décompression en cours... +post-Moving Déplacement en cours... +post-Running Exécution de script en cours... +post-Fetching Téléchargement des extra blocs... +post-QuickCheck Contrôle rapide... +post-Verifying Vérification... + +#Growl Messages +grwl-notif-startup Démarrage/Arrêt +grwl-notif-dl Ajout NZB +grwl-notif-pp Post-traitement +grwl-notif-other Autres Messages +grwl-shutdown-begin-msg Arrêt en cours... +grwl-shutdown-end-msg SABnzbd arrêt terminé +grwl-paused-msg En Pause +grwl-nzbadd-title NZB ajouté à la file d'attente +grwl-newversion-msg Nouvelle version disponible + +#OSX Menu +osx-menu-warnings Avertissements +osx-menu-status-idle En Attente +osx-menu-status-paused En Pause +osx-menu-pause Pause +osx-menu-min min. +osx-menu-resume Reprendre +osx-menu-queue File d'attente +osx-menu-queuelimit File d'attente - 10 premiers éléments +osx-menu-history Historique +osx-menu-historylimit Historique - 10 derniers éléments +osx-menu-speedlimit Limite Vitesse +osx-menu-none Aucune +osx-menu-getnewzbinbm Récupérer Favoris Newzbin +osx-menu-complete Dossier Complets\t\t +osx-menu-incomplete Dossier Incomplets\t\t +osx-menu-restart Redémarrer SABnzbd +osx-menu-quit Quitter SABnzbd +osx-menu-config Configuration +osx-menu-purgequeue Vider File d'attente +osx-menu-purgehistory Vider Historique +osx-menu-wizard Ouvrir l'assistant +osx-menu-empty Vide +osx-menu-shutdowning Arrêt en cours... + +email-full@2 \ +to: %s\r\ +from: %s\r\ +subject: SABnzbd : Espace disque insuffisant\r\ +\r\ +Hi,\r\ +\r\ +SABnzbd a mis en pause les téléchargements car le disque est presque plein.\r\ +Veuillez libérer de l'espace et reprendre les téléchargements manuellement.\r\ +\r diff --git a/language/nl-du.txt b/language/nl-du.txt new file mode 100644 index 0000000..01411bc --- /dev/null +++ b/language/nl-du.txt @@ -0,0 +1,814 @@ +# -*- coding: UTF-8 -*- +# Nederlands + +special-decimal . +special-1000 , + +# General texts +yes Ja +no Nee +default Standaard +none Geen +KBs KB/s +MB MB +hour uur +hours uren +minute min +minutes min +second sec +seconds seconden +month maand +year jaar +day dag +days dagen +daily dagelijks +monday maandag +tuesday dinsdag +wednesday woensdag +thursday donderdag +friday vrijdag +saturday zaterdag +sunday zondag +day-of-month dagnummer +filename Bestandsnaam + +# General template elements +signOn De automatische Usenet downloader +button-save Opslaan +queued Rij +button-back Terug +button-x X + +# Header +menu-home Opdrachten +menu-queue Wachtrij +menu-history Geschiedenis +menu-config Instellen +menu-cons Verbindingen +menu-help Hulp +menu-wiki Wiki +menu-forums Forum +menu-irc IRC +cmenu-general Algemeen +cmenu-folders Mappen +cmenu-switches Opties +cmenu-servers Servers +cmenu-scheduling Taakplanner +cmenu-rss RSS +cmenu-email Email +cmenu-newzbin Index sites +cmenu-cat Categorieën +cmenu-sorting Sorteren + +# Footer +ft-download Map download +ft-complete Map voltooid +ft-speed Snelheid +ft-queued Wachtend +ft-paused PAUZE +ft-buffer@2 %s artikelen (%s) gebuffered +ft-sysload Sysload +ft-warning MELDINGEN +ft-newRelease@1 Nieuwe versie %s beschikbaar op + +# Main page +addNewJobs Opdrachten toevoegen +shutdownOK? Weet je zeker dat je SABnzbd wilt afsluiten? +link-shutdown Afsluiten +link-pause Pauze +link-resume Doorgaan +button-add Toevoegen +add +reportId Newzbin rapport +addFile Bestand +category Categorie +pp Nabewerking +priority Prioriteit +pp-none Geen +pp-repair +Repareren +pp-unpack +Uitpakken +pp-delete +Opschonen +pp-n +pp-r R +pp-u U +pp-d O +pr-force Forceren +pr-normal Normaal +pr-high Hoog +pr-low Laag +enterURL URL +enterID  of Report ID + +# Queue page +link-sortByName Op naam +link-sortByAge Op leeftijd +link-sortBySize Op grootte +link-hideFiles Verberg bestanden +link-showFiles Toon bestanden +onQueueFinish Bij lege rij +shutdownPc PC afsluiten +standbyPc PC standby +hibernatePc PC slapen +shutdownSab SABnzbd afsluiten +speedLimit Max. snelheid +pauseFor Pauzeer +name Naam +mode Modus +order +remainTotal Te doen/Totaal +eta Klaar om +age Leeftijd +button-del Wis +button-resume Doorgaan +button-pause Pauzeer +unknown onbekend +fetchingNewzbin@1 Ophalen rapport %s van www.newzbin.com +error-fetchNewzbin@1 Fout bij ophalen van rapport %s van www.newzbin.com -\ + Zorg dat je gebruikersnaam en wachtwoord goed ingevuld zijn +fetchNZB@1 Probeer NZB op te halen van %s +eoq-actions Akties +eoq-scripts Scripts +purgeQueue Wis wachtrij +purgeQueueConf Verwijder alle opdrachten uit de wachtrij? + +# History page +purgeHist Alles wissen +purgeHistConf Verwijder alle items uit de Geschiedenis? +hideDetails Verberg details +showDetails Toon details +sizeHist Totaal +completed Voltooid +size Grootte +status Status +msg-reAdded@1 Opdracht "%s" terug naar de wachtrij + +# Connections page +link-forceDisc Verbreek verbindingen +askTestEmail Hiermee stuur je een test email. +link-showLog Toon log info +link-showWeblog Toon weblog info +link-testEmail Test Email +logging Loggen +log-errWarn Fouten/Waarschuwingen +log-info + Info +log-debug + Debug +connections Verbindingen +thread Verbinding +emailResult Test resultaat email +lastWarnings Recentste meldingen +clearWarnings Wissen +server-blocked Deblokkeren +warning WAARSCHUWING: +error FOUT: +server-resolving  Adres opzoeken + +# Configuration +configuration Instellingen +confgFile Instellingen bestand +explain-Restart De knop hier onder zal SABnzbd herstarten.\n\ + Dit kan nuttig zijn wanneer je vermoedt dat het programma niet stabiel is.\n\ + Het downloaden zal vóór de herstart gestopt worden en daarna weer doorgaan. +button-restart Herstarten +version Versie +uptime Aktief +error Fout +badParm Foute instelling +error-badValue@2 Foute waarde voor %s: %s +error-noFolder@1 Map "%s" bestaat niet. +error-QnotEmpty Fout: Wachtrij is niet leeg, kan geen andere map kiezen. +error-noUNC@1 Het UNC pad "%s" mag hier niet. +error-notOctal@1 %s is geen correct octaal getal + +# Config->General +generalConfig Algemene instellingen +restartRequired Wijzigingen worden pas aktief na herstart! +webServer Web server +opt-host Host +explain-host Host adres waar op SABnzbd luistert. +opt-port Poort +explain-port Poort waar op SABnzbd luistert. +opt-web_dir Gebruikersinterface +explain-web_dir Kies een skin (herstart nodig). +opt-web_dir2 Secundair Gebruikersinterface +explain-web_dir2 Aktiveer secundaire skin (herstart nodig). +webAuth Web server authenticatie +opt-web_username Gebruikersnaam +explain-web_username Gebruikersnaam voor web login. +opt-web_password Wachtwoord +explain-web_password Wachtwoord voor web login. +httpsSupport HTTPS ondersteuning +opt-enable_https Maak HTTPS mogelijk +opt-notInstalled niet geinstalleerd +explain-enable_https Sta gebruik van HTTPS toe. +opt-https_port HTTPS Poort +explain-https_port Poort die SABnzbd gebruikt voor HTTPS communicatie +opt-https_cert HTTPS Certificaat +explain-https_cert Naam of pad van het HTTPS Certificaat bestand. +opt-https_key HTTPS Sleutelbestand +explain-https_key Naam of pad van het HTTPS Sleutel bestand. +tuning Afstelling +opt-refresh_rate Verversingsinterval van de Wachtrij +explain-refresh_rate Verversingsinterval van het de Wachtrij pagina (sec, 0= geen). +opt-rss_rate RSS uitlees interval +explain-rss_rate Aantal minuten tussen de RSS uitlezingen (minimaal 15). +opt-bandwidth_limit Download snelheidsbeperking +explain-bandwidth_limit Download snelheidsbeperking kilobytes per seconde (kB/s). +opt-cache_limitstr Artikel buffer beperking +explain-cache_limitstr Bewaar de artikelen in het werkgeheugen (verminderd schijf gebruik). +opt-cleanup_list Opschoon lijst +explain-cleanup_list Lijst van bestand extensies die verwijderd worden\n\ + Voorbeeld: .nfo or .nfo, .sfv +button-saveChanges Opslaan +opt-language Taal +explain-language Kies andere taal +opt-apikey API Sleutel +explain-apikey Deze sleutel is nodig om hulp programma's toegang tot SABnzbd te geven. +button-apikey Maak een nieuwe sleutel +opt-disableApikey API-sleutel niet gebruiken +explain-disableApikey Gebruik van de API sleutel niet afdwingen. +explain-disableApikeyWarn GEBRUIK OP EIGEN RISICO! +restart1 Begin met herstart...\n +restart2  \n\ + SABnzbd is nu afgesloten.\n\ + Wacht ongeveer 5 seconden en klik dan op onderstaande knop.\n\n\ + Verversen\n + +warning-ambiLocahost Waarschuwing: LOCALHOST is niet eenduidig, gebruik een numeriek IP-adres. + +# Config->Folders +folderConfig Map instellingen +explain-folderConfig Let op: mappen worden vanzelf aangemaakt bij "Opslaan". +userFolders Gebruikersmappen +in In +opt-download_dir Tijdelijke download map +explain-download_dir Plaats om onbewerkte downloads op te slaan\n\ + Kan alleen gewijzigd worden als de wachtrij leeg is. +opt-download_free Minimale vrije ruimte voor tijdelijke download map +explain-download_free Download wordt gepauzeerd als er te weinig ruimte vrij is +opt-complete_dir Map voor verwerkte downloads +explain-complete_dir (kan aangepast worden door de categorieën). +opt-permissions Toegangsrechten voor verwerkte downloads +explain-permissions Zet toegangsrechten voor verwerkte bestanden/mappen, alleen octale notatie! +opt-dirscan_dir Bewaakte map +explain-dirscan_dir .nzb en .zip bestanden in deze map worden automatisch gedownload. +opt-dirscan_speed Leestempo bewaakte map +explain-dirscan_speed Aantal seconden tussen lezen van de bewaakte map. +opt-script_dir Map met gebruikers scripts +explain-script_dir Map waarin zich de script bestanden voor nabewerking bevinden. +opt-email_dir Map met email sjablonen +explain-email_dir Map waarin zich de email sjablonen bevinden. +systemFolders Systeem folders +opt-cache_dir Cache mappen +explain-cache_dir Map gebruikt voor tijdelijke opslag\n\ + Kan alleen gewijzigd worden als de wachtrij leeg is\n\ + Vereist een herstart. +opt-log_dir Map voor logging +explain-log_dir Map waarin de log bestanden worden opgeslagen\n\ + Vereist een herstart. +opt-nzb_backup_dir Map voor het bewaren van nzb bestanden +explain-nzb_backup_dir Map waar reserve kopieën opgeslagen worden. + +# Config->Switches +switchesConfig Diverse instellingen +processingSwitches Nabewerking instellingen +opt-quick_check Snelle controle toestaan +explain-quick_check Geen uitgebreide PAR2 controle als files 100% in orde zijn. +opt-enable_unrar Unrar toestaan +explain-enable_unrar Uitpakken van RAR archieven toestaan. +opt-enable_unzip Unzip toestaan +explain-enable_unzip Uitpakken van ZIP archieven toestaan. +opt-enable_filejoin Samenvoegen van bestanden toestaan +explain-enable_filejoin Voeg bestanden eindigend met .001, .002 enz. samen tot één file. +opt-enable_tsjoin Samenvoegen van TS bestanden toestaan +explain-ts_join Voeg bestanden eindigend met .001.ts, .002.ts enz. samen tot één file. +opt-enable_par_cleanup PAR bestanden opruimen +explain-enable_par_cleanup Ruim PAR bestanden op (na succesvolle verificatie/reparatie). +opt-fail_on_crc Verwijder artikelen met yEnc crc fouten +explain-fail_on_crc Probeer deze artikelen opnieuw te downloaden van een reserve server. +opt-top_only Download alleen artikelen van het begin van de wachtrij +explain-top_only Aanzetten zal leiden tot minder geheugen gebruik.\n\ + Uitzetten om te voorkomen dat langzame opdrachten de wachtrij blokkeren. +opt-safe_postproc Verwerk alleen correct geverifieerde downloads +explain-safe_postproc Voer de nabewerking alleen uit op downloads die alle PAR2 controles hebben doorlopen. +opt-no_dupes Download geen dubbele opdrachten. +explain-no_dupes Sla een opdracht over wanneer de NZB al als reserve bestand is opgeslagen. +opt-dirscan_opts Standaard nabewerking +explain-dirscan_opts Wordt gebruikt wanneer de categorie geen nabewerking opgeeft. +opt-dirscan_script Standaard script +explain-dirscan_script Wordt gebruikt wanneer de categorie geen script opgeeft. +opt-dirscan_priority Standaard prioriteit +explain-dirscan_priority Wordt gebruikt wanneer de categorie geen prioriteit opgeeft. +opt-par2_multicore MultiCore Par2 toestaan +explain-par2_multicore Lees hier voor de Wiki pagina! +opt-par_option Extra PAR2 parameters: +explain-par_option Lees hier voor de Wiki pagina! +opt-nice "Nice" parameters +explain-nice Lees hier voor de Wiki pagina! +opt-ionice "IONice" parameters +explain-ionice Lees hier voor de Wiki pagina! +otherSwitches Diverse instellingen +opt-auto_disconnect Verbreek verbindingen wanneer er niets te doen is +explain-auto_disconnect Verbreek verbindingen wanneer de wachtrij leeg is of er gepauzeerd wordt. +opt-send_group Verzend groep +explain-send_group Verzend de groepsnaam naar de server. +opt-auto_sort Sorteer op leeftijd +explain-auto_sort Automatisch sorteren op basis van gemiddelde leeftijd. +opt-check_new_rel Informeer naar nieuwe versies +explain-check_new_rel Informeer iedere week naar nieuwe SABnzbd versies. +opt-replace_spaces Vervang spaties in map namen +explain-replace_spaces Vervang spaties door onderliggende streepjes in map namen. +opt-replace_illegal Vervang verboden tekens in map namen +explain-replace_illegal Vervang verboden tekens in map namen door gelijkende tekens (anders verwijderen). +opt-auto_browser Start web browser bij opstarten +explain-auto_browser Start de web browser wanneer SABnzbd opstart. +opt-pause_on_post_processing Onderbreek downloaden tijdens nabewerken +explain-pause_on_post_processing Onderbreek downloaden tijdens nabewerken. +opt-ignore_samples Verwerking van "sample" bestanden +explain-ignore_samples Wat te doen met "sample" bestanden? +igsam-off Behouden +igsam-del Verwijderen na download +igsam-not Niet downloaden +opt-ssl_type SSL type +explain-ssl_type Gebruik V23, behalve wanneer persé nodig voor je Internet provider! + +# Config->Server +configServer Usenet servers +addServer Voeg server toe +srv-host Server naam +srv-port Poort nummer +srv-username Gebruikersnaam +srv-password Wachtwoord +srv-timeout Tijdslimiet +srv-connections Verbindingen +srv-ssl SSL +srv-fillserver Reserve server +srv-optional Optioneel +srv-enable Aktief +button-addServer Voeg toe +button-delServer Verwijder +error-needServer Server adres verplicht + +# Config->Scheduling +configSchedule Agenda instellen +addSchedule Taak toevoegen +sch-frequency Frequentie +sch-action Aktie +sch-arguments Parameters +button-addSchedule Voeg toe +button-delSchedule Verwijder +currentSchedules Huidige taken +sch-task Taak +sch-disable_server Server uit: +sch-enable_server Server aan: +sch-resume Doorgaan +sch-pause Pauze +sch-shutdown Afsluiten +sch-restart Herstarten +sch-speedlimit Maximum snelheid +sch-pause_all Alles pauzeren +sch-pause_post Pauzeer nabewerken +sch-resume_post Hervat nabewerken + + +# Config->RSS +configRSS RSS Stroom Definities +newFeedURI Nieuwe Stroom +explain-RSS Om de RSS stroom automatisch te verwerken, vink het selectievlakje bij de definitie naam aan.\n\ + De lees-frequentie is in te stellen op de "Algemene instellingen" pagina.\n\ + Wanneer een nieuwe stroom wordt gedefinieerd, zullen alleen nieuwe items gevonden worden en geen bestaande,\ + behalve wanneer je de op "Forceer download" klikt. +feedDefinition Stroom Definitie +feed Stroom +button-delFeed Verwijder +button-preFeed Voorbeeld +button-forceFeed Forceer download +rss-order Volgorde +rss-type Type +rss-filter Filter +rss-accept Accepteren +rss-reject Verwerpen +rss-must Verplicht +rss-mustcat VerplichteCat +rss-delFilter X +rss-matched Geselecteerd +rss-notMatched Niet geselecteerd +rss-done Gedaan +rss-downloaded Tot nu toe gedaan +link-download Download +explain-rssStar Items met een ster '*' worden niet automatisch gedownload. + +# Config->Email +configEmail Email berichten +emailOptions Email Opties +opt-email_endjob Zend email na voltooien van elke download +email-never Nooit +email-always Altijd +email-errorOnly Alleen bij fouten +opt-email_full Zend email wanneer de harde schijf vol is +explain-email_full Zend email wanneer SABnzbd gestopt is vanwege een volle harde schijf. +emailAccount Email gegevens +opt-email_server SMTP email server +explain-email_server Het adres van je Internet providers email server. +opt-email_to Email bestemming +explain-email_to Adres waarnaar de email verstuurd wordt. +opt-email_from Email afzender +explain-email_from Wie zou de email gestuurd moeten hebben? +opt-email_account OPTIE: Account gebruikersnaam +explain-email_account Wanneer authenticatie nodig is, gebruikersnaam. +opt-email_pwd OPTIE: Account wachtwoord +explain-email_pwd Wanneer authenticatie nodig is, wachtwoord. +error-badEmailAd@1 %s is geen geldig email adres +opt-email_rss Zend email voor RSS +explain-email_rss Zend email wanneer een RSS bron opdrachten\n\ + aan de queue toevoegd. + +# Config->Newzbin +explain-newzbin Wanneer je een account bij www.newzbin.com hebt,\ + kun je hier je gegevens invullen.\n\ + Dit maakt extra mogelijkheden beschikbaar. +accountInfo Account info +opt-username_newzbin Gebruikersnaam +explain-username_newzbin Vul hier je gebruikersnaam in. +opt-password_newzbin Wachtwoord +explain-password_newzbin Vul hier je wachtwoord in. +newzbinBookmarks Automatische bookmark verwerking +opt-newzbin_bookmarks Bookmarks verwerken +explain-newzbin_bookmarks Download alle rapporten die gebookmarked zijn? +link-getBookmarks Download nu alle bookmarks +link-HideBM Verberg verwerkte bookmarks +link-ShowBM Toon verwerkte bookmarks +opt-newzbin_unbookmark Automatisch bookmark verwijderen +explain-newzbin_unbookmark Verwijder bookmark status na voltooide download. +opt-bookmark_rate Lees interval +explain-bookmark_rate In minuten (minimaal 15). +processedBM Verwerkte bookmarks +explain-nzbmatrix Wanneer je een account bij www.nzbmatrix.com hebt,\ + kun je hier je gegevens invullen.\n\ + Dit is nodig om RSS stromen van deze site te kunnen verwerken. +opt-username_matrix Gebruikersnaam +explain-username_matrix Vul hier je gebruikersnaam in. +opt-password_matrix Wachtwoord +explain-password_matrix Vul hier je wachtwoord in. +opt-apikey_matrix NzbMatrix API sleutel +explain-apikey_matrix Vul hier de NzbMatrix API sleutel in. + +# Config->Cat +configCat Categorieën voor nabewerking +explain-configCat Bepalend voor nabewerking en opslag. +explain-catNewzbin De Newzbin kolom beeldt newzbin categorieën af op je eigen categorieën. +link-initCat Klik hier om de standaard newzbin categorieën in te vullen. +explain-relFolder De relatieve mappen zijn gebaseerd op +catFolderPath Map/Pad +catNewzbin NewzBin +catGroups Groepen +button-delCat X + +# Config->Sorting +configSort Sorteer instellingen +seriesSorting Serie sorteren +sort-show Serie +sort-name Naam +opt-tvsort TV sorteren aan +explain-tvsort Sta sorteren en hernoemen van afleveringen toe. +sort-legenda Uitleg +button-clear Wissen +presetSort Voorkeuzes +example Voorbeeld +genericSort Algemeen sorteren +opt-movieSort Film sorteren aan +opt-movieExtra Zet downloads in aparte mappen +explain-movieExtra Sta opslaan van downloads in een eigen map toe. +affectedCat Beïnvloede categorieën +explain-movieSort Sta algemeen sorteren en hernoemen van bestanden toe. +sort-meaning Betekenis +sort-pattern Patroon +sort-result Resultaat +button-Season1x05 1x05 Seizoensmappen +button-SeasonS01E05 S01E05 Seizoensmap +button-Ep1x05 1x05 Episodemap +button-EpS01E05 S01E05 Episodemap +sort-Title Itel +movie-sp-name Film Naam +movie-dot-name Film.Naam +movie-us-name Film_Naam + +show-name Serie Naam +show-sp-name Serie Naam +show-dot-name Serie.Naam +show-us-name Serie_Naam +show-seasonNum Seizoen Nummer +show-epNum Episode Nummer +ep-name Episode Naam +ep-sp-name Episode Naam +ep-dot-name Episode.Naam +ep-us-name Episode_Naam +fileExt Bestandsextensie +extension Extensie +partNumber Volgnummer +decade Decade +orgFilename Originele Bestandsnaam +lowercase kleine letters +TEXT TEKST +text tekst +sort-File bestand +sortString Sorteer formule +multiPartLabel Meervoudig label +button-inFolders In mappen +button-noFolders Geen mappen +dateSorting Datum sorteren +opt-dateSort Datum sorteren aanzetten +explain-dateSort Sta sorteren en hernoemen van datum-gebaseerde bestandsnamen toe. +button-ShowNameF Toon Naam map +button-YMF Jaar-Maand Mappen +button-DailyF Dagelijkse Mappen + +# NZO +nzoDetails Bewerk NZB Details +nzoName Naam +nzo-delete Verwijder +nzo-top Boven +nzo-up Hoger +nzo-down Lager +nzo-bottom Onder +nzo-all alles +nzo-none geen +nzo-invert omkeren +nzo-filename Bestandsnaam +nzo-subject Onderwerp +nzo-age Leeftijd +nzo-selection Selectie + + +# Internal texts +msg-warning-ambiLocalhost Let op: LOCALHOST is niet eenduidig, gebruik een numeriek IP-adres. +msg-invalidServer@2 Server adres "%s:%s" is niet geldig. + +warn-missingKey Sessie sleutel ontbreekt +error-missingKey Fout: Sessie sleutel nodig +warn-badSession Foutieve Sessie sleutel +error-badKey Fout: Sessie sleutel niet geldig +warn-authMissing Authenticatie ontbreekt: Vul gebruikersnaam en wachtwoord van "Algememe instellingen" in\ + bij je hulp programma: +error-authMissing Fout: ontbrekende authenticatie +warn-apikeyNone API Sleutel ontbreekt: Vul de API Sleutel van "Algememe instellingen" in\ + bij je hulp programma: +error-apikeyNone API Sleutel nodig +warn-apikeyBad API Sleutel is fout Vul de API Sleutel van "Algememe instellingen" in\ + bij je hulp programma: +error-apikeyBad Fout: API Sleutel fout +error-noSecUI Fout: geen secundaire interface ingesteld. + +his-badArchive Mislukt, onbruikbaar archief bestand +his-cannotGetReport Mislukt, kan newzbin rapport niet vinden +his-failedURL URL ophalen mislukt +his-retryURL1@1 URL ophalen mislukt; %s +his-retryURL2 Opnieuw + +# Errors and Warnings +error-noPar2 par2 propgramma niet gevonden! +error-noWebUi Kan web interface niet starten +error-noYEnc _yenc module niet gevonden! +error-sameHTTP-HTTPS HTTP en HTTPS poorten kunnen niet gelijk zijn +warn-0000 Let op, wanneer je 0.0.0.0 als hostnaam gebruikt,\ + heb je voor externe toegang een IPv6 adres nodig +warn-noCertKey HTTPS is uitgeschakeld vanwege ontbrekende CERT en KEY bestanden. +warn-noSkin@1 Kan skin bestanden niet vinden: %s, "Default" skin wordt gebruikt. +warn-noUnrar unrar programma niet gevonden! +warn-noUnzip unzip programma niet gevonden! +error-failMkstemp Probleem met tempfile.mkstemp +error-fetchReport@1 Fout bij ophalen van rapport %s van www.newzbin.com -  +error-hibernate Kan systeem niet in slaapstand krijgen +error-loading@1 Inlezen van %s lukt niet +error-saveX@1 Opslaan van %s lukt niet +error-saveXtoY@2 Opslaan van %s als %s lukt niet +error-standby Kan het systeem niet in standby krijgen +error-tempFile@1 Kan geen tijdelijk bestand %s aanmaken +warn-noServer@1 Poging om status van niet bestaande server %s te wijzigen +warn-noSpace Te weinig schijf ruimte, forceer Pauze +warn-signal@1 Signaal %s ontvangen, opslaan en afluiten... +warn-flushFailed@1 Opslaan van %s mislukt -> geen art_id +error-diskError@1 Schrijf fout bij opslaan van bestand %s +error-diskFull Schijf is vol! Forceer Pauze +warn-artMissing@1 %s ontbreekt +error-badIni@1 Ongeldig instellingen bestand %s +error-createIni@1 Kan geen instellingen bestand %s aanmaken +error-encPw@1 Foutief gecodeerd wachtwoord %s +error-version@2 Foutief versie nummer %s in %s" +error-badHisNewline@1 Foutieve fase logging in geschiedenis voor %s (\\r\\n) +error-badHisSemic@1 Foutieve fase logging in geschiedenis voor %s (;) +error-sqlClose Het lukt niet om de database te sluiten, zie log bestand +error-sqlCmd SQL opdracht mislukt, zie log bestand +error-sqlCommit SQL opslag opdracht mislukt, zie log bestand +error-decode@1 Decoderen van %s mislukt +error-decodeUnknown@1 Onbekende fout tijdens het decoderen van %s +warn-artAllMissing@1 %s => ontbreekt op alle servers, overslaan +warn-badYEnc@1 Foutief gevormd yEnc artikel in %s +warn-crcError@3 CRC fout in %s (%s -> %s) +error-readWatched@1 Kan Bewaakte Map %s niet lezen +error-remove@1 Fout bij verwijderen van %s +warn-noRead@1 Kan %s niet lezen +error-except Exception? +error-noInit@3 Kan geen verbinding maken %s@%s:%s +error-serverFailed@4 Verbinding %s@%s:%s mislukt, bericht=%s +error-serverLogin@1 Kan niet aanmelden bij server %s +error-serverNoConn@2 Kan geen verbinding maken met server %s [%s] +error-serverTooMany@2 Te veel verbindingen met server %s:%s +warn-ignoreServer@2 Server %s wordt gedurende %s minuten genegeerd +warn-noConnectServer@2 Kan geen verbinding maken met server %s [%s] +error-accountSharing Mogelijk delen van account +error-serverCred@1 Server %s heeft gebruikersnaam/wachtwoord nodig +warn-thread@3 Verbinding %s@%s:%s: +error-mailAuth Kan niet aanmelden bij email server +error-mailNoConn Kan geen verbinding maken met email server +error-mailSend Verzenden van email is mislukt +error-mailTempl@1 Kan geen email sjablonen vinden in %s +error-mailTLS Kan geen TLS verbinding maken +warn-noEmailClose Afsluiten email verbinding lukt niet +msg-emailOK Email verzonden +error-regex@1 Samenstellen van reguliere expressie lukt niet: %s +error-accessDir@2 %s map: fout %s bij toegang +error-createDir@1 Kan map %s niet aanmaken +error-makeFile@1 Aanmaken %s mislukt +error-moveFile@2 Verplaatsen van %s naar %s mislukt +error-portNoAccess@1 Je hebt geen toestemming om poort %s te gebruiken +error-regConnect Kan geen verbinding maken met register deel HKEY_CURRENT_USER. +error-regOpen@1 Kan register sleutel "%s" niet lezen +error-regSpecial Kan register sleutels voor speciale mappen niet lezen +error-sslFiles Fout bij aanmaken van SSL sleutel en certificaat +error-urlGet@2 Fout bij ophalen via URL %s (oorzaak = "%s") +warn-noBrowser Kan de web-browser niet starten, geen gevonden +warn-pyopenssl Module "pyopenssl" ontbreekt, geen HTTPS mogelijk +error-fileJoin@2 Fout %s bij samenvoegen van %s +error-filePar2@2 Fout %s bij uitvoeren van par2 reparatie op verzameling %s +error-fileRead@1 Kan RAR bestand %s niet lezen +error-fileUnrar@2 Fout "%s" bij uitvoeren van rar_unpack op %s +error-fileUnzip@2 Fout "%s" bij uitvoeren van unzip() op %s +warn-cannotFind@1 FOUT" kan "%s" niet vinden +warn-crcFailed@1 FOUT: Foutieve CRC "%s" +warn-delFailed@1 Verwijderen van %s mislukt! +warn-encrypted FOUT: versleuteld bestand +warn-error@1 FOUT: %s +warn-MissExpectedFile@1 Verwacht bestand %s ontbreekt => unrar fout? +warn-writeError@1 ERROR: schrijf fout (%s) +error-connect@1 Verbinding mislukt: %s +error-newsSSL De server staat geen SSL toe op deze poort +error-noSSL Fout bij importeren van module OpenSSL, probeer NON-SSL +error-nbInfo@1 Newzbin server geeft geen informatie over %s +error-nbProtocol Newzbin server gebruikt ander protocol +error-nbReport@1 Newzbin rapport %s niet gevonden +error-nbUnkownError@1 Newzbin meldt onbekende fout code %s +error-nbUnkownError@2 Newzbin meldt onbekende fout code (%s, %s) +error-nbUpdate@1 Bijwerken newzbin opdracht %s mislukt +warn-nbCredit Je hebt geen betaald Newzbin account +warn-nbNoAuth Niet geauthoriseerd, controleer je newzbin gebruikersnaam/wachtwoord +warn-nbNoDelBM@1 Verwijderen van newzbin bookmark %s mislukt +error-qAdd@1 Fout bij toevoegen van %s, wordt weer verwijderd +error-qBad Onbruikbaar wachtrij bestand gevonden, kan niet verder +error-qCorruptFile@1 Fout bij inladen van %s, corrupt bestand gevonden +warn-unknownEncoding@1 %s -> Onbekende codering +error-qDupPart@3 Dubbel deel %s, met verschillende ID-s (%s // %s) +error-qImport@1 Fout bij importeren van %s +warn-badImport@2 Importeren van %s bestanden van %s mislukt +warn-badNZB@3 Foutief NZB bestand %s, overslaan (reden=%s, regel=%s) +warn-emptyFile@1 Bestand %s is leeg, overslaan +warn-skipDup@1 Overslaan van dubbel NZB bestand "%s" +error-ppCleanup@1 Opschonen van %s mislukt +error-ppDelFailed@1 Verwijderen van %s mislukt +error-ppDelNzo Verwijderen van nzo van nabewerkingswachtrij mislukt +error-ppDelWorkdir@1 Fout bij verwijderen van werkmap %s +error-ppFailed@1 Nabewerking van %s mislukt +error-ppLogFile@1 Kan geen log bestand %s aanmaken +error-ppPermissions@1 Kan beveiliging van %s niet aanpassen +error-ppRename@2 Fout bij hernoemen van "%s" tot "%s" +warn-badPPQueue@2 Fout bij laden van nabewerkingswachtrij: verkeerde versie (nodig:%s, gevonden:%s) +error-rssBadFeed@1 Foutieve RSS stroom definitie "%s" +error-rssRegex@1 Kan reguliere expressie "%s" niet verwerken +warn-emptyRSS@1 Lege RSS stroom gevonden (%s) +warn-failRSS@1 Kan RSS stroom "%s" niet lezen +warn-failRSS@2 Kan RSS stroom "%s" niet lezen van "%s" +warn-badSched@3 Foutieve taak %s om %s:%s +warn-badSchedAction@1 Onbekende aktie: %s +warn-schedNoServer@1 Taak voor niet bestaande server %s +error-tvInfo@1 Fout bij ophalen TV info (%s) +error-tvRename@2 Hernoemen van %s tot %s mislukt +error-tvSimRename@2 Hernoemen van gelijkaardig bestand %s tot %s mislukt +error-tvTemp@1 Aanmaken tijdelijk bestand %s mislukt +warn-matrixBadRep@1 Ongeldig nzbmatrix rapport nummer %s +warn-matrixFail@1 Geen toegang tot nzbmatrix (%s) +warn-noRepair Geen PAR2 programma, kan geen reparaties uitvoeren\n +warn-noUnpack Geen UNRAR programma gevonden, uitpakken van RAR bestanden niet mogelijk\n +warn-badUnrar Versie van UNRAR wordt niet aanbevolen,\ + download UNRAR van http://www.rarlab.com/rar_add.htm\n +warn-missingFiles \nLet op: niet alle bestanded zijn uitgepakt, zie log +error-joinMismatch Verwachte lengte ongelijk aan echte lengte +error-joinFail@1 Samenvoegen van Bestanden %s is mislukt +error-joinFail@2 [%s] Fout "%s" bij samenvoegen van bestanden +msg-joinOK@2 [%s] %s bestanden samengevoegd +error-unpackFail@1 Uitpakken mislukt, %s +error-unpackFail@2 [%s] Fout "%s" bij het uitpakken van RAR bestanden +error-badArchive Kan hoofd archief bestand niet openen (beschadigd of versleuteld) +error-unpackFailed@1 Uitpakken mislukt, kan %s niet vinden +error-unpackCRC Uitpakken mislukt, CRC fout +error-unpackFull Uitpakken mislukt, schrijffout of schijf vol? +error-unpackFailLog Uitpakken mislukt, zie log +error-unpackPassword Uitpakken mislukt, archief heeft wachtwoord nodig +error-unpackMissing Uitpakken mislukt, er zijn te weinig bestanden uitgepakt +msg-unpackDone@2 %s bestanden/mappen uitgepakt in %s +msg-unzipDone@2 %s bestanden in %s +msg-QuickCheck Snelle Controle... +msg-QuickChecking Snelle Controle uitvoeren +msg-QuickOK@1 [%s] Snelle Controle OK +msg-startRepair Start reparatie +error-repairFailed@1 Reparatie mislukt, %s +error-repairBad@2 Fout "%s" bij reparatie van groep %s +msg-verify Verificatie... +msg-verifyOK@2 [%s] Verificatie in %s, alle bestanden zijn goed +msg-repairNeeded Reparatie is nodig +msg-repairNeeded@2 [%s] Verificatie in %s, reparatie is nodig +error-noMainPacket Hoofdpakket niet gevonden... +error-repairBlocks@1 Reparatie mislukt, te weinig herstelblokken (%s te weinig) +msg-fetchBlocks@1 Ophalen van %s blokken... +msg-repairing Repareren +msg-repairDone@2 [%s] Reparatie in %s +msg-verifying Verifiëren +msg-DownloadedIn@2 Gedownload in %s met een gemiddelde van %sB/sec +msg-noParSets@1 [%s] Geen par2 groepen +msg-noPostProc Geen nabewerking vanwege mislukte verificatie +msg-sentToQ@1 %s naar de wachtrij gestuurd +msg-runScript@1 Gebruiker script %s loopt +msg-ranScript@1 %s is klaar +link-more Meer +link-viewSc Toon script resultaat +warn-OutRetention Download mislukt - Buiten de server bewaartijd? +warn-PostCrash Nabwerken is gecrashed, zie log bestand +msg-moving Verplaatsen +msg-running Script uitvoeren +msg-joining Samenvoegen +msg-unpacking Uitpakken +msg-repair Repareren +msg-fetching Ophalen +msg-path Pad + +stage-download Download +stage-repair Reparatie +stage-filejoin Samenvoegen +stage-unpack Uitpakken +stage-script Script + +post-Completed Compleet +post-Failed Mislukt +post-Queued Wacht +post-Repairing Repareren... +post-Extracting Uitpakken... +post-Moving Verplaatsen... +post-Running Script uitvoeren... +post-Fetching Extra blokken ophalen... +post-QuickCheck Snelle Controle... +post-Verifying Verifiëren... + +#Growl Messages +grwl-notif-startup Starten/Afsluiten +grwl-notif-dl NZB toegevoegd +grwl-notif-pp Nabewerken +grwl-notif-other Andere berichten +grwl-shutdown-begin-msg Afsluiten +grwl-shutdown-end-msg SABnzbd is afgesloten +grwl-paused-msg Pauze +grwl-nzbadd-title NZB aan wachtrij toegevoegd +grwl-newversion-msg Nieuwe versie beschikbaar + +#OSX Menu +osx-menu-warnings Waarschuwingen +osx-menu-status-idle Rust +osx-menu-status-paused Pauze +osx-menu-pause Pauze +osx-menu-min min. +osx-menu-resume Doorgaan +osx-menu-queue Wachtrij +osx-menu-queuelimit Wachtrij Eersto 10 Items +osx-menu-history Geschiedenis +osx-menu-historylimit Geschiedenis Laaste 10 Items +osx-menu-speedlimit Beperk snelheid +osx-menu-none Geen +osx-menu-getnewzbinbm Haal Newzbin Bookmarks op +osx-menu-complete Map voltooid\t\t\t +osx-menu-incomplete Map download\t\t +osx-menu-restart Herstart +osx-menu-quit Verlaten +osx-menu-config Instellen +osx-menu-purgequeue Wis wachtrij +osx-menu-purgehistory Wis geschiedenis +osx-menu-wizard Ga naar Wizard +osx-menu-empty Leeg +osx-menu-shutdowning Afsluiten... + +email-full@2 \ +to: %s\r\ +from: %s\r\ +subject: SABnzbd: harde schijf vol\r\ +\r\ +Hallo,\r\ +\r\ +SABnzbd is gestopt met downloaden omdat de harde schijf bijna vol is.\r\ +Maak ruimte vrij en start SABnzbd handmatig door.\r\ +\r diff --git a/language/rss-de-de.tmpl b/language/rss-de-de.tmpl new file mode 100644 index 0000000..656c6e1 --- /dev/null +++ b/language/rss-de-de.tmpl @@ -0,0 +1,25 @@ +## +## RSS Email template for SABnzbd +## This a Cheetah template +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Newlines and whitespace are significant! +## +## These are the email headers +to: $to +from: $from +date: $date +subject: SABnzbd has added $amount jobs to the queue +X-priority: 5 +X-MS-priority: 5 +## After this comes the body, the empty line is required! + +Hi, + +SABnzbd has added $amount job(s) to the queue. +They are from RSS feed "$feed". + + $job + + +Bye diff --git a/language/rss-fr-fr.tmpl b/language/rss-fr-fr.tmpl new file mode 100644 index 0000000..656c6e1 --- /dev/null +++ b/language/rss-fr-fr.tmpl @@ -0,0 +1,25 @@ +## +## RSS Email template for SABnzbd +## This a Cheetah template +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Newlines and whitespace are significant! +## +## These are the email headers +to: $to +from: $from +date: $date +subject: SABnzbd has added $amount jobs to the queue +X-priority: 5 +X-MS-priority: 5 +## After this comes the body, the empty line is required! + +Hi, + +SABnzbd has added $amount job(s) to the queue. +They are from RSS feed "$feed". + + $job + + +Bye diff --git a/language/rss-nl-nl.tmpl b/language/rss-nl-nl.tmpl new file mode 100644 index 0000000..b2ffdd1 --- /dev/null +++ b/language/rss-nl-nl.tmpl @@ -0,0 +1,24 @@ +## +## RSS Email template for SABnzbd +## This a Cheetah template +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Newlines and whitespace are significant! +## +## These are the email headers +to: $to +from: $from +date: $date +subject: SABnzbd heeft $amount opdrachten aan de wachtrij toegevoegd +X-priority: 5 +X-MS-priority: 5 +## After this comes the body, the empty line is required! + +Hallo, + +SABnzbd heeft $amount opdrachten aan de wachtrij toegevoegd. +Ze komen van de RSS bron "$feed". + + $job + + diff --git a/language/rss-sv-se.tmpl b/language/rss-sv-se.tmpl new file mode 100644 index 0000000..656c6e1 --- /dev/null +++ b/language/rss-sv-se.tmpl @@ -0,0 +1,25 @@ +## +## RSS Email template for SABnzbd +## This a Cheetah template +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Newlines and whitespace are significant! +## +## These are the email headers +to: $to +from: $from +date: $date +subject: SABnzbd has added $amount jobs to the queue +X-priority: 5 +X-MS-priority: 5 +## After this comes the body, the empty line is required! + +Hi, + +SABnzbd has added $amount job(s) to the queue. +They are from RSS feed "$feed". + + $job + + +Bye diff --git a/language/rss-us-en.tmpl b/language/rss-us-en.tmpl new file mode 100644 index 0000000..656c6e1 --- /dev/null +++ b/language/rss-us-en.tmpl @@ -0,0 +1,25 @@ +## +## RSS Email template for SABnzbd +## This a Cheetah template +## Documentation: http://sabnzbd.wikidot.com/email-templates +## +## Newlines and whitespace are significant! +## +## These are the email headers +to: $to +from: $from +date: $date +subject: SABnzbd has added $amount jobs to the queue +X-priority: 5 +X-MS-priority: 5 +## After this comes the body, the empty line is required! + +Hi, + +SABnzbd has added $amount job(s) to the queue. +They are from RSS feed "$feed". + + $job + + +Bye diff --git a/language/sv-se.txt b/language/sv-se.txt new file mode 100644 index 0000000..5e1b59b --- /dev/null +++ b/language/sv-se.txt @@ -0,0 +1,830 @@ +# -*- coding: utf-8 -*- +# Svenska +# Translation by "Kristoffer (Malmis) Malmström" + +special-decimal . +special-1000 , + +# General texts +yes Ja +no Nej +default Standard +none Ingen +KBs KB/s +MB MB +GB GB +hour timme +hours timmar +minute minut +minutes minuter +second sekund +seconds sekunder +month MÃ¥nad +year Ã…r +day Dag +days Dagar +daily Dagligen +monday MÃ¥ndag +tuesday Tisdag +wednesday Onsdag +thursday Torsdag +friday Fredag +saturday Lördag +sunday Söndag +day-of-month MÃ¥nadsdag +filename Filnamn + +# General template elements +signOn Det automatiska usenet nedladdningsverktyget +button-save Spara +queued Köad +button-back BakÃ¥t +button-x X + +# Header +menu-home Hem +menu-queue Kö +menu-history Historik +menu-config Konfiguration +menu-cons Anslutningar +menu-help Hjälp +menu-wiki Wiki +menu-forums Forum +menu-irc IRC +cmenu-general Allmänt +cmenu-folders Mappar +cmenu-switches Switchar +cmenu-servers Servrar +cmenu-scheduling Schemaläggare +cmenu-rss RSS +cmenu-email E-mail +cmenu-newzbin Index-sidor +cmenu-cat Kategorier +cmenu-sorting Sortering + +# Footer +ft-download Temporär nedladdningmapp +ft-complete Färdig nedladdningsmapp +ft-speed Nedladdningshastighet +ft-queued Köad +ft-paused PAUSAD +ft-buffer@2 Sparat %s artiklar (%s) +ft-sysload Sysload +ft-warning VARNINGAR +ft-newRelease@1 Ny utgÃ¥va %s tillgänglig + +# Main page +addNewJobs Lägg till ny nedladdning +shutdownOK? Är du säker pÃ¥ att du vill stänga av SABnzbd? +link-shutdown Stäng Av +link-pause Pausa +link-resume Ã…teruppta +button-add Lägg till +add Lägg till +reportId Rapport-id +addFile Lägg till fil +category Kategori +pp Bearbetar +script Skript +priority Prioritet +pp-none Nedladdning +pp-repair +Reparera +pp-unpack +Packar upp +pp-delete +Ta bort +pp-n +pp-r R +pp-u P +pp-d T +pr-force Tvinga +pr-normal Normal +pr-high Hög +pr-low LÃ¥g +enterURL URL +enterID  eller Report ID + +# Queue page +link-sortByName Sortera efter namn +link-sortByAge Sortera efter Ã¥lder +link-sortBySize Sortera efter storlek +link-hideFiles Göm filer +link-showFiles Visa filer +onQueueFinish När kön är färdig +shutdownPc Stäng av PC +standbyPc Sparläge PC +hibernatePc Viloläge PC +shutdownSab Stäng av SABnzbd +speedLimit Hastighetsgräns +pauseFor Pausa för +mode Bearbetar +order Ordning +name Namn +remainTotal Ã…terstÃ¥r/Totalt +eta ETA +age Ã…r +button-del Ta bort +button-resume Ã…teruppta +button-pause Pausa +unknown okänd +fetchingNewzbin@1 hämtar msgid %s frÃ¥n www.newzbin.com +error-fetchNewzbin@1 Fel vid hämtning av msgid %s frÃ¥n www.newzbin.com -\ + Kolla sÃ¥ att användarnamn och lösenord är inställt +fetchNZB@1 Försöker att hämta NZB frÃ¥n %s +eoq-actions Actions +eoq-scripts Scripts +purgeQueue Ta bort kö +purgeQueueConf Ta bort alla saker frÃ¥n kön? + +# History page +purgeHist Ta bort Historik +purgeHistConf Ta bort alla saker frÃ¥n historiken? +hideDetails Göm detaljer +showDetails Visa detaljer +sizeHist Historikstorlek +completed Färdig +size Storlek +status Status +msg-reAdded@1 Jobb "%s" är Ã¥terinlagt i kön + +# Connections page +link-forceDisc Tvinga frÃ¥nkoppling +askTestEmail Detta kommer att skicka ett test e-mail till ditt konto. +link-showLog Visa logg +link-showWeblog Visa webblogg +link-testEmail Testa E-mail +logging Loggning +log-errWarn Fel/Varning +log-info + Info +log-debug + Debug +connections Anslutningar +thread TrÃ¥d +emailResult E-mail testresultat +lastWarnings Senaste Varningar +clearWarnings rensa +server-blocked Ta bort blockering +warning VARNING: +error FEL: +server-resolving  Lösa adress + +# Configuration +configuration Konfiguration +confgFile Konfig fil +explain-Restart Knappen nedanför kommer att starta om SABnzbd..\n\ + Använd den när du tror att programmet har nÃ¥got stabilitetsproblem.\n\ + Nedladdningar kommer att pausas före omstarten och Ã¥terupptas efterÃ¥t. +button-restart Starta om +version Version +uptime Upptid +error Fel +badParm Fel parameter +error-badValue@2 Fel värde för %s: %s +error-noFolder@1 Mappen "%s" finns inte +error-QnotEmpty Fel: Kön är inte tom, kan inte byta mapp. +error-noUNC@1 UNC sökväg "%s" är inte tillÃ¥ten här +error-notOctal@1 %s är inte rätt siffervärde + +# Config->General +generalConfig Allmän konfiguration +restartRequired Ändringar kräver omstart av SABnzbd! +webServer SABnzbd Webbserver +opt-host SABnzbd Adress +explain-host Adress som SABnzbd ska lyssna pÃ¥. +opt-port SABnzbd Port +explain-port Port som SABnzbd ska lyssna pÃ¥. +opt-web_dir Webbkontrollsutseende +explain-web_dir Välj ett skin. +opt-web_dir2 Andra Webbkontrollsutseende +explain-web_dir2 Aktivera ett alternativt skin. +webAuth Webbserver autentiserng +opt-web_username SABnzbd Användarnamn +explain-web_username Väljbart autentiserings användarnamn. +opt-web_password SABnzbd Lösenord +explain-web_password Väljbart autentiserings lösenord. +httpsSupport HTTPS Stöd +opt-enable_https HTTPS Aktivera +opt-notInstalled (ej installerat) +explain-enable_https Aktivera Ã¥tkomst till webbkontrollen med HTTPS adress. +opt-https_port HTTPS Port +explain-https_port Port som SABnzbd ska lyssna pÃ¥ för HTTPS kommunikation. +opt-https_cert HTTPS Certifikat +explain-https_cert Filnamn eller sökväg till HTTPS Certifikat. +opt-https_key HTTPS Nyckel +explain-https_key Filnamn eller sökväg till HTTPS Nyckel. +tuning Justeringar +opt-refresh_rate Automatisk uppdateringsintervall av kö: +explain-refresh_rate Uppdateringsintervall av kö-sidan (sek, 0= ingen). +opt-rss_rate RSS Uppdateringsintervall +explain-rss_rate Uppdateringsintervall (i minuter, minst 15). +opt-bandwidth_limit Hastighetsbegränsning för Nedladdning +explain-bandwidth_limit Medelhastighetsbegränsning för Nedladdning (i KB/s - kilobyte per sekund). +opt-cache_limitstr Cachestorlek för artiklar +explain-cache_limitstr Sparar artiklar i minnet för att reducera diskÃ¥tkomst.\n\ + I bytes, följt av K,M,G. Till exempel: "64M" eller "128M" +opt-cleanup_list Rensa lista +explain-cleanup_list Lista med filändelser som ska tas bort efter nedladdning.\n\ + Till exempel: .nfo or .nfo, .sfv +button-saveChanges Spara ändringar +opt-language SprÃ¥k +explain-language Välj sprÃ¥k till webbkontrollen. +opt-apikey API-nyckel +explain-apikey Denna nyckel ger tredjepartsprogram tillgÃ¥ng till SABnzbd. +button-apikey Generera Ny Nyckel +opt-disableApikey Stäng av API-nyckel +explain-disableApikey Kräv ingen API-nyckel. +explain-disableApikeyWarn ANVÄND PÃ… EGEN RISK! +restart1 Förbereder omstart...\n +restart2  \n\ + SABnzbd nedstängning färdig.\n\ + Vänta ungefär 5 sekunder och klicka sedan pÃ¥ knappen under..\n\n\ + Ladda om\n + +# Config->Folders +folderConfig Mappkonfiguration +explain-folderConfig OBS: Mappar kommer att skapas automatiskt när du Sparar. Du mÃ¥ste ange exakta sökvägar till dina mappar för att spara utanför standardmapparna. +userFolders Användarmappar +in I +opt-download_dir Temporär nedladdningsmapp +explain-download_dir Plats för att lagra ej bearbetade nedladdningar.\n\ + Kan endast ändras när kön är tom. +opt-download_free Minimal fri plats för temporär nedladdningsmapp +explain-download_free Auto-pausa när fri plats är nära sin gräns.\n\ + I bytes, följt av K,M,G,T. Till exempel: "800M" or "8G" +opt-complete_dir Färdig nedladdningsmapp +explain-complete_dir Plats för att lagra bearbetade och färdiga nedladdningar.\n\ + Kan Ã¥sidosättas av användar-definierade kategorier. +opt-permissions Rättigheter för färdiga nedladdningar +explain-permissions Sätt rättigheter för färdiga filer och mappar.\n\ + Använd siffror. Till exempel: "755" or "777" +opt-dirscan_dir Övervakad Mapp +explain-dirscan_dir Mapp som igenomsöks automatiskt efter .nzb filer.\n\ + Skannar även igenom .zip .rar och .tar.gz arkiv efter .nzb filer. +opt-dirscan_speed Skanningsintervall för Övervakade mappar +explain-dirscan_speed Sekunder mellan skanningar för .nzb filer. +opt-script_dir Efterbehandlings skriptmapp +explain-script_dir Mapp innehÃ¥llande skript för efterbehandling. +opt-email_dir Mapp för E-mail mallar +explain-email_dir Mapp som innehÃ¥ller användar-definierade e-mail mallar. +systemFolders Systemmappar +opt-cache_dir Temporär-mapp +explain-cache_dir Plats för temporär lagring.\n\ + Kan endas ändras när kön är tom.\n\ + Kräver omstart av SABnzbd! +opt-log_dir Loggmapp +explain-log_dir Plats för sparade loggfiler frÃ¥n SABnzbd.\n\ + Kräver omstart av SABnzbd! +opt-nzb_backup_dir .nzb Reservmapp +explain-nzb_backup_dir Plats där .nzb filer sparas. + +# Config->Switches +switchesConfig Parameterkonfiguration +processingSwitches Bearbetar parametrar +opt-quick_check Aktivera Snabbkoll +explain-quick_check Strunta i par2 kontroll när filerna är 100% giltiga. +opt-enable_unrar Aktivera Unrar +explain-enable_unrar Aktiverar inbyggda Unrar funktionen. +opt-enable_unzip Aktivera Unzip +explain-enable_unzip Aktiverar inbyggda Unzip funktionen. +opt-enable_filejoin Aktivera Filsammanslagning (Filejoin) +explain-enable_filejoin SlÃ¥r ihop filer med filändelserna .001, .002 etc. till en fil. +opt-enable_tsjoin Aktivera TS Sammanslagning (TS Joining) +explain-ts_join SlÃ¥r ihop filer med filändelserna .001.ts, .002.ts etc. till en fil. +opt-enable_par_cleanup Aktivera Par rensning (Par Cleanup) +explain-enable_par_cleanup Rensar bort par filer (om verifiering/reparation lyckades). +opt-fail_on_crc Vid fel pÃ¥ pÃ¥ yEnc CRC +explain-fail_on_crc Använd backup-server vid yEnc crc fel. +opt-top_only Bara artiklarna för början av kön +explain-top_only Aktivera för lägre minnesanvändning. Avaktivera för att förhindra lÃ¥ngsamma jobb att blockera kön. +opt-safe_postproc Efterbehandla endast verifierade jobb +explain-safe_postproc Efterbehandla enbart jobb som passerat PAR2 kontrollen. +opt-no_dupes Förhindra nedladdningsdubletter +explain-no_dupes Strunta i jobb om en sparad .nzb med samma namn redan finns. +opt-dirscan_opts Standard efterbehandling +explain-dirscan_opts Används när efterbehandlingen är bestämd efter kategori. +opt-dirscan_script Standard användarskript +explain-dirscan_script Används när användarskript är bestämd efter kategori. +opt-dirscan_priority Standard prioritet +explain-dirscan_priority Använd när ingen prioritet är bestämd av kategori. +opt-par_option Extra PAR2 parametrar +explain-par_option Läs Wiki Help för detta! +opt-par2_multicore Aktivera MultiCore Par2 +explain-par2_multicore Läs Wiki Help för detta! +opt-nice Bra parametrar +explain-nice Läs Wiki Help för detta! +opt-ionice IONice parametrar +explain-ionice Läs Wiki Help för detta! +otherSwitches Andra parametrar +opt-auto_disconnect Koppla ifrÃ¥n när kön är tom +explain-auto_disconnect Koppla ifrÃ¥n usenet servrarna när kön är tom eller pausad. +opt-send_group Skicka grupp +explain-send_group Skicka gruppkommando innan du begär artiklar. +opt-auto_sort Sortera efter Ã¥lder +explain-auto_sort Sortera automatiskt efter (medel) Ã¥lder. +opt-check_new_rel Kolla efter ny utgÃ¥va +explain-check_new_rel Kolla efter ny utgÃ¥va av SABnzbd varje vecka. +opt-replace_spaces Ersätt mellanslag i mappnamn +explain-replace_spaces Ersätt mellanslag med understreck i mappnamn. +opt-replace_illegal Ersätt otillÃ¥tna tecken i mappnamn. +explain-replace_illegal Ersätt otillÃ¥tna tecken i mappnamn med motsvarande tecken (annars ta bort). +opt-auto_browser Starta webbläsare vid uppstart +explain-auto_browser Startar standard webbläsaren när SABnzbd startar. +opt-pause_on_post_processing Pausa nedladdning under efterbehandling +explain-pause_on_post_processing Pausas nedladdning när efterbehandling börjar och Ã¥terupptar nedladdning när efterbehandling är klar. +opt-ignore_samples Ignorera Sample-filer +explain-ignore_samples Filtrera ut sample-filer (ex. video samplingar). +igsam-off Av +igsam-del Ta bort efter nedladdning +igsam-not Ladda inte ned. +opt-ssl_type SSL typ +explain-ssl_type Använd V23 om inte din leverantör kräver annat! + + +# Config->Server +configServer Serverkonfiguration +addServer Lägg till server +srv-host Adress +srv-port Port +srv-username Användarnamn +srv-password Lösenord +srv-timeout Timeout +srv-connections Anslutningar +srv-ssl SSL +srv-fillserver Reserv server +srv-optional Valfri +srv-enable Aktivera +button-addServer Lägg till server +button-delServer Ta bort server +error-needServer Kräver serveradress +button-testServer Testserver +srv-testing Testar serverdetaljer... +srv-testHint Klicka nedan för att testa. +srv-success Anslutning lyckades! +srv-noHost Adressen är inte inställd. +srv-noConnections Det är inga anslutningar aktiverade. Var vänlig aktivera minst en anslutning. +srv-starredPass Lösenordet är dolt med ******, försök igen +srv-invalidDetails Ogiltiga serverdetaljer +srv-timedoutSSL Timeout: Försök aktivera SSL eller anslut via en annan port. +srv-timedout Timeout +srv-failedAuth Autentisering misslyckades, kontrollera användarnamn och lösenord. +srv-noAuth Servern kräven användarnamn och lösenord. +srv-tooManyConnections För mÃ¥nga anslutningar, pausa en nedladdning eller försök igen senare +srv-generalFail@1 Det gick inte att ansluta (%s) + +# Config->Scheduling +configSchedule Schemakonfiguration +addSchedule Lägg till schema +sch-frequency Förekomst +sch-action Ã…tgärd +sch-arguments Argument +button-addSchedule Lägg till schema +button-delSchedule Ta bort +currentSchedules Aktuella scheman +sch-task Uppgift +sch-disable_server avaktivera server +sch-enable_server aktivera server +sch-resume Ã…teruppta +sch-pause Pausa +sch-shutdown Stäng av +sch-restart Starta om +sch-speedlimit Hastighetsgräns +sch-pause_all Pausa Allt +sch-pause_post Pausa efterbehandla +sch-resume_post Ã…teruppta efterbehandla + +# Config->RSS +configRSS RSS-konfiguration +newFeedURI Ny flödesadress +explain-RSS Kryssrutan bredvid flödesnamnet ska aktiveras för att flödet automatiskt ska kontrolleras för nya objekt.\n\ + Kontrollfrekvens finns pÃ¥ den allmänna konfigurations sidan.\n\ + När ett flöde läggs till kommer det bara att välja nya objekt och inte allt som redan finns i RSS-flöded sÃ¥ länge du inte klickar pÃ¥ "Tvinga nedladdning". +feedDefinition Flödesdestination +feed Flöde +button-delFeed Ta bort flöde +button-preFeed Förhandsgranska +button-forceFeed Tvinga nedladdning +rss-order Ordning +rss-type Typ +rss-filter Filter +rss-accept Acceptera +rss-reject Avvisa +rss-must Kräver +rss-mustcat KräverKat +rss-delFilter X +rss-matched Matchade +rss-notMatched Matchade inte +rss-done Nedladdae +rss-downloaded Nedladdade än sÃ¥ länge +link-download Ladda ned +explain-rssStar Jobb markerade med '*' kommer ej att laddas ned automatiskt. + +# Config->Email +configEmail E-mail notifiering +emailOptions E-mail alternativ +opt-email_endjob E-mail notifiering när jobb är slutfört +email-never Aldrig +email-always Alltid +email-errorOnly Bara vid fel +opt-email_full Full hÃ¥rddisk notifiering +explain-email_full Skicka e-mail när hÃ¥rddisken är full och SABnzbd har pausat. +opt-email_dir Mapp med e-mail mallar +explain-email_dir Mapp som innehÃ¥ller användardefinierade mallar..\n\ + I förhÃ¥llande till +opt-email_rss Send RSS notifications +explain-email_rss Send email when an RSS feed adds jobs to the queue. + +emailAccount E-mail kontoinställningar +opt-email_server SMTP Server +explain-email_server Ställ in din ISP's server för utgÃ¥ende e-mail. +opt-email_to E-mail mottagare +explain-email_to E-mail adress att skicka e-mailen till. +opt-email_from E-mail sändare +explain-email_from Vem ska vi skicka e-mailet frÃ¥n? +opt-email_account VALFRITT Kontoanvändarnamn +explain-email_account Användarnamn för e-mail som kräver autentisering. +opt-email_pwd VALFRITT Användarlösenord +explain-email_pwd Lösenord för e-mail som kräver autentisering. +error-badEmailAd@1 %s är inte en godkänd e-mail adress + +# Config->Newzbin +explain-newzbin Om du har ett konto pÃ¥ www.newzbin.com,\ + sÃ¥ kan du skriva in din användarinformation här.\n\ + Detta kommer att tillgängliggöra extra funktioner. +accountInfo Användarinfo +opt-username_newzbin Newzbin Användarnamn +explain-username_newzbin Ställ in ditt användarnamn här. +opt-password_newzbin Newzbin Lösenord +explain-password_newzbin Ställ in ditt användarlösenord här. +newzbinBookmarks Bearbetar bokmärken +opt-newzbin_bookmarks Hämta bokmärken automatiskt +explain-newzbin_bookmarks Hämtar jobb frÃ¥n bokmärken automatiskt. +link-getBookmarks Hämta bokmärken nu +link-HideBM Göm bearbetade bokmärken +link-ShowBM Visa bearbetade bokmärken +opt-newzbin_unbookmark Ta bort bokmärke efter nedladdning +explain-newzbin_unbookmark Ta bort frÃ¥n bokmärkeslistan när nedladdning är genomförd. +opt-bookmark_rate Uppdateringsintervall +explain-bookmark_rate I minuter (minst 15 min). +processedBM Bearbetar bokmärken +explain-nzbmatrix Om du har ett konto pÃ¥ www.nzbmatrix.com,\ + sÃ¥ kan du skriva in din användarinformation här.\n\ + Det krävs för att du ska kunna använda RSS-flödet frÃ¥n nzbmatrix. +opt-username_matrix NzbMatrix Användarnamn +explain-username_matrix Ställ in ditt användarnamn här. +opt-password_matrix NzbMatrix Lösenord +explain-password_matrix Ställ in ditt användarlösenord här. +opt-apikey_matrix NzbMatrix API-nyckel +explain-apikey_matrix Ställ in API-nyckel för NzbMatrix här. + +# Config->Cat +configCat Användardefinierade kategorier +explain-configCat Definierar efterbehandling och lagring. +explain-catNewzbin The Newzbin column will map listed Newzbin categories to your own. +link-initCat Klicka här för att ställa in newzbin kategorier. +explain-relFolder Relativa mappar är baserade pÃ¥ +catFolderPath Mapp/Sökväg +catNewzbin NewzBin +catGroups Grupper +button-delCat X + +# Config->Sorting +configSort Sorteringskonfiguration +seriesSorting Seriesortering +sort-show Show +sort-name Namn +opt-tvsort Aktivera TV sortering +explain-tvsort Aktiverar sortering och omdöpning av episoder. +sort-legenda Hjälp till Sorteringssträng +button-clear Rensa +presetSort Förinställningar +example Exempel +genericSort Allmän sortering +opt-movieSort Aktivera filmsortering +explain-movieSort Aktiverar sortering och omdöpning av filer. +opt-movieExtra LÃ¥t nedladdning i extramapp vara +explain-movieExtra Aktivera om nedladdning inte är flyttad till egen mapp. +affectedCat PÃ¥verkade kategorier +sort-meaning Betyder +sort-pattern Mönster +sort-result Resultat +button-Season1x05 1x05 Säsongsmapp +button-SeasonS01E05 S01E05 Säsongsmapp +button-Ep1x05 1x05 Episodmapp +button-EpS01E05 S01E05 Episodmapp +sort-title Titel +movie-sp-name Film Namn +movie-dot-name Film.Namn +movie-us-name Film_Namn +show-name Show Namn +show-sp-name Show Namn +show-dot-name Show.Namn +show-us-name Show_Namn +show-seasonNum Säsongsnummer +show-epNum Episodnummer +ep-name Episodnamn +ep-sp-name Episodnamn +ep-dot-name Episod.Namn +ep-us-name Episod_Namn +fileExt Filändelse +extension ändelse +partNumber Delnummer +decade Tiotal +orgFilename Originalfilnamn +lowercase SmÃ¥ bokstäver +TEXT TEXT +text text +sort-File fil +sortString Sorteringssträng +multiPartLabel Multi-del etikett +button-inFolders In mapp +button-noFolders Ingen mapp +dateSorting Datum sortering +opt-dateSort Aktivera datumssortering +explain-dateSort Aktiverar sortering och omdöpning av datummärkta filer. +button-ShowNameF Visa Namn pÃ¥ mapp +button-YMF Ã…r-MÃ¥nads mappar +button-DailyF Dagliga mappar + +# NZO +nzoDetails Ändra NZB detaljer +nzoName Namn +nzo-delete Ta bort +nzo-top Topp +nzo-up Upp +nzo-down Ner +nzo-bottom Botten +nzo-all Alla +nzo-none Ingen +nzo-invert Invertera +nzo-filename Filnamn +nzo-subject Ämne +nzo-age Ã…r +nzo-selection Urval + +# Internal texts +msg-warning-ambiLocalhost Varning: LOCALHOST är tvetydigt, använda numerisk IP-adress . +msg-invalidServer@2 Serveradressen "%s:%s" är ej giltig. + +warn-missingKey Saknar sessionsnyckel +error-missingKey Fel: Kräver sessionsnyckel +warn-badSession Fel sessionsnyckel +error-badKey Fel: Fel sessionsnyckel +warn-authMissing Autentisering saknas, ange användarnamn / lösenord frÃ¥n Konfiguration-> Allmänt\ + i ditt tredjepartsprogram: +error-authMissing Fel: Saknar autentisering +warn-apikeyNone API-nyckel saknas, skriv in api-nyckeln frÃ¥n Konfiguration-> Allmänt\ + i ditt tredjepartsprogram: +warn-apikeyBad API-nyckel felaktig, använd api-nyckeln frÃ¥n Konfiguration-> Allmänt\ + i ditt tredjepartsprogram: +error-noSecUI Fel: Inget andrainterface definierat. + +his-badArchive Fel, Oanvändbar akrivfil +his-cannotGetReport Det gick inte att hämta newzbin rapport +his-failedURL Det gick inte att lägga till url +his-retryURL1@1 URL hämtning misslyckades; %s +his-retryURL2 Försök igen + +# Errors and Warnings +error-noPar2 par2 binär... EJ funnen! +error-noWebUi Det gick inte att starta webbkontrollen +error-noYEnc _yenc modul... EJ funnen! +error-sameHTTP-HTTPS Kan ej öppna HTTP och HTTPS portarna pÃ¥ samma gÃ¥ng +warn-0000 Tänk pÃ¥ att 0.0.0.0 värdnamnet behöver en IPv6-adress för extern Ã¥tkomst +warn-noCertKey Avaktiverade HTTPS pÃ¥ grund av felande CERT och KEY filer +warn-noSkin@1 Kan inte hitta webb mall: %s, försök med standard mall +warn-noUnrar unrar binär... EJ funnen! +warn-noUnzip unzip binär... EJ funnen! +error-failMkstemp Fel i tempfile.mkstemp +error-fetchReport@1 Fel vid hämtning av msgid %s frÃ¥n www.newzbin.com - +error-hibernate Failed to hibernate system +error-loading@1 Laddning av %s misslyckades +error-saveX@1 Sparar %s misslyckades +error-saveXtoY@2 Sparar %s till %s misslyckades +error-standby Det gick inte att sätta systemet i viloläge +error-tempFile@1 Kan inte skapa temp fil för %s +warn-noServer@1 Försöker att sätta status pÃ¥ icke existerande server %s +warn-noSpace För lite diskutrymme pausar systemet +warn-signal@1 Signal %s mottagen, sparar och stänger... +warn-flushFailed@1 Flushing %s misslyckades -> ingen art_id +error-diskError@1 Diskfel vid skapande av fil %s +error-diskFull Disken är full! Pausar... +warn-artMissing@1 %s saknas +error-badIni@1 Felaktig konfigurationsfil %s +error-createIni@1 Kan ej skapa konfigurationsfil %s +error-encPw@1 Felaktigt kodat lösenord %s +error-version@2 Felaktigt versionsnummer %s i %s" +error-badHisNewline@1 Felaktig loggning i historiken av %s (\\r\\n) +error-badHisSemic@1 Felaktig loggning i historiken av %s (;) +error-sqlClose Det gick inte att stänga databasen, se logg +error-sqlCmd SQL Kommando misslyckades, se logg +error-sqlCommit SQL Commit misslyckades, se logg +error-decode@1 Avkodning av %s misslyckades +error-decodeUnknown@1 Okänt fel under avkodning av %s +warn-artAllMissing@1 %s => saknas frÃ¥n alla servrar, kastar +warn-badYEnc@1 Felaktigt utformad yEnc artikel i %s +warn-crcError@3 CRC Fel i %s (%s -> %s) +error-readWatched@1 Kan ej läsa övervakad mapp %s +error-remove@1 Fel vid borttagning av %s +warn-noRead@1 Kan ej läsa %s +error-except Undantag? +error-noInit@3 Det gick inte att initialisera %s@%s:%s +error-serverFailed@4 Anslutning av %s@%s:%s misslyckades, meddelande=%s +error-serverLogin@1 Det gick inte att logga in pÃ¥ server %s +error-serverNoConn@2 Kan ej ansluta till server %s [%s] +error-serverTooMany@2 För mÃ¥nga anslutningar till server %s:%s +warn-ignoreServer@2 Server %s kommer att ignoreras i %s minuter +warn-noConnectServer@2 Kan ej ansluta till server %s [%s] +error-accountSharing Misstänkt kontodelning +error-serverCred@1 Server %s kräver användarnamn/lösenord +warn-thread@3 TrÃ¥d %s@%s:%s: +error-mailAuth Autentisering till mailserver misslyckades +error-mailNoConn Det gick inte att ansluta till mailserver +error-mailSend Det gick inte att skicka e-mail +error-mailTempl@1 Kan ej finna e-mail mallar i %s +error-mailTLS Det gick inte att initialisera TLS anslutning +warn-noEmailClose Det gick inte att stänga e-mail anslutning +msg-emailOK E-mail sändning lyckades +error-regex@1 Det gick inte att kompilera regex för sök-sträng: %s +error-accessDir@2 %s mapp: %s Ã¥tkomst misslyckad +error-createDir@1 Kan ej skapa mapp %s +error-makeFile@1 Skapande av (%s) misslyckades +error-moveFile@2 Det gick inte att flyta %s till %s +error-portNoAccess@1 Du har ingen behörighet för att använda port %s +error-regConnect Kan ej ansluta till registret HKEY_CURRENT_USER. +error-regOpen@1 Kan ej öppna registernyckel "%s". +error-regSpecial Det gick inte att läsa registernyckel för specialmappar +error-sslFiles Det gick inte att skapa SSL-nyckel eller certifikat. +error-urlGet@2 Det gick inte att hämta url %s (fel = "%s") +warn-noBrowser Kan inte starta webbläsaren, hittades troligtvis inte +warn-pyopenssl pyopenssl modul saknas, var vändlig installera för https Ã¥tkomst +error-fileJoin@2 Fel "%s" när du kör file_join pÃ¥ %s +error-filePar2@2 Fel %s när du kör par2_repair pÃ¥ %s +error-fileRead@1 notrar(): läsning %s misslyckades +error-fileUnrar@2 Fel "%s" när du kör rar_unpack pÃ¥ %s +error-fileUnzip@2 Fel "%s" när du kör unzip() pÃ¥ %s +warn-cannotFind@1 FEL: gick inte att hitta "%s" +warn-crcFailed@1 FEL: CRC misslyckades i "%s" +warn-delFailed@1 Borttagning av %s misslyckades! +warn-encrypted FEL: krypterad fil: +warn-error@1 FEL: %s +warn-MissExpectedFile@1 Saknade förväntad fil: %s => unrar fel? +warn-writeError@1 FEL: skrivningsfel (%s) +error-connect@1 Det gick inte att ansluta: %s +error-newsSSL Denna server tillÃ¥ter ej SSL pÃ¥ denna port +error-noSSL Misslyckades med importering av OpenSSL modul. Ansluter utan SSL +error-nbInfo@1 Newzbin servern misslyckades ge info för %s +error-nbProtocol Newzbin server ändrade sitt protokoll +error-nbReport@1 Newzbin rapporterade %s ej funnen +error-nbUnkownError@1 Newzbin ger odokumenterad felkod (%s) +error-nbUnkownError@2 Newzbin ger odokumenterad felkod (%s, %s) +error-nbUpdate@1 Det gick inte att uppdatera newzbin jobb %s +warn-nbCredit Du har ingen kredit pÃ¥ ditt Newzbin konto +warn-nbNoAuth Obehörig, kontrollera ditt newzbin användarnamn/lösenord +warn-nbNoDelBM@1 Det gick inte att ta bort newzbin bokmärke %s +error-qAdd@1 Det gick inte att lägga till %s, tar bort +error-qBad Felaktig köfil funnen, kan ej fortsätta +error-qCorruptFile@1 Laddningsfel %s, felaktig fil detekterad +warn-unknownEncoding@1 %s -> Okänd kodning +error-qDupPart@3 Dublett del %s, men olika ID-s (%s // %s) +error-qImport@1 Det gick inte att importera %s +warn-badImport@2 Det gick inte att importera %s filer frÃ¥n %s +warn-badNZB@3 Felaktig NZB fil %s, hoppar över (orsak=%s, linje=%s) +warn-emptyFile@1 Fil %s är tom, hoppar över +warn-skipDup@1 Hoppar över dubletter av NZB "%s" +error-ppCleanup@1 Rensning av %s misslyckades. +error-ppDelFailed@1 Borttagning av %s misslyckades +error-ppDelNzo Det gick inte att ta bort nzo frÃ¥n efterbehandlings kön (id) +error-ppDelWorkdir@1 Det gick inte att ta bort arbetsmapp (%s) +error-ppFailed@1 Efterbehandling misslyckades för %s +error-ppLogFile@1 Det gick inte att skapa loggfil %s +error-ppPermissions@1 Det gick inte att ändra rättigheter pÃ¥ %s +error-ppRename@2 Det gick inte att döpa om "%s" till "%s" +warn-badPPQueue@2 Det gick inte att ladda efterbehandlings kön: Fel version (kräver:%s, hittade:%s) +error-rssBadFeed@1 Felaktigt RSS-flödesbeskrivning "%s" +error-rssRegex@1 Gick ej att kompilera regex: %s +warn-emptyRSS@1 Tom RSS post hittades (%s) +warn-failRSS@1 Det gick inte att hämta RSS flödet frÃ¥n %s +warn-failRSS@2 Det gick inte att hämta RSS flödet frÃ¥n %s: %s +warn-badSched@3 Fel schema %s vid %s:%s +warn-badSchedAction@1 Okänd Ã¥tgärd: %s +warn-schedNoServer@1 Schema för icke existerande server %s +error-tvInfo@1 Det gick inte att hämta TV info (%s) +error-tvRename@2 Det gick inte att döpa om: %s till %s +error-tvSimRename@2 Det gick inte att döpa om liknande fil: %s till %s +error-tvTemp@1 Kan inte skapa temporär fil för %s +warn-matrixBadRep@1 Ogiltigt nzbmatrix rapporteringsnummer %s +warn-matrixFail@1 Anslutningsproblem till nzbmatrix server (%s) +warn-noRepair Inget PAR2 program funnet, reparation ej möjlig\n +warn-noUnpack Inget UNRAR program funnet, uppackning ej möjlig\n +warn-badUnrar Din version av UNRAR rekommenderas inte,\ + fÃ¥ UNRAR frÃ¥n http://www.rarlab.com/rar_add.htm\n +warn-missingFiles \nVarning: alla filer blev inte uppackade, se logg +error-joinMismatch Förväntad storlek är inte lika verklig storlek +error-joinFail@1 Filsammanslagning av %s misslyckades +error-joinFail@2 [%s] Fel "%s" under filsammanslagning +msg-joinOK@2 [%s] SlÃ¥r ihop %s filer +error-unpackFail@1 Uppackning misslyckades, %s +error-unpackFail@2 [%s] Fel "%s" under uppackning av RAR fil(er) +error-badArchive Öppnande av huvudarkiv misslyckades (krypterat eller trasigt) +error-unpackFailed@1 Uppackning misslyckades, gick inte att hitta %s +error-unpackCRC Uppackning misslyckades, CRC-fel +error-unpackFull Uppackning misslyckades, skrivfel eller disken full? +error-unpackFailLog Uppackning misslyckades, se logg +error-unpackPassword Uppackning misslyckades, arkivet kräver lösenord +error-unpackMissing Uppackning misslyckades, en väntad fil är inte uppackad +msg-unpackDone@2 Uppackad %s filer/mappar i %s +msg-unzipDone@2 %s filer i %s +msg-QuickCheck Snabbkontroll... +msg-QuickChecking Snabbkontrollerar +msg-QuickOK@1 [%s] Snabbkontroll OK +msg-startRepair Startar reparation +error-repairFailed@1 Reparation misslyckades, %s +error-repairBad@2 Fel "%s" medans par2_repair kördes pÃ¥ %s +msg-verify Verifierar... +msg-verifyOK@2 [%s] Verifierad i %s, alla filer är ok +msg-repairNeeded Kräver reparation +msg-repairNeeded@2 [%s] Verifiering i %s, kräver reparation +error-noMainPacket Huvudarkiv saknas... +error-repairBlocks@1 Misslyckad reparation, finns ej tillräckligt med reparationsblock (%s saknas) +msg-fetchBlocks@1 Hämtar %s block... +msg-repairing Reparerar +msg-repairDone@2 [%s] Reparerad i %s +msg-verifying Verifierar +msg-DownloadedIn@2 Hämtade i %s vid ett genomsnitt pÃ¥ %sB/s +msg-noParSets@1 [%s] Ingen par2 sats +msg-noPostProc Ingen efterbehandling pÃ¥ grund av misslyckad verifiering +msg-sentToQ@1 Skickat %s till kö +msg-runScript@1 Kör användarskript %s +msg-ranScript@1 Körde %s +link-more Mer +link-viewSc Visa skriptutmatning +warn-OutRetention Hämtning misslyclades - Out of your server's retention? +warn-PostCrash Efterbehandling kraschade, se loggfil +msg-moving Flyttar +msg-running Kör skript +msg-joining SlÃ¥r ihop +msg-unpacking Packar upp +msg-repair Reparerar +msg-fetching Hämtar +msg-path Genväg + +stage-download Ladda ned +stage-repair Reparera +stage-filejoin SlÃ¥r ihop filer +stage-unpack Packa upp +stage-script Skript + +post-Completed Färdig +post-Failed Misslyckades +post-Queued Köad +post-Repairing Reparerar... +post-Extracting Extraherar... +post-Moving Flyttar... +post-Running Kör skript... +post-Fetching Hämtar extra block... +post-QuickCheck Snabbkontroll... +post-Verifying Verifierar... + +#Growl Messages +grwl-notif-startup Uppstart/Nedstängning +grwl-notif-dl NZB Tillagd +grwl-notif-pp Efterbehandling +grwl-notif-other Andra meddelanden +grwl-shutdown-begin-msg PÃ¥börjar nedstängning av SABnzbd.. +grwl-shutdown-end-msg SABnzbd nedstängning utförd. +grwl-paused-msg Pausad +grwl-nzbadd-title NZB tillagd i kön +grwl-newversion-msg Ny utgÃ¥va tillgänglig + +#OSX Menu +osx-menu-warnings Varningar +osx-menu-status-idle Sysslolös +osx-menu-status-paused Pausad +osx-menu-pause Pausa +osx-menu-min min. +osx-menu-resume Ã…teruppta +osx-menu-queue Kö +osx-menu-queuelimit Kö (10 första sakerna) +osx-menu-history Historik +osx-menu-historylimit Historik (10 senaste sakerna) +osx-menu-speedlimit Hastighetsbegränsning +osx-menu-none Ingen +osx-menu-getnewzbinbm Hämta Newzbin bokmärken +osx-menu-complete Färdig mapp\t\t\t +osx-menu-incomplete Ofullständig mapp\t\t +osx-menu-restart Starta om +osx-menu-quit Avsluta +osx-menu-config Konfiguration +osx-menu-purgequeue Rensa kö +osx-menu-purgehistory Rensa historik +osx-menu-wizard GÃ¥ till guiden +osx-menu-empty Tom +osx-menu-shutdowning Stänger... + +email-full@2 \ +to: %s\r\ +from: %s\r\ +subject: SABnzbd rapporterar om Full disk\r\ +\r\ +Hej,\r\ +\r\ +SABnzbd har stoppat nedladdning för att disken nästan är full.\r\ +Var vänlig gör plats för nedladdningen och Ã¥teruppta SABnzbd's nedladdning manuellt.\r\ +\r \ No newline at end of file diff --git a/language/us-en.txt b/language/us-en.txt new file mode 100644 index 0000000..1c437c1 --- /dev/null +++ b/language/us-en.txt @@ -0,0 +1,829 @@ +# -*- coding: latin-1 -*- +# English (US) + +special-decimal . +special-1000 , + +# General texts +yes Yes +no No +default Default +none None +KBs KB/s +MB MB +GB GB +hour hour +hours hours +minute min +minutes mins +second sec +seconds seconds +month Month +year Year +day Day +days Days +daily Daily +monday Monday +tuesday Tuesday +wednesday Wednesday +thursday Thursday +friday Friday +saturday Saturday +sunday Sunday +day-of-month Day of month +filename Filename + +# General template elements +signOn The automatic usenet download tool +button-save Save +queued Queued +button-back Back +button-x X + +# Header +menu-home Home +menu-queue Queue +menu-history History +menu-config Config +menu-cons Connections +menu-help Help +menu-wiki Wiki +menu-forums Forum +menu-irc IRC +cmenu-general General +cmenu-folders Folders +cmenu-switches Switches +cmenu-servers Servers +cmenu-scheduling Scheduling +cmenu-rss RSS +cmenu-email Email +cmenu-newzbin Index Sites +cmenu-cat Categories +cmenu-sorting Sorting + +# Footer +ft-download Download Dir +ft-complete Complete Dir +ft-speed Download speed +ft-queued Queued +ft-paused PAUSED +ft-buffer@2 Cached %s articles (%s) +ft-sysload Sysload +ft-warning WARNINGS +ft-newRelease@1 New release %s available at + +# Main page +addNewJobs Add new downloads +shutdownOK? Are you sure you want to shutdown SABnzbd? +link-shutdown Shutdown +link-pause Pause +link-resume Resume +button-add Add +add Add +reportId Report-id +addFile Add File +category Category +pp Processing +script Script +priority Priority +pp-none Download +pp-repair +Repair +pp-unpack +Unpack +pp-delete +Delete +pp-n +pp-r R +pp-u U +pp-d D +pr-force Force +pr-normal Normal +pr-high High +pr-low Low +enterURL Enter URL +enterID  or Report ID + +# Queue page +link-sortByName Sort by name +link-sortByAge Sort by age +link-sortBySize Sort by size +link-hideFiles Hide files +link-showFiles Show files +onQueueFinish On queue finish +shutdownPc Shutdown PC +standbyPc Standby PC +hibernatePc Hibernate PC +shutdownSab Shutdown SABnzbd +speedLimit Speed Limit +pauseFor Pause for +mode Processing +order Order +name Name +remainTotal Remain/Total +eta ETA +age AGE +button-del Del +button-resume Resume +button-pause Pause +unknown unknown +fetchingNewzbin@1 fetching msgid %s from www.newzbin.com +error-fetchNewzbin@1 Error Fetching msgid %s from www.newzbin.com -\ + Please make sure your Username and Password are set +fetchNZB@1 Trying to fetch NZB from %s +eoq-actions Actions +eoq-scripts Scripts +purgeQueue Purge Queue +purgeQueueConf Delete all items from the queue? + +# History page +purgeHist Purge History +purgeHistConf Delete all items from History? +hideDetails Hide details +showDetails Show details +sizeHist History Size +completed Completed +size Size +status Status +msg-reAdded@1 Job "%s" was re-added to the queue + +# Connections page +link-forceDisc Force Disconnect +askTestEmail This will send a test email to your account. +link-showLog Show Logging +link-showWeblog Show Weblogging +link-testEmail Test Email +logging Logging +log-errWarn Errors/Warning +log-info + Info +log-debug + Debug +connections Connections +thread Thread +emailResult Email Test Result +lastWarnings Latest Warnings +clearWarnings clear +server-blocked Unblock +warning WARNING: +error ERROR: +server-resolving  Resolving address + +# Configuration +configuration Configuration +confgFile Config File +explain-Restart The button below will restart SABnzbd.\n\ + Use it when you think the program has a stability problem.\n\ + Downloading will be paused before the restart and resume afterwards. +button-restart Restart +version Version +uptime Uptime +error Error +badParm Incorrect parameter +error-badValue@2 Incorrect value for %s: %s +error-noFolder@1 Folder "%s" does not exist +error-QnotEmpty Error: Queue not empty, cannot change folder. +error-noUNC@1 UNC path "%s" not allowed here +error-notOctal@1 %s is not a correct octal value + +# Config->General +generalConfig General configuration +restartRequired Changes will require a SABnzbd restart! +webServer SABnzbd Web Server +opt-host SABnzbd Host +explain-host Host SABnzbd should listen on. +opt-port SABnzbd Port +explain-port Port SABnzbd should listen on. +opt-web_dir Web Interface +explain-web_dir Choose a skin. +opt-web_dir2 Secondary Web Interface +explain-web_dir2 Activate an alternative skin. +webAuth Web server authentication +opt-web_username SABnzbd Username +explain-web_username Optional authentication username. +opt-web_password SABnzbd Password +explain-web_password Optional authentication password. +httpsSupport HTTPS Support +opt-enable_https Enable HTTPS +opt-notInstalled not installed +explain-enable_https Enable accessing the interface from a HTTPS address. +opt-https_port HTTPS Port +explain-https_port Port SABnzbd should listen on for HTTPS communication. +opt-https_cert HTTPS Certificate +explain-https_cert File name or path to HTTPS Certificate. +opt-https_key HTTPS Key +explain-https_key File name or path to HTTPS Key. +tuning Tuning +opt-refresh_rate Queue auto refresh interval: +explain-refresh_rate Refresh interval of the queue web-interface page(sec, 0= none). +opt-rss_rate RSS Checking Interval +explain-rss_rate Checking interval (in minutes, at least 15). +opt-bandwidth_limit Download Speed Limit +explain-bandwidth_limit Download rate limit (in KB/s - kilobytes per second). +opt-cache_limitstr Article Cache Limit +explain-cache_limitstr Cache articles in memory to reduce disk access.\n\ + In bytes, optionally follow with K,M,G. For example: "64M" or "128M" +opt-cleanup_list Cleanup List +explain-cleanup_list List of file extensions that should be deleted after download.\n\ + For example: .nfo or .nfo, .sfv +button-saveChanges Save Changes +opt-language Language +explain-language Select a web interface language. +opt-apikey API Key +explain-apikey This key is used to give 3rd party programs access to SABnzbd. +button-apikey Generate New Key +opt-disableApikey Disable API-key +explain-disableApikey Do not require the API key. +explain-disableApikeyWarn USE AT YOUR OWN RISK! +restart1 Initiating restart...\n +restart2  \n\ + SABnzbd shutdown finished.\n\ + Wait for about 5 second and then click the button below.\n\n\ + Refresh\n + +# Config->Folders +folderConfig Folder configuration +explain-folderConfig NOTE: Folders will be created automatically when Saving. You may use absolute paths to save outside of the default folders. +userFolders User Folders +in In +opt-download_dir Temporary Download Folder +explain-download_dir Location to store unprocessed downloads.\n\ + Can only be changed when queue is empty. +opt-download_free Minimum Free Space for Temporary Download Folder +explain-download_free Auto-pause when free space is beneath this value.\n\ + In bytes, optionally follow with K,M,G,T. For example: "800M" or "8G" +opt-complete_dir Completed Download Folder +explain-complete_dir Location to store finished, fully processed downloads.\n\ + Can be overruled by user-defined categories. +opt-permissions Permissions for completed downloads +explain-permissions Set permissions pattern for completed files/folders.\n\ + In octal notation. For example: "755" or "777" +opt-dirscan_dir Watched Folder +explain-dirscan_dir Folder to monitor for .nzb files.\n\ + Also scans .zip .rar and .tar.gz archives for .nzb files. +opt-dirscan_speed Watched Folder Scan Speed +explain-dirscan_speed Number of seconds between scans for .nzb files. +opt-script_dir Post-Processing Scripts Folder +explain-script_dir Folder containing user scripts for post-processing. +opt-email_dir Email Templates Folder +explain-email_dir Folder containing user-defined email templates. +systemFolders System Folders +opt-cache_dir Cache Folder +explain-cache_dir Location for temporary storage.\n\ + Can only be changed when queue is empty.\n\ + Requires SABnzbd restart! +opt-log_dir Log Folder +explain-log_dir Location of log files for SABnzbd.\n\ + Requires SABnzbd restart! +opt-nzb_backup_dir .nzb Backup Folder +explain-nzb_backup_dir Location where .nzb files will be stored. + +# Config->Switches +switchesConfig Switches configuration +processingSwitches Processing Switches +opt-quick_check Enable Quick Check +explain-quick_check Skip par2 checking when files are 100% valid. +opt-enable_unrar Enable Unrar +explain-enable_unrar Enable built-in unrar functionality. +opt-enable_unzip Enable Unzip +explain-enable_unzip Enable built-in unzip functionality. +opt-enable_filejoin Enable Filejoin +explain-enable_filejoin Join files ending in .001, .002 etc. into one file. +opt-enable_tsjoin Enable TS Joining +explain-ts_join Join files ending in .001.ts, .002.ts etc. into one file. +opt-enable_par_cleanup Enable Par Cleanup +explain-enable_par_cleanup Cleanup par files (if verifiying/repairing succeded). +opt-fail_on_crc Fail on yEnc CRC Errors +explain-fail_on_crc Use backup servers on yEnc crc errors. +opt-top_only Only Get Articles for Top of Queue +explain-top_only Enable for less memory usage. Disable to prevent slow jobs from blocking the queue. +opt-safe_postproc Post-Process Only Verified Jobs +explain-safe_postproc Only perform post-processing on jobs that passed all PAR2 checks. +opt-no_dupes Prevent Duplicate Downloads +explain-no_dupes Skip a job if a backed-up .nzb with the same name exists. +opt-dirscan_opts Default Post-Processing +explain-dirscan_opts Used when no post-processing is defined by the category. +opt-dirscan_script Default User Script +explain-dirscan_script Used when no user script is defined by the category. +opt-dirscan_priority Default Priority +explain-dirscan_priority Used when no priority is defined by the category. +opt-par2_multicore Enable MultiCore Par2 +explain-par2_multicore Read the Wiki Help on this! +opt-par_option Extra PAR2 Parameters +explain-par_option Read the Wiki Help on this! +opt-nice Nice Parameters +explain-nice Read the Wiki Help on this! +opt-ionice IONice Parameters +explain-ionice Read the Wiki Help on this! +otherSwitches Other Switches +opt-auto_disconnect Disconnect on Empty Queue +explain-auto_disconnect Disconnect from Usenet server(s) when queue is empty or paused. +opt-send_group Send Group +explain-send_group Send group command before requesting articles. +opt-auto_sort Sort by Age +explain-auto_sort Automatically sort items by (average) age. +opt-check_new_rel Check for New Release +explain-check_new_rel Weekly check for new SABnzbd release. +opt-replace_spaces Replace Spaces in Foldername +explain-replace_spaces Replace spaces with underscores in folder names. +opt-replace_illegal Replace Illegal Characters in Folder Names +explain-replace_illegal Replace illegal characters in folder names by equivalents (otherwise remove). +opt-auto_browser Launch Browser on Startup +explain-auto_browser Launch the default web browser when starting SABnzbd. +opt-pause_on_post_processing Pause Downloading During Post-Processing +explain-pause_on_post_processing Pauses downloading at the start of post processing and resumes when finished. +opt-ignore_samples Ignore Samples +explain-ignore_samples Filter out sample files (e.g. video samples). +igsam-off Off +igsam-del Delete after download +igsam-not Do not download +opt-ssl_type SSL type +explain-ssl_type Use V23 unless your provider requires otherwise! + + +# Config->Server +configServer Server configuration +addServer Add Server +srv-host Host +srv-port Port +srv-username Username +srv-password Password +srv-timeout Timeout +srv-connections Connections +srv-ssl SSL +srv-fillserver Backup server +srv-optional Optional +srv-enable Enable +button-addServer Add Server +button-delServer Remove Server +error-needServer Server address required +button-testServer Test Server +srv-testing Testing server details... +srv-testHint Click below to test. +srv-success Connection Successful! +srv-noHost The hostname is not set. +srv-noConnections There are no connections set. Please set at least one connection. +srv-starredPass Password masked in ******, please re-enter +srv-invalidDetails Invalid server details +srv-timedoutSSL Timed out: Try enabling SSL or connecting on a different port. +srv-timedout Timed out +srv-failedAuth Authentication failed, check username/password. +srv-noAuth Server requires username and password. +srv-tooManyConnections Too many connections, please pause downloading or try again later +srv-generalFail@1 Could not determine connection result (%s) + +# Config->Scheduling +configSchedule Scheduling configuration +addSchedule Add Schedule +sch-frequency Frequency +sch-action Action +sch-arguments Arguments +button-addSchedule Add Schedule +button-delSchedule Remove +currentSchedules Current Schedules +sch-task Task +sch-disable_server disable server +sch-enable_server enable server +sch-resume Resume +sch-pause Pause +sch-shutdown Shutdown +sch-restart Restart +sch-speedlimit Speedlimit +sch-pause_all Pause All +sch-pause_post Pause post-processing +sch-resume_post Resume post-processing + +# Config->RSS +configRSS RSS Configuration +newFeedURI New Feed URL +explain-RSS The checkbox next to the feed name should be ticked for the feed to be enabled and be automatically checked for new items.\n\ + The checking frequency is in the General page of the configuration.\n\ + When a feed is added, it will only pick up new items and not anything already in the RSS feed unless you press "Force Download". +feedDefinition Feed Definition +feed Feed +button-delFeed Delete Feed +button-preFeed Preview +button-forceFeed Force Download +rss-order Order +rss-type Type +rss-filter Filter +rss-accept Accept +rss-reject Reject +rss-must Requires +rss-mustcat RequiresCat +rss-delFilter X +rss-matched Matched +rss-notMatched Not matched +rss-done Downloaded +rss-downloaded Downloaded so far +link-download Download +explain-rssStar Jobs marked with a '*' will not be automatically downloaded. + +# Config->Email +configEmail Email Notification +emailOptions Email Options +opt-email_endjob Email Notification On Job Completion +email-never Never +email-always Always +email-errorOnly Error-only +opt-email_full Disk Full Notifications +explain-email_full Send email when disk is full and SABnzbd is paused. +opt-email_dir Folder containing email templates +explain-email_dir Folder containing user defined email templates. +opt-email_rss Send RSS notifications +explain-email_rss Send email when an RSS feed adds jobs to the queue. + + Relative to +emailAccount Email Account Settings +opt-email_server SMTP Server +explain-email_server Set your ISP's server for outgoing email. +opt-email_to Email Recipient +explain-email_to Email address to send the email to. +opt-email_from Email Sender +explain-email_from Who should we say sent the email? +opt-email_account OPTIONAL Account Username +explain-email_account For authenticated email, account name. +opt-email_pwd OPTIONAL Account Password +explain-email_pwd For authenticated email, password. +error-badEmailAd@1 %s is not a valid email address + +# Config->Newzbin +explain-newzbin If you have an account at www.newzbin.com,\ + you can enter your account info here.\n\ + This will unlock extra functionality. +accountInfo Account info +opt-username_newzbin Newzbin Username +explain-username_newzbin Set your account username here. +opt-password_newzbin Newzbin Password +explain-password_newzbin Set your account password here. +newzbinBookmarks Bookmark Processing +opt-newzbin_bookmarks Auto-Fetch Bookmarks +explain-newzbin_bookmarks Automatically retrieve jobs from your bookmarks. +link-getBookmarks Get Bookmarks Now +link-HideBM Hide Processed Bookmarks +link-ShowBM Show Processed Bookmarks +opt-newzbin_unbookmark Un-Bookmark If Download Complete +explain-newzbin_unbookmark Remove from bookmark list when download is complete. +opt-bookmark_rate Checking Interval +explain-bookmark_rate In minutes (at least 15 min). +processedBM Processed Bookmarks +explain-nzbmatrix If you have an account at www.nzbmatrix.com,\ + you can enter your account info here.\n\ + This is required if you want to use the RSS feeds of this site. +opt-username_matrix NzbMatrix Username +explain-username_matrix Set your account username here. +opt-password_matrix NzbMatrix Password +explain-password_matrix Set your account password here. +opt-apikey_matrix NzbMatrix API key +explain-apikey_matrix Set the NzbMatrix API key here. + +# Config->Cat +configCat User-defined categories +explain-configCat Defines post-processing and storage. +explain-catNewzbin The Newzbin column will map listed Newzbin categories to your own. +link-initCat Click here to setup newzbin categories. +explain-relFolder Relative folders are based on +catFolderPath Folder/Path +catNewzbin NewzBin +catGroups Groups +button-delCat X + +# Config->Sorting +configSort Sorting configuration +seriesSorting Series Sorting +sort-show Show +sort-name Name +opt-tvsort Enable TV Sorting +explain-tvsort Enable sorting and renaming of episodes. +sort-legenda Pattern Key +button-clear Clear +presetSort Presets +example Example +genericSort Generic Sorting +opt-movieSort Enable Movie Sorting +explain-movieSort Enable generic sorting and renaming of files. +opt-movieExtra Keep loose downloads in extra folders +explain-movieExtra Enable if downloads are not put in their own folders. +affectedCat Affected Categories +sort-meaning Meaning +sort-pattern Pattern +sort-result Result +button-Season1x05 1x05 Season Folder +button-SeasonS01E05 S01E05 Season Folder +button-Ep1x05 1x05 Episode Folder +button-EpS01E05 S01E05 Episode Folder +sort-title Title +movie-sp-name Movie Name +movie-dot-name Movie.Name +movie-us-name Movie_Name +show-name Show Name +show-sp-name Show Name +show-dot-name Show.Name +show-us-name Show_Name +show-seasonNum Season Number +show-epNum Episode Number +ep-name Episode Name +ep-sp-name Episode Name +ep-dot-name Episode.Name +ep-us-name Episode_Name +fileExt File Extension +extension Extension +partNumber Part Number +decade Decade +orgFilename Original Filename +lowercase Lower Case +TEXT TEXT +text text +sort-File file +sortString Sort String +multiPartLabel Multi-part label +button-inFolders In folders +button-noFolders No folders +dateSorting Date Sorting +opt-dateSort Enable Date Sorting +explain-dateSort Enable sorting and renaming of date named files. +button-ShowNameF Show Name folder +button-YMF Year-Month Folders +button-DailyF Daily Folders + +# NZO +nzoDetails Edit NZB Details +nzoName Name +nzo-delete Delete +nzo-top Top +nzo-up Up +nzo-down Down +nzo-bottom Bottom +nzo-all All +nzo-none None +nzo-invert Invert +nzo-filename Filename +nzo-subject Subject +nzo-age Age +nzo-selection Selection + +# Internal texts +msg-warning-ambiLocalhost Warning: LOCALHOST is ambiguous, use numerical IP-address. +msg-invalidServer@2 Server address "%s:%s" is not valid. + +warn-missingKey Missing Session key +error-missingKey Error: Session Key Required +warn-badSession Incorrect Session key +error-badKey Error: Session Key Incorrect +warn-authMissing Authentication missing, please enter username/password from Config->General\ + into your 3rd party program: +error-authMissing Error: Missing authentication +warn-apikeyNone API Key missing, please enter the api key from Config->General\ + into your 3rd party program: +warn-apikeyBad API Key incorrect, Use the api key from Config->General\ + in your 3rd party program: +error-noSecUI Error: No secondary interface defined. + +his-badArchive Failed, Unusable archive file +his-cannotGetReport Failed to fetch newzbin report +his-failedURL Failed to add url +his-retryURL1@1 URL Fetching failed; %s +his-retryURL2 Try again + +# Errors and Warnings +error-noPar2 par2 binary... NOT found! +error-noWebUi Failed to start web-interface +error-noYEnc _yenc module... NOT found! +error-sameHTTP-HTTPS HTTP and HTTPS ports cannot be the same +warn-0000 Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access +warn-noCertKey Disabled HTTPS because of missing CERT and KEY files +warn-noSkin@1 Cannot find web template: %s, trying standard template +warn-noUnrar unrar binary... NOT found +warn-noUnzip unzip binary... NOT found! +error-failMkstemp Failure in tempfile.mkstemp +error-fetchReport@1 Error Fetching msgid %s from www.newzbin.com - +error-hibernate Failed to hibernate system +error-loading@1 Loading %s failed +error-saveX@1 Saving %s failed +error-saveXtoY@2 Saving %s to %s failed +error-standby Failed to standby system +error-tempFile@1 Cannot create temp file for %s +warn-noServer@1 Trying to set status of non-existing server %s +warn-noSpace Too little diskspace forcing PAUSE +warn-signal@1 Signal %s caught, saving and exiting... +warn-flushFailed@1 Flushing %s failed -> no art_id +error-diskError@1 Disk error on creating file %s +error-diskFull Disk full! Forcing Pause +warn-artMissing@1 %s missing +error-badIni@1 Invalid Config file %s +error-createIni@1 Cannot create Config file %s +error-encPw@1 Incorrectly encoded password %s +error-version@2 Incorrect version number %s in %s" +error-badHisNewline@1 Invalid stage logging in history for %s (\\r\\n) +error-badHisSemic@1 Invalid stage logging in history for %s (;) +error-sqlClose Failed to close database, see log +error-sqlCmd SQL Command Failed, see log +error-sqlCommit SQL Commit Failed, see log +error-decode@1 Decoding %s failed +error-decodeUnknown@1 Unknown Error while decoding %s +warn-artAllMissing@1 %s => missing from all servers, discarding +warn-badYEnc@1 Badly formed yEnc article in %s +warn-crcError@3 CRC Error in %s (%s -> %s) +error-readWatched@1 Cannot read Watched Folder %s +error-remove@1 Error removing %s +warn-noRead@1 Cannot read %s +error-except Exception? +error-noInit@3 Failed to initialize %s@%s:%s +error-serverFailed@4 Connecting %s@%s:%s failed, message=%s +error-serverLogin@1 Failed login for server %s +error-serverNoConn@2 Cannot connect to server %s [%s] +error-serverTooMany@2 Too many connections to server %s:%s +warn-ignoreServer@2 Server %s will be ignored for %s minutes +warn-noConnectServer@2 Cannot connect to server %s [%s] +error-accountSharing Probable account sharing +error-serverCred@1 Server %s requires user/password +warn-thread@3 Thread %s@%s:%s: +error-mailAuth Failed to authenticate to mail server +error-mailNoConn Failed to connect to mail server +error-mailSend Failed to send e-mail +error-mailTempl@1 Cannot find email templates in %s +error-mailTLS Failed to initiate TLS connection +warn-noEmailClose Failed to close mail connection +msg-emailOK Email succeeded +error-regex@1 Failed to compile regex for search term: %s +error-accessDir@2 %s directory: %s error accessing +error-createDir@1 Cannot create directory %s +error-makeFile@1 Failed making (%s) +error-moveFile@2 Failed moving %s to %s +error-portNoAccess@1 You have no permisson to use port %s +error-regConnect Cannot connect to registry hive HKEY_CURRENT_USER. +error-regOpen@1 Cannot open registry key "%s". +error-regSpecial Failed to read registry keys for special folders +error-sslFiles Error creating SSL key and certificate +error-urlGet@2 Error getting url %s (cause= "%s") +warn-noBrowser Cannot launch the browser, probably not found +warn-pyopenssl pyopenssl module missing, please install for https access +error-fileJoin@2 Error "%s" while running file_join on %s +error-filePar2@2 Error %s while running par2_repair on set %s +error-fileRead@1 notrar(): reading %s failed +error-fileUnrar@2 Error "%s" while running rar_unpack on %s +error-fileUnzip@2 Error "%s" while running unzip() on %s +warn-cannotFind@1 ERROR: unable to find "%s" +warn-crcFailed@1 ERROR: CRC failed in "%s" +warn-delFailed@1 Deleting %s failed! +warn-encrypted ERROR: encrypted file: +warn-error@1 ERROR: %s +warn-MissExpectedFile@1 Missing expected file: %s => unrar error? +warn-writeError@1 ERROR: write error (%s) +error-connect@1 Failed to connect: %s +error-newsSSL This server does not allow SSL on this port +error-noSSL Error importing OpenSSL module. Connecting with NON-SSL +error-nbInfo@1 Newzbin server fails to give info for %s +error-nbProtocol Newzbin server changed its protocol +error-nbReport@1 Newzbin report %s not found +error-nbUnkownError@1 Newzbin gives undocumented error code (%s) +error-nbUnkownError@2 Newzbin gives undocumented error code (%s, %s) +error-nbUpdate@1 Failed to update newzbin job %s +warn-nbCredit You have no credit on your Newzbin account +warn-nbNoAuth Unauthorised, check your newzbin username/password +warn-nbNoDelBM@1 Could not delete newzbin bookmark %s +error-qAdd@1 Error while adding %s, removing +error-qBad Incompatible queuefile found, cannot proceed +error-qCorruptFile@1 Error loading %s, corrupt file detected +warn-unknownEncoding@1 %s -> Unknown encoding +error-qDupPart@3 Duplicate part %s, but different ID-s (%s // %s) +error-qImport@1 Error importing %s +warn-badImport@2 Failed to import %s files from %s +warn-badNZB@3 Invalid NZB file %s, skipping (reason=%s, line=%s) +warn-emptyFile@1 File %s is empty, skipping +warn-skipDup@1 Skipping duplicate NZB "%s" +error-ppCleanup@1 Cleanup of %s failed. +error-ppDelFailed@1 Removing %s failed +error-ppDelNzo Failed to remove nzo from postproc queue (id) +error-ppDelWorkdir@1 Error removing workdir (%s) +error-ppFailed@1 Post Processing Failed for %s +error-ppLogFile@1 Cannot create logfile %s +error-ppPermissions@1 Cannot change permissions of %s +error-ppRename@2 Error renaming "%s" to "%s" +warn-badPPQueue@2 Failed to load postprocessing queue: Wrong version (need:%s, found:%s) +error-rssBadFeed@1 Incorrect RSS feed description "%s" +error-rssRegex@1 Could not compile regex: %s +warn-emptyRSS@1 Empty RSS entry found (%s) +warn-failRSS@1 Failed to retrieve RSS from %s +warn-failRSS@2 Failed to retrieve RSS from %s: %s +warn-badSched@3 Bad schedule %s at %s:%s +warn-badSchedAction@1 Unknown action: %s +warn-schedNoServer@1 Schedule for non-existing server %s +error-tvInfo@1 Error getting TV info (%s) +error-tvRename@2 Failed to rename: %s to %s +error-tvSimRename@2 Failed to rename similar file: %s to %s +error-tvTemp@1 Cannot create temp file for %s +warn-matrixBadRep@1 Invalid nzbmatrix report number %s +warn-matrixFail@1 Problem accessing nzbmatrix server (%s) +warn-noRepair No PAR2 program found, repairs not possible\n +warn-noUnpack No UNRAR program found, unpacking RAR files is not possible\n +warn-badUnrar Your UNRAR version is not recommended,\ + get it from http://www.rarlab.com/rar_add.htm\n +warn-missingFiles \nWarning: not all files were unpacked, see log +error-joinMismatch Expected size did not equal actual size +error-joinFail@1 File join of %s failed +error-joinFail@2 [%s] Error "%s" while joining files +msg-joinOK@2 [%s] Joined %s files +error-unpackFail@1 Unpacking failed, %s +error-unpackFail@2 [%s] Error "%s" while unpacking RAR files +error-badArchive Failed opening main archive (encrypted or damaged) +error-unpackFailed@1 Unpacking failed, unable to find %s +error-unpackCRC Unpacking failed, CRC error +error-unpackFull Unpacking failed, write error or disk is full? +error-unpackFailLog Unpacking failed, see log +error-unpackPassword Unpacking failed, archive requires a password +error-unpackMissing Unpacking failed, an expected file was not unpacked +msg-unpackDone@2 Unpacked %s files/folders in %s +msg-unzipDone@2 %s files in %s +msg-QuickCheck Quick check... +msg-QuickChecking Quick Checking +msg-QuickOK@1 [%s] Quick Check OK +msg-startRepair Starting Repair +error-repairFailed@1 Repairing failed, %s +error-repairBad@2 Error "%s" while running par2_repair on set %s +msg-verify Verifying... +msg-verifyOK@2 [%s] Verified in %s, all files correct +msg-repairNeeded Repair is required +msg-repairNeeded@2 [%s] Verified in %s, repair is required +error-noMainPacket Main packet not found... +error-repairBlocks@1 Repair failed, not enough repair blocks (%s short) +msg-fetchBlocks@1 Fetching %s blocks... +msg-repairing Repairing +msg-repairDone@2 [%s] Repaired in %s +msg-verifying Verifying +msg-DownloadedIn@2 Downloaded in %s at an average of %sB/s +msg-noParSets@1 [%s] No par2 sets +msg-noPostProc No post-processing because of failed verification +msg-sentToQ@1 Sent %s to queue +msg-runScript@1 Running user script %s +msg-ranScript@1 Ran %s +link-more More +link-viewSc View script output +warn-OutRetention Download failed - Out of your server's retention? +warn-PostCrash PostProcessing Crashed, see logfile +msg-moving Moving +msg-running Running script +msg-joining Joining +msg-unpacking Unpacking +msg-repair Repair +msg-fetching Fetching +msg-path Path + +stage-download Download +stage-repair Repair +stage-filejoin Join files +stage-unpack Unpack +stage-script Script + +post-Completed Completed +post-Failed Failed +post-Queued Queued +post-Repairing Repairing... +post-Extracting Extracting... +post-Moving Moving... +post-Running Running script... +post-Fetching Fetching extra blocks... +post-QuickCheck Quick Check... +post-Verifying Verifying... + +#Growl Messages +grwl-notif-startup Startup/Shutdown +grwl-notif-dl NZB Added +grwl-notif-pp Post-processing +grwl-notif-other Other Messages +grwl-shutdown-begin-msg Shutting down +grwl-shutdown-end-msg SABnzbd shutdown finished +grwl-paused-msg Paused +grwl-nzbadd-title NZB added to queue +grwl-newversion-msg New release available + +#OSX Menu +osx-menu-warnings Warnings +osx-menu-status-idle Idle +osx-menu-status-paused Paused +osx-menu-pause Pause +osx-menu-min min. +osx-menu-resume Resume +osx-menu-queue Queue +osx-menu-queuelimit Queue First 10 Items +osx-menu-history History +osx-menu-historylimit History Last 10 Items +osx-menu-speedlimit Limit Speed +osx-menu-none None +osx-menu-getnewzbinbm Get Newzbin Bookmarks +osx-menu-complete Complete Folder\t\t\t +osx-menu-incomplete Incomplete Folder\t\t +osx-menu-restart Restart +osx-menu-quit Quit +osx-menu-config Configuration +osx-menu-purgequeue Purge Queue +osx-menu-purgehistory Purge History +osx-menu-wizard Go to wizard +osx-menu-empty Empty +osx-menu-shutdowning Stopping... + +email-full@2 \ +to: %s\r\ +from: %s\r\ +subject: SABnzbd reports Disk Full\r\ +\r\ +Hi,\r\ +\r\ +SABnzbd has stopped downloading, because the disk is almost full.\r\ +Please make room and resume SABnzbd manually.\r\ +\r diff --git a/licenses/License-CherryPy.txt b/licenses/License-CherryPy.txt new file mode 100644 index 0000000..b9925fd --- /dev/null +++ b/licenses/License-CherryPy.txt @@ -0,0 +1,39 @@ +The module CherryPy-3.1.2 is (c) CherryPy team. + +The module has been stripped of its Tutorial and Test directories. +We embed CherryPy in SABnzbd, because CherryPy releases lack +backward compatibility and cannot be installed as parallel versions +into the system's Python installation. + +Home of the module: +http://www.cherrypy.org + +It is covered by the following license. + +------------------------------------------------------------------------- +Copyright (c) 2004-2007, CherryPy Team (team@cherrypy.org) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the CherryPy Team nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------------------- diff --git a/licenses/License-configobj.txt b/licenses/License-configobj.txt new file mode 100644 index 0000000..b154a36 --- /dev/null +++ b/licenses/License-configobj.txt @@ -0,0 +1,41 @@ +The module configobj.py is written by Michael Foord and Nicola Larosa. + +Home of the module: +http://www.voidspace.org.uk/python/configobj-api/pythonutils.configobj-pysrc.html + +It is covered by the following license. + +------------------------------------------------------------------------- +Copyright (c) 2003-2007, Michael Foord and Nicola Larosa +All rights reserved. +E-mail : fuzzyman AT voidspace DOT org DOT uk + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Michael Foord nor the name of Voidspace + may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------------------- diff --git a/licenses/License-feedparser.txt b/licenses/License-feedparser.txt new file mode 100644 index 0000000..2297721 --- /dev/null +++ b/licenses/License-feedparser.txt @@ -0,0 +1,42 @@ +The module feedparser.py-4.1 is (c) Mark Pilgrim + +We use only the feedparser itself, all additional material +was removed. + +Home of the feedparser module: +http://www.feedparser.org + +It is covered by the following license. + + +Universal Feed Parser (feedparser.py), its testing harness (feedparsertest.py), +and its unit tests (everything in the tests/ directory) are released under the +following license: + +----- begin license block ----- + +Copyright (c) 2002-2005, Mark Pilgrim +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +----- end license block ----- diff --git a/licenses/License-json.txt b/licenses/License-json.txt new file mode 100644 index 0000000..107f173 --- /dev/null +++ b/licenses/License-json.txt @@ -0,0 +1,512 @@ +The module json.py is written by Patrick D. Logan. +Contact mailto:patrickdlogan@stardecisions.com + +The home of the module is: + http://sourceforge.net/projects/json-py + +It is covered by the following license. + +---------------------------------------------------------------------------- + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! +---------------------------------------------------------------------------- diff --git a/licenses/License-kronos.txt b/licenses/License-kronos.txt new file mode 100644 index 0000000..ace371a --- /dev/null +++ b/licenses/License-kronos.txt @@ -0,0 +1,38 @@ +Kronos.py is written by Irmen de Jong. +Retreived from: +http://www.razorvine.net/download/kronos.py + +Quote from the module: +""" + This version has been extracted from the Turbogears source repository + and slightly changed to be completely stand-alone again. + Also some fixes have been made to make it work on Python 2.6 (sched module changes). + The version in Turbogears is based on the original stand-alone Kronos. +""" + +It is covered by the following license. +http://www.opensource.org/licenses/mit-license.php +-------------------------------------------------------------------------------------------- + The MIT License + + Kronos.py is Copyright (c) Irmen de Jong. + + 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. + +-------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/licenses/License-listquote.txt b/licenses/License-listquote.txt new file mode 100644 index 0000000..eb20cb1 --- /dev/null +++ b/licenses/License-listquote.txt @@ -0,0 +1,41 @@ +The module listquote.py is written by Michael Foord. + +Home of the module: +http://www.voidspace.org.uk/python/configobj-api/pythonutils.listquote-pysrc.html + +It is covered by the following license. + +------------------------------------------------------------------------- +Copyright (c) 2003-2007, Michael Foord +All rights reserved. +E-mail : fuzzyman AT voidspace DOT org DOT uk + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Michael Foord nor the name of Voidspace + may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------------------- diff --git a/licenses/License-pynewsleecher.txt b/licenses/License-pynewsleecher.txt new file mode 100644 index 0000000..34553d3 --- /dev/null +++ b/licenses/License-pynewsleecher.txt @@ -0,0 +1,11 @@ +The original author of SABnzbd based his work on Pynewleecher by Freddy@madcowdesease.org. + +Few parts of Pynewsleecher have survived the generations of SABnzbd in a +recognizable form. +Still, we wish to thank Freddy for his inspiration. + +The home of the Pynewsleecher project: +http://www.madcowdisease.org/mcd/pynewsleecher + +The software does not carry any license information. + diff --git a/licenses/License-rarfile.txt b/licenses/License-rarfile.txt new file mode 100644 index 0000000..6184f08 --- /dev/null +++ b/licenses/License-rarfile.txt @@ -0,0 +1,23 @@ +The module rarfile.py is written by Marko Kreen. + +Home of the module: +http://grue.l-t.ee/~marko/src/rarfile/ + +It is covered by the following license. + +------------------------------------------------------------------------- + +Copyright (c) 2005 Marko Kreen + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/licenses/License-rsslib.txt b/licenses/License-rsslib.txt new file mode 100644 index 0000000..4b10acc --- /dev/null +++ b/licenses/License-rsslib.txt @@ -0,0 +1,10 @@ +The module rsslib.py is written by C. Mallory. +cmallory /a t/ berserk /dot/ o r g +Home of the module: + http://berserk.org/rsslib/ + +It is covered by the following license. + +----------------------------------------------------------------------------- +You may freely use this code in any way you can think of. +----------------------------------------------------------------------------- diff --git a/licenses/License-ssmtplib.txt b/licenses/License-ssmtplib.txt new file mode 100644 index 0000000..650ca06 --- /dev/null +++ b/licenses/License-ssmtplib.txt @@ -0,0 +1,36 @@ +The module ssmtplib.py is written by Matt Butcher. + +Home of the module: +http://aleph-null.tv/downloads/ssmtplib.py + +It is covered by the following license. + + Author: Matt Butcher , Feb. 2007 + License: MIT License (or, at your option, the GPL, v.2 or later as posted at + http://gnu.org). + + Begin License + + Copyright (c) 2007 M Butcher + + 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. + + End License + + This is just a minor modification to the smtplib code by Dragon De Monsyn. diff --git a/licenses/Python/LICENSE-BerkeleyDB.txt b/licenses/Python/LICENSE-BerkeleyDB.txt new file mode 100644 index 0000000..87fa4cc --- /dev/null +++ b/licenses/Python/LICENSE-BerkeleyDB.txt @@ -0,0 +1,102 @@ +/*- + * $Id: LICENSE,v 12.1 2005/06/16 20:20:10 bostic Exp $ + */ + +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Sleepycat Software by email at info@sleepycat.com, or on +the Web at http://www.sleepycat.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +/* + * Copyright (c) 1990-2005 + * Sleepycat Software. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Redistributions in any form must be accompanied by information on + * how to obtain complete source code for the DB software and any + * accompanying software that uses the DB software. The source code + * must either be included in the distribution or be available for no + * more than the cost of distribution plus a nominal fee, and must be + * freely redistributable under reasonable conditions. For an + * executable file, complete source code means the source code for all + * modules it contains. It does not include source code for modules or + * files that typically accompany the major components of the operating + * system on which the executable file runs. + * + * THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL SLEEPYCAT SOFTWARE + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * Copyright (c) 1990, 1993, 1994, 1995 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Copyright (c) 1995, 1996 + * The President and Fellows of Harvard University. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ diff --git a/licenses/Python/LICENSE-OpenSSL.txt b/licenses/Python/LICENSE-OpenSSL.txt new file mode 100644 index 0000000..c21f132 --- /dev/null +++ b/licenses/Python/LICENSE-OpenSSL.txt @@ -0,0 +1,127 @@ + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a dual license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. Actually both licenses are BSD-style + Open Source licenses. In case of any license issues related to OpenSSL + please contact openssl-core@openssl.org. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + diff --git a/licenses/Python/LICENSE-Python.txt b/licenses/Python/LICENSE-Python.txt new file mode 100644 index 0000000..d8e1f80 --- /dev/null +++ b/licenses/Python/LICENSE-Python.txt @@ -0,0 +1,270 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations (now Zope +Corporation, see http://www.zope.com). In 2001, the Python Software +Foundation (PSF, see http://www.python.org/psf/) was formed, a +non-profit organization created specifically to own Python-related +Intellectual Property. Zope Corporation is a sponsoring member of +the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.2 2.1.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2.1 2.2 2002 PSF yes + 2.2.2 2.2.1 2002 PSF yes + 2.2.3 2.2.2 2003 PSF yes + 2.3 2.2.2 2002-2003 PSF yes + 2.3.1 2.3 2002-2003 PSF yes + 2.3.2 2.3.1 2002-2003 PSF yes + 2.3.3 2.3.2 2002-2003 PSF yes + 2.3.4 2.3.3 2004 PSF yes + 2.3.5 2.3.4 2005 PSF yes + 2.4 2.3 2004 PSF yes + 2.4.1 2.4 2005 PSF yes + 2.4.2 2.4.1 2005 PSF yes + 2.4.3 2.4.2 2006 PSF yes + 2.5 2.4 2006 PSF yes + 2.5.1 2.5 2007 PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python +alone or in any derivative version, provided, however, that PSF's +License Agreement and PSF's notice of copyright, i.e., "Copyright (c) +2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation; +All Rights Reserved" are retained in Python alone or in any derivative +version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/licenses/Python/LICENSE-TclTk.txt b/licenses/Python/LICENSE-TclTk.txt new file mode 100644 index 0000000..f1dcaa5 --- /dev/null +++ b/licenses/Python/LICENSE-TclTk.txt @@ -0,0 +1,40 @@ +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState +Corporation and other parties. The following terms apply to all files +associated with the software unless explicitly disclaimed in +individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. diff --git a/licenses/Python/LICENSE.txt b/licenses/Python/LICENSE.txt new file mode 100644 index 0000000..edd42ae --- /dev/null +++ b/licenses/Python/LICENSE.txt @@ -0,0 +1,97 @@ +ActivePython Community License v2.2 + +Preamble: + +The intent of this document is to state the conditions under which the +Package may be copied and distributed, such that ActiveState maintains +control over the development and distribution of the Package, while allowing +the users of the Package to use the Package in a variety of ways. + +This license establishes the terms under which the Package may be copied, +modified, distributed and/or redistributed. The intent is that ActiveState +Software Inc. ("ActiveState") maintain control over the development and +distribution of the Package, while allowing the users of the Package to use +the Package in a variety of ways. You are always permitted to make +arrangements wholly outside of this license directly with ActiveState. If +the terms of this license do not permit the full use that you propose to make +of the Package or if you require clarification regarding your particular +intended use of the Package, You should contact sales@activestate.com in +order to seek clarification or to request a different licensing arrangement. + +Definitions: + +"ActiveState" refers to ActiveState Software Inc., the copyright holder of +the Package. + +"Package" refers to those files, including, but not limited to, source code, +binary executables, images, and scripts, which are distributed by +ActiveState, and derivatives of that collection and/or those files. + +"You" and "your" means any person who copies, distributes, or modifies the +Package. + +Terms: + +1. You may use this Package for commercial or non-commercial purposes + without charge. + +2. You may make and give away verbatim copies of this Package for personal + use, or for use within your organization, provided that you duplicate all + of the original copyright notices and associated disclaimers. You may not + distribute copies of this Package, or copies of packages derived from + this Package, or cause by Your actions copies of this Package to be + distributed, to others outside your organization without specific prior + written permission from ActiveState (although you are encouraged to + direct them to sources from which they may obtain it for themselves). + +3. You may apply bug fixes, portability fixes, and other modifications + made available from ActiveState. A Package modified in such a way shall + still be covered by the terms of this license. + +4. In addition to the above allowed uses, this license does allow for the + redistribution of parts of the Package together with other software code + in a wrapped format, including but not limited to a format wrapped with + executable generators such as "py2app" or "py2exe". However, if you wish + to redistribute the complete Package either as a standalone distribution + or in a wrapped format, you must obtain written permission from + ActiveState. ActiveState may charge a fee for such license. To obtain + permission for redistribution or clarification regarding your particular + intended use of the Package, please contact us at: sales@ActiveState.com. + +5. ActiveState's name and trademarks may not be used to endorse or promote + packages derived from this Package without specific prior written + permission from ActiveState. + +6. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF + MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +7. This Package may be subject to export controls imposed by applicable + laws and regulations, which may prohibit or restrict the distribution, + exportation and re-exportation of the Package. You will comply with + all applicable export control laws, including such laws of the U.S., + Canada and the European Community, in effect from time to time, + including without limitation the Canadian Export and Import Permits + Act, the Canadian United Nations Act, and the U.S. Foreign Corrupt + Practices Act and with all export laws and restrictions and regulations + of the United States Department of Commerce or other United States, + European Community or other foreign agency or authority, and will not + distribute, export or re-export, or allow the distribution, export or + re-export, of the Package or any copy or adaptation of direct product + thereof, or any underlying technology, except in full compliance with + any and all such applicable laws, restrictions and regulations. You + represent and warrant that you are not located in, under the control + of, or a national or resident of, any restricted country (currently + including Myanmar [Burma], Belarus, Cuba, Libya, North Korea, Iran, + Iraq, Sudan, Syria, and Afghanistan) or of any designated entity or + person. + +The Package may contain software covered by other licenses and copyrights. + +- Copyright (c) 2001 Python Software Foundation. All Rights Reserved. +- Copyright (c) 2000 BeOpen.com. All Rights Reserved. +- Copyright (c) 1995-2001 Corporation for National Research Initiatives. All + Rights Reserved. +- Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All Rights + Reserved. + diff --git a/main/CHANGELOG.txt b/main/CHANGELOG.txt deleted file mode 100644 index fc7e841..0000000 --- a/main/CHANGELOG.txt +++ /dev/null @@ -1,374 +0,0 @@ -------------------------------------------------------------------------------- -0.5.1 RC1 by The SABnzbd-Team -------------------------------------------------------------------------------- -- Add 'size_limit' option. Any job bigger than this limit will be set to - low priority and be paused. -- TV Season sort now has "affected categories" too. Check your settings!! -- Fixed problems that could lead to an infinite unpacking loop - (when using a "sick" NZB and using +U instead of +D postprocessing) -- Duplicate title checking in RSS is now done across all feeds -- Fixed issues with accented characters in NZB names when using RSS -- Fixed issues with accented characters in category folder names when using RSS -- Plush: fix nzo range selection when clicking checkboxes -- When detecting an unsupported unrar on Posix systems, drop unsupported features - (This may lead to files being lost when duplicate names exist.) -- Sorting examples were sometimes wrong -- Sorting couldn't handle some pattern combinations -- Fixed priority handling for RSS feeds and newzbin bookmarks -- Fixed crash occuring when user profile contains characters outside ISO-8859-1 -- Allow nzb-backup folder field to be cleared -- When using only manual newzbin bookmark reading, allow automatic un-bookmarking -- Fixed several translation errors and omissions -- Keep Windows awake during post-processing of last job (while queue is already empty) -- Make it possible to run Python user scripts on OSX -------------------------------------------------------------------------------- -0.5.0Final by The SABnzbd-Team -------------------------------------------------------------------------------- -- Relabeled to 0.5.0 -------------------------------------------------------------------------------- -0.5.0RC8 by The SABnzbd-Team -------------------------------------------------------------------------------- -- Add par2_multicore option to Config->Switches -- Windows/OSX: Replaced OpenSSL libraries -- Windows: Replaced par2-multicore by new version -------------------------------------------------------------------------------- -0.5.0RC7 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -- When priority of newzbin or RSS job comes from the category, it wasn't effective. -- When unpacked file and directly download file have the same name, - the latter got lost -- Make nzbmatrix error handling robust -- When apikey is present in API call, do not require username/password -- Windows installer is now multi-language too -- Windows installer warns about queue when upgrading from 0.4.x -------------------------------------------------------------------------------- -0.5.0RC6 by The SABnzbd-Team -------------------------------------------------------------------------------- -Changes: -- Add INI-only option "par2_multicore" to enable/disable par2-multicore -Fixes: -- Prevent crash in RSS due to odd characters -- Prevent deadlock in downloader when server is blocked -- Unrar option -ai should only be used on Windows -- Prevent deletion of par files of other sets in multi-set NZBs -------------------------------------------------------------------------------- -0.5.0RC5 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -- Incorrect job rename in SMPL skin on Windows -- INI-only option "no_penalties" to limit timeout penalties for - non-optional servers to 1 minute -- HTTPS certificate paths should default to admin_dir directive -- The second parameter of the user script should be the original NZB file name, - even when the job has been renamed. -- Show clear error message when RSS feed preview or force-download fails. -- Don't warn about RSS reading problems when a scheduled scan is done. -- Ignore empty "username" and "apikey" parameters in nzbmatrix.com URLs - and add stored values. -- Suppress authentication warning for API call "get_scripts". - It's used by some external utilities to determine if username/password is required. -------------------------------------------------------------------------------- -0.5.0RC4 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -- Ignore read-only attributes of files in a RAR archive -- Remove potential crash on OSX when handling corrupt par2 file -- Enable manual unblocking of permantly blocked servers -- Retry permanently blocked servers after 30 minutes (compensate for shoddy servers) -- INI-only option "folder_length_max" for trimming folder name size - (default 128 for Windows, for others 256) -- Give unrar preference over rar when both installed on a Posix system -------------------------------------------------------------------------------- -0.5.0RC3 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -- Avoid potential crash when server closes connection -- On Connections Page: show original error message sent by server -- Make sure unrar check isn't done for OSX -------------------------------------------------------------------------------- -0.5.0RC2 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -- Increase timeout for nzb fetches from URLs to 60 sec -- Duplicate title checking in RSS is now case-insensitive -- Only warn about presense of old queue when no new queue is present yet -- Don't warn when a supported RAR (instead of UNRAR) program is present -------------------------------------------------------------------------------- -0.5.0RC1 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -- Fix broken server test in Wizard and Config->Servers -- Add tbbmalloc.dll to par2 program (prevents problems when you have - another version of that file on your system) -- Fix uneven download speed of very large NZBs -- Include special par2 variant for OSX 10.6+ (automatically selected) -- Fix problem with the script folder path containing a space -- Fix disabling of RSS feeds when changing settings -- When forcing disconnect don't try to send "Quit" to a non-responding server -- Warn user (once) about presence of old queue file -- Updated German texts -------------------------------------------------------------------------------- -0.5.0Beta6 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -- Solve problems with unwilling servers and "random" server time-outs. -- Do not generate warnings for intermittent server problems. -- Joinable rar-sets were not always properly joined. -- Fixed timing problems when SABnzbd is running behind an Apache server -- Don't report failed default permissions setting when the user has set none -------------------------------------------------------------------------------- -0.5.0Beta5 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -- Removed potential deadlock from Downloader -- Allow backup servers to be used when all primaries blocked or inactive -- Scheduled PAUSE_ALL failed to stop downloading -- Will now continue unpacking other rar-sets when one rar-set fails to unpack - (but only when option "Post-process Verified jobs" is off) -- QuickPar messed up the par files of multi-set NZBs -- When the par2 tool joined multi-part files of a multi-NZB, it mixed up files - from other sets -- Work-around for a bug in par2-tbb (making if fail to join some multi-part jobs). -- When scaling down the number of connections of a server, - will now retry with the full amount 10 minutes later. -------------------------------------------------------------------------------- -0.5.0Beta4 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -* Fixed poor reliability of reading RSS feeds and subsequent NZB fetches - (caused by a too short time-out value). -* Posix: when user has not set a permissions value, use the account's - default permissions (prevents problems with permissions coming from rar files) -* When option "Post-process only verified jobs" is set, do not execute - user-script when job fails -* NZB files read in from categorized watched folder did not inherit - the category's priority -* Fixed error reporting about incorrect NZB file -* Improved year recognition in tvsort -* Some skin fixes -------------------------------------------------------------------------------- -0.5.0Beta3 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes: -* Solved problems with adding NZB by URL (also through RSS) -* Proper display of download speed in OSX menu -* Fixed compatibility of Plush and IE8 -------------------------------------------------------------------------------- -0.5.0Beta2 by The SABnzbd-Team -------------------------------------------------------------------------------- -Fixes -* nzbmatrix.com support fixed (fetch NZB and Wizard settings) -* Problems on some systems because of reading NZB-spec from newzbin - for each NZB file -* When an RSS feed has more than 9 filters, the order was disturbed -* Fixed several TVSort problems including a hangup -* Each RSS preview added jobs marked "will not be downloaded" - instead of just the very first scan. -* Email reporting disk-full was malformed -* Sample detection was to eager to detect -* Improve detection of 64bit versions of Windows Vista/7/Server2008 -* Explicit priorities in nzb upload were ignored -* Corrections in translations -Improvements -* INI-only option to reduce the amount of admin saves (important for very large NZBs) -* INI-only option to enable/disable final folder renaming (__UNPACK/__FAILED) -* Fixed OSX uninstaller so that it will leave extra skins on the disk -* Association of NZB files with SABnzbd for OSX -* Retry folder renames and deletions on Windows -* Don't save RSS admin to disk, when no feeds are active - -------------------------------------------------------------------------------- -0.5.0Beta1 by The SABnzbd-Team -------------------------------------------------------------------------------- -Highlights - * Multi-language UI: English, French, Dutch, German and Swedish - * Start-up Wizard to get you going fast - * QuickCheck : on-the-fly par2 check. When a download is correct, - the normal par2 check is skipped - * Configuration changes take immediate effect (except skins and some system folders) - * Job priorities, individual job pausing, job renaming - * Flexible server setup (scheduled on/off, optional servers) - * The Plush and Smpl skins have been improved and are a lot faster than before - and they have paging - * New "Mobile" skin (replaces iPhone-skin) - * RSS supports more sites and has generally improved - * For Windows distribution: 64-bit par2 and unrar are used - on 64-bit Vista/Win7/Server2008 - * Support for password protected rar-files (limited) - * Expanded TV/Movie sorting -More Tech stuff - * HTTPS support for the Web-UI - * Email templates to design your own emails (including multiple recipients) - * Extensive API for utility developers - * History survives a full queue/admin clean and future upgrades - * Windows: optional association of NZB files with SABnzbd (double-click support) - -------------------------------------------------------------------------------- -0.5.0Alpha12 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Drop country names from language strings -* Fixed crash when setting script to None -* Add missing "Restart required" messages in Config->General in Classic and Smpl -* When pause-download-while-pp is reset, resume downloading immediately -------------------------------------------------------------------------------- -0.5.0Alpha11 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Fix foreign character problems in several places -* Add Swedish translation -* Plush tweaks -* Allow foreign characters in email templates -* Prevent selection of "Mobile" skin as primary -------------------------------------------------------------------------------- -0.5.0Alpha10 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Fix foreign character problems in several places -* top_only option wasn't changable on-the-fly -* Windows uninstaller left behind some files -* Complete the API with the del_config function -* German translation -* Plush tweaks -------------------------------------------------------------------------------- -0.5.0Alpha9 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Fixed bug in handling fetching of additional par2 files -* Fixed nzbmatrix support properly -* Fixed potential urlgrabber crash on startup -* Fixed problem with NZB files containing space before ".nzb" -* Fixed Windows Vista/7/Server2008 x64 detection -* Allow feed:// syntax in RSS feeds -* Restore 0.4.x compatibility for the RSS URL. -* Even more Plush improvements -------------------------------------------------------------------------------- -0.5.0Alpha8 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Fixed failing RSS filters -* Fixed nzbmatrix.com RSS support - Note: you URL must contain username and ApiKey -------------------------------------------------------------------------------- -0.5.0Alpha7 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Use RSS titles for job names instead of downloaded filename. - (This bypasses newzbin's filename mangling). -* URL grabber will do 5 retries before giving up (and generate - correct retry links in History). -* RSS support for nzbserien.org (and slight improvement for nzbs.org) -* Plush overhaul -* "smpl" is now the preferred skin, "Default" renamed to "Classic". -* Detect internal problems and restart SABnzbd if found -* Enable "hibernate" and "standby" as end-of-queue actions for Linux systems - (Will only work if supported by the kernel of your platform) -* Update to unrar 3.90 (OSX and Windows) -* Remove segment files after par2-based joining -* Internationalisation of all texts in History -* Internationalisation of email templates -* Prevent crash when encountering a corrupt par2 file during QuickCheck -* Added new api call: api?mode=warnings&name=clear -* Added new api call: api?mode=translate&value=ACRONYM&output=json -* Priorities in RSS feeds now work properly -* Add "Require" filter type for RSS feeds -* Add SSL type (V23, V2, V3), only needed for som odd ISP's -* Add INI-file-only option to skip the check after unrar. - This is to support people with consistently failing checks. -* Passwords for encrypted RARs can be set in the job title -------------------------------------------------------------------------------- -0.5.0Alpha6 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Add 64bit unrar/rar 3.90 for Windows -* "Mobile" skin (limited functionality) -* Removed a number category-related problems -* Scan enabled RSS feeds 15 sec after startup -* Get newzbin bookmarks 20 sec after startup -* Add scheduled pause-all command thats stops all disk activity -* Improved handling of accented characters (also in par2) -* Unrelated empty folders are no longer removed from "incomplete" folder -* Initial runs of RSS will no longer be downloaded by "download" button - instead thay are marked and can be downloaded individually -* TV Sort: Fixed double brackets () naming on items with the country in the name. -* Disable password completion by browsers on Config pages. -* Retry links in History were incorrrect -* Solved lots of small bugs -* Skin improvements -------------------------------------------------------------------------------- -0.5.0Alpha5 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Less bugs -------------------------------------------------------------------------------- -0.5.0Alpha4 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Less bugs -------------------------------------------------------------------------------- -0.5.0Alpha3 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Session/API key system ported from 0.4.11 -* Multi-language, including Dutch and French translations -* Less bugs -------------------------------------------------------------------------------- -0.5.0Alpha2 by The SABnzbd-Team -------------------------------------------------------------------------------- -* Fixed failing delete-bookmark-on-newzbin feature. -* Wizard improvements -* Plush improvements -* par2 for OSX replaced -* Added penalty timeout for unresponsive servers (when flagged as "optional"). -* Fixed some incompatibilities with Python 2.4 and 2.6 -* TV sorting improved -* Support for :: or [::] as valid hostnames. :: listens on all ipv6 addresses. -* Allow non-conforming RSS feeds (fixes nzbmatrix.com issue) -------------------------------------------------------------------------------- -0.5.0Alpha1 by The SABnzbd-Team -------------------------------------------------------------------------------- -Core Stuff: -* Updated Cherrypy - Among other things, this means you can now use HTTPS for the - web ui and have a prettier login window if you use a login/pass. - We have also dropped the need for /sabnzbd/ in the urls you use to access sabnzbd. - It'll still work with /sabnzbd/, but it will also work without it now. -* New XML Parser - Results in lower memory usage when reading .nzb files, especially large ones. -* File Quick-Check - We can now skip par2 verification altogether in some cases by performing - a quick-check of file hashes before post-processing. -* New Quick-Start Wizard - If you don't have any servers set, you'll get a neat little - five-page wizard allowing you to change all the config settings you really need to worry about. - Stuff like "How should SABnzbd be accessible? Remotely or locally?" and "What's your server address", - in a step by step manner. Features a button on the server page to test the connection to the news server, - to make sure you have entered your details correctly. -* Revamped Config System - The configuration backend was overhauled in 0.5. - Many of the config pages have been changed around to make more sense, - you can now easily enable/disable servers, and in general all server interaction is much faster than before. -* E-mail Templates - The e-mail system from 0.4.x has been updated to have a full template system, - allowing you to customize e-mail alerts. -* File Association - .nzb files are now associated with SABnzbd, so you can just double click them - to load the file into your queue. Currently only Windows is fully supported, however - you can launch SABnzbd with arguments containing a path, or multiple paths to local nzb/rar/zip files. -* .TS Filejoining - File joining has been improved to allow support for joining multiple .TS files into one file. -* Date Sorting - To compliment series sorting, sorting has now been added for downloads with dates in their names, - allowing you to place files in daily, monthly, yearly folders with proper naming -* General Sorting - Sorting for general downloads allows users to expand the series sorting into - other types of downloads. Has support for years in titles allowing files to be placed in folders - depending on the decade. -The API: -* Totally overhauled for 0.5. Basically, you now have full access to near everything about - SABnzbd via POST and XML/JSON. See the full docs for more details. Why does this matter? - It means if you know any programming language and understand how to parse XML/JSON and POST data to an URI, - then you can write some application which can communicate with SABnzbd almost as easily as a template can. -The Queue & History: -* Per-Item Pause - Now, in addition to being able to pause the whole queue, you can also pause - individual items in the queue. You can also force downloads to start while the whole queue is paused. -* Priorities - The queue now has four priorities, Normal, High, Low and force. - Think of this as an easy method to move things around your queue, or to insert things into - specific areas of your queue. One use case is to set everything to "normal" by default, - so it works like 0.4.x. However, you can then add a new post or RSS feed as high-priority to have it be - inserted to the top of the queue, or add one as low-priority to have it inserted at the bottom of the queue - and keep below normal downloads that are added. Forced items will go straight to the top of the queue, - and will continue to download even if the queue is paused. -* New History Backend - The history is now stored in a database, so we can handle larger histories better, - and store more information about downloads. -Skins: -* General Template Changes - Templates have all been updated to support all the neat new features. - So if you're one of those guys still married to Default, don't worry about missing out on all this new stuff. -* Plush - Complete backend rewrite to work almost exclusively off the API [so it's MUCH faster], - and a reorganized (and more accessible!) main menu. -* SMPL - Has been reworked to be much faster and friendlier to use. - The default page now shows the top 5 items from the queue and history. - The queue and history are also now pages to stop loading a massive number of items. -Bugfixes: -* Sure! diff --git a/main/COPYRIGHT.txt b/main/COPYRIGHT.txt deleted file mode 100644 index 55d5273..0000000 --- a/main/COPYRIGHT.txt +++ /dev/null @@ -1,22 +0,0 @@ - -(c) Copyright 2007-2010 by "The SABnzbd-team" - -The SABnzbd-team is: - -Current team: - ShyPike - sw1tch - pairofdimes - inpheaux - rAf -Honorary member (and original author) - Gregor Kaufmann - -SABnzbd comes with ABSOLUTELY NO WARRANTY. -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -See GPL2.txt and GPL3.txt - diff --git a/main/GPL2.txt b/main/GPL2.txt deleted file mode 100644 index f90922e..0000000 --- a/main/GPL2.txt +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/main/GPL3.txt b/main/GPL3.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/main/GPL3.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/main/INSTALL.txt b/main/INSTALL.txt deleted file mode 100644 index c16b7a5..0000000 --- a/main/INSTALL.txt +++ /dev/null @@ -1,123 +0,0 @@ - SABnzbd+ trunk - -------------------------------------------------------------------------------- -0) LICENSE -------------------------------------------------------------------------------- - -(c) Copyright 2007-2010 by "The SABnzbd-team" - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -------------------------------------------------------------------------------- -1) INSTALL with the Win32 installer -------------------------------------------------------------------------------- -Just run the downloaded EXE file and the installer will start. -It's just a simple standard installer. -After installaton, find the SABnzbd program in the Start menu and start it. - -Within 5-10 seconds your web browser will start and show the user interface. -Use the "Help" button in the web-interface to be directed to the Help Wiki. - - -------------------------------------------------------------------------------- -2) INSTALL pre-built Win32 binaries -------------------------------------------------------------------------------- -Unzip pre-built version to any folder of your liking. -Start the SABnzbd.exe program. -Within 5-10 seconds your web browser will start and show the user interface. -Use the "Help" button in the web-interface to be directed to the Help Wiki. - - -------------------------------------------------------------------------------- -3) INSTALL with only sources -------------------------------------------------------------------------------- - -You need to have Python installed and some modules. - -Unix/Linux/OSX - Python-2.4.4 http://www.python.org -OR - Python-2.5.4 http://www.python.org - -Windows - Python-2.5.latest http://www.activestate.com - -Essential modules - cheetah-2.0.1+ http://www.cheetahtemplate.org/ - yenc module >= 0.3 http://sabnzbd.sourceforge.net/yenc-0.3.tar.gz - http://sabnzbd.sourceforge.net/yenc-0.3-w32fixed.zip (Win32-only) - par2cmdline >= 0.4 http://parchive.sourceforge.net/ - http://chuchusoft.com/par2_tbb/index.html (multi-core) - -Essential modules for python 2.4 ONLY - pysqlite3 >= 2.3.4 http://pysqlite.org (python-pysqlite2) - -Optional modules - unrar >= 3.90+ http://www.rarlab.com/rar_add.htm - unzip >= 5.52 http://www.info-zip.org/ - -Optional modules Windows - pyopenssl >= 0.10 http://pypi.python.org/pypi/pyOpenSSL - (Binaries, including the OpenSSL libraries) - -Optional modules Unix/Linux/OSX - pyopenssl >= 0.7 http://pypi.python.org/pypi/pyOpenSSL - openssl => v0.9.8g+ http://www.openssl.org/ - Make sure the OpenSSL libraries match with PyOpenSSL - -Embedded modules (only use the included version) - CherryPy-3.2 rev2138 with patches http://www.cherrypy.org - - -Unpack the ZIP-file containing the SABnzbd sources to any folder of your liking. -Start the program from the commandline: - python SABnzbd.py -Within 5-10 seconds your web browser will start and show the user interface. -Use the "Help" button in the web-interface to be directed to the Help Wiki. - - -------------------------------------------------------------------------------- -4) TROUBLESHOOTING -------------------------------------------------------------------------------- - -Your browser may start up with just an error page. - -This means that SABnzbd cannot use the default port 8080 to run its web-server on. -Try to use another port, you'll need to use the a command window: - SABnzbd.exe -s localhost:7777 -or - python SABnzbd.py -s localhost:7777 - -You may of course try other port numbers too. - -For troubleshooting you can use the program SABnzbd-console.exe. -This will show a black window where logging information will be shown. This -may help you solve problems easier. - -------------------------------------------------------------------------------- -5) MORE INFORMATION -------------------------------------------------------------------------------- - -Visit the WIKI site: - http://wiki.sabnzbd.org/ - - -------------------------------------------------------------------------------- -6) CREDITS -------------------------------------------------------------------------------- - -Serveral parts of SABnzbd were built by other people, illustrating the -wonderful world of Free Open Source Software. -See the licences folder of the main program and of the skin folders. diff --git a/main/ISSUES.txt b/main/ISSUES.txt deleted file mode 100644 index 03334b2..0000000 --- a/main/ISSUES.txt +++ /dev/null @@ -1,69 +0,0 @@ -******************************************* -*** Known issues *** -******************************************* - -- To prevent unexpectedly large NZBs from eating your quotum you can set - the option 'size_limit' in the INI file. - Any NZB larger than this size will be set to paused and get a low priority. - -- When par2 or unrar hang up, never just stop SABnzbd. - Instead use your operating system's task manager to stop the par2 or unrar program. - Forcing SABnzbd to quit may damage your queues. - Windows-only: - If you keep having trouble with par2 multicore you can disable it - in Config->Switches. - This will force the use of the old and tried, but slower par2-classic program. - -- Windows cannot handle pathnames longer than 254 characters. - Currently, SABnzbd doesn't handle this problem gracefully. - We have added the INI-only option "folder_length_max" in which you can set - a maximum folder name size. - For Windows the default is 128 and for others 256. - A quite safe value for Windows would be 64. - SABnzbd will take care of overlapping names. - See: http://wiki.sabnzbd.org/configure-special - -- Some Usenet servers have intermittent login (or other) problems. - For these the server blocking method is not very favourable. - There is an INI-only option that will limit blocks to 1 minute. - no_penalties = 1 - See: http://wiki.sabnzbd.org/configure-special - -- On OSX you may encounter downloaded files with foreign characters. - The par2 repair may fail when the files were created on a Windows system. - The problem is caused by the PAR2 utility and we cannot fix this now. - This does not apply to files inside RAR files. - -- On Linux when you download files they may have the wrong character encoding. - You will see this only when downloaded files contain accented characters. - You need to fix it yourself by running the convmv utility (availaible for most Linux platforms). - -- The "Watched Folder" sometimes fails to delete the NZB files it has - processed. This happens when other software still accesses these files. - Some third-party utilities supporting SABnzbd are known to do this. - We cannot solve this problem, because the Operating System (read Windows) - prevents the removal. - -- Jobs deleted from the queue will leave downloaded files behind - in the "incomplete" folder. - You will have to remove these files manually. - -- Memory usage can sometimes have high peaks. This makes using SABnzbd on very low - memory systems (eg a SAN device) a challenge. - -- SABnzbd is not compatible with some software firewall versions. - The Mircosoft Windows Firewall works fine, but remember to tell this - firewall that SABnzbd is allowed to talk to other computers. - -- When SABnzbd cannot send nofication emails, check your virus scanner, - firewall or securiry suite. It may be blocking outgoing email. - -- When you are using external drives or network shares on OSX or Linux - make sure that the drives are mounted. - The operating system wil simply redirect your files to alternative locations. - You may have trouble finding the files when mounting the drive later. - -- Sometimes logging stops. This is a notorious bug in Python logging. SABnzbd will - function as normal. If you run from sources or use the --console option with the - Win32-binary, you will see that logging continues in the console window, but - nothing will be written to the log-files. diff --git a/main/LICENSE.txt b/main/LICENSE.txt deleted file mode 100644 index 261a33f..0000000 --- a/main/LICENSE.txt +++ /dev/null @@ -1,17 +0,0 @@ -(c) Copyright 2007-2010 by "The SABnzbd-team" - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -See accompanying files GPL2.txt and GPL3.txt. \ No newline at end of file diff --git a/main/NSIS_Installer.nsi b/main/NSIS_Installer.nsi deleted file mode 100644 index c0c6714..0000000 --- a/main/NSIS_Installer.nsi +++ /dev/null @@ -1,404 +0,0 @@ -; -*- coding: latin-1 -*- -; -; Copyright 2008-2010 The SABnzbd-Team -; -; This program is free software; you can redistribute it and/or -; modify it under the terms of the GNU General Public License -; as published by the Free Software Foundation; either version 2 -; of the License, or (at your option) any later version. -; -; This program is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with this program; if not, write to the Free Software -; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -!addplugindir win\nsis\Plugins -!addincludedir win\nsis\Include - -!include "MUI2.nsh" -!include "registerExtension.nsh" - - -Name "${SAB_PRODUCT}" -OutFile "${SAB_FILE}" - - -; Some default compiler settings (uncomment and change at will): -; SetCompress auto ; (can be off or force) -; SetDatablockOptimize on ; (can be off) -; CRCCheck on ; (can be off) -; AutoCloseWindow false ; (can be true for the window go away automatically at end) -; ShowInstDetails hide ; (can be show to have them shown, or nevershow to disable) -; SetDateSave off ; (can be on to have files restored to their orginal date) -WindowIcon on - -InstallDir "$PROGRAMFILES\SABnzbd" -InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" "" -;DirText $(MsgSelectDir) - - ;Vista redirects $SMPROGRAMS to all users without this - RequestExecutionLevel admin - FileErrorText "If you have no admin rights, try to install into a user directory." - - -;-------------------------------- -;Variables - - Var MUI_TEMP - Var STARTMENU_FOLDER -;-------------------------------- -;Interface Settings - - !define MUI_ABORTWARNING - - ;Show all languages, despite user's codepage - !define MUI_LANGDLL_ALLLANGUAGES - - !define MUI_ICON "interfaces/Classic/templates/static/images/favicon.ico" - - -;-------------------------------- -;Pages - - !insertmacro MUI_PAGE_LICENSE "LICENSE.txt" - !define MUI_COMPONENTSPAGE_NODESC - !insertmacro MUI_PAGE_COMPONENTS - - !insertmacro MUI_PAGE_DIRECTORY - - ;Start Menu Folder Page Configuration - !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" - !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\SABnzbd" - !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" - !define MUI_STARTMENUPAGE_DEFAULTFOLDER "SABnzbd" - ;Remember the installer language - !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" - !define MUI_LANGDLL_REGISTRY_KEY "Software\SABnzbd" - !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" - - !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER - - - !insertmacro MUI_PAGE_INSTFILES - !define MUI_FINISHPAGE_RUN - !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" - !define MUI_FINISHPAGE_RUN_TEXT $(MsgStartSab) - !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt" - !define MUI_FINISHPAGE_SHOWREADME_TEXT $(MsgShowRelNote) - ;!define MUI_FINISHPAGE_LINK "View the SABnzbdPlus Wiki" - ;!define MUI_FINISHPAGE_LINK_LOCATION "http://wiki.sabnzbd.org/" - !define MUI_FINISHPAGE_LINK $(MsgSupportUs) - !define MUI_FINISHPAGE_LINK_LOCATION "http://www.sabnzbd.org/contribute/" - - !insertmacro MUI_PAGE_FINISH - - !insertmacro MUI_UNPAGE_CONFIRM - !define MUI_UNPAGE_COMPONENTSPAGE_NODESC - !insertmacro MUI_UNPAGE_COMPONENTS - !insertmacro MUI_UNPAGE_INSTFILES - -;-------------------------------- -;Languages - - ; Set supported languages - !insertmacro MUI_LANGUAGE "English" ;first language is the default language - !insertmacro MUI_LANGUAGE "French" - !insertmacro MUI_LANGUAGE "German" - !insertmacro MUI_LANGUAGE "Dutch" - !insertmacro MUI_LANGUAGE "Swedish" - - -;-------------------------------- -;Reserve Files - - ;If you are using solid compression, files that are required before - ;the actual installation should be stored first in the data block, - ;because this will make your installer start faster. - - !insertmacro MUI_RESERVEFILE_LANGDLL - - -Function LaunchLink - ExecShell "" "$INSTDIR\SABnzbd.exe" -FunctionEnd - -;-------------------------------- -Function .onInit - !insertmacro MUI_LANGDLL_DISPLAY - -;make sure sabnzbd.exe isnt running..if so abort - loop: - StrCpy $0 "SABnzbd.exe" - KillProc::FindProcesses - StrCmp $0 "0" endcheck - MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgCloseSab) IDOK loop IDCANCEL exitinstall - exitinstall: - Abort - endcheck: -FunctionEnd - - -Section "SABnzbd" SecDummy -SetOutPath "$INSTDIR" - -IfFileExists $INSTDIR\sabnzbd.exe 0 endWarnExist - IfFileExists $INSTDIR\language\us-en.txt endWarnExist 0 - MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgOldQueue) IDOK endWarnExist IDCANCEL 0 - Abort -endWarnExist: - -; add files / whatever that need to be installed here. -File /r "dist\*" - - -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" "" "$INSTDIR" -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayName" "SABnzbd (remove only)" -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "UninstallString" '"$INSTDIR\uninstall.exe"' -;WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayIcon" '"$INSTDIR\need-a-.ico"' -; write out uninstaller -WriteUninstaller "$INSTDIR\Uninstall.exe" - - !insertmacro MUI_STARTMENU_WRITE_BEGIN Application - - ;Create shortcuts - CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" - CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\SABnzbd.lnk" "$INSTDIR\SABnzbd.exe" - CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\SABnzbd - SafeMode.lnk" "$INSTDIR\SABnzbd-console.exe" - WriteINIStr "$SMPROGRAMS\$STARTMENU_FOLDER\SABnzbd - Documentation.url" "InternetShortcut" "URL" "http://wiki.sabnzbd.org/" - CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" - - - - !insertmacro MUI_STARTMENU_WRITE_END - - -SectionEnd ; end of default section - -Section /o $(MsgRunAtStart) startup - CreateShortCut "$SMPROGRAMS\Startup\SABnzbd.lnk" "$INSTDIR\SABnzbd.exe" "-b0" -SectionEnd ; - -Section $(MsgIcon) desktop - CreateShortCut "$DESKTOP\SABnzbd.lnk" "$INSTDIR\SABnzbd.exe" -SectionEnd ; end of desktop icon section - -Section /o $(MsgAssoc) assoc - ${registerExtension} "$INSTDIR\nzb.ico" "$INSTDIR\SABnzbd.exe" ".nzb" "NZB File" - ;${registerExtension} "$INSTDIR\SABnzbd.exe" ".nzb" "NZB File" -SectionEnd ; end of file association section - -; begin uninstall settings/section -UninstallText $(MsgUninstall) - -Section "un.$(MsgDelProgram)" Uninstall -;make sure sabnzbd.exe isnt running..if so shut it down - - StrCpy $0 "sabnzbd.exe" - DetailPrint "Searching for processes called '$0'" - KillProc::FindProcesses - StrCmp $1 "-1" wooops - DetailPrint "-> Found $0 processes" - - StrCmp $0 "0" completed - Sleep 1500 - - StrCpy $0 "sabnzbd.exe" - DetailPrint "Killing all processes called '$0'" - KillProc::KillProcesses - StrCmp $1 "-1" wooops - DetailPrint "-> Killed $0 processes, failed to kill $1 processes" - - Goto completed - - wooops: - DetailPrint "-> Error: Something went wrong :-(" - Abort - - completed: - DetailPrint "Process Killed" - - - ; add delete commands to delete whatever files/registry keys/etc you installed here. - Delete "$INSTDIR\uninstall.exe" - DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" - DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" - - ; Delete installation files are carefully as possible - ; Using just rmdir /r "$instdir" is considered unsafe! - Delete "$INSTDIR\language\email-de-de.tmpl" - Delete "$INSTDIR\language\email-us-en.tmpl" - Delete "$INSTDIR\language\email-nl-du.tmpl" - Delete "$INSTDIR\language\email-fr-fr.tmpl" - Delete "$INSTDIR\language\email-sv-se.tmpl" - Delete "$INSTDIR\language\de-de.txt" - Delete "$INSTDIR\language\us-en.txt" - Delete "$INSTDIR\language\nl-du.txt" - Delete "$INSTDIR\language\fr-fr.txt" - Delete "$INSTDIR\language\sv-se.txt" - RMDir "$INSTDIR\language" - RMDir /r "$INSTDIR\interfaces\Classic" - RMDir /r "$INSTDIR\interfaces\Plush" - RMDir /r "$INSTDIR\interfaces\smpl" - RMDir /r "$INSTDIR\interfaces\Mobile" - RMDir /r "$INSTDIR\interfaces\wizard" - RMDir "$INSTDIR\interfaces" - RMDir /r "$INSTDIR\win\par2" - RMDir /r "$INSTDIR\win\unrar" - RMDir /r "$INSTDIR\win\unzip" - RMDir /r "$INSTDIR\win" - Delete "$INSTDIR\licenses\*.txt" - Delete "$INSTDIR\licenses\Python\*.txt" - RMDir "$INSTDIR\licenses\Python" - RMDir "$INSTDIR\licenses" - Delete "$INSTDIR\lib\libeay32.dll" - Delete "$INSTDIR\lib\pywintypes25.dll" - Delete "$INSTDIR\lib\ssleay32.dll" - Delete "$INSTDIR\lib\sabnzbd.zip" - Delete "$INSTDIR\lib\*.pyd" - RMDir /r "$INSTDIR\lib\" - Delete "$INSTDIR\CHANGELOG.txt" - Delete "$INSTDIR\COPYRIGHT.txt" - Delete "$INSTDIR\email.tmpl" - Delete "$INSTDIR\GPL2.txt" - Delete "$INSTDIR\GPL3.txt" - Delete "$INSTDIR\INSTALL.txt" - Delete "$INSTDIR\ISSUES.txt" - Delete "$INSTDIR\LICENSE.txt" - Delete "$INSTDIR\MSVCR71.dll" - Delete "$INSTDIR\nzb.ico" - Delete "$INSTDIR\PKG-INFO" - Delete "$INSTDIR\python25.dll" - Delete "$INSTDIR\python26.dll" - Delete "$INSTDIR\README.txt" - Delete "$INSTDIR\SABnzbd-console.exe" - Delete "$INSTDIR\SABnzbd.exe" - Delete "$INSTDIR\Sample-PostProc.cmd" - Delete "$INSTDIR\Uninstall.exe" - Delete "$INSTDIR\w9xpopen.exe" - RMDir "$INSTDIR" - - !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP - - Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd.lnk" - Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" - Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - SafeMode.lnk" - Delete "$SMPROGRAMS\$MUI_TEMP\SABnzbd - Documentation.url" - RMDir "$SMPROGRAMS\$MUI_TEMP" - - Delete "$SMPROGRAMS\Startup\SABnzbd.lnk" - - Delete "$DESKTOP\SABnzbd.lnk" - - DeleteRegKey HKEY_CURRENT_USER "Software\SABnzbd" - - ${unregisterExtension} ".nzb" "NZB File" - - -SectionEnd ; end of uninstall section - -Section "un.$(MsgDelSettings)" DelSettings - Delete "$LOCALAPPDATA\sabnzbd\sabnzbd.ini" - RMDir /r "$LOCALAPPDATA\sabnzbd\admin" -SectionEnd - - -Section "un.$(MsgDelLogs)" DelLogs - RMDir /r "$LOCALAPPDATA\sabnzbd\logs" -SectionEnd - - -Section "un.$(MsgDelCache)" DelCache - RMDir /r "$LOCALAPPDATA\sabnzbd\cache" - RMDir "$LOCALAPPDATA\sabnzbd" -SectionEnd - -; eof - -;-------------------------------- -;Language strings -; MsgWarnRunning 'Please close "SABnzbd.exe" first' - LangString MsgStartSab ${LANG_ENGLISH} "Start SABnzbd (hidden)" - LangString MsgStartSab ${LANG_DUTCH} "Start SABnzbd (verborgen)" - LangString MsgStartSab ${LANG_FRENCH} "Lancer SABnzbd (caché)" - LangString MsgStartSab ${LANG_GERMAN} "SABnzbd starten (unsichtbar)" - LangString MsgStartSab ${LANG_SWEDISH} "Starta SABnzbd (dold)" - - LangString MsgShowRelNote ${LANG_ENGLISH} "Show Release Notes" - LangString MsgShowRelNote ${LANG_DUTCH} "Toon Vrijgave Bericht (Engels)" - LangString MsgShowRelNote ${LANG_FRENCH} "Afficher les notes de version" - LangString MsgShowRelNote ${LANG_GERMAN} "Versionshinweise anzeigen" - LangString MsgShowRelNote ${LANG_SWEDISH} "Visa release noteringar" - - LangString MsgSupportUs ${LANG_ENGLISH} "Support the project, Donate!" - LangString MsgSupportUs ${LANG_DUTCH} "Steun het project, Doneer!" - LangString MsgSupportUs ${LANG_FRENCH} "Supportez le projet, faites un don !" - LangString MsgSupportUs ${LANG_GERMAN} "Bitte unterstützen Sie das Projekt durch eine Spende!" - LangString MsgSupportUs ${LANG_SWEDISH} "Donera och stöd detta projekt!" - - LangString MsgCloseSab ${LANG_ENGLISH} "Please close $\"SABnzbd.exe$\" first" - LangString MsgCloseSab ${LANG_DUTCH} "Sluit $\"SABnzbd.exe$\" eerst af" - LangString MsgCloseSab ${LANG_FRENCH} "Quittez $\"SABnzbd.exe$\" avant l\'installation, SVP" - LangString MsgCloseSab ${LANG_GERMAN} "Schliessen Sie bitte zuerst $\"SABnzbd.exe$\"." - LangString MsgCloseSab ${LANG_SWEDISH} "Var vänlig stäng $\"SABnzbd.exe$\" först" - - LangString MsgOldQueue ${LANG_ENGLISH} " >>>> WARNING <<<<$\r$\n$\r$\nIf not empty, download your current queue with the old program.$\r$\nThe new program will ignore your current queue!" - LangString MsgOldQueue ${LANG_DUTCH} " >>>> WAARSCHUWING <<<<$\r$\n$\r$\nIndien niet leeg, download eerst de gehele huidige wachtrij met het oude programma.$\r$\nHet nieuwe programma zal je huidige wachtrij negeren!" - LangString MsgOldQueue ${LANG_FRENCH} " >>>> ATTENTION <<<<$\r$\n$\r$\nsi votre file d'attente de téléchargement n'est pas vide, terminez la avec la version précédente du programme.$\r$\nLa nouvelle version l'ignorera!" - LangString MsgOldQueue ${LANG_GERMAN} " >>>> ACHTUNG <<<<$\r$\n$\r$\nWarten Sie, bis das alte Programm alle Downloads fertiggestellt hat.$\r$\nDas neue Programm wird die noch ausstehenden Downloads ignorieren!" - LangString MsgOldQueue ${LANG_SWEDISH} " >>>> VARNING <<<<$\r$\n$\r$\nOm kön inte är tom, hämta din nuvarande kö med det gamla programmet.$\r$\nDet nya programmet kommer att ignorera din nuvarande kö!" - - LangString MsgUninstall ${LANG_ENGLISH} "This will uninstall SABnzbd from your system" - LangString MsgUninstall ${LANG_DUTCH} "Dit verwijdert SABnzbd van je systeem" - LangString MsgUninstall ${LANG_FRENCH} "Ceci désinstallera SABnzbd de votre système" - LangString MsgUninstall ${LANG_GERMAN} "Dies entfernt SABnzbd von Ihrem System" - LangString MsgUninstall ${LANG_SWEDISH} "Detta kommer att avinstallera SABnzbd från systemet" - - LangString MsgRunAtStart ${LANG_ENGLISH} "Run at startup" - LangString MsgRunAtStart ${LANG_DUTCH} "Opstarten bij systeem start" - LangString MsgRunAtStart ${LANG_FRENCH} "Lancer au démarrage" - LangString MsgRunAtStart ${LANG_GERMAN} "Beim Systemstart ausführen" - LangString MsgRunAtStart ${LANG_SWEDISH} "Kör vid uppstart" - - LangString MsgIcon ${LANG_ENGLISH} "Desktop Icon" - LangString MsgIcon ${LANG_DUTCH} "Pictogram op bureaublad" - LangString MsgIcon ${LANG_FRENCH} "Icône sur le Bureau" - LangString MsgIcon ${LANG_GERMAN} "Desktop-Symbol" - LangString MsgIcon ${LANG_SWEDISH} "Skrivbordsikon" - - LangString MsgAssoc ${LANG_ENGLISH} "NZB File association" - LangString MsgAssoc ${LANG_DUTCH} "NZB bestanden koppelen aan SABnzbd" - LangString MsgAssoc ${LANG_FRENCH} "Association des fichiers NZB" - LangString MsgAssoc ${LANG_GERMAN} "Mit NZB-Dateien verknüpfen" - LangString MsgAssoc ${LANG_SWEDISH} "NZB Filassosication" - - LangString MsgDelProgram ${LANG_ENGLISH} "Delete Program" - LangString MsgDelProgram ${LANG_DUTCH} "Verwijder programma" - LangString MsgDelProgram ${LANG_FRENCH} "Supprimer le programme" - LangString MsgDelProgram ${LANG_GERMAN} "Programm löschen" - LangString MsgDelProgram ${LANG_SWEDISH} "Ta bort programmet" - - LangString MsgDelSettings ${LANG_ENGLISH} "Delete Settings" - LangString MsgDelSettings ${LANG_DUTCH} "Verwijder instellingen" - LangString MsgDelSettings ${LANG_FRENCH} "Supprimer Paramètres" - LangString MsgDelSettings ${LANG_GERMAN} "Einstellungen löschen" - LangString MsgDelSettings ${LANG_SWEDISH} "Ta bort inställningar" - - LangString MsgDelLogs ${LANG_ENGLISH} "Delete Logs" - LangString MsgDelLogs ${LANG_DUTCH} "Verwijder logging" - LangString MsgDelLogs ${LANG_FRENCH} "Supprimer les logs" - LangString MsgDelLogs ${LANG_GERMAN} "Protokoll löschen" - LangString MsgDelLogs ${LANG_SWEDISH} "Ta bort logg" - - LangString MsgDelCache ${LANG_ENGLISH} "Delete Cache" - LangString MsgDelCache ${LANG_DUTCH} "Verwijder Cache" - LangString MsgDelCache ${LANG_FRENCH} "Supprimer le cache" - LangString MsgDelCache ${LANG_GERMAN} "Cache löschen" - LangString MsgDelCache ${LANG_SWEDISH} "Ta bort temporär-mapp" - -Function un.onInit - !insertmacro MUI_UNGETLANGUAGE -FunctionEnd diff --git a/main/PKG-INFO b/main/PKG-INFO deleted file mode 100644 index ad6d0de..0000000 --- a/main/PKG-INFO +++ /dev/null @@ -1,10 +0,0 @@ -Metadata-Version: 1.0 -Name: SABnzbd -Version: 0.6.0 -Summary: SABnzbd-0.6.0 -Home-page: http://sourceforge.net/projects/sabnzbdplus -Author: The SABnzbd Team -Author-email: team@sabnzbd.org -License: GNU General Public License 2 (GPL2 or later) -Description: Fully automated Usenet Binary Downloader -Platform: posix diff --git a/main/README.txt b/main/README.txt deleted file mode 100644 index c4ffe36..0000000 --- a/main/README.txt +++ /dev/null @@ -1,131 +0,0 @@ -******************************************* -*** This is SABnzbd 0.6.0 Trunk *** -******************************************* -SABnzbd is an open-source cross-platform binary newsreader. -It simplifies the process of downloading from Usenet dramatically, -thanks to its friendly web-based user interface and advanced -built-in post-processing options that automatically verify, repair, -extract and clean up posts downloaded from Usenet. -SABnzbd also has a fully customizable user interface, -and offers a complete API for third-party applications to hook into. - -There is an extensive Wiki on the use of SABnzbd. -http://wiki.sabnzbd.org/ - ->>> PLEASE ALSO READ THE FILE "ISSUES.txt" <<< - -******************************************* -*** Upgrading from 0.5.0 *** -******************************************* -Stop SABnzbd. -Install new version over the old one -Start SABnzbd. - - -******************************************* -*** Upgrading from 0.4.x *** -******************************************* - ->>>>> PLEASE DOWNLOAD YOUR CURRENT QUEUE BEFORE UPGRADING <<<<<< - -When upgrading from a 0.4.x release such as 0.4.12 your old settings will be kept. -You will however be given a fresh queue and history. If you have items in your queue -from the older version of SABnzbd, you can either re-import the nzb files if you kept -an nzb backup folder, or temporarily go back to 0.4.x until your queue is complete. - -The history is now stored in a better format meaning future upgrades should be backwards -compatible. - - -******************************************* -*** Changes since 0.4.12 *** -******************************************* -Core Upgrades -- New Quick-Start Wizard - If you don't have any servers set you'll get a neat - little five-page wizard allowing you to change all the config settings you - really need to worry about. Stuff like "How should SABnzbd be accessible? - Remotely or locally?" and "What's your server address", in a step by step manner. - Features a button on the server page to test the connection to the news server, - to make sure you have entered your details correctly. -- HTTPS Support - The Web-UI now supports HTTPS and has a standard login window - (if you use a login/pass). The URL no longer requires the /sabnzbd/ part, - though the old URL is still supported. -- File Quick-Check - We can now skip par2 verification altogether in most cases - by performing a quick-check of file hashes before post-processing. - If quick-check passes, then all the files are complete and we can proceed - without doing the lengthy par2 verification step. -- Localization System - We now ship with five localizations, - English, French, Dutch, German and Swedish, and have a rather simple system - for implementing new translations. If you'd like to contribute one, - please inquire on our forums. -- More Indexing Sites - SABnzbd now supports more than just Newzbin. - See the support list for full details. Highlights include the RSS feeds - for NZBMatrix and Nzbs.org -- Revamped Config System - The configuration backend was overhauled in 0.5. - Many of the config pages have been changed around to make more sense, - you can now easily enable/disable servers, you can turn servers on and off - with schedules and in general all server interaction is much faster than before. - You also only have to restart SABnzbd for major changes to take effect. -- File Association - .nzb files can now be associated with SABnzbd in Windows, - so you can just double click them to load the file into your queue. - You can set this up manually on other operating systems by launching SABnzbd - with arguments containing a path, or multiple paths to local nzb/rar/zip files. -- Password Support - Basic support for password protected rar-files is now in. - It's limited, but it works. -- .TS filejoining - The file joining system now supports merging .TS files. -- New Sorting Options - Date and Custom sorting options have been added, so downloads - with a date can be sorted as such, and further customized sorting options - can be developed by users. -- Email Templates - You can now design custom email templates to report - whatever information you want, including multiple recipients. -- OSX Finder menu - SABnzbd now embeds itself in the Finder menubar to give - you some basic functions. - -The API -- 0.4 introduced our API, 0.5 expands it to cover everything SABnzbd is capable of. - Why does this matter? It means if you know any programming language and - understand how to parse XML/JSON and POST data to an address, - then you can write some application which can communicate with SABnzbd - almost as easily as a template can. - -The Queue & History - -- Per-Item Pause - Now, in addition to being able to pause the whole queue, - you can also pause individual items in the queue. You can also force downloads - to start while the whole queue is paused. -- Temporary Pause - 0.5 also brings the ability to pause the queue temporarily. - So if you just want to pause for 30 minutes while you use your internet connection - for something else, you can. This is nice, as it means you don't have - to remember to go back and unpause SABnzbd. -- Priorities - The queue now has four priorities, Normal, High, Low and force. - Think of this as an easy method to move things around your queue, or to insert - things into specific areas of your queue. One use case is to set everything - to "normal" by default, so it works like 0.4.x. However, you can then add - a new post or RSS feed as high-priority to have it be inserted to the top of the queue, - or add one as low-priority to have it inserted at the bottom of the queue - and keep below normal downloads that are added. Forced items will go straight - to the top of the queue, and will continue to download even if the queue is paused. -- Renaming - You can now rename items in the Queue, SABnzbd will use the new name - as the completed directory name. -- New History Backend - The history is now stored in a database, - so we can handle larger histories better, and store more information about downloads. - It also now survives between having the queue cleared. - -Templates - -- New Default Template - With 0.5, the "smpl" template is now the default. - The old basic template is still there, but is now called "Classic". -- SMPL - Has been reworked to be much faster and friendlier to use. - The default page now shows the top 5 items from the queue and history. - The queue and history are also now paginated to stop loading a massive number of items. -- Plush - Complete backend rewrite to work almost exclusively off the API - [so it's MUCH faster], and a reorganized (and more accessible!) main menu. - The Queue and History also now have pagination built in, so you can have hundreds - of items in both, and only ever have to deal with a manageable number of items on any given page. -- Mobile - Thanks to the new API and the jQTouch Framework, we've got - a brand new mobile theme. It's full featured (save for config options), - and gives you the ability to add new nzbs, reorder existing ones, manage the queue, etc. - "Mobile" replaces the old "iPhone" template. - -Bugfixes: -* Sure! diff --git a/main/SABnzbd.py b/main/SABnzbd.py deleted file mode 100755 index 469d2c3..0000000 --- a/main/SABnzbd.py +++ /dev/null @@ -1,1456 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -import sys -if sys.version_info < (2,4): - print "Sorry, requires Python 2.4 or higher." - sys.exit(1) - -import logging -import logging.handlers -import os -import getopt -import signal -import glob -import socket -import platform -import time - -try: - import Cheetah - if Cheetah.Version[0] != '2': - raise ValueError -except ValueError: - print "Sorry, requires Python module Cheetah 2.0rc7 or higher." - sys.exit(1) -except: - print "The following modules need to be installed: Cheetah, cherrypy(included, unpack the zip), sqlite(if python 2.4)" - sys.exit(1) - -import cherrypy -if not cherrypy.__version__.startswith("3.2"): - print "Sorry, requires Python module Cherrypy 3.2 (use the included version)" - sys.exit(1) - -from cherrypy import _cpserver -from cherrypy import _cpwsgi_server - -try: - from sqlite3 import version as sqlite3_version -except: - try: - from pysqlite2.dbapi2 import version as sqlite3_version - except: - print "Sorry, requires Python module sqlite3 (pysqlite2 in python2.4)" - if os.name != 'nt': - print "Try: apt-get install python-pysqlite2" - sys.exit(1) - -import sabnzbd -import sabnzbd.interface -from sabnzbd.constants import * -import sabnzbd.newsunpack -from sabnzbd.misc import get_user_shellfolders, launch_a_browser, real_path, \ - check_latest_version, panic_tmpl, panic_port, panic_fwall, panic, exit_sab, \ - panic_xport, notify, split_host, convert_version, get_ext, create_https_certificates, \ - windows_variant, ip_extract, set_serv_parms, get_serv_parms -import sabnzbd.scheduler as scheduler -import sabnzbd.config as config -import sabnzbd.cfg -import sabnzbd.downloader as downloader -from sabnzbd.codecs import unicoder -from sabnzbd.lang import T, Ta -from sabnzbd.utils import osx - -from threading import Thread - -LOG_FLAG = False # Global for this module, signalling loglevel change - -_first_log = True -def FORCELOG(txt): - global _first_log - if _first_log: - os.remove('d:/temp/debug.txt') - _first_log = False - ff = open('d:/temp/debug.txt', 'a+') - ff.write(txt) - ff.write('\n') - ff.close() - - -#------------------------------------------------------------------------------ -try: - import win32api - import win32serviceutil, win32evtlogutil, win32event, win32service, pywintypes - win32api.SetConsoleCtrlHandler(sabnzbd.sig_handler, True) -except ImportError: - if sabnzbd.WIN32: - print "Sorry, requires Python module PyWin32." - sys.exit(1) - - -def guard_loglevel(): - """ Callback function for guarding loglevel """ - global LOG_FLAG - LOG_FLAG = True - - -#------------------------------------------------------------------------------ -class FilterCP3: - ### Filter out all CherryPy3-Access logging that we receive, - ### because we have the root logger - def __init__(self): - pass - def filter(self, record): - _cplogging = record.module == '_cplogging' - # Python2.4 fix - # record has no attribute called funcName under python 2.4 - if hasattr(record, 'funcName'): - access = record.funcName == 'access' - else: - access = True - return not (_cplogging and access) - - -class guiHandler(logging.Handler): - """ - Logging handler collects the last warnings/errors/exceptions - to be displayed in the web-gui - """ - def __init__(self, size): - """ - Initializes the handler - """ - logging.Handler.__init__(self) - self.size = size - self.store = [] - - def emit(self, record): - """ - Emit a record by adding it to our private queue - """ - if len(self.store) >= self.size: - # Loose the oldest record - self.store.pop(0) - try: - self.store.append(self.format(record)) - except UnicodeDecodeError: - # Catch elusive Unicode conversion problems - pass - - def clear(self): - self.store = [] - - def count(self): - return len(self.store) - - def last(self): - if self.store: - return self.store[len(self.store)-1] - else: - return "" - - def content(self): - """ - Return an array with last records - """ - return self.store - - -#------------------------------------------------------------------------------ - -def print_help(): - print - print "Usage: %s [-f ] " % sabnzbd.MY_NAME - print - print "Options marked [*] are stored in the config file" - print - print "Options:" - print " -f --config-file Location of config file" - print " -s --server Listen on server:port [*]" - print " -t --templates Template directory [*]" - print " -2 --template2 Secondary template dir [*]" - print - print " -l --logging <0..2> Set logging level (0= least, 2= most) [*]" - print " -w --weblogging <0..2> Set cherrypy logging (0= off, 1= on, 2= file-only) [*]" - print - print " -b --browser <0..1> Auto browser launch (0= off, 1= on) [*]" - if sabnzbd.WIN32: - print " -d --daemon Use when run as a service" - else: - print " -d --daemon Fork daemon process" - print - print " --force Discard web-port timeout (see Wiki!)" - print " -h --help Print this message" - print " -v --version Print version information" - print " -c --clean Remove queue, cache and logs" - print " -p --pause Start in paused mode" - print " --https Port to use for HTTPS server" - -def print_version(): - print """ -%s-%s - -Copyright (C) 2008-2010, The SABnzbd-Team -SABnzbd comes with ABSOLUTELY NO WARRANTY. -This is free software, and you are welcome to redistribute it -under certain conditions. It is licensed under the -GNU GENERAL PUBLIC LICENSE Version 2 or (at your option) any later version. - -""" % (sabnzbd.MY_NAME, sabnzbd.__version__) - - -#------------------------------------------------------------------------------ -def daemonize(): - try: - pid = os.fork() - if pid > 0: - sys.exit(0) - except OSError: - print "fork() failed" - sys.exit(1) - - os.chdir(sabnzbd.DIR_PROG) - os.setsid() - # Make sure I can read my own files and shut out others - prev= os.umask(0) - os.umask(prev and int('077',8)) - - try: - pid = os.fork() - if pid > 0: - sys.exit(0) - except OSError: - print "fork() failed" - sys.exit(1) - - dev_null = file('/dev/null', 'r') - os.dup2(dev_null.fileno(), sys.stdin.fileno()) - -#------------------------------------------------------------------------------ -def Bail_Out(browserhost, cherryport, access=False): - """Abort program because of CherryPy troubles - """ - logging.error(Ta('error-noWebUi')) - if access: - panic_xport(browserhost, cherryport) - else: - panic_port(browserhost, cherryport) - sabnzbd.halt() - exit_sab(2) - -#------------------------------------------------------------------------------ -def Web_Template(key, defweb, wdir): - """ Determine a correct web template set, - return full template path - """ - if wdir is None: - try: - wdir = fix_webname(key()) - except: - wdir = '' - if not wdir: - wdir = defweb - key.set(wdir) - if not wdir: - # No default value defined, accept empty path - return '' - - full_dir = real_path(sabnzbd.DIR_INTERFACES, wdir) - full_main = real_path(full_dir, DEF_MAIN_TMPL) - logging.info("Web dir is %s", full_dir) - - if not os.path.exists(full_main): - logging.warning(Ta('warn-noSkin@1'), full_main) - full_dir = real_path(sabnzbd.DIR_INTERFACES, DEF_STDINTF) - full_main = real_path(full_dir, DEF_MAIN_TMPL) - if not os.path.exists(full_main): - logging.exception('Cannot find standard template: %s', full_dir) - panic_tmpl(full_dir) - exit_sab(1) - - sabnzbd.lang.install_language(real_path(full_dir, DEF_INT_LANGUAGE), sabnzbd.cfg.language(), wdir) - - return real_path(full_dir, "templates") - - -#------------------------------------------------------------------------------ -def CheckColor(color, web_dir): - """ Check existence of color-scheme """ - if color and os.path.exists(os.path.join(web_dir,'static/stylesheets/colorschemes/'+color+'.css')): - return color - else: - return '' - -#------------------------------------------------------------------------------ -def fix_webname(name): - if name: - xname = name.title() - else: - xname = '' - if xname in ('Default',): - return 'Classic' - elif xname in ('Classic', 'Plush', 'Mobile'): - return xname - elif xname in ('Smpl', 'Wizard'): - return name.lower() - else: - return name - -#------------------------------------------------------------------------------ -def GetProfileInfo(vista_plus): - """ Get the default data locations - """ - ok = False - if sabnzbd.DAEMON: - # In daemon mode, do not try to access the user profile - # just assume that everything defaults to the program dir - sabnzbd.DIR_APPDATA = sabnzbd.DIR_PROG - sabnzbd.DIR_LCLDATA = sabnzbd.DIR_PROG - sabnzbd.DIR_HOME = sabnzbd.DIR_PROG - if sabnzbd.WIN32: - # Ignore Win32 "logoff" signal - # This should work, but it doesn't - # Instead the signal_handler will ignore the "logoff" signal - #signal.signal(5, signal.SIG_IGN) - pass - ok = True - elif sabnzbd.WIN32: - specials = get_user_shellfolders() - try: - sabnzbd.DIR_APPDATA = '%s\\%s' % (specials['AppData'], DEF_WORKDIR) - sabnzbd.DIR_LCLDATA = '%s\\%s' % (specials['Local AppData'], DEF_WORKDIR) - sabnzbd.DIR_HOME = specials['Personal'] - ok = True - except: - try: - if vista_plus: - root = os.environ['AppData'] - user = os.environ['USERPROFILE'] - sabnzbd.DIR_APPDATA = '%s\\%s' % (root.replace('\\Roaming', '\\Local'), DEF_WORKDIR) - sabnzbd.DIR_HOME = '%s\\Documents' % user - else: - root = os.environ['USERPROFILE'] - sabnzbd.DIR_APPDATA = '%s\\%s' % (root, DEF_WORKDIR) - sabnzbd.DIR_HOME = root - - try: - # Conversion to 8bit ASCII required for CherryPy - sabnzbd.DIR_APPDATA = sabnzbd.DIR_APPDATA.encode('latin-1') - sabnzbd.DIR_HOME = sabnzbd.DIR_HOME.encode('latin-1') - ok = True - except: - # If unconvertible characters exist, use MSDOS name - try: - sabnzbd.DIR_APPDATA = win32api.GetShortPathName(sabnzbd.DIR_APPDATA) - sabnzbd.DIR_HOME = win32api.GetShortPathName(sabnzbd.DIR_HOME) - ok = True - except: - pass - sabnzbd.DIR_LCLDATA = sabnzbd.DIR_APPDATA - except: - pass - - elif sabnzbd.DARWIN: - sabnzbd.DIR_APPDATA = '%s/Library/Application Support/SABnzbd' % (os.environ['HOME']) - sabnzbd.DIR_LCLDATA = sabnzbd.DIR_APPDATA - sabnzbd.DIR_HOME = os.environ['HOME'] - ok = True - - else: - # Unix/Linux - sabnzbd.DIR_APPDATA = '%s/.%s' % (os.environ['HOME'], DEF_WORKDIR) - sabnzbd.DIR_LCLDATA = sabnzbd.DIR_APPDATA - sabnzbd.DIR_HOME = os.environ['HOME'] - ok = True - - if not ok: - panic("Cannot access the user profile.", - "Please start with sabnzbd.ini file in another location") - exit_sab(2) - - -#------------------------------------------------------------------------------ -def print_modules(): - """ Log all detected optional or external modules - """ - if sabnzbd.decoder.HAVE_YENC: - logging.info("_yenc module... found!") - else: - if hasattr(sys, "frozen"): - logging.error(Ta('error-noYEnc')) - else: - logging.info("_yenc module... NOT found!") - - if sabnzbd.newsunpack.PAR2_COMMAND: - logging.info("par2 binary... found (%s)", sabnzbd.newsunpack.PAR2_COMMAND) - else: - logging.error(Ta('error-noPar2')) - - if sabnzbd.newsunpack.PAR2C_COMMAND: - logging.info("par2-classic binary... found (%s)", sabnzbd.newsunpack.PAR2C_COMMAND) - - if sabnzbd.newsunpack.RAR_COMMAND: - logging.info("unrar binary... found (%s)", sabnzbd.newsunpack.RAR_COMMAND) - else: - logging.warning(Ta('warn-noUnrar')) - - if sabnzbd.newsunpack.ZIP_COMMAND: - logging.info("unzip binary... found (%s)", sabnzbd.newsunpack.ZIP_COMMAND) - else: - logging.warning(Ta('warn-noUnzip')) - - if not sabnzbd.WIN32: - if sabnzbd.newsunpack.NICE_COMMAND: - logging.info("nice binary... found (%s)", sabnzbd.newsunpack.NICE_COMMAND) - else: - logging.info("nice binary... NOT found!") - if sabnzbd.newsunpack.IONICE_COMMAND: - logging.info("ionice binary... found (%s)", sabnzbd.newsunpack.IONICE_COMMAND) - else: - logging.info("ionice binary... NOT found!") - - if sabnzbd.newswrapper.HAVE_SSL: - logging.info("pyOpenSSL... found (%s)", sabnzbd.newswrapper.HAVE_SSL) - else: - logging.info("pyOpenSSL... NOT found - try apt-get install python-pyopenssl (SSL is optional)") - - -#------------------------------------------------------------------------------ -def get_webhost(cherryhost, cherryport, https_port): - """ Determine the webhost address and port, - return (host, port, browserhost) - """ - if cherryhost is None: - cherryhost = sabnzbd.cfg.cherryhost() - else: - sabnzbd.cfg.cherryhost.set(cherryhost) - - # Get IP address, but discard APIPA/IPV6 - # If only APIPA's or IPV6 are found, fall back to localhost - ipv4 = ipv6 = False - localhost = hostip = 'localhost' - try: - info = socket.getaddrinfo(socket.gethostname(), None) - except: - # Hostname does not resolve, use 0.0.0.0 - cherryhost = '0.0.0.0' - info = socket.getaddrinfo(localhost, None) - for item in info: - ip = str(item[4][0]) - if ip.startswith('169.254.'): - pass # Is an APIPA - elif ':' in ip: - ipv6 = True - elif '.' in ip and not ipv4: - ipv4 = True - hostip = ip - - # A blank host will use the local ip address - if cherryhost == '': - if ipv6 and ipv4: - # To protect Firefox users, use numeric IP - cherryhost = hostip - browserhost = hostip - else: - cherryhost = socket.gethostname() - browserhost = cherryhost - - # 0.0.0.0 will listen on all ipv4 interfaces (no ipv6 addresses) - elif cherryhost == '0.0.0.0': - # Just take the gamble for this - cherryhost = '0.0.0.0' - browserhost = localhost - - # :: will listen on all ipv6 interfaces (no ipv4 addresses) - elif cherryhost in ('::','[::]'): - cherryhost = cherryhost.strip('[').strip(']') - # Assume '::1' == 'localhost' - browserhost = localhost - - # IPV6 address - elif '[' in cherryhost or ':' in cherryhost: - browserhost = cherryhost - - # IPV6 numeric address - elif cherryhost.replace('.', '').isdigit(): - # IPV4 numerical - browserhost = cherryhost - - elif cherryhost == localhost: - cherryhost = localhost - browserhost = localhost - - else: - # If on Vista and/or APIPA, use numerical IP, to help FireFoxers - if ipv6 and ipv4: - cherryhost = hostip - browserhost = cherryhost - - # Some systems don't like brackets in numerical ipv6 - if '[' in cherryhost: - try: - info = socket.getaddrinfo(cherryhost, None) - except: - cherryhost = cherryhost.strip('[]') - - if ipv6 and ipv4 and \ - (browserhost not in ('localhost', '127.0.0.1', '[::1]', '::1')): - sabnzbd.AMBI_LOCALHOST = True - logging.info("IPV6 has priority on this system, potential Firefox issue") - - if ipv6 and ipv4 and cherryhost == '' and sabnzbd.WIN32: - logging.warning(Ta('warn-0000')) - - if cherryhost == 'localhost' and not sabnzbd.WIN32 and not sabnzbd.DARWIN: - # On the Ubuntu family, localhost leads to problems for CherryPy - ips = ip_extract() - if '127.0.0.1' in ips and '::1' in ips: - cherryhost = '127.0.0.1' - if ips[0] != '127.0.0.1': - browserhost = '127.0.0.1' - - if cherryport is None: - cherryport = sabnzbd.cfg.cherryport.get_int() - else: - sabnzbd.cfg.cherryport.set(str(cherryport)) - - if https_port is None: - https_port = sabnzbd.cfg.https_port.get_int() - else: - sabnzbd.cfg.https_port.set(str(https_port)) - # if the https port was specified, assume they want HTTPS enabling also - sabnzbd.cfg.enable_https.set(True) - - if cherryport == https_port: - sabnzbd.cfg.enable_https.set(False) - logging.error(Ta('error-sameHTTP-HTTPS')) - - return cherryhost, cherryport, browserhost, https_port - -def is_sabnzbd_running(url): - import urllib2 - try: - url = '%sapi?mode=version' % (url) - s = urllib2.urlopen(url) - ver = s.read() - if ver and ver.strip() == sabnzbd.__version__: - return True - else: - return False - except: - return False - -def find_free_port(host, currentport, i=0): - while i >=10 and currentport <= 49151: - try: - cherrypy.process.servers.check_port(host, currentport) - return currentport - except: - currentport+=5 - i+=1 - return -1 - -def check_for_sabnzbd(url, upload_nzbs): - # Check for a running instance of sabnzbd(same version) on this port - if is_sabnzbd_running(url): - # Upload any specified nzb files to the running instance - if upload_nzbs: - from sabnzbd.utils.upload import upload_file - for f in upload_nzbs: - upload_file(url, f) - else: - # Launch the web browser and quit since sabnzbd is already running - launch_a_browser(url, force=True) - exit_sab(0) - return True - return False - -def copy_old_files(newpath): - # OSX only: - # If no INI file found but old one exists, copy it - # When copying the INI, also copy rss, bookmarks and watched-data - if not os.path.exists(os.path.join(newpath, DEF_INI_FILE)): - if not os.path.exists(newpath): - os.mkdir(newpath) - oldpath = os.environ['HOME'] + "/.sabnzbd" - oldini = os.path.join(oldpath, DEF_INI_FILE) - if os.path.exists(oldini): - import shutil - try: - shutil.copy(oldini, newpath) - except: - pass - oldpath = os.path.join(oldpath, DEF_CACHE_DIR) - newpath = os.path.join(newpath, DEF_CACHE_DIR) - if not os.path.exists(newpath): - os.mkdir(newpath) - try: - shutil.copy(os.path.join(oldpath, RSS_FILE_NAME), newpath) - except: - pass - try: - shutil.copy(os.path.join(oldpath, BOOKMARK_FILE_NAME), newpath) - except: - pass - try: - shutil.copy(os.path.join(oldpath, SCAN_FILE_NAME), newpath) - except: - pass - - -def evaluate_inipath(path): - # Derive INI file path from a partial path. - # Full file path: if file does not exist the name must contain a dot - # but not a leading dot. - # A foldername is enough, the standard name will be appended. - - path = os.path.normpath(os.path.abspath(path)) - inipath = os.path.join(path, DEF_INI_FILE) - if os.path.isdir(path): - return inipath - elif os.path.isfile(path): - return path - else: - dir, name = os.path.split(path) - if name.find('.') < 1: - return inipath - else: - return path - - -def cherrypy_logging(log_path): - log = cherrypy.log - log.access_file = '' - log.error_file = '' - # Max size of 512KB - maxBytes = getattr(log, "rot_maxBytes", 524288) - # cherrypy.log cherrypy.log.1 cherrypy.log.2 - backupCount = getattr(log, "rot_backupCount", 3) - - # Make a new RotatingFileHandler for the error log. - fname = getattr(log, "rot_error_file", log_path) - h = logging.handlers.RotatingFileHandler(fname, 'a', maxBytes, backupCount) - h.setLevel(logging.DEBUG) - h.setFormatter(cherrypy._cplogging.logfmt) - log.error_log.addHandler(h) - - -#------------------------------------------------------------------------------ -def commandline_handler(frozen=True): - """ Split win32-service commands are true parameters - Returns: - service, sab_opts, serv_opts, upload_nzbs - """ - service = '' - sab_opts = [] - serv_inst = False - serv_opts = [os.path.normpath(os.path.abspath(sys.argv[0]))] - upload_nzbs = [] - - # Ugly hack to remove the extra "SABnzbd*" parameter the Windows binary - # gets when it's restarted - if len(sys.argv) > 1 and \ - 'sabnzbd' in sys.argv[1].lower() and \ - not sys.argv[1].startswith('-'): - slice = 2 - else: - slice = 1 - - # Prepend options from env-variable to options - info = os.environ.get('SABnzbd', '').split() - info.extend(sys.argv[slice:]) - - try: - opts, args = getopt.getopt(info, "phdvncw:l:s:f:t:b:2:", - ['pause', 'help', 'daemon', 'nobrowser', 'clean', 'logging=', - 'weblogging=', 'server=', 'templates', - 'template2', 'browser=', 'config-file=', 'delay=', 'force', - 'version', 'https=', 'autorestarted', - # Below Win32 Service options - 'password=', 'username=', 'startup=', 'perfmonini=', 'perfmondll=', - 'interactive', 'wait=', - ]) - except getopt.GetoptError: - print_help() - exit_sab(2) - - # Check for Win32 service commands - if args and args[0] in ('install', 'update', 'remove', 'start', 'stop', 'restart', 'debug'): - service = args[0] - serv_opts.extend(args) - - if not service: - # Get and remove any NZB file names - for entry in args: - if get_ext(entry) in ('.nzb', '.zip','.rar', '.nzb.gz'): - upload_nzbs.append(entry) - - for opt, arg in opts: - if opt in ('password','username','startup','perfmonini', 'perfmondll', 'interactive', 'wait'): - # Service option, just collect - if service: - serv_opts.append(opt) - if arg: - serv_opts.append(arg) - else: - if opt == '-f': - arg = os.path.normpath(os.path.abspath(arg)) - sab_opts.append((opt, arg)) - - return service, sab_opts, serv_opts, upload_nzbs - - -def get_f_option(opts): - """ Return value of the -f option """ - for opt, arg in opts: - if opt == '-f': - return arg - else: - return None - - -#------------------------------------------------------------------------------ -def main(): - global LOG_FLAG - - autobrowser = None - autorestarted = False - sabnzbd.MY_FULLNAME = sys.argv[0] - fork = False - pause = False - inifile = None - cherryhost = None - cherryport = None - https_port = None - cherrypylogging = None - clean_up = False - logging_level = None - web_dir = None - web_dir2 = None - delay = 0.0 - vista_plus = False - vista64 = False - force_web = False - re_argv = [sys.argv[0]] - - service, sab_opts, serv_opts, upload_nzbs = commandline_handler() - - for opt, arg in sab_opts: - if opt == '--servicecall': - sabnzbd.MY_FULLNAME = arg - elif opt in ('-d', '--daemon'): - if not sabnzbd.WIN32: - fork = True - autobrowser = False - sabnzbd.DAEMON = True - consoleLogging = False - re_argv.append(opt) - elif opt in ('-f', '--config-file'): - inifile = arg - re_argv.append(opt) - re_argv.append(arg) - elif opt in ('-h', '--help'): - print_help() - exit_sab(0) - elif opt in ('-t', '--templates'): - web_dir = arg - elif opt in ('-2', '--template2'): - web_dir2 = arg - elif opt in ('-s', '--server'): - (cherryhost, cherryport) = split_host(arg) - elif opt in ('-n', '--nobrowser'): - autobrowser = False - elif opt in ('-b', '--browser'): - try: - autobrowser = bool(int(arg)) - except: - autobrowser = True - elif opt in ('--autorestarted'): - autorestarted = True - elif opt in ('-c', '--clean'): - clean_up = True - elif opt in ('-w', '--weblogging'): - try: - cherrypylogging = int(arg) - except: - cherrypylogging = -1 - if cherrypylogging < 0 or cherrypylogging > 2: - print_help() - exit_sab(1) - elif opt in ('-l', '--logging'): - try: - logging_level = int(arg) - except: - logging_level = -1 - if logging_level < 0 or logging_level > 2: - print_help() - exit_sab(1) - elif opt in ('-v', '--version'): - print_version() - exit_sab(0) - elif opt in ('-p', '--pause'): - pause = True - elif opt in ('--delay',): - # For debugging of memory leak only!! - try: - delay = float(arg) - except: - pass - elif opt in ('--force',): - force_web = True - re_argv.append(opt) - elif opt in ('--https',): - https_port = int(arg) - re_argv.append(opt) - re_argv.append(arg) - - sabnzbd.MY_FULLNAME = os.path.normpath(os.path.abspath(sabnzbd.MY_FULLNAME)) - sabnzbd.MY_NAME = os.path.basename(sabnzbd.MY_FULLNAME) - sabnzbd.DIR_PROG = os.path.dirname(sabnzbd.MY_FULLNAME) - sabnzbd.DIR_INTERFACES = real_path(sabnzbd.DIR_PROG, DEF_INTERFACES) - sabnzbd.DIR_LANGUAGE = real_path(sabnzbd.DIR_PROG, DEF_LANGUAGE) - org_dir = os.getcwd() - - if getattr(sys, 'frozen', None) == 'macosx_app': - # Correct path if frozen with py2app (OSX) - sabnzbd.MY_FULLNAME = sabnzbd.MY_FULLNAME.replace("/Resources/SABnzbd.py","/MacOS/SABnzbd") - - # Need console logging for SABnzbd.py and SABnzbd-console.exe - consoleLogging = (not hasattr(sys, "frozen")) or (sabnzbd.MY_NAME.lower().find('-console') > 0) - - # No console logging needed for OSX app - noConsoleLoggingOSX = (sabnzbd.DIR_PROG.find('.app/Contents/Resources') > 0) - if noConsoleLoggingOSX: - consoleLogging = 1 - - LOGLEVELS = (logging.WARNING, logging.INFO, logging.DEBUG) - - # Setup primary logging to prevent default console logging - gui_log = guiHandler(MAX_WARNINGS) - gui_log.setLevel(logging.WARNING) - format_gui = '%(asctime)s\n%(levelname)s\n%(message)s' - gui_log.setFormatter(logging.Formatter(format_gui)) - sabnzbd.GUIHANDLER = gui_log - - # Create logger - logger = logging.getLogger('') - logger.setLevel(logging.WARNING) - logger.addHandler(gui_log) - - # Detect Windows variant - if sabnzbd.WIN32: - vista_plus, vista64 = windows_variant() - - if inifile: - # INI file given, simplest case - inifile = evaluate_inipath(inifile) - else: - # No ini file given, need profile data - GetProfileInfo(vista_plus) - # Find out where INI file is - inifile = os.path.abspath(sabnzbd.DIR_PROG + '/' + DEF_INI_FILE) - if not os.path.exists(inifile): - inifile = os.path.abspath(sabnzbd.DIR_LCLDATA + '/' + DEF_INI_FILE) - if sabnzbd.DARWIN: - copy_old_files(sabnzbd.DIR_LCLDATA) - - # If INI file at non-std location, then use program dir as $HOME - if sabnzbd.DIR_LCLDATA != os.path.dirname(inifile): - sabnzbd.DIR_HOME = os.path.dirname(inifile) - - # All system data dirs are relative to the place we found the INI file - sabnzbd.DIR_LCLDATA = os.path.dirname(inifile) - - if not os.path.exists(inifile) and not os.path.exists(sabnzbd.DIR_LCLDATA): - try: - os.makedirs(sabnzbd.DIR_LCLDATA) - except IOError: - panic('Cannot create folder "%s".' % sabnzbd.DIR_LCLDATA, 'Check specified INI file location.') - exit_sab(1) - - sabnzbd.cfg.set_root_folders(sabnzbd.DIR_HOME, sabnzbd.DIR_LCLDATA, sabnzbd.DIR_PROG, sabnzbd.DIR_INTERFACES) - - res, msg = config.read_config(inifile) - if not res: - panic(msg, 'Specify a correct file or delete this file.') - exit_sab(1) - - # Set root folders for HTTPS server file paths - sabnzbd.cfg.set_root_folders2() - - # Determine web host address - cherryhost, cherryport, browserhost, https_port = get_webhost(cherryhost, cherryport, https_port) - enable_https = sabnzbd.cfg.enable_https() - - # When this is a daemon, just check and bail out if port in use - if sabnzbd.DAEMON: - if enable_https and https_port: - try: - cherrypy.process.servers.check_port(cherryhost, https_port) - except IOError, error: - Bail_Out(browserhost, cherryport) - try: - cherrypy.process.servers.check_port(cherryhost, cherryport) - except IOError, error: - Bail_Out(browserhost, cherryport) - - # If an instance of sabnzbd(same version) is already running on this port, launch the browser - # If another program or sabnzbd version is on this port, try 10 other ports going up in a step of 5 - # If 'Port is not bound' (firewall) do not do anything (let the script further down deal with that). - ## SSL - if enable_https and https_port: - try: - cherrypy.process.servers.check_port(browserhost, https_port) - except IOError, error: - if str(error) == 'Port not bound.': - pass - else: - url = 'https://%s:%s/' % (browserhost, https_port) - if not check_for_sabnzbd(url, upload_nzbs): - port = find_free_port(browserhost, https_port) - if port > 0: - sabnzbd.cfg.https_port.set(port) - cherryport = port - ## NonSSL - try: - cherrypy.process.servers.check_port(browserhost, cherryport) - except IOError, error: - if str(error) == 'Port not bound.': - pass - else: - url = 'http://%s:%s/' % (browserhost, cherryport) - if not check_for_sabnzbd(url, upload_nzbs): - port = find_free_port(browserhost, cherryport) - if port > 0: - sabnzbd.cfg.cherryport.set(port) - cherryport = port - - - if cherrypylogging is None: - cherrypylogging = sabnzbd.cfg.log_web() - else: - sabnzbd.cfg.log_web.set(cherrypylogging) - - if logging_level is None: - logging_level = sabnzbd.cfg.log_level() - else: - sabnzbd.cfg.log_level.set(logging_level) - - logdir = sabnzbd.cfg.log_dir.get_path() - if fork and not logdir: - print "Error:" - print "I refuse to fork without a log directory!" - sys.exit(1) - - if clean_up: - xlist= glob.glob(logdir + '/*') - for x in xlist: - if RSS_FILE_NAME not in x: - os.remove(x) - - try: - sabnzbd.LOGFILE = os.path.join(logdir, DEF_LOG_FILE) - logsize = sabnzbd.cfg.log_size.get_int() - rollover_log = logging.handlers.RotatingFileHandler(\ - sabnzbd.LOGFILE, 'a+', - logsize, - sabnzbd.cfg.log_backups()) - - format = '%(asctime)s::%(levelname)s::[%(module)s:%(lineno)d] %(message)s' - rollover_log.setFormatter(logging.Formatter(format)) - rollover_log.addFilter(FilterCP3()) - sabnzbd.LOGHANDLER = rollover_log - logger.addHandler(rollover_log) - logger.setLevel(LOGLEVELS[logging_level]) - - except IOError: - print "Error:" - print "Can't write to logfile" - exit_sab(2) - - if fork: - try: - x= sys.stderr.fileno - x= sys.stdout.fileno - ol_path = os.path.join(logdir, DEF_LOG_ERRFILE) - out_log = file(ol_path, 'a+', 0) - sys.stderr.flush() - sys.stdout.flush() - os.dup2(out_log.fileno(), sys.stderr.fileno()) - os.dup2(out_log.fileno(), sys.stdout.fileno()) - except AttributeError: - pass - - else: - try: - x= sys.stderr.fileno - x= sys.stdout.fileno - - if consoleLogging: - console = logging.StreamHandler() - console.addFilter(FilterCP3()) - console.setLevel(LOGLEVELS[logging_level]) - console.setFormatter(logging.Formatter(format)) - logger.addHandler(console) - if noConsoleLoggingOSX: - logging.info('Console logging for OSX App disabled') - so = file('/dev/null', 'a+') - os.dup2(so.fileno(), sys.stdout.fileno()) - os.dup2(so.fileno(), sys.stderr.fileno()) - except AttributeError: - pass - - logging.info('--------------------------------') - logging.info('%s-%s (rev=%s)', sabnzbd.MY_NAME, sabnzbd.__version__, sabnzbd.__baseline__) - if sabnzbd.WIN32: - suffix = '' - if vista_plus: - suffix = ' (=Vista+)' - if vista64: - suffix = ' (=Vista+ x64)' - sabnzbd.WIN64 = True - logging.info('Platform=%s%s Class=%s', platform.platform(), suffix, os.name) - else: - logging.info('Platform = %s', os.name) - logging.info('Python-version = %s', sys.version) - - # OSX 10.5 I/O priority setting - if sabnzbd.DARWIN: - logging.info('[osx] IO priority setting') - try: - from ctypes import cdll - libc=cdll.LoadLibrary('/usr/lib/libc.dylib') - boolSetResult=libc.setiopolicy_np(0,1,3) - logging.info('[osx] IO priority set to throttle for process scope') - except: - logging.info('[osx] IO priority setting not supported') - - if autobrowser != None: - sabnzbd.cfg.autobrowser.set(autobrowser) - else: - autobrowser = sabnzbd.cfg.autobrowser() - - sabnzbd.cfg.debug_delay.set(delay) - - # Find external programs - sabnzbd.newsunpack.find_programs(sabnzbd.DIR_PROG) - - if not sabnzbd.WIN_SERVICE: - signal.signal(signal.SIGINT, sabnzbd.sig_handler) - signal.signal(signal.SIGTERM, sabnzbd.sig_handler) - - init_ok = sabnzbd.initialize(pause, clean_up, evalSched=True) - - if not init_ok: - logging.error('Initializing %s-%s failed, aborting', - sabnzbd.MY_NAME, sabnzbd.__version__) - exit_sab(2) - - os.chdir(sabnzbd.DIR_PROG) - - web_dir = Web_Template(sabnzbd.cfg.web_dir, DEF_STDINTF, fix_webname(web_dir)) - web_dir2 = Web_Template(sabnzbd.cfg.web_dir2, '', fix_webname(web_dir2)) - - wizard_dir = os.path.join(sabnzbd.DIR_INTERFACES, 'wizard') - sabnzbd.lang.install_language(os.path.join(wizard_dir, DEF_INT_LANGUAGE), sabnzbd.cfg.language(), 'wizard') - - sabnzbd.WEB_DIR = web_dir - sabnzbd.WEB_DIR2 = web_dir2 - sabnzbd.WIZARD_DIR = wizard_dir - - sabnzbd.WEB_COLOR = CheckColor(sabnzbd.cfg.web_color(), web_dir) - sabnzbd.cfg.web_color.set(sabnzbd.WEB_COLOR) - sabnzbd.WEB_COLOR2 = CheckColor(sabnzbd.cfg.web_color2(), web_dir2) - sabnzbd.cfg.web_color2.set(sabnzbd.WEB_COLOR2) - - if fork and not sabnzbd.WIN32: - daemonize() - - # Save the INI file - config.save_config(force=True) - - logging.info('Starting %s-%s', sabnzbd.MY_NAME, sabnzbd.__version__) - try: - sabnzbd.start() - except: - logging.exception("Failed to start %s-%s", sabnzbd.MY_NAME, sabnzbd.__version__) - sabnzbd.halt() - - print_modules() - - # Upload any nzb/zip/rar/nzb.gz files from file association - if upload_nzbs: - from sabnzbd.utils.upload import add_local - for f in upload_nzbs: - add_local(f) - - cherrylogtoscreen = False - sabnzbd.WEBLOGFILE = None - - if cherrypylogging: - if logdir: - sabnzbd.WEBLOGFILE = os.path.join(logdir, DEF_LOG_CHERRY) - # Define our custom logger for cherrypy errors - cherrypy_logging(sabnzbd.WEBLOGFILE) - if not fork: - try: - x= sys.stderr.fileno - x= sys.stdout.fileno - if cherrypylogging == 1: - cherrylogtoscreen = True - except: - pass - - cherrypy.config.update({'server.environment': 'production', - 'server.socket_host': cherryhost, - 'server.socket_port': cherryport, - 'log.screen': cherrylogtoscreen, - 'engine.autoreload_frequency' : 100, - 'engine.autoreload_on' : False, - 'engine.reexec_retry' : 100, - 'tools.encode.on' : True, - 'tools.gzip.on' : True, - 'tools.sessions.on' : True, - 'request.show_tracebacks': True, - 'checker.check_localhost' : bool(consoleLogging), - 'error_page.401': sabnzbd.misc.error_page_401 - }) - - https_cert = sabnzbd.cfg.https_cert.get_path() - https_key = sabnzbd.cfg.https_key.get_path() - if enable_https: - # If either the HTTPS certificate or key do not exist, make some self-signed ones. - if not (https_cert and os.path.exists(https_cert)) or not (https_key and os.path.exists(https_key)): - create_https_certificates(https_cert, https_key) - - if https_port and not (os.path.exists(https_cert) or os.path.exists(https_key)): - logging.warning(Ta('warn-noCertKey')) - https_port = False - - if https_port: - secure_server = _cpwsgi_server.CPWSGIServer() - secure_server.bind_addr = (cherryhost, https_port) - secure_server.ssl_certificate = https_cert - secure_server.ssl_private_key = https_key - adapter = _cpserver.ServerAdapter(cherrypy.engine, secure_server, secure_server.bind_addr) - adapter.subscribe() - - static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir, 'static')} - wizard_static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(wizard_dir, 'static')} - - appconfig = {'/sabnzbd/api' : {'tools.basic_auth.on' : False}, - '/api' : {'tools.basic_auth.on' : False}, - '/m/api' : {'tools.basic_auth.on' : False}, - '/rss' : {'tools.basic_auth.on' : False}, - '/sabnzbd/rss' : {'tools.basic_auth.on' : False}, - '/m/rss' : {'tools.basic_auth.on' : False}, - '/sabnzbd/shutdown': {'streamResponse': True}, - '/sabnzbd/static': static, - '/static': static, - '/sabnzbd/wizard/static': wizard_static, - '/wizard/static': wizard_static - } - - if web_dir2: - static2 = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir2, 'static')} - appconfig['/sabnzbd/m/api'] = {'tools.basic_auth.on' : False} - appconfig['/sabnzbd/m/rss'] = {'tools.basic_auth.on' : False} - appconfig['/sabnzbd/m/shutdown'] = {'streamResponse': True} - appconfig['/sabnzbd/m/static'] = static2 - appconfig['/m/static'] = static2 - appconfig['/sabnzbd/m/wizard/static'] = wizard_static - appconfig['/m/wizard/static'] = wizard_static - - login_page = sabnzbd.interface.MainPage(web_dir, '/', web_dir2, '/m/', first=2) - cherrypy.tree.mount(login_page, '/', config=appconfig) - - # Set authentication for CherryPy - sabnzbd.interface.set_auth(cherrypy.config) - - logging.info('Starting web-interface on %s:%s', cherryhost, cherryport) - - sabnzbd.cfg.log_level.callback(guard_loglevel) - - try: - # Use internal cherrypy check first to prevent ugly tracebacks - cherrypy.process.servers.check_port(browserhost, cherryport) - cherrypy.engine.start() - except IOError, error: - if str(error) == 'Port not bound.': - if not force_web: - panic_fwall(vista_plus) - sabnzbd.halt() - exit_sab(2) - else: - logging.debug("Failed to start web-interface: ", exc_info = True) - Bail_Out(browserhost, cherryport) - except socket.error, error: - logging.debug("Failed to start web-interface: ", exc_info = True) - Bail_Out(browserhost, cherryport, access=True) - except: - logging.debug("Failed to start web-interface: ", exc_info = True) - Bail_Out(browserhost, cherryport) - - # Wait for server to become ready - cherrypy.engine.wait(cherrypy.process.wspbus.states.STARTED) - - if not autorestarted: - if enable_https and https_port: - launch_a_browser("https://%s:%s/sabnzbd" % (browserhost, https_port)) - else: - launch_a_browser("http://%s:%s/sabnzbd" % (browserhost, cherryport)) - - notify("SAB_Launched", None) - osx.sendGrowlMsg('SABnzbd %s' % (sabnzbd.__version__),"http://%s:%s/sabnzbd" % (browserhost, cherryport),osx.NOTIFICATION['startup']) - # Now's the time to check for a new version - check_latest_version() - autorestarted = False - - # Have to keep this running, otherwise logging will terminate - timer = 0 - while not sabnzbd.SABSTOP: - if sabnzbd.WIN_SERVICE: - rc = win32event.WaitForMultipleObjects((sabnzbd.WIN_SERVICE.hWaitStop, - sabnzbd.WIN_SERVICE.overlapped.hEvent), 0, 3000) - if rc == win32event.WAIT_OBJECT_0: - sabnzbd.save_state() - logging.info('Leaving SABnzbd') - sabnzbd.SABSTOP = True - return - else: - time.sleep(3) - - # Check for loglevel changes - if LOG_FLAG: - LOG_FLAG = False - level = LOGLEVELS[sabnzbd.cfg.log_level()] - logger.setLevel(level) - if consoleLogging: - console.setLevel(level) - - ### 30 sec polling tasks - if timer > 9: - timer = 0 - # Keep Windows awake (if needed) - sabnzbd.keep_awake() - # Restart scheduler (if needed) - scheduler.restart() - # Save config (if needed) - config.save_config() - # Check the threads - if not sabnzbd.check_all_tasks(): - autorestarted = True - cherrypy.engine.execv = True - else: - timer += 1 - - ### 3 sec polling tasks - # Check for auto-restart request - if cherrypy.engine.execv: - scheduler.stop() - sabnzbd.halt() - cherrypy.engine.exit() - sabnzbd.SABSTOP = True - if downloader.paused(): - re_argv.append('-p') - if autorestarted: - re_argv.append('--autorestarted') - sys.argv = re_argv - os.chdir(org_dir) - if sabnzbd.DARWIN: - args = sys.argv[:] - args.insert(0, sys.executable) - #TO FIX : when executing from sources on osx, after a restart, process is detached from console - #If OSX frozen restart of app instead of embedded python - if getattr(sys, 'frozen', None) == 'macosx_app': - #[[NSProcessInfo processInfo] processIdentifier]] - #logging.info("%s" % (NSProcessInfo.processInfo().processIdentifier())) - logging.info(os.getpid()) - os.system('kill -9 %s && open "%s"' % (os.getpid(),sabnzbd.MY_FULLNAME.replace("/Contents/MacOS/SABnzbd","")) ) - else: - pid = os.fork() - if pid == 0: - os.execv(sys.executable, args) - elif sabnzbd.WIN_SERVICE: - # Hope for the service manager to restart us - sys.exit(1) - else: - cherrypy.engine._do_execv() - - config.save_config() - - notify("SAB_Shutdown", None) - osx.sendGrowlMsg('SABnzbd',T('grwl-shutdown-end-msg'),osx.NOTIFICATION['startup']) - logging.info('Leaving SABnzbd') - sys.stderr.flush() - sys.stdout.flush() - if getattr(sys, 'frozen', None) == 'macosx_app': - AppHelper.stopEventLoop() - else: - os._exit(0) - - - -##################################################################### -# -# Windows Service Support -# -if sabnzbd.WIN32: - import servicemanager - class SABnzbd(win32serviceutil.ServiceFramework): - """ Win32 Service Handler """ - - _svc_name_ = 'SABnzbd' - _svc_display_name_ = 'SABnzbd Binary Newsreader' - _svc_deps_ = ["EventLog", "Tcpip"] - _svc_description_ = 'Automated downloading from Usenet. ' \ - 'Set to "automatic" to start the service at system startup. ' \ - 'You may need to login with a real user account when you need ' \ - 'access to network shares.' - - def __init__(self, args): - win32serviceutil.ServiceFramework.__init__(self, args) - - self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) - self.overlapped = pywintypes.OVERLAPPED() - self.overlapped.hEvent = win32event.CreateEvent(None, 0, 0, None) - sabnzbd.WIN_SERVICE = self - - def SvcDoRun(self): - msg = 'SABnzbd-service %s' % sabnzbd.__version__ - self.Logger(servicemanager.PYS_SERVICE_STARTED, msg + ' has started') - sys.argv = get_serv_parms(self._svc_name_) - main() - self.Logger(servicemanager.PYS_SERVICE_STOPPED, msg + ' has stopped') - - def SvcStop(self): - self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) - win32event.SetEvent(self.hWaitStop) - - def Logger(self, state, msg): - win32evtlogutil.ReportEvent(self._svc_display_name_, - state, 0, - servicemanager.EVENTLOG_INFORMATION_TYPE, - (self._svc_name_, unicoder(msg))) - - def ErrLogger(self, msg, text): - win32evtlogutil.ReportEvent(self._svc_display_name_, - servicemanager.PYS_SERVICE_STOPPED, 0, - servicemanager.EVENTLOG_ERROR_TYPE, - (self._svc_name_, unicoder(msg)), - unicoder(text)) - - -def prep_service_parms(args): - """ Prepare parameter list for service """ - - # Must store our original path, because the Python Service launcher - # won't give it to us. - serv = [os.path.normpath(os.path.abspath(sys.argv[0]))] - - # Convert the tuples to list - for arg in args: - serv.append(arg[0]) - if arg[1]: - serv.append(arg[1]) - - # Make sure we run in daemon mode - serv.append('-d') - return serv - - -def HandleCommandLine(allow_service=True): - """ Handle command line for a Windows Service - Prescribed name that will be called by Py2Exe. - You MUST set 'cmdline_style':'custom' in the package.py! - Returns True when any service commands were detected. - """ - service, sab_opts, serv_opts, upload_nzbs = commandline_handler() - if service and not allow_service: - # The other frozen apps don't support Services - print "For service support, use SABnzbd-service.exe" - return True - elif service: - if service in ('install', 'update'): - # In this case check for required parameters - path = get_f_option(sab_opts) - if not path: - print 'The -f parameter is required.\n' \ - 'Use: -f %s' % service - return True - - # First run the service installed, because this will - # set the service key in the Registry - win32serviceutil.HandleCommandLine(SABnzbd, argv=serv_opts) - - # Add our own parameter to the Registry - sab_opts = prep_service_parms(sab_opts) - if set_serv_parms(SABnzbd._svc_name_, sab_opts): - print '\nYou may need to set additional Service parameters.\n' \ - 'Run services.msc from a command prompt.\n' - else: - print 'Cannot set required Registry info.' - else: - # Other service commands need no manipulation - win32serviceutil.HandleCommandLine(SABnzbd) - return bool(service) - - - -##################################################################### -# -# Platform specific startup code -# -if __name__ == '__main__': - - if sabnzbd.WIN32: - if not HandleCommandLine(allow_service=not hasattr(sys, "frozen")): - main() - - elif getattr(sys, 'frozen', None) == 'macosx_app': - # OSX binary - - try: - from PyObjCTools import AppHelper - from SABnzbdDelegate import SABnzbdDelegate - - class startApp(Thread): - def __init__(self): - logging.info('[osx] sabApp Starting - starting main thread') - Thread.__init__(self) - def run(self): - main() - logging.info('[osx] sabApp Stopping - main thread quit ') - AppHelper.stopEventLoop() - def stop(self): - logging.info('[osx] sabApp Quit - stopping main thread ') - sabnzbd.halt() - cherrypy.engine.exit() - sabnzbd.SABSTOP = True - logging.info('[osx] sabApp Quit - main thread stopped') - - sabApp = startApp() - sabApp.start() - AppHelper.runEventLoop() - - except: - main() - - else: - main() - diff --git a/main/SABnzbdDelegate.py b/main/SABnzbdDelegate.py deleted file mode 100755 index 06d159c..0000000 --- a/main/SABnzbdDelegate.py +++ /dev/null @@ -1,692 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -import objc -from Foundation import * -from AppKit import * -from PyObjCTools import AppHelper -from objc import YES, NO, nil -from threading import Thread - -import os -import cherrypy -import Cheetah.DummyTransaction -import sys -import time - -import logging -import logging.handlers - -import sabnzbd -import sabnzbd.cfg - -from sabnzbd.constants import * -from sabnzbd.misc import launch_a_browser,get_filename,get_ext,diskfree -from sabnzbd.lang import T -from sabnzbd.utils import osx - -import sabnzbd.nzbqueue as nzbqueue -import sabnzbd.config as config -import sabnzbd.scheduler as scheduler -import sabnzbd.downloader as downloader -import sabnzbd.dirscanner as dirscanner -from sabnzbd.bpsmeter import BPSMeter -from sabnzbd.newzbin import Bookmarks -from sabnzbd.database import get_history_handle - -status_icons = {'idle':'../Resources/sab_idle.png','pause':'../Resources/sab_pause.png','clicked':'../Resources/sab_clicked.png'} -start_time = NSDate.date() - -class SABnzbdDelegate(NSObject): - - icons = {} - status_bar = None - - def awakeFromNib(self): - #Status Bar iniatilize - self.buildMenu() - #Timer for updating menu - self.timer = NSTimer.alloc().initWithFireDate_interval_target_selector_userInfo_repeats_(start_time, 3.0, self, 'updateAction:', None, True) - NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSDefaultRunLoopMode) - NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSEventTrackingRunLoopMode) -# NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSModalPanelRunLoopMode) - - self.timer.fire() - - def buildMenu(self): - #logging.info("building menu") - status_bar = NSStatusBar.systemStatusBar() - self.status_item = status_bar.statusItemWithLength_(NSVariableStatusItemLength) - for i in status_icons.keys(): - self.icons[i] = NSImage.alloc().initByReferencingFile_(status_icons[i]) - self.status_item.setImage_(self.icons['idle']) - self.status_item.setAlternateImage_(self.icons['clicked']) - self.status_item.setHighlightMode_(1) - self.status_item.setToolTip_('SABnzbd') - self.status_item.setEnabled_(YES) - - #Wait for SABnzbd Initialisation - cherrypy.engine.wait(cherrypy.process.wspbus.states.STARTED) - - logging.info("[osx] yes=%s" % (T('yes'))) - - while T('yes')[0:1]=="#": - time.sleep(0.5) - logging.info("[osx] language file not loaded, waiting") - - #Variables - self.state = "Idle" - self.speed = downloader.get_limit() - self.version_notify = 1 - self.status_removed = 0 - - #Menu construction - self.menu = NSMenu.alloc().init() - - try: - menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_("Dummy", '', '') - menu_item.setHidden_(YES) - self.isLeopard = 1 - except: - self.isLeopard = 0 - - #Warnings Item - self.warnings_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-warnings'), 'openBrowserAction:', '') - if self.isLeopard: - self.warnings_menu_item.setHidden_(YES) - else: - self.warnings_menu_item.setEnabled_(NO) - self.warnings_menu_item.setRepresentedObject_("connections/") - self.menu.addItem_(self.warnings_menu_item) - - #State Item - self.state_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-status-idle'), 'openBrowserAction:', '') - self.state_menu_item.setRepresentedObject_("") - self.menu.addItem_(self.state_menu_item) - - #Config Item - menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-config'), 'openBrowserAction:', '') - menu_item.setRepresentedObject_("config/general/") - menu_item.setAlternate_(YES) - menu_item.setKeyEquivalentModifierMask_(NSAlternateKeyMask) - self.menu.addItem_(menu_item) - - #Queue Item - self.queue_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-queue'), 'openBrowserAction:', '') - self.queue_menu_item.setRepresentedObject_("") - self.menu.addItem_(self.queue_menu_item) - - #Purge Queue Item - self.purgequeue_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-purgequeue'), 'purgeAction:', '') - self.purgequeue_menu_item.setRepresentedObject_("queue") - self.purgequeue_menu_item.setAlternate_(YES) - self.purgequeue_menu_item.setKeyEquivalentModifierMask_(NSAlternateKeyMask) - self.menu.addItem_(self.purgequeue_menu_item) - - #History Item - self.history_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-history'), 'openBrowserAction:', '') - self.history_menu_item.setRepresentedObject_("") - self.menu.addItem_(self.history_menu_item) - - #Purge History Item - self.purgehistory_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-purgehistory'), 'purgeAction:', '') - self.purgehistory_menu_item.setRepresentedObject_("history") - self.purgehistory_menu_item.setAlternate_(YES) - self.purgehistory_menu_item.setKeyEquivalentModifierMask_(NSAlternateKeyMask) - self.menu.addItem_(self.purgehistory_menu_item) - - self.separator_menu_item = NSMenuItem.separatorItem() - self.menu.addItem_(self.separator_menu_item) - - #Limit Speed Item & Submenu - self.speed_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-speedlimit'), '', '') - - self.menu_speed = NSMenu.alloc().init() - - speeds ={ 0 : T('osx-menu-none'), 50 :'50 KB/s' , 100 : '100 KB/s', 200 : '200 KB/s' , 300 : '300 KB/s' , - 400 : '400 KB/s', 500 :'500 KB/s' , 600 : '600 KB/s', 700 : '700 KB/s' , 800 : '800 KB/s' , - 900 : '900 KB/s', 1000 :'1000 KB/s' , 1500 : '1500 KB/s', 2000 : '2000 KB/s' , 3000 : '3000 KB/s' - } - - for speed in sorted(speeds.keys()): - menu_speed_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('%s' % (speeds[speed]), 'speedlimitAction:', '') - menu_speed_item.setRepresentedObject_("%s" % (speed)) - self.menu_speed.addItem_(menu_speed_item) - - self.speed_menu_item.setSubmenu_(self.menu_speed) - self.menu.addItem_(self.speed_menu_item) - - #Pause Item & Submenu - self.pause_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-pause'), 'pauseAction:', '') - self.pause_menu_item.setRepresentedObject_('0') - - self.menu_pause = NSMenu.alloc().init() - - for i in range(6): - menu_pause_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_("%s %s" % ((i+1)*10,T('osx-menu-min')), 'pauseAction:', '') - menu_pause_item.setRepresentedObject_("%s" % ((i+1)*10)) - self.menu_pause.addItem_(menu_pause_item) - - self.pause_menu_item.setSubmenu_(self.menu_pause) - self.menu.addItem_(self.pause_menu_item) - - #Resume Item - self.resume_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-resume'), 'resumeAction:', '') - if self.isLeopard: - self.resume_menu_item.setHidden_(YES) - else: - self.resume_menu_item.setEnabled_(NO) - self.menu.addItem_(self.resume_menu_item) - - #Newzbin Item - self.newzbin_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-getnewzbinbm'), 'getNewzbinBookmarksAction:', '') - if self.isLeopard: - self.newzbin_menu_item.setHidden_(YES) - else: - self.newzbin_menu_item.setEnabled_(NO) - self.menu.addItem_(self.newzbin_menu_item) - - self.separator2_menu_item = NSMenuItem.separatorItem() - self.menu.addItem_(self.separator2_menu_item) - - #Complete Folder Item - self.completefolder_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-complete'), 'openFolderAction:', '') - self.completefolder_menu_item.setRepresentedObject_(sabnzbd.cfg.COMPLETE_DIR.get_path()) - self.menu.addItem_(self.completefolder_menu_item) - - #Incomplete Folder Item - self.incompletefolder_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-incomplete'), 'openFolderAction:', '') - self.incompletefolder_menu_item.setRepresentedObject_(sabnzbd.cfg.DOWNLOAD_DIR.get_path()) - self.menu.addItem_(self.incompletefolder_menu_item) - - self.menu.addItem_(NSMenuItem.separatorItem()) - - #About Item (TO FIX) - #menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('About SABnzbd', 'aboutAction:', '') - #self.menu.addItem_(menu_item) - - #Quit Item - menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-quit'), 'terminate:', '') - self.menu.addItem_(menu_item) - - #Restart Item - menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-restart'), 'restartAction:', '') - menu_item.setAlternate_(YES) - menu_item.setKeyEquivalentModifierMask_(NSAlternateKeyMask) - self.menu.addItem_(menu_item) - - #Add menu to Status Item - self.status_item.setMenu_(self.menu) - - def updateAction_(self, notification): - try: - if os.path.exists("%s/notDisplayMenu" % (sabnzbd.DIR_APPDATA)): - sabnzbd.OSX_ICON = 0 - else: - sabnzbd.OSX_ICON = 1 - - if sabnzbd.OSX_ICON: - if self.status_removed == 1: - self.buildMenu() - - if self.serverUpdate(): - self.warningsUpdate() - self.queueUpdate() - self.historyUpdate() - self.stateUpdate() - self.iconUpdate() - self.pauseUpdate() - self.speedlimitUpdate() - self.versionUpdate() - self.newzbinUpdate() - self.diskspaceUpdate() - else: - if self.status_removed == 0: - status_bar = NSStatusBar.systemStatusBar() - status_bar.removeStatusItem_(self.status_item) - self.status_removed = 1 - status_bar = None - self.status_item = None - except : - logging.info("[osx] Exception %s" % (sys.exc_info()[0])) - - def queueUpdate(self): - try: - qnfo = sabnzbd.nzbqueue.queue_info() - pnfo_list = qnfo[QNFO_PNFO_LIST_FIELD] - - bytesleftprogess = 0 - bpsnow = BPSMeter.do.get_bps() - self.info = "" - - self.menu_queue = NSMenu.alloc().init() - - if len(pnfo_list): - - menu_queue_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-queuelimit'), '', '') - self.menu_queue.addItem_(menu_queue_item) - self.menu_queue.addItem_(NSMenuItem.separatorItem()) - - job_nb = 1 - for pnfo in pnfo_list: - if job_nb >= 10: - break - filename = pnfo[PNFO_FILENAME_FIELD] - msgid = pnfo[PNFO_MSGID_FIELD] - bytesleft = pnfo[PNFO_BYTES_LEFT_FIELD] / MEBI - bytesleftprogess += pnfo[PNFO_BYTES_LEFT_FIELD] - bytes = pnfo[PNFO_BYTES_FIELD] / MEBI - nzo_id = pnfo[PNFO_NZO_ID_FIELD] - timeleft = self.calc_timeleft(bytesleftprogess, bpsnow) - - job = "%s\t(%d/%d MB) %s" % (filename, bytesleft, bytes, timeleft) - job_nb += 1 - menu_queue_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(job, '', '') - self.menu_queue.addItem_(menu_queue_item) - - self.info = "%d nzb(s)\t( %d / %d MB )" % (len(pnfo_list),(qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI), (qnfo[QNFO_BYTES_FIELD] / MEBI)) - - else: - menu_queue_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-empty'), '', '') - self.menu_queue.addItem_(menu_queue_item) - - self.queue_menu_item.setSubmenu_(self.menu_queue) - - except : - logging.info("[osx] queueUpdate Exception %s" % (sys.exc_info()[0])) - - def historyUpdate(self): - try: - # Fetch history items - history_db = sabnzbd.database.get_history_handle() - items, fetched_items, total_items = history_db.fetch_history(0,10,None) - - self.menu_history = NSMenu.alloc().init() - self.failedAttributes = { NSForegroundColorAttributeName:NSColor.redColor(), NSFontAttributeName:NSFont.menuFontOfSize_(14.0) } - - menu_history_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-historylimit'), '', '') - self.menu_history.addItem_(menu_history_item) - self.menu_history.addItem_(NSMenuItem.separatorItem()) - - if fetched_items: - for history in items: - #logging.info("[osx] history : %s" % (history)) - job = "%s" % (history['name']) - path = "" - if os.path.isdir(history['storage']) or os.path.isfile(history['storage']): - if os.path.isfile(history['storage']): - path = os.path.dirname(history['storage']) - else: - path = history['storage'] - if path: - menu_history_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(job, 'openFolderAction:', '') - else: - menu_history_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(job, '', '') - if history['status'] != "Completed": - jobfailed = NSAttributedString.alloc().initWithString_attributes_(job, self.failedAttributes) - menu_history_item.setAttributedTitle_(jobfailed) - menu_history_item.setRepresentedObject_("%s" % (path)) - self.menu_history.addItem_(menu_history_item) - else: - menu_history_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(T('osx-menu-empty'), '', '') - self.menu_history.addItem_(menu_history_item) - - self.history_menu_item.setSubmenu_(self.menu_history) - except : - logging.info("[osx] historyUpdate Exception %s" % (sys.exc_info()[0])) - - def warningsUpdate(self): - try: - warnings = sabnzbd.GUIHANDLER.count() - if warnings: - warningsAttributes = { - NSForegroundColorAttributeName: NSColor.redColor(), - NSFontAttributeName: NSFont.menuFontOfSize_(14.0) - } - - warningsTitle = NSAttributedString.alloc().initWithString_attributes_( "%s : %s" % (T('osx-menu-warnings'),warnings), warningsAttributes) - - self.warnings_menu_item.setAttributedTitle_(warningsTitle) - if self.isLeopard: - self.warnings_menu_item.setHidden_(NO) - else: - self.warnings_menu_item.setEnabled_(YES) - else: - self.warnings_menu_item.setTitle_("%s : 0" % (T('osx-menu-warnings'))) - if self.isLeopard: - self.warnings_menu_item.setHidden_(YES) - else: - self.warnings_menu_item.setEnabled_(NO) - except : - logging.info("[osx] warningsUpdate Exception %s" % (sys.exc_info()[0])) - - def stateUpdate(self): - try: - qnfo = sabnzbd.nzbqueue.queue_info() - bpsnow = BPSMeter.do.get_bps() - if downloader.paused(): - self.state = T('osx-menu-status-paused') - if sabnzbd.scheduler.pause_int() != "0": - self.setMenuTitle("\n\n%s\n" % (sabnzbd.scheduler.pause_int())) - else: - self.setMenuTitle("") - elif qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI > 0: - - self.state = "" - speed = self.to_units(bpsnow) - timeleft = (speed>1 and self.calc_timeleft(qnfo[QNFO_BYTES_LEFT_FIELD],bpsnow)) or "--" - - statusbarText = "\n\n%s\n%s\n" % (timeleft, speed) - - if sabnzbd.SABSTOP: - statusbarText = "..." - - if os.path.exists("%s/notDisplaySpeed" % (sabnzbd.DIR_APPDATA)): - statusbarText = "" - - self.setMenuTitle(statusbarText) - else: - self.state = T('osx-menu-status-idle') - self.setMenuTitle("") - - if self.state != "" and self.info != "": - self.state_menu_item.setTitle_("%s - %s" % (self.state,self.info)) - if self.info == "": - self.state_menu_item.setTitle_("%s" % (self.state)) - else: - self.state_menu_item.setTitle_("%s" % (self.info)) - - except : - logging.info("[osx] stateUpdate Exception %s" % (sys.exc_info()[0])) - - def iconUpdate(self): - try: - if downloader.paused(): - self.status_item.setImage_(self.icons['pause']) - else: - self.status_item.setImage_(self.icons['idle']) - except : - logging.info("[osx] iconUpdate Exception %s" % (sys.exc_info()[0])) - - def pauseUpdate(self): - try: - if downloader.paused(): - if self.isLeopard: - self.resume_menu_item.setHidden_(NO) - self.pause_menu_item.setHidden_(YES) - else: - self.resume_menu_item.setEnabled_(YES) - self.pause_menu_item.setEnabled_(NO) - else: - if self.isLeopard: - self.resume_menu_item.setHidden_(YES) - self.pause_menu_item.setHidden_(NO) - else: - self.resume_menu_item.setEnabled_(NO) - self.pause_menu_item.setEnabled_(YES) - except : - logging.info("[osx] pauseUpdate Exception %s" % (sys.exc_info()[0])) - - def speedlimitUpdate(self): - try: - speed = int(downloader.get_limit()) - if self.speed != speed : - self.speed = speed - speedsValues = self.menu_speed.numberOfItems() - for i in range(speedsValues): - menuitem = self.menu_speed.itemAtIndex_(i) - if speed == int(menuitem.representedObject()): - menuitem.setState_(NSOnState) - else: - menuitem.setState_(NSOffState) - except : - logging.info("[osx] speedlimitUpdate Exception %s" % (sys.exc_info()[0])) - - def versionUpdate(self): - try: - if sabnzbd.NEW_VERSION and self.version_notify: - #logging.info("[osx] New Version : %s" % (sabnzbd.NEW_VERSION)) - new_release, new_rel_url = sabnzbd.NEW_VERSION.split(';') - osx.sendGrowlMsg("SABnzbd","%s : %s" % (T('grwl-newversion-msg'),new_release),osx.NOTIFICATION['other']) - self.version_notify = 0 - except : - logging.info("[osx] versionUpdate Exception %s" % (sys.exc_info()[0])) - - - def newzbinUpdate(self): - try: - if sabnzbd.cfg.newzbin_username() and sabnzbd.cfg.newzbin_password() and sabnzbd.cfg.NEWZBIN_BOOKMARKS(): - if self.isLeopard: - self.newzbin_menu_item.setHidden_(NO) - else: - self.newzbin_menu_item.setEnabled_(YES) - else: - if self.isLeopard: - self.newzbin_menu_item.setHidden_(YES) - else: - self.newzbin_menu_item.setEnabled_(NO) - except : - logging.info("[osx] newzbinUpdate Exception %s" % (sys.exc_info()[0])) - - def serverUpdate(self): - try: - if not config.get_servers(): - self.state_menu_item.setTitle_(T('osx-menu-wizard')) - hide=YES - alternate=NO - value=0 - else: - hide=NO - alternate=YES - value=1 - if self.isLeopard: - self.speed_menu_item.setHidden_(hide) - self.resume_menu_item.setHidden_(hide) - self.pause_menu_item.setHidden_(hide) - self.newzbin_menu_item.setHidden_(hide) - self.purgequeue_menu_item.setAlternate_(alternate) - self.purgequeue_menu_item.setHidden_(hide) - self.queue_menu_item.setHidden_(hide) - self.purgehistory_menu_item.setAlternate_(alternate) - self.purgehistory_menu_item.setHidden_(hide) - self.history_menu_item.setHidden_(hide) - self.separator_menu_item.setHidden_(hide) - self.separator2_menu_item.setHidden_(hide) - self.completefolder_menu_item.setHidden_(hide) - self.incompletefolder_menu_item.setHidden_(hide) - else: - self.speed_menu_item.setEnabled_(alternate) - self.resume_menu_item.setEnabled_(alternate) - self.pause_menu_item.setEnabled_(alternate) - self.newzbin_menu_item.setEnabled_(alternate) - self.purgequeue_menu_item.setAlternate_(alternate) - self.purgequeue_menu_item.setEnabled_(alternate) - self.queue_menu_item.setEnabled_(alternate) - self.purgehistory_menu_item.setAlternate_(alternate) - self.purgehistory_menu_item.setEnabled_(alternate) - self.history_menu_item.setEnabled_(alternate) - self.separator_menu_item.setEnabled_(alternate) - self.separator2_menu_item.setEnabled_(alternate) - self.completefolder_menu_item.setEnabled_(alternate) - self.incompletefolder_menu_item.setEnabled_(alternate) - return value - - except : - logging.info("[osx] configUpdate Exception %s" % (sys.exc_info()[0])) - return 0 - - def diskspaceUpdate(self): - try: - self.completefolder_menu_item.setTitle_("%s%.2f GB" % (T('osx-menu-complete'),diskfree(sabnzbd.cfg.COMPLETE_DIR.get_path()))) - self.incompletefolder_menu_item.setTitle_("%s%.2f GB" % (T('osx-menu-incomplete'),diskfree(sabnzbd.cfg.DOWNLOAD_DIR.get_path()))) - except : - logging.info("[osx] diskspaceUpdate Exception %s" % (sys.exc_info()[0])) - - def setMenuTitle(self,text): - try: - style = NSMutableParagraphStyle.new() - style.setParagraphStyle_(NSParagraphStyle.defaultParagraphStyle()) - style.setAlignment_(NSCenterTextAlignment) - style.setLineSpacing_(0.0) - style.setMaximumLineHeight_(9.0) - style.setParagraphSpacing_(-3.0) - - #Trying to change color of title to white when menu is open TO FIX - if self.menu.highlightedItem(): - #logging.info("Menu Clicked") - titleColor = NSColor.highlightColor() - else: - #logging.info("Menu Not Clicked") - titleColor = NSColor.blackColor() - - titleAttributes = { - NSBaselineOffsetAttributeName : 5.0, - NSFontAttributeName: NSFont.menuFontOfSize_(9.0), - NSParagraphStyleAttributeName: style - #,NSForegroundColorAttributeName: titleColor - } - - title = NSAttributedString.alloc().initWithString_attributes_(text, titleAttributes) - self.status_item.setAttributedTitle_(title) - except : - logging.info("[osx] setMenuTitle Exception %s" % (sys.exc_info()[0])) - - def calc_timeleft(self, bytesleft, bps): - """ - Calculate the time left in the format HH:MM:SS - """ - try: - totalseconds = int(bytesleft / bps) - minutes, seconds = divmod(totalseconds, 60) - hours, minutes = divmod(minutes, 60) - if minutes <10: - minutes = '0%s' % minutes - if seconds <10: - seconds = '0%s' % seconds - return '%s:%s:%s' % (hours, minutes, seconds) - except: - return '0:00:00' - - def to_units(self, val): - """ Convert number to K/M/G/T/P notation - """ - TAB_UNITS = ("", "K", "M", "G", "T", "P") - val = str(val).strip() - if val == "-1": - return val - n=0 - try: - val = float(val) - except: - return '' - - while (val > 1023.0) and (n < 5): - val = val / 1024.0 - n= n+1 - unit = TAB_UNITS[n] - if n>1: - return " %.2f %sB/s " % (val, unit) - else: - return " %d %sB/s " % (val, unit) - - def openBrowserAction_(self, sender): - if sender.representedObject: - link = sender.representedObject() - else: - link = "" - #logging.info("[osx] opening http://%s:%s/sabnzbd/%s" % (sabnzbd.cfg.CHERRYHOST(), sabnzbd.cfg.CHERRYPORT(),link)) - launch_a_browser("http://%s:%s/sabnzbd/%s" % (sabnzbd.cfg.CHERRYHOST(), sabnzbd.cfg.CHERRYPORT(),link),True) - - def speedlimitAction_(self, sender): - #logging.info("[osx] speed limit to %s" % (sender.representedObject())) - speed = int(sender.representedObject()) - if speed != self.speed: - downloader.limit_speed(speed) - self.speedlimitUpdate() - - def purgeAction_(self, sender): - mode = sender.representedObject() - #logging.info("[osx] purge %s" % (mode)) - if mode == "queue": - nzbqueue.remove_all_nzo() - elif mode == "history": - history_db = sabnzbd.database.get_history_handle() - history_db.remove_history() - - def pauseAction_(self, sender): - minutes = int(sender.representedObject()) - #logging.info("[osx] pause for %s" % (minutes)) - if minutes: - scheduler.plan_resume(minutes) - else: - downloader.pause_downloader() - - def resumeAction_(self, sender): - scheduler.plan_resume(0) - - def getNewzbinBookmarksAction_(self, sender): - Bookmarks.do.run() - - def openFolderAction_(self, sender): - os.system('open "%s"' % sender.representedObject()) - -# def aboutAction_(self, sender): -# app = NSApplication.sharedApplication() -# app.orderFrontStandardAboutPanel_(nil) - - def restartAction_(self, sender): - self.setMenuTitle("\n\n%s\n"% (T('osx-menu-shutdowning'))) - sabnzbd.halt() - cherrypy.engine.restart() - self.setMenuTitle("\n\n%s\n"% (T('osx-menu-shutdowning'))) - - def application_openFiles_(self, nsapp, filenames): - #logging.info('[osx] file open') - #logging.info('[osx] file : %s' % (filenames)) - pp = None - script = None - cat = None - priority = None - for name in filenames : - #logging.info('[osx] processing : %s' % (name)) - if os.path.exists(name): - fn = get_filename(name) - #logging.info('[osx] filename : %s' % (fn)) - if fn: - if get_ext(name) in ('.zip','.rar', '.gz'): - #logging.info('[osx] archive') - dirscanner.ProcessArchiveFile(fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True) - elif get_ext(name) in ('.nzb'): - #logging.info('[osx] nzb') - dirscanner.ProcessSingleFile(fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True) - #logging.info('opening done') - - def applicationShouldTerminate_(self, sender): - logging.info('[osx] application terminating') - self.setMenuTitle("\n\n%s\n"% (T('osx-menu-shutdowning'))) - self.status_item.setHighlightMode_(NO) - sabnzbd.OSX_ICON = 0 - logging.info('[osx] application stopping daemon') - sabnzbd.halt() - cherrypy.engine.exit() - sabnzbd.SABSTOP = True - osx.sendGrowlMsg('SABnzbd',T('grwl-shutdown-end-msg'),osx.NOTIFICATION['other']) - logging.info('Leaving SABnzbd') - sys.stderr.flush() - sys.stdout.flush() - return NSTerminateNow - diff --git a/main/Sample-PostProc.cmd b/main/Sample-PostProc.cmd deleted file mode 100644 index 77861bf..0000000 --- a/main/Sample-PostProc.cmd +++ /dev/null @@ -1,16 +0,0 @@ -@echo off -rem Example of a post processing script for SABnzbd - -echo. -echo Running in directory "%~d0%~p0" -echo. -echo The first parameter (result-dir) = %1 -echo The second parameter (nzb-name) = %2 -echo The third parameter (nice name) = %3 -echo The fourth parameter (newzbin #) = %4 -echo The fifth parameter (category) = %5 -echo The sixth parameter (group) = %6 -echo The seventh parameter (status) = %7 -echo. - - diff --git a/main/Sample-PostProc.sh b/main/Sample-PostProc.sh deleted file mode 100755 index 7cc7dee..0000000 --- a/main/Sample-PostProc.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -# Example of a post processing script for SABnzbd - -echo -echo Started as $0 -echo -echo "The first parameter (result-dir) =" "$1" -echo "The second parameter (nzb-name) =" "$2" -echo "The third parameter (nice name) =" "$3" -echo "The fourth parameter (newzbin-id) =" "$4" -echo "The fifth parameter (category) =" "$5" -echo "The sixth parameter (group) =" "$6" -echo "The seventh parameter (status) =" "$7" -echo - - diff --git a/main/cherrypy.zip b/main/cherrypy.zip deleted file mode 100644 index 68dd4d20457bd0d0c6a1421a78263ff364438dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179090 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
      Ta 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 G0{uVr39}Ob diff --git a/main/interfaces/Classic/README.TXT b/main/interfaces/Classic/README.TXT deleted file mode 100644 index 8f672a9..0000000 --- a/main/interfaces/Classic/README.TXT +++ /dev/null @@ -1,21 +0,0 @@ -# -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# -# This is the Default web interface for SABnzbd -# Simple, but compatible with all popular browsers. -# diff --git a/main/interfaces/Classic/templates/config.tmpl b/main/interfaces/Classic/templates/config.tmpl deleted file mode 100644 index 754e9f0..0000000 --- a/main/interfaces/Classic/templates/config.tmpl +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - -

      $T('configuration')

      -

      -$T('confgFile'): $configfn -

      - -$T('explain-Restart')

      - -
      - -
      - - diff --git a/main/interfaces/Classic/templates/config_cat.tmpl b/main/interfaces/Classic/templates/config_cat.tmpl deleted file mode 100644 index 2cab3a9..0000000 --- a/main/interfaces/Classic/templates/config_cat.tmpl +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - -

      $T('configCat')

      -$T('explain-configCat')
      - - $T('explain-catNewzbin')
      - -
      $T('link-initCat')

      - - -$T('explain-relFolder') $defdir
      -
      - - - - - - - - - - - - - - - "> - - - - - - - - - - - - - - - - - - - - - - - - -
      $T('category') $T('mode')  $T('priority') $T('script')$T('catFolderPath') $T('catNewzbin')/ $T('catGroups')
      -
      - - -
      - -
      - - - - - -
      - - diff --git a/main/interfaces/Classic/templates/config_directories.tmpl b/main/interfaces/Classic/templates/config_directories.tmpl deleted file mode 100644 index 52c7043..0000000 --- a/main/interfaces/Classic/templates/config_directories.tmpl +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - -

      $T('folderConfig')

      -

      - $T('explain-folderConfig')
      -

      -
      -
      -
      - $T('userFolders') - $T('in') "$my_home"

      - $T('opt-download_dir'):
      - $T('explain-download_dir')
      - -
      -
      - $T('opt-download_free'):
      - $T('explain-download_free')
      - -
      -
      - $T('opt-complete_dir'):
      - $T('explain-complete_dir')
      - - -
      -
      - $T('opt-permissions'):
      - $T('explain-permissions')
      - - -
      -
      - $T('opt-dirscan_dir'):
      - $T('explain-dirscan_dir')
      - -
      -
      - $T('opt-dirscan_speed'):
      - $T('explain-dirscan_speed')
      - -
      -
      - $T('opt-script_dir'):
      - $T('explain-script_dir')
      - -
      -
      - $T('opt-email_dir'):
      - $T('explain-email_dir')
      - -
      -
      - $T('systemFolders') - $T('in') "$my_lcldata"

      - $T('opt-cache_dir'):
      - $T('explain-cache_dir')
      - -
      -
      - $T('opt-log_dir'):
      - $T('explain-log_dir')
      - -
      -
      - $T('opt-nzb_backup_dir'):
      - $T('explain-nzb_backup_dir')
      - - -
      - -

      - - - - -
      - - diff --git a/main/interfaces/Classic/templates/config_email.tmpl b/main/interfaces/Classic/templates/config_email.tmpl deleted file mode 100644 index 689e8c5..0000000 --- a/main/interfaces/Classic/templates/config_email.tmpl +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - -

      $T('configEmail')

      -
      -
      -
      -$T('emailOptions') -$T('opt-email_endjob')
      - /> $T('email-never') - /> $T('email-always') - /> $T('email-errorOnly') -

      -
      -$T('explain-email_full')
      -
      - -
      -$T('explain-email_rss')
      - -$T('opt-email_dir'):
      -$T('explain-email_dir')
      - -
      -
      -
      -$T('emailAccount') -$T('opt-email_server'):
      -$T('explain-email_server').
      - -
      -
      -$T('opt-email_to'):
      -$T('explain-email_to')
      - -
      -
      -$T('opt-email_from'):
      -$T('explain-email_from')
      - -
      -
      -$T('opt-email_account'):
      -$T('explain-email_account')
      - -
      -
      -$T('opt-email_pwd'):
      -$T('explain-email_pwd')
      - - -
      -
      -

      - - - diff --git a/main/interfaces/Classic/templates/config_general.tmpl b/main/interfaces/Classic/templates/config_general.tmpl deleted file mode 100644 index 867a6ee..0000000 --- a/main/interfaces/Classic/templates/config_general.tmpl +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - -

      $T('generalConfig')

      -
      -
      -
      - -$T('webServer') -$T('restartRequired')

      -$T('opt-host'):
      -$T('explain-host')
      - -
      -
      -$T('opt-port'):
      -$T('explain-port')
      - -
      -
      -$T('opt-web_dir'):
      -$T('explain-web_dir')
      - -

      -$T('opt-web_dir2'):
      -$T('explain-web_dir2')
      - -

      $T('opt-apikey'):
      -$T('explain-apikey')
      - -$T('button-apikey') -

      -
      -$T('explain-disableApikey') $T('explain-disableApikeyWarn') - -

      -$T('opt-language'):
      -$T('explain-language')
      - - -
      -
      -
      -$T('webAuth') -$T('opt-web_username'):
      -$T('explain-web_username')
      - -
      -
      -$T('opt-web_password')
      -$T('explain-web_password')
      - -
      - -
      -
      -$T('httpsSupport') -$T('restartRequired')

      -
      -$T('explain-enable_https')
      -
      -$T('opt-https_port'):
      -$T('explain-https_port')
      - -
      -
      -$T('opt-https_cert'):
      -$T('explain-https_cert')
      - -
      -
      -$T('opt-https_key'):
      -$T('explain-https_key')
      - -
      -
      - -
      -
      -$T('tuning') -$T('opt-refresh_rate'):
      -$T('explain-refresh_rate')
      - -
      -
      -$T('opt-rss_rate'):
      -$T('explain-rss_rate')
      - -
      -
      -$T('opt-bandwidth_limit'):
      -$T('explain-bandwidth_limit')
      - -
      -
      -$T('opt-cache_limitstr'):
      -$T('explain-cache_limitstr')
      - -
      -
      -$T('opt-cleanup_list'):
      -$T('explain-cleanup_list')

      - - -
      -
      -

      - - - - -

      -
      - - - diff --git a/main/interfaces/Classic/templates/config_newzbin.tmpl b/main/interfaces/Classic/templates/config_newzbin.tmpl deleted file mode 100644 index 2833bc2..0000000 --- a/main/interfaces/Classic/templates/config_newzbin.tmpl +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - -

      Newzbin

      -$T('explain-newzbin')

      -
      -
      -
      -$T('accountInfo') -$T('opt-username_newzbin'):
      -$T('explain-username_newzbin')
      - -
      -
      -$T('opt-password_newzbin'):
      -$T('explain-password_newzbin')
      - -
      -
      - -
      -
      -$T('newzbinBookmarks') -
      -$T('explain-newzbin_bookmarks')
      -$T('link-getBookmarks') -
      - - $T('link-HideBM') - - $T('link-ShowBM') - -
      -
      -
      -$T('explain-newzbin_unbookmark')
      -
      -$T('opt-bookmark_rate'):
      -$T('explain-bookmark_rate')
      - -
      -
      - -
      - $T('processedBM') - - $msgid  - -
      - - -

      -
      - -
      - -

      NzbMatrix

      -$T('explain-nzbmatrix')

      - -
      -
      -
      -$T('accountInfo') -$T('opt-username_matrix'):
      -$T('explain-username_matrix')
      - -
      -
      -$T('opt-apikey_matrix'):
      -$T('explain-apikey_matrix')
      - -
      -
      - -

      -
      - - diff --git a/main/interfaces/Classic/templates/config_rss.tmpl b/main/interfaces/Classic/templates/config_rss.tmpl deleted file mode 100644 index 6d2c886..0000000 --- a/main/interfaces/Classic/templates/config_rss.tmpl +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - -

      $T('configRSS')

      - -
      -
      -
      -$T('newFeedURI') -   -

      - - -
      -
      -
      - -

      $T('explain-RSS')

      - - -

      $T('feedDefinition')

      -
      -
      -
      - >/> - $T('feed') $feed - - - - - -

      - - - - - - - - - - - - - -
      - - - -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
               $T('rss-order')$T('rss-type')$T('rss-filter')$T('category')Mode$T('script')
      - - - - - - - -
      -
      - - - -
      -
      - -
      - - - - - - - - - - - - -
      -
      - - - - diff --git a/main/interfaces/Classic/templates/config_scheduling.tmpl b/main/interfaces/Classic/templates/config_scheduling.tmpl deleted file mode 100644 index a6be5c6..0000000 --- a/main/interfaces/Classic/templates/config_scheduling.tmpl +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - -

      $T('configSchedule')

      -
      -
      -
      -$T('addSchedule') - <%import time -t = time.localtime() -hour = t[3] -if hour != 23: - hour += 1 -else: - hour = 0 %> -$T('hour'):
      - -: - -
      $T('sch-frequency'):
      - -
      $T('sch-action'):
      - -
      $T('sch-arguments'):
      - - -

      -
      -
      -
      -

      $T('currentSchedules'):

      -
      - - -
      -
      -$T('sch-task') $taskinfo[$schednum][0]: $taskinfo[$schednum][1]:$taskinfo[$schednum][2] - $taskinfo[$schednum][3] - $taskinfo[$schednum][4] - - - - -
      -

      - -
      - - diff --git a/main/interfaces/Classic/templates/config_server.tmpl b/main/interfaces/Classic/templates/config_server.tmpl deleted file mode 100644 index 413dbe8..0000000 --- a/main/interfaces/Classic/templates/config_server.tmpl +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - -

      $T('configServer')

      -
      -
      -
      - $T('addServer') - $T('srv-host'):

      - $T('srv-port'):

      - $T('srv-username'):

      - $T('srv-password'):

      - $T('srv-timeout'):

      - $T('srv-connections'):

      - - $T('srv-ssl') $T('opt-notInstalled') - - > $T('srv-ssl')
      - -  $T('srv-fillserver')
      -  $T('srv-optional')
      -  $T('srv-enable')
      - -

      -
      -
      - - - -
      -
      - $server - $T('srv-host'):

      - $T('srv-port'):

      - $T('srv-username'):

      - $T('srv-password'):

      - $T('srv-timeout'):

      - $T('srv-connections'):

      - - $T('srv-ssl') $T('opt-notInstalled') - - /> $T('srv-ssl')
      - - /> $T('srv-fillserver')
      - /> $T('srv-optional')
      - /> $T('srv-enable')
      - - -

      -

      -
      -
      - -
      - - diff --git a/main/interfaces/Classic/templates/config_sorting.tmpl b/main/interfaces/Classic/templates/config_sorting.tmpl deleted file mode 100644 index b1bd006..0000000 --- a/main/interfaces/Classic/templates/config_sorting.tmpl +++ /dev/null @@ -1,445 +0,0 @@ - - - - - - - - - - -

      $T('configSort')

      - -
      -
      -
      - -$T('seriesSorting') - - 0 then "checked=1" else ""#--> /> $T('opt-tvsort')
      -
      - $T('affectedCat'): -
      - -

      - - $T('sort-legenda') -
      -
      - $T('sort-meaning') - $T('sort-pattern') - $T('sort-result') -
      -
      - $T('show-name') - %sn - $T('show-sp-name') -
      - %s.n - $T('show-dot-name') -
      - %s_n - $T('show-us-name') -
      -
      - $T('show-seasonNum') - %s - 1 -
      - %0s - 01 -
      -
      - $T('show-epNum') - %e - 5 -
      - %0e - 05 -
      -
      - $T('ep-name') - %en - $T('ep-sp-name') -
      - %e.n - $T('ep-dot-name') -
      - %e_n - $T('ep-us-name') -
      -
      - $T('fileExt') - %ext - avi -
      -
      - $T('orgFilename') - %fn - $T("sort-File") -
      -
      - $T('lowercase') - {$T('TEXT')} - $T('text') -
      - -

      - $T('sortString'):
      -
      - $T('presetSort'):
      - - - -
      -
      - $T('example'): -

      -
      -
      -
      -$T('genericSort') - - 0 then "checked=1" else ""#--> /> $T('opt-movieSort') -

      - 0 then "checked=1" else ""#--> /> $T('opt-movieExtra') -

      - $T('affectedCat'): -
      - - -

      - $T('sort-legenda') -
      -
      - $T('sort-meaning') - $T('sort-pattern') - $T('sort-result') -
      -
      - $T('sort-title') - %title - $T('movie-sp-name') -
      - %.title - $T('movie-dot-name') -
      - %_title - $T('movie-us-name') -
      -
      - $T('year') - %y - 2000 -
      -
      - $T('extension') - %ext - avi -
      -
      - $T('partNumber') - %1 - 1 -
      -
      - $T('decade') - %decade - 00 -
      -
      - $T('decade') - %0decade - 2000 -
      -
      - $T('orgFilename') - %fn - $T('sort-File') -
      -
      - $T('lowercase') - {$T('TEXT')} - $T('text') -
      -


      - $T('sortString'):
      -
      - $T('multiPartLabel'):
      -
      - $T('presetSort'):
      - -
      -
      - $T('example'): -

      -
      -
      -
      -$T('dateSorting') - - 0 then "checked=1" else ""#--> /> $T('opt-dateSort')
      -
      - $T('affectedCat'): -
      - -

      - $T('sort-legenda') -
      -
      - $T('sort-meaning') - $T('sort-pattern') - $T('sort-result') -
      -
      - $T('show-name') - %t - $T('show-sp-name') -
      - %.t - $T('show-dot-name') -
      - %_t - $T('show-us-name') -
      -
      - $T('year') - %y - 2009 -
      -
      - $T('month') - %m - 1 -
      - %0m - 01 -
      -
      - $T('day-of-month') - %d - 2 -
      - %0d - 02 -
      -
      -
      - $T('decade') - %decade - 00 -
      -
      - $T('decade') - %0decade - 2000 -
      -
      - $T('orgFilename') - %fn - $T('sort-File') -
      -
      - $T('lowercase') - {$T('TEXT')} - $T('text') -
      -

      - $T('sortString'):
      -
      - $T('presetSort'):
      - - -
      -
      - $T('example'): -
      - - -

      - - -
      - - diff --git a/main/interfaces/Classic/templates/config_switches.tmpl b/main/interfaces/Classic/templates/config_switches.tmpl deleted file mode 100644 index 23055ae..0000000 --- a/main/interfaces/Classic/templates/config_switches.tmpl +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - -

      $T('switchesConfig')

      -
      -
      -
      - $T('processingSwitches') -
      - $T('explain-quick_check')
      -
      -
      - $T('explain-enable_unrar')
      -
      -
      - $T('explain-enable_unzip')
      -
      -
      - $T('explain-enable_filejoin')
      -
      -
      - $T('explain-ts_join')
      -
      -
      - $T('explain-enable_par_cleanup')
      -
      -
      - $T('explain-fail_on_crc')
      -
      -
      - $T('explain-top_only')
      -
      -
      - $T('explain-safe_postproc')
      -
      -
      - $T('explain-no_dupes')
      -
      - $T('opt-dirscan_opts'):
      - $T('explain-dirscan_opts')
      - /> $T('none') - /> $T('pp-repair') - /> $T('pp-unpack') - /> $T('pp-delete') -
      -
      - $T('opt-dirscan_script'):
      - $T('explain-dirscan_script')
      - -
      -
      - $T('opt-dirscan_priority'):
      - $T('explain-dirscan_priority')
      - -
      -
      - -
      - $T('explain-par2_multicore')
      -
      - - $T('opt-par_option'):
      - $T('explain-par_option')
      - -
      -
      - - $T('opt-nice'):
      - $T('explain-nice')
      - -
      -
      - - - $T('opt-ionice'):
      - $T('explain-ionice')
      - -
      -
      - -
      -
      - $T('otherSwitches') -
      - $T('explain-auto_disconnect')
      -
      -
      - $T('explain-send_group')
      -
      -
      - $T('explain-auto_sort')
      -
      -
      - $T('explain-check_new_rel')
      -
      -
      - $T('explain-replace_spaces')
      -
      -
      - $T('explain-replace_illegal')
      -
      -
      - $T('explain-auto_browser')
      -
      -
      - $T('explain-pause_on_post_processing')
      -
      - $T('opt-ignore_samples'):
      - $T('explain-ignore_samples')
      - /> $T('igsam-off') - /> $T('igsam-del') - /> $T('igsam-not') -
      -
      - - $T('opt-ssl_type'):
      - $T('explain-ssl_type')
      - -
      -
      -
      -

      -
      - - diff --git a/main/interfaces/Classic/templates/connection_info.tmpl b/main/interfaces/Classic/templates/connection_info.tmpl deleted file mode 100644 index 97f4ac6..0000000 --- a/main/interfaces/Classic/templates/connection_info.tmpl +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - -$T('link-forceDisc') | -$T('link-testEmail') | -$T('link-showLog') | -$T('link-showWeblog') -$T('logging'): - - - -

      $T('connections')

      - -
        - -
      • - $server[0]:$server[1]: $server[2] - - ($T('server-blocked')) -   $server[6] - -
          - -
        • $T('thread') #$thrd[0] -> $thrd[1] -> $thrd[2] -> $thrd[3]
        • - -
        -
      • - -
      - - -

      $T('emailResult')

      - $lastmail - - -

      $T('lastWarnings') ($T('clearWarnings'))

      - - $warn
      - - - - diff --git a/main/interfaces/Classic/templates/history.tmpl b/main/interfaces/Classic/templates/history.tmpl deleted file mode 100644 index 5e7c956..0000000 --- a/main/interfaces/Classic/templates/history.tmpl +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - $T('purgeHist') | - - $T('hideDetails') - - $T('showDetails') - - - -
      -

      -$T('sizeHist'): $total_size -

      -<% import datetime %> - - - - - -<% -compl = datetime.datetime.fromtimestamp(float(line['completed'])).strftime('%Y-%m-%d %H:%M:%S') -%> - - "> - - - - - - - - - "> - - - - - -
      $T('completed')$T('name')$T('size')$T('status')
      - - $compl$line.name - $line.action_line - $line.fail_message$line.size$T('post-'+$line.status) - -
      - - -
      - -
      - - -
      $T('stage-'+$stage.name.title.lower())
      - -
      $action
      - -
      - - -
      $T('category')
      -
      $line.category
      -
      - - -
      $T('msg-path')
      -
      $line.storage
      -
      - -
      -
      - - - diff --git a/main/interfaces/Classic/templates/inc_bottom.tmpl b/main/interfaces/Classic/templates/inc_bottom.tmpl deleted file mode 100644 index cc5b8b9..0000000 --- a/main/interfaces/Classic/templates/inc_bottom.tmpl +++ /dev/null @@ -1,32 +0,0 @@ - - - - - -

      $T('ft-warning')

      - $warning - - - diff --git a/main/interfaces/Classic/templates/inc_cmenu.tmpl b/main/interfaces/Classic/templates/inc_cmenu.tmpl deleted file mode 100644 index 798eb3e..0000000 --- a/main/interfaces/Classic/templates/inc_cmenu.tmpl +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - $T('cmenu-general') | - - $T('cmenu-general') | - - - - $T('cmenu-folders') | - - $T('cmenu-folders') | - - - - $T('cmenu-switches') | - - $T('cmenu-switches') | - - - - $T('cmenu-servers') | - - $T('cmenu-servers') | - - - - $T('cmenu-scheduling') | - - $T('cmenu-scheduling') | - - - - $T('cmenu-rss') | - - $T('cmenu-rss') | - - - - $T('cmenu-email') | - - $T('cmenu-email') | - - - - $T('cmenu-newzbin') | - - $T('cmenu-newzbin') | - - - - $T('cmenu-cat') | - - $T('cmenu-cat') | - - - - $T('cmenu-sorting') - - $T('cmenu-sorting') - - - diff --git a/main/interfaces/Classic/templates/inc_top.tmpl b/main/interfaces/Classic/templates/inc_top.tmpl deleted file mode 100644 index 24357d8..0000000 --- a/main/interfaces/Classic/templates/inc_top.tmpl +++ /dev/null @@ -1,67 +0,0 @@ - - - - SABnzbd+ $version - $T('queued'): $mbleft MB - - - - - - - - - - - - - -

      SABnzbd+ $version$T('signOn')

      - - - - - - $T('menu-home') | - - $T('menu-home') | - - - - $T('menu-queue') | - - $T('menu-queue') | - - - - $T('menu-history') | - - $T('menu-history') | - - - - $T('menu-config') | - - $T('menu-config') | - - - - $T('menu-cons') | - - $T('menu-cons') | - - - - - - - diff --git a/main/interfaces/Classic/templates/main.tmpl b/main/interfaces/Classic/templates/main.tmpl deleted file mode 100644 index a8c0eb1..0000000 --- a/main/interfaces/Classic/templates/main.tmpl +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - $T('link-resume') - - $T('link-pause') -| - -$T('link-shutdown') - - -

      $T("addNewJobs")

      -
      -
      -
      - $T('add') - $T('reportId') / URL - - - - - - - - - -
      - - -
      -
      -
      -
      -
      -
      - $T('addFile') - - - - - - - - - -
      - - -
      -
      -
      - - diff --git a/main/interfaces/Classic/templates/nzo.tmpl b/main/interfaces/Classic/templates/nzo.tmpl deleted file mode 100644 index 95a59c5..0000000 --- a/main/interfaces/Classic/templates/nzo.tmpl +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - -   - - - -

      $T('nzoDetails')

      -
      -
      - -
      -
      - - - -
      -
      - - - - -
      -
      - - - -
      -
      - - -

      - -
      -
      - -


      - - - -
      - - - - - - -
      - $T('nzo-selection'):$T('nzo-all') - $T('nzo-none') - $T('nzo-invert') - - - - - - active"> - - - - - - -
      $T('nzo-filename')/$T('nzo-subject')$T('size')$T('nzo-age')
      >$file.filename$file.size$file.age
      -
      - - diff --git a/main/interfaces/Classic/templates/queue.tmpl b/main/interfaces/Classic/templates/queue.tmpl deleted file mode 100644 index a466af7..0000000 --- a/main/interfaces/Classic/templates/queue.tmpl +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - - $T('link-resume') - - $T('link-pause') -| -$T('link-sortByName') | -$T('link-sortByAge') | -$T('link-sortBySize') | - - $T('link-hideFiles') - - $T('link-showFiles')| - -$T('onQueueFinish'): - -| $T('speedLimit'): - $T('KBs') -| $T('pauseFor'): - $T('minute') -| -$T('purgeQueue') - - -
      -
      - - - - - - - - - - - - $slot.priority $slot.status"> - - - - - - - - - - - - - - - - - - - finished"> - - - - - active"> - - - - - waiting"> - - -
      $T('order')$T('category')$T('mode')$T('priority')$T('script')$T('name')$T('remainTotal')$T('eta')$T('age')
      - - -
      - -
      - - -
      - -
      - - -
      - -
      -
      -
      - -
      -
      - -
      -
      $slot.filename$slot.sizeleft/$slot.size$slot.eta$slot.avg_age
      Finished$line.filename$line.mbleft/$line.mb MB$line.age
      RemoveActive$line.filename$line.mbleft/$line.mb MB$line.age
      Waiting$line.filename (set: $line.set)$line.mbleft/$line.mb MB$line.age
      - - - diff --git a/main/interfaces/Classic/templates/static/images/favicon.ico b/main/interfaces/Classic/templates/static/images/favicon.ico deleted file mode 100644 index a6de1e25b6d065dd1051bf9fcef51f2cb9ebf68a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53523 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 D?nm8m diff --git a/main/interfaces/Classic/templates/static/javascript/dropdown.js b/main/interfaces/Classic/templates/static/javascript/dropdown.js deleted file mode 100644 index 8528b92..0000000 --- a/main/interfaces/Classic/templates/static/javascript/dropdown.js +++ /dev/null @@ -1,12 +0,0 @@ -sfHover = function() { - var sfEls = document.getElementById("nav").getElementsByTagName("LI"); - for (var i=0; i a, td > a { -color:white; -} - -a.remove { -color:black; -} - - diff --git a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/darkblue.css b/main/interfaces/Classic/templates/static/stylesheets/colorschemes/darkblue.css deleted file mode 100644 index b792ee1..0000000 --- a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/darkblue.css +++ /dev/null @@ -1,28 +0,0 @@ -.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ - background-color: #44577c; - color:white; -} - -th { -background-color: #333; -color:white; -} -#first, #third { -color: #44577c; -} -.SubMenu a.current { - color:#ccc; -} -a.current:hover, a:hover { - background-color: black; - color:white -} - -td > a, td > a { -color:white; -} - -a.remove { -color:black; -} - diff --git a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/green.css b/main/interfaces/Classic/templates/static/stylesheets/colorschemes/green.css deleted file mode 100644 index 756110d..0000000 --- a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/green.css +++ /dev/null @@ -1,28 +0,0 @@ -.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ - background-color: #3f7c78; - color:white; -} -#first, #third { -color: #3f7c78; -} - -th{ -background-color: #333; -color:white; -} -.SubMenu a.current { - color:#444; -} -a.current:hover, a:hover { - background-color: black; - color:white -} - -td > a, td > a { -color:white; -} - -a.remove { -color:black; -} - diff --git a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/lightblue.css b/main/interfaces/Classic/templates/static/stylesheets/colorschemes/lightblue.css deleted file mode 100644 index 9ad3160..0000000 --- a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/lightblue.css +++ /dev/null @@ -1,28 +0,0 @@ -.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ - background-color: #5ca5ff; - color:white; -} -#first, #third { -color: #5ca5ff; -} - -th { -background-color: #000; -color:white; -} -.SubMenu a.current { - color:black; -} -a.current:hover, a:hover { - background-color: black; - color:white -} - -td > a, td > a { -color:white; -} - -a.remove { -color:black; -} - diff --git a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/red.css b/main/interfaces/Classic/templates/static/stylesheets/colorschemes/red.css deleted file mode 100644 index 8ddd8fb..0000000 --- a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/red.css +++ /dev/null @@ -1,28 +0,0 @@ -.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ - background-color: #CC0033; - color:white; -} - -th { -background-color: #333; -color:white; -} -#first, #third { -color: #CC0033; -} -.SubMenu a.current { - color:black; -} -a.current:hover, a:hover { - background-color: black; - color:white -} - -td > a, td > a { -color:white; -} - -a.remove { -color:black; -} - diff --git a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/white-black.css b/main/interfaces/Classic/templates/static/stylesheets/colorschemes/white-black.css deleted file mode 100644 index 9ed0d8c..0000000 --- a/main/interfaces/Classic/templates/static/stylesheets/colorschemes/white-black.css +++ /dev/null @@ -1,29 +0,0 @@ - -.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ - background-color: #4e4e4e; - color:white; -} - -th { -background-color: #333; -color:white; -} -#first, #third { -color: #4e4e4e; -} -.SubMenu a.current { - color:#ccc; -} -a.current:hover, a:hover { - background-color: black; - color:white -} - -td > a, td > a { -color:white; -} - -a.remove { -color:black; -} - diff --git a/main/interfaces/Classic/templates/static/stylesheets/default.css b/main/interfaces/Classic/templates/static/stylesheets/default.css deleted file mode 100644 index d4ad71c..0000000 --- a/main/interfaces/Classic/templates/static/stylesheets/default.css +++ /dev/null @@ -1,257 +0,0 @@ -body { - font-family: 'Verdana', 'Helvetica', 'Sans-serif', 'sans'; - font-size: 12px; - line-height: 18px; - padding: 15px; - margin: 0px; -} - -a { - text-decoration: none; -} - -form { - margin: 0px; - padding: 0px; - border: none; - display: inline; -} - -legend { - font-weight: bold; -} -div.EntryBlock { - display: inline; -} -div.EntryBlock form { - display: inline; -} -fieldset.EntryFieldSet { - vertical-align: top; - display: inline; - padding: 7px; - margin: 5px; -} -.MainMenu a { - font-weight: bold; - padding: 3px; - padding-bottom: 7px; - text-decoration: none; - padding-left: 12px; - padding-right: 12px; -} - -.SubMenu a { - font-weight: bold; - padding: 3px; - padding-bottom: 7px; - text-decoration: none; - padding-left: 12px; - padding-right: 12px; - /*Stop mid-word wrapping to next link */ - display: inline-block; - -} - -a.current { - border: none; - padding: 3px; - padding-bottom: 7px; - padding-left: 12px; - padding-right: 12px; -} - -a.current { - color:white; -} - -a.current:hover { - border: none; -} - - -.block { - padding: 10px; -} - -.blockWithBorder { - display: block; - border-width: thin; - border-style: solid; - padding: 5px; -} - -.MainMenu { - display: block; - padding: 5px; - -} -.SubMenu { - display: block; - padding: 5px; -} - -table { - font-size: 9pt; - margin: 0px; -} -td, td { - padding: 5px; -} -th { - font-weight: bold; -} - -tr.active { - font-weight: bold; -} - -tr.finished { - font-weight: normal; -} - -tr.waiting { - font-style: italic; -} - -td.pre { - font-size: 13px; - font-family: 'courier new',courier,serif; - font-weight: bold; -} - -h1 { - text-align: left; - font-size: 19px; - font-weight: normal; - padding-bottom: 4px; -} -* html h1 { - padding-bottom: 2px; -} -h2 { - font-size: 18px; - font-weight: bold; -} -#first { - font-size: 33px; - font-family: Arial, Helvetica, sans-serif; - font-weight: bold ; - text-transform: uppercase; - padding-left: 20px; -} - -#second { - font-size: 30px; - font-family: Arial, Helvetica, sans-serif; - font-style: italic; - text-transform: lowercase; -} - -#catchfrase { - display: block; - position: relative; - top: -18px; - float: right; - text-align: right; - font-size: 10px; - font-weight: normal; -} -.footer { - text-align: center; - padding-bottom: 5px; - margin-top: 20px; -} - -#progressBar { - height: 6px; - width: 90%; - margin: 0px; - margin-left: auto; - margin-right: auto; - padding: 0px; - text-align: left; -} - -* html #progressBar { - height: 8px; - he\ight: 6px; -} - -#percentageBar { - position: relative; - height: 6px; -} - -#queueTable, #historyTable { -width:100%; -} - -#row_del, #row_order, #row_mode { -width:75px; -} - -.verbosity_link{ -padding:4px; -} - -.normalheight, .doubleheight, .tripleheight, .pattern, .result, .heading1, .heading2, .heading3 {float:left; border-left:1px } -.normalheight, .doubleheight, .tripleheight, .heading1 {width:125px;} -.normalheight {} -.doubleheight {height:30px;} -.tripleheight {height:60px;} -.row{clear:left;} -.pattern, .heading2 {width:70px} -.result, .heading3 {width:125px} -#Keytable {text-align:center;} -.heading1, .heading2, .heading3{font-weight:bold; background-color:black; color:white;} - - - -/* -Son of Suckerfish Dropdowns -By Patrick Griffiths and Dan Webb. -http://htmldog.com/articles/suckerfish/dropdowns/ -*/ -#nav, #nav ul { - padding: 0; - margin: 0; - list-style: none; -} - -#nav a { - display: block; - width: 4em; - padding-bottom:0; -} - - -#nav li ul { - position: absolute; - width: 6em; - left: -999em; - background-color:white; - -} - -#nav li:hover ul { - left: auto; -} - -#nav li:hover ul, #nav li.sfhover ul { - left: auto; -} - -#nav{ -display: inline; -display: -moz-inline-box; -display: inline-block; -width:100px; - -} -/* -Son of Suckerfish Dropdowns END -*/ - -#speedbox{width:36px;} -#Keytable,#Keytable2,#Keytable3{display:none;} \ No newline at end of file diff --git a/main/interfaces/Classic/templates/static/stylesheets/defaultcolors.css b/main/interfaces/Classic/templates/static/stylesheets/defaultcolors.css deleted file mode 100644 index 0fe3b17..0000000 --- a/main/interfaces/Classic/templates/static/stylesheets/defaultcolors.css +++ /dev/null @@ -1,138 +0,0 @@ -body { - background-color: #fff; - color: #000; -} - -a { - color: #000; -} - -input, select { - -} -legend { - color: #000; -} - -fieldset.EntryFieldSet { - border-color:#3a3a3a; -} -.MainMenu a { - color: #4e4e4e; -} - -.SubMenu a { - color: #f5f5f5; -} -a:hover { - background-color: #ccc; - color:black; -} - -a.current { - color: #ccc; - background-color: #000; - -} - - -.blockWithBorder { - border-color: #b5b5b5; - background-color: #eeeeee; -} - -.MainMenu { - background-color: #f5f5f5; - -} -.SubMenu { - background-color: #000; -} - -table { - -} - -th { - background: #fff; - -} - -tr.even{ - background-color: #222222; - color:white; -} - -tr.evenLine { - background-color: #f5f5f5; -} - -tr.odd { - background-color: #222222; - color:white; -} - -tr.oddLine { - background-color: #f5f5f5; -} - -h1 { - border-bottom: 1px solid #4e4e4e; -} - -#first { - color: black; -} - -#second { - color: black; -} - -#catchfrase { - color: black; -} -.footer { - background-color: #f5f5f5; - border-top: 1px solid #000; - color:#4e4e4e; -} - -#progressBar { - background-color: #cdf; - border: 1px solid blue; -} - -#percentageBar { - background-color: #9bf; -} - -.queuelink{color:black;} - -.SubMenu, .blockWithBorder , a.current, tr.even, tr.odd{ - background-color: #44577c; - color:white; -} - -th { -background-color: #333; -color:white; -} -#first, #third { -color: #44577c; -} - -a.current:hover, a:hover { - background-color: black; - color:white -} - -td > a, td > a { -color:white; -} - -a.remove { -color:black; -} - -.feedEnabled{color:green;} -.feedDisabled{color:red;} diff --git a/main/interfaces/Concept/README.txt b/main/interfaces/Concept/README.txt deleted file mode 100644 index c89e314..0000000 --- a/main/interfaces/Concept/README.txt +++ /dev/null @@ -1,36 +0,0 @@ - -Concept 0.1 for SABnzbd+ 0.5 | Nov 28 2009 -assembled by pairofdimes - see LICENSE-CC.txt - -============== -LIBRARIES USED - -jQuery -http://jquery.com -Copyright (c) 2009 John Resig -See LICENSE-MIT & LICENSE-GPL - -Sizzle CSS Selector Engine -http://sizzlejs.com -Copyright (c) 2009 The Dojo Foundation -See LICENSE-MIT, LICENSE-BSD, & LICENSE-GPL - -jQuery Grid -http://layout.jquery-dev.net -Copyright (c) 2008 Tony Tomov -See LICENSE-MIT & LICENSE-GPL - -jQuery Layout -http://layout.jquery-dev.net -Copyright (c) 2008 Fabrizio Balliano & Kevin Dalman -See LICENSE-MIT & LICENSE-GPL - -jQuery UI -http://jqueryui.com -Copyright (c) 2009 jQuery UI authors (http://jqueryui.com/about) -See LICENSE-MIT & LICENSE-GPL - - -The images templates/static/images/logo.png,sabnzbdplus.ico were provided by inpheaux. - -All other images and stylesheets provided by jQueryUI (see notes above). diff --git a/main/interfaces/Concept/licenses/LICENSE-BSD.txt b/main/interfaces/Concept/licenses/LICENSE-BSD.txt deleted file mode 100644 index b90d331..0000000 --- a/main/interfaces/Concept/licenses/LICENSE-BSD.txt +++ /dev/null @@ -1,18 +0,0 @@ - = Regents of the University of California - = University of California, Berkeley - = 1998 - -In the original BSD license, both occurrences of the phrase "COPYRIGHT HOLDERS AND CONTRIBUTORS" in the disclaimer read "REGENTS AND CONTRIBUTORS". - -Here is the license template: - -Copyright (c) , -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/main/interfaces/Concept/licenses/LICENSE-CC.txt b/main/interfaces/Concept/licenses/LICENSE-CC.txt deleted file mode 100644 index ad5f44f..0000000 --- a/main/interfaces/Concept/licenses/LICENSE-CC.txt +++ /dev/null @@ -1,63 +0,0 @@ -http://creativecommons.org/licenses/by/3.0/ -http://creativecommons.org/licenses/by/3.0/legalcode - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - 4. to Distribute and Publicly Perform Adaptations. - 5. - - For the avoidance of doubt: - 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, - 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. - 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/main/interfaces/Concept/licenses/LICENSE-GPL.txt b/main/interfaces/Concept/licenses/LICENSE-GPL.txt deleted file mode 100644 index d511905..0000000 --- a/main/interfaces/Concept/licenses/LICENSE-GPL.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/main/interfaces/Concept/licenses/LICENSE-MIT.txt b/main/interfaces/Concept/licenses/LICENSE-MIT.txt deleted file mode 100644 index e9c74d0..0000000 --- a/main/interfaces/Concept/licenses/LICENSE-MIT.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) - -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. \ No newline at end of file diff --git a/main/interfaces/Concept/templates/main.tmpl b/main/interfaces/Concept/templates/main.tmpl deleted file mode 100644 index 4093a5f..0000000 --- a/main/interfaces/Concept/templates/main.tmpl +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - SAB+ Concept - - - - - - - - - - - - - - -

      Loading...

      - -
      - - - - -
      - - - - - -
      -
      - -
      -
      - - -
      - -
      - - -
      - -
      - -
      -
      -
      -
      -
      -
      -
      - -
      - -
      -
      - -
      -
      -
      -
      -
      -
      - -
      - -
      - -
      - - - \ No newline at end of file diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_30_cccccc_40x100.png b/main/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_30_cccccc_40x100.png deleted file mode 100755 index 5473afffbc2662173f5af5c27d966c072de8039b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`Ta z<$H)q$%zYm;;c7~Kd+Iuj%U9o62cnl7#bi-T}u42J&U%yNJ})(84RATelF{r5}E*| CoG&2& diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_50_5c5c5c_40x100.png b/main/interfaces/Concept/templates/static/images/darkness/ui-bg_flat_50_5c5c5c_40x100.png deleted file mode 100755 index 5950a8db9e64e8d00bb28726cb869947abfdc7fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7&<)v zy**H+ z`**vX!*n&P7dc50adyfl&Nwm{9INpTEp=t_C|dt|%9X7Z^~WTNlbGI|=7;M1& diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-bg_glass_40_ffc73d_1x400.png b/main/interfaces/Concept/templates/static/images/darkness/ui-bg_glass_40_ffc73d_1x400.png deleted file mode 100755 index 35ec0d9d290646cc4e487ad973dde7e979829d00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq`W*`978O6-=5zn*kB-V#9{8A z5YLNW97J7a98qL7IHPXurDyRjc|Mbg@8{^ExfYyF9&D2iMXXNan#^1HV2J>C;u_aS d;^%;}$C#b3amU=xZ39`u;OXk;vd$@?2>__OD+K@m diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-bg_gloss-wave_25_333333_500x100.png b/main/interfaces/Concept/templates/static/images/darkness/ui-bg_gloss-wave_25_333333_500x100.png deleted file mode 100755 index b1b03b677165b6628a426bd69f5677f125ecc43c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1874 zcmb`IYfzI{8pmJ2>grV17G0@K0tCwr|_L4FG`cX~&a)0{{Wbe*M`mHv8AS(OX;q*z!_Z@>{1%MGiyu zR|xbXaPnOIdD+Ux{R6(br<1qK{_>6OVJiyw2cO!f{+2bo_c6Uf@ak*A-gUS0ya}i{ z;V|n10Kl4N15Q?43I?7#{{I#OKX|+gVL-*#_gjMA40sU-?0os>#q4m5zYlyNaNy0i zw^Rg@n2PM1EYnI!r8-ve`DR?E&r)g^!dw?^1cUDl{jIC0LqtYJ2-{< z^zg_cP8X>+p|zOkQCSM#xGKcaAOiy-SU^Z1WD^&VjsjU9nusJEZ09-SzK7LC5*abv z3bV0}9Jo{3#yNAHDALv}?}};!m&BKh#+>m@(WkDJjK<89uTGHg@D-UX>-ETjTK)~$ zOr)}HQ5Q=cqfulXw=zX=4D4-ulurld1T(#Bl#sa@S5 zp`alO&km=OxtEWjt&`%U^>H+i7?)HTR1x^ff5x*RW+|o>hxeK_Kj$^Ig8CR zEqR6U6p+fT895w+wE0LvO;>FXYFOy(XDztA-TA3z$n$NTg#FEvs-1liN z_Nd1G7J&@g9g}bvL8^2_2}WvrG*#cC7wK731W2GBz+jOT^+0{`PNdB!ES|*3C0zQ5 zaN3awY3wD=vgoBTW8JhS)k9-u6((jG8W5J=IvOi0csINJs#yO7^pr@JOg^2@yWSr$ z9H89a;5ALfT5P*q-ysOn-(zrTNv~mw&fses8XC-rM*OQ4w5MNgP4KJ~Bd(HLy{%0; z7gd#cTlMZ*$k+Sqt!4!>k+M1O!(%Np{^9g<`lR~Fc_pDPM+vVC=QPeD`(JRRC~er2 zCi|jkNQ@4;LqAmPTU#w?hmZF1R-aHl=em*uW2JB!U9hT&`^2=uJOOET@j`Ok0#d6 z#(L6k=6ErD*U;XUposM4a^d3L zp-T^hYj>Xmwtaag;LpHTG_dVQw4W-o!G86VCAjbROZ*&Db`T>1l~(J<&d;6s33{d9 z`^k6n9Y1mYo9(hMp0$+wN`M2(jWR#7`wh+LARzCn4N56D%KVR4-u*2}bB{fPi=Paw z6gk|PBCK5=Be17ZBA!UgCS^bmQTXUH0T|@vR`&$2%0`k{CKz4&U2QEYpeHEbxx1yMjh$T zgH4%u$59+kAz#93N7_0O1=Cc<4+g{{!VmvO`@jXnG--~=JzU@`t0Wk2^`7?Wk*WGc5TVydoVC|KVrIzB za*zX6duE2%bCs^gjG+nlgyq-B7Rgi2dP)%$N`p>Fzv0(c&);tlsH5~@w3Wa6?;|Hv zNsmEwPY{wtt{bi6qxNY>L|gaRm?0CRoQUiZ%h) zq(G*nxm^ELo_SHJGxFKNZ)BmA%i(Z}p9hp_yZ~Eg@0lwdJ2rk#AT1>$`NrEH|L$Kk CqOPR? diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-bg_highlight-soft_80_eeeeee_1x100.png b/main/interfaces/Concept/templates/static/images/darkness/ui-bg_highlight-soft_80_eeeeee_1x100.png deleted file mode 100755 index e56eefd612ae74339bd45ae91ddfc2ae2eb7092b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l$xiDV~E7mQ98UlM diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_25_000000_1x100.png b/main/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_25_000000_1x100.png deleted file mode 100755 index 3525eb9ff4c26d2c74003e7e2fdf09cccf7c9d54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%}VPV~E7mvV v4~LtZ8=D#sywNe@G+8Wgr}4YKCJTdvGLyysE7#8hH8FU)`njxgN@xNASlk-& diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_30_f58400_1x100.png b/main/interfaces/Concept/templates/static/images/darkness/ui-bg_inset-soft_30_f58400_1x100.png deleted file mode 100755 index 2b6a9f92408ede5e967497f0c917d99e06a2e7f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l#Qp0V~E7myZwe-3<^BV`X67{ z-Q39+s_r<4W%}b;6Bcgql6WBPGHXN18AjIAtjA9+sZ48Zd&-pi=Idqi7tQ7DO<7N; RDFDr3@O1TaS?83{1OO`oCW`<7 diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-icons_222222_256x240.png b/main/interfaces/Concept/templates/static/images/darkness/ui-icons_222222_256x240.png deleted file mode 100755 index ee039dc096a38a3753f92519546eee94bcfbeffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-icons_4b8e0b_256x240.png b/main/interfaces/Concept/templates/static/images/darkness/ui-icons_4b8e0b_256x240.png deleted file mode 100755 index fdaa72a0263f115f0268927c5aa4ad0f05dd9172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 zcmd^?`8O2)_s3^phOrG}UnfiUEn8(9QW1?MNkxXVDEpFin2{xWrLx5kBC;k~GmPmYTG^FX}c% zlGE{DS1Q;~I7-6ze&TN@+F-xsI6sd%SwK#*O5K|pDRZqEy< zJg0Nd8F@!OxqElm`~U#piM22@u@8B<moyKE%ct`B(jysxK+1m?G)UyIFs1t0}L zemGR&?jGaM1YQblj?v&@0iXS#fi-VbR9zLEnHLP?xQ|=%Ihrc7^yPWR!tW$yH!zrw z#I2}_!JnT^(qk)VgJr`NGdPtT^dmQIZc%=6nTAyJDXk+^3}wUOilJuwq>s=T_!9V) zr1)DT6VQ2~rgd@!Jlrte3}}m~j}juCS`J4(d-5+e-3@EzzTJNCE2z)w(kJ90z*QE) zBtnV@4mM>jTrZZ*$01SnGov0&=A-JrX5Ge%Pce1Vj}=5YQqBD^W@n4KmFxxpFK`uH zP;(xKV+6VJ2|g+?_Lct7`uElL<&jzGS8Gfva2+=8A@#V+xsAj9|Dkg)vL5yhX@~B= zN2KZSAUD%QH`x>H+@Ou(D1~Pyv#0nc&$!1kI?IO01yw3jD0@80qvc?T*Nr8?-%rC8 z@5$|WY?Hqp`ixmEkzeJTz_`_wsSRi1%Zivd`#+T{Aib6-rf$}M8sz6v zb6ERbr-SniO2wbOv!M4)nb}6UVzoVZEh5kQWh_5x4rYy3c!871NeaM(_p=4(kbS6U#x<*k8Wg^KHs2ttCz<+pBxQ$Z zQMv;kVm5_fF_vH`Mzrq$Y&6u?j6~ftIV0Yg)Nw7JysIN_ z-_n*K_v1c&D}-1{NbBwS2h#m1y0a5RiEcYil+58$8IDh49bPnzE7R8In6P%V{2IZU z7#clr=V4yyrRe@oXNqbqo^^LvlLE?%8XaI&N(Np90-psU}7kqmbWk zZ;YBwJNnNs$~d!mx9oMGyT( znaBoj0d}gpQ^aRr?6nW)$4god*`@Uh2e+YpS@0(Mw{|z|6ko3NbTvDiCu3YO+)egL z>uW(^ahKFj>iJ-JF!^KhKQyPTznJa;xyHYwxJgr16&Wid_9)-%*mEwo{B_|M9t@S1 zf@T@q?b2Qgl!~_(Roe;fdK)y|XG0;ls;ZbT)w-aOVttk#daQcY7$cpY496H*`m@+L zeP#$&yRbBjFWv}B)|5-1v=(66M_;V1SWv6MHnO}}1=vby&9l+gaP?|pXwp0AFDe#L z&MRJ^*qX6wgxhA_`*o=LGZ>G_NTX%AKHPz4bO^R72ZYK}ale3lffDgM8H!Wrw{B7A z{?c_|dh2J*y8b04c37OmqUw;#;G<* z@nz@dV`;7&^$)e!B}cd5tl0{g(Q>5_7H^@bEJi7;fQ4B$NGZerH#Ae1#8WDTH`iB&) zC6Et3BYY#mcJxh&)b2C^{aLq~psFN)Q1SucCaBaBUr%5PYX{~-q{KGEh)*;n;?75k z=hq%i^I}rd;z-#YyI`8-OfMpWz5kgJE3I!3ean6=UZi!BxG7i(YBk? z02HM7wS0)Wni{dWbQMRtd-A)_Az!t>F;IwWf~!*)-Az4}yryNkz&9)w>ElA80Oc`6 zHo#9H!Y3*Qx9n@Jn)!w6G^hb;e_n8zpIyXCN`JFkPc)^Q?2MsLNFhMgrcZI-<#1ne zjH;KFf?4eAT9mQZ}ZfHLGA#d%s;SZK4p0FwZT2S^{ zQ2BG1xJsbK6?yrHTjJi|5C0u=!|r!?*4FL%y%3q#(d+e>b_2I9!*iI!30}42Ia0bq zUf`Z?LGSEvtz8s``Tg5o_CP(FbR0X$FlE0yCnB7suDPmI2=yOg^*2#cY9o`X z;NY-3VBHZjnVcGS){GZ98{e+lq~O$u6pEcgd0CrnIsWffN1MbCZDH<7c^hv+Z0Ucf0{w zSzi^qKuUHD9Dgp0EAGg@@$zr32dQx>N=ws`MESEsmzgT2&L;?MSTo&ky&!-JR3g~1 zPGTt515X)wr+Bx(G9lWd;@Y3^Vl}50Wb&6-Tiy;HPS0drF`rC}qYq22K4)G#AoD0X zYw$E+Bz@Zr^50MAwu@$?%f9$r4WHH?*2|67&FXFhXBrVFGmg)6?h3^-1?t;UzH0*I zNVf9wQLNLnG2@q>6CGm>&y|lC`iCFfYd}9i%+xkl^5oBJ?<;aneCfcHqJh7Yl5uLS z9Fx-(kMdcNyZejXh22N{mCw_rX1O!cOE&3>e(ZH81PR95wQC37En4O{w;{3q9n1t&;p)D%&Z%Nw$gSPa!nz8Slh7=ko2am)XARwOWw zpsz0~K!s{(dM$NB=(A=kkp>T(*yU6<_dwIx>cH4+LWl282hXa6-EUq>R3t?G2623< z*RwTN%-fgBmD{fu*ejNn)1@KG?Sg*8z3hYtkQJQjB6 zQ|x>wA=o$=O)+nLmgTXW3_6diA;b4EY{*i*R%6dO2EMg z@6g?M3rpbnfB@hOdUeb96=~I?OIA3@BWAGmTwiQ{x5Cqq<8c10L!P zd@Qk^BseTX%$Q7^s}5n%HB|)gKx}H$d8Sb$bBnq9-AglT2dGR2(+I;_fL|R4p$odJ zllfb0NqI)7=^z~qAm1V{(PkpxXsQ#4*NH9yYZ`Vf@)?#ueGgtCmGGY|9U#v|hRdg- zQ%0#cGIfXCd{Y)JB~qykO;KPvHu|5Ck&(Hn%DF~cct@}j+87xhs2ew;fLm5#2+mb| z8{9e*YI(u|gt|{x1G+U=DA3y)9s2w7@cvQ($ZJIA)x$e~5_3LKFV~ASci8W}jF&VeJoPDUy(BB>ExJpck;%;!`0AAo zAcHgcnT8%OX&UW_n|%{2B|<6Wp2MMGvd5`T2KKv;ltt_~H+w00x6+SlAD`{K4!9zx z*1?EpQ%Lwiik){3n{-+YNrT;fH_niD_Ng9|58@m8RsKFVF!6pk@qxa{BH-&8tsim0 zdAQ(GyC^9ane7_KW*#^vMIoeQdpJqmPp%%px3GIftbwESu#+vPyI*YTuJ6+4`z{s? zpkv~0x4c_PFH`-tqafw5)>4AuQ78SkZ!$8}INLK;Egr;2tS18hEO5=t;QDmZ-qu?I zG+=DN`nR72Xto{{bJp||`k}-2G;5#xg8E~xgz22)^_Z;=K|4@(E&5J)SY2of=olcw z5)@L)_Ntcm!*5nEy0M9v0`S33;pO4TN;>4(Z+19p_0>u#e-vE zXCU(6gAvu~I7Cw(xd%0e59MNLw^U37ZDbsBrj%eDCexw8a3G`nTcXVNL6{B7Hj@i& zbVB{;ApEtHk76q08DJ48dSxd$C(;$K6=FpU<~l9pVoT9arW^Vu{%Bcn4`eIpkOVC| z$)AKYG_`ypM{0@BUb3^9lqi_c?ONH|4UJMJWDowMVjacycX7}9g={O7swOB+{;+?; zjBo!9?+nd)ie#x5IbFW-zBOo0c4q@9wGVt5;pNt`=-~Zgcw#*`m($6ibxtZ`H=e=} zF#GZ~5$%AUn};8U#tRem0J(JTR}d4vR(dgK2ML~lZsPhayJ2h1%sD4FVst| zKF)+@`iNzLRjg4=K8@**0=5cE>%?FDc({I^+g9USk<8$&^qD~@%W0i4b|yMG*p4`N zh}I!ltTRI8Ex$+@V{02Br%xq#O?UlhO{r8WsaZnZCZq0MK9%AXU%MDLT;3=0A9(BV z9VxxxJd7jo$hw3q;3o?yBLmA=azBUrd9>-<_ANs0n3?-Ic*6&ytb@H~?0E(*d>T5n z-HiH2jsDf6uWhID%#n>SzOqrFCPDfUcu5QPd?<(=w6pv1BE#nsxS{n!UnC9qAha1< z;3cpZ9A-e$+Y)%b;w@!!YRA9p%Kf9IHGGg^{+p`mh;q8i7}&e@V3EQaMsItEMS&=X plT@$;k0WcB_jb;cn%_Idz4HO$QU*abf4}+wi?e96N>fbq{{gRyDTM$4 diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-icons_a83300_256x240.png b/main/interfaces/Concept/templates/static/images/darkness/ui-icons_a83300_256x240.png deleted file mode 100755 index b9e3ad7c87419228390de734786ee856795d9ad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 zcmd^?`8O2)_s3@pGmLE*`#M>&Z`mr_kcwz5Nh&g=McJ3E!;CE1E0ryV5Ro;>nvtvt zk&I==Xd;cVGZ@>q_xtnx{1u&;vfH*l%vP6i@I&54 zi}8QuLKq5}SzM61c3jh5HBKi1*LkmRsOO})L|ap2#ru-fHM#I2d*0vMO9Tnn(yztky#f#e z!9N_Uv3HLNWC1UQwZv-jvVzWj(8O3YDXFarQRan$IPYVZe2=Eft^9bOu?jd#+Yb&E zAh0Xy;;`pull9pP+o3ryrA#hmM}w$M+gs$H+-9LQ{L1TaRU^6Z_!5Y@0P!Ov7PbU> zB_;6|!31<&sBN2C0gW_Hv;f*;8={4Yr zKLwZOg@MeN3)f5J3a|*I17*y!*t9{6BP_MYhAfVV$u3 z_waOGUc_d)*d|A!y*s2y0;%}yWX`m})ESQiMpyYTsjymg8tH&TdbS=6^SQGo2KZ~b z;k+q*)g+;$LnyHulp9cB6 z)*jY<*X`tbgH#RR=ql`cQ*ORdp;Y4lT8qrLc^M~woP*k+)cD4-`w#j!SWCA{p8kA% zumoAZ?t`Qg?SZX@*-o1RmfoObQnDg2@%?P!IYdA5nMv)cktUhHfZZ?H`bn0-9Vxky zS)|_JhuBSFXsi_of)?vP02vRrw;+&r5o1Mj`}|gLm?PGQPmsS$#_hFCMLOrMJj^Rb z9H|a`kSM2tTfKZ^^9PLUyfCEqG!P<-&O;YGMPP$t-Z}(Xz2TD}M^PlYk~^;zkal$? z99r8G<$v6#Z-o-7@acWM|3JJyO?PnyE7R>J2vWJ+sv`->Y$JubkfT_5`FBU5bf%d$HKc3C!v595kpa?EUxjhFhGpDUB;8URcE48FZ6C~pM z?TsPz}E5uCqbcy;7j=%Qh`glqEA%~1X(a<)eKO5Fe|JLD-ndZ-vnW^D`@n%jaMYzj7 zX?raMEa{g1Nj)C|3n6_>`G=O&^%pa}EN%%e$?h`bRVBvCr~}e3C+?iuB1#;!vi)tNs5B&|A-m~FQY;|?)ml{2m(GmmJUV5BH^*AGgo&rM~TLrM% zI)7#e)wr@YPAuLCPSKLjn6eRMI>cP8t6Wg8#Wb_A>;B&P=Cex;@;1Wp)a+s|1G0QL(>({XvomJDEz;sJHIX z=l;@tV0P=i_K@oDC1PIi$w6U~CZ#U$aNt$;S-^HlJBv=Pdn9M%`3T&aUiinD#Uh=|lsl zKs#ijM@;p5Zs^x|%d#$Y%ZkNjF9N$L9}5hGb`GLkH$<>5oRRhnD%3g2OW4)vQv-tn z2tcm1bQJ>Y!0mTL`jc94jM-!C88d{)=r{013mk{1KyfTyWHSuF1;k{kK2-Kc*L4#TM+TiNs0G5;k{7sfJD_jGfDWVfp0G1Zt3@1F%l8iqe zB~eg!IKzidOOGe!bnb#^R+K(?B*(xrV>V{nRAF7UjU0h^v`XKIVu3c8`YI(Av6N`~ zg@;4iFaQZpaQ#6RU~iNUZD49nXqwpDpY}fKbGqZ^ZJtR}eq^A2a|iz_n-o6FTAH@q zoDLu(B(4>JHPqD!EoG}%+TD}ieGmC-0!)Cy+>_j0BB&nfsgyNsvjzSU@hD$cA{nTF zCa?p30^z>VvDjrl8?~%2+^1O@Ar9w-mIXLOt)&e%d-TOpdq^&5`lK|RrN- zUkj;x4wq03vb>_85P3_&=lkKmV{X**?#|k}{eU+->pE(^;nHrEy z_5p!?yLKtJIAu(}iUWRtyAFh9W;EMJckeDaao&_sQO0wj9(!%#QF{WccW<_z3*t#I zM5!34VHSufPC*mT<*+541vg&)&GjHHK2>>XCW@eNmf%XMX6k+d(?+y1{MQQusX%4C zJ=+wTY%}dOUqZYV|qu+5w4I z$wia55iRA{VOa2fCa*&*2UY&X_iDt9&WL_qj9zw66DZ4=FqL_n(zPp`z!Yp~PyMb1 zlqcFLC`7Z((8f((dQEnYH$GQ6UK9{d1Wu`Isp2h|*V$L%n*7p9YDjyZFB6jx|dy0CF_N$(!PtWpXW|VHymHavCPYB^nw(Hgod|I_Fu3;rKwf1hYxVrC+eOU?K*55t6rGomp<$8`G9N$1v zq?zL!;1Bmzc_^J^YaR^9+B!dAZ`a#aH@P{oHjgiKA*lqSm2xv~FDVpZZt7m}@2p6o zA3v($k9_F)+}KvZr#aRmR^$cO0dY#D;+egRuHYj^;evY^ zuclz%#Vdoa?@dU1uhSM6hHFRq((n>q(8z#WEL67Ec`A2OZv_l(rdFR&OFDcYsP4J2 zJD+OrOAf`vLupF+6SJ(3;3qT!eXd)+gFlECJ2(R5SR))RrjjU91rZRr4t7<=H= zFzuG#M)%xq`9@nV>f@unn(7OO$9#G zAN*KqGlh3t2AeaPST|k#kXxE4;DPw`rVFJ>G;52w`rTVAdk3gO0@3gz+JIl32Vo0( zt5XGA?8*7Y$eCbWO(6dwAHjAq@MyXVh|`TJ25A{}FY+6eLi`S1A(U~StQ^75MMo;8 zV^YVcSQ2%I)N)e}B`sQ|14&h6IyD8Hkd>9asm8TNTX=`J7Ty@07_6T#CWBg6V(~83 zdmB8ulj`{*f%y7QR|9*rR>+Xsnw`m9~tV;Nd7E?N<3y9TIX})&W=K z)jJsp?23tBh;j2S;Zx45q3O`u?BF1|J63c>utzbfA61tr~&AUrTIT?BkRqx~a3 zBp(}6W*;r>D!X0l)WQqnA}fZLZjU5u_{%rI`4@Jth&OVU9d@zj_6&$m-}PJieBafQ z0dz{*?NM+q?PF@(b`l~V)>%n1JnLot_Dxon8gF;Ty492Li0wqsp9O9T1>3Ki{P~gx80)vK#|s zTCs%IvA?S0`|z91n{Hw%t_XavQ*?PGDy3%7o6VY_h=%)W9P?Q}f)v+y^ExGA)&7>Y z2T04?244TjiA8wygy4(_K2+?#>%W(}6X+2lITtOsAD;HZho(5UE`_nF3QH4+s{FRW zMP+(ZfKcJw)fE$`%VYypN^}k&&QU=HzQ+m1Mmyq=nIv7=(iHA4mlX{VJxG-*pPHW|4@J8k#S86HRaVi560s}HCz9q?SAB5W??XtL0 z#wRq64kBJV`zoa|o&gqtVpn!ja--aE+M(8j5bo2$u6AUD6uOaL(vQ{!k0AEaPAQgU zXN8mC#^%;fq$q8P*-Q4eQ<8;~dfh8qyJ68P_?)4CRIHQu{x0^}fUsSqa`hy+IRN@^ znECC$;ho`GFVSp`V&}^@-nRwM$?a?arT2j^BfZ@_7ae_Gj7+YF8Dj67G;_#IZcExY9p=kxU$zG+w`CQmZ}SU7Z<>q3L{ z>frCy7;AI?vM%N|f06$rYnVA^IlE*ph&!bJh_HU8$$ILy>!5TjpXCLgfV9qnJ5i^kK z?H1%eYV@xjeQh_LZ-Hon@|TYZHw)2^Kug-t=flAqEIYd&FEV^Tfg0OB^heQv55ih7 zh2DaDA>oEZ{Vl=gD?ZY;r*;CmuiQUcTEhh!6}+jgiL9Wzj)Q#K4i?F5;q>-*7$gh% paEc1DI3`<(O3xvulR&VAkQJHZBho(m=l0{{SA7UpJl008iB z3Rqvn`1P1SiomLXkg776;)RSXXXV1Iqu_@e2%8dEPZ*NvG6-d*$oWlBXKKg zV({l@ll0gM+F;pm#SBg*2mQ!Rn_HBhT&5w_d`jyG6+_vuxMHXoKj|Yh2EGJ-B`N+E z$pmy>sA-*C0S`BfHv`&Y>Z626r?uZY8?`zzbXj7u1}` z;TS<~e1eY(jD4j)wElgyeR*V7`qdhf3S5Vcdq_R*a&F^r|9|M*i>!yeL)xMH?-6M_ zJjl&7(M|RQJ2z;fI7;E!$?Pfq$usWpjLxzlazT~K6v`ft@@P32;&o$5@b}Yj#d~r) z9^2%vhdyIgOXOGiCNOR_sjx3j8*01pUqQBn7r}I@E53HUy&DusRETO9wG~Rdfx=Ta zwD>0smtXx6l#X>f`lTc3c!pmLbwTP$Zfe7s__87<&i+s33P`Udim99RAA$T_Y7T3^ z>vV9wL8Sc0x! z_eRl4cEFZ`EXPfL3omdIIY|MS@P4-79I_Af%(!ONP=msk&*mFs^(0gOj->4HEJ}Ca zL(HZSEXEQH#fbJDfQ^RQnvtlx$kD>NeLhPB+yUp!E5O$&?fP1}JdI;l4(=H(hEfAQ zNRU;>uU@{f`2)^*UI^NA8VHraDlXrE*?OWOs z7D#P(ftiy|@ab?=t923@#mR}=S6GNj1 z?mTR4hby}vE*2>Wg7-X!KAz3vwvJ)qVMtB~**$wrQ^&0>;8UR6E7imZV-)iH?Tt~> zX-EGVhMYWVxX}dU)MQaN+jv0*8;3JBy*az#1aW|^_4%i?mlU$yRTy>-wCJJVC==P> zEx=B7cZ&E7jJ@{Z{CG+0A-lAG;ovs3FALs8|JLq?o#M-to~~wx^JI)GhP%l=X?-mS zEbfx}Nj)D74<>(1{)gt2^%v7UAlLYp6gO$gsv=`$#2)3F9ed8@mcK6i!h@mGQqU}e zyItCAfl~4IqG~(AU2lV?`)nu#S5+1BrCJv>QmoI?LyuLj8e^o>li?U6OMey{r_T(* zY8RG<@x>cK$(nNMlhy)E`{;|c6$@%L*hZEYs{mUmt$8-u8m?YV3{83m{YAwB%6Y{L z6k9V^jd0tnd%q4+xwp&Yfr#>WqoooH9K5xYM|V_s8{16~N?TcuYd@6+y1_aS;c{q^(Kyv6DZcFd zd@RkCqyC{5yX5E=oHd-`WBQ0I>9_&^<}<7793`JA=$mRuSrr}iQyzxG9T)%=Xp2g4 zkFI*p1^XIjQQE0yQNGyZNn{h@1;N1>r@)!(21u5LGg2Ob1==Thh`ZXost~Y05y+XE zrc7k%zx|Fxe^LX9HhqjcV~P|W`3AXYj%WAaFNz@uZ-xRmf!NHrNh4zKSO1WrwFL6P zXM}G=*p9v_k=mUmpg-$Y6I7Mt4@y2D+ys?c;_C@aVePnKabqAS%y%AoFzKI#JaeQxo%Il=}>GqqqxhG8cPyu>P?R=}Ol7vhvDcW{Z8i0Zn zzm^YCS5qT4m#*SycTaxzIpnMMHwFrEO>lJzqr0i6lGn6M7x;$7B7Iy)6renY$OiZc zMEFF-;Ff)@RWrYEodz{P?avD?^RtUsN$GEP>xrgxlbtd22`L1q+Vm;zyBzLIj#2fp zQZS2sUF)*%MR5S(jid&TIT<2`Js!yUdi}%lzzxkuKjf|bHvGZz#1l5%O0plla6C28K&%)=R}0F6xRI>HvM|=4x#=-to|lSN^N9P6&xIP z2dq0{CX-Xc&YJNeXXD#dn;c9feR-*P_CfUEp8(wN{z!yEZrI*MPs**fh@b|xe*S&i zHc8i5C2XFuJ)xhg7K~%2H`zsX?JhZT+>};UB5HaE$E92V@>aXAPbP zjHGY7LH_&c+;-7yblDf5tKrky!+N>Vx>?)QZi1hm1Aea(92RyRiFczw&w7)GT*KddVhT(T~0Egdo9qyLRosyG6?!=QbqPzk^x9!b!;O zjEYZ(YM2+oYg-TrJTt9??(26|bMF?&#cgl&%SzC;-tOToW%SoAmvaoExO%bz%?xjk zc(|{^J<~z4;>Loltn&Q#cD-zLlA0oFa(P1*5{sdl$v0#75<`$?CT{uv?urEF5%l#% z1*lLBO|PYH2z}OUCDP!56T6(s<{oG|TOAmiP3Z95>EKzFu=~wRiHd}%-yn`p^?J6( zih27|xpMpU0(-^Ma=J7`xm^&DhSqXkjnQt=LQjM?m_ss!!0cIcfgCXk7TijCGz5At zUKx0OZ(Pc2owm3zR5RS0N)Y#iMfl$WQCVB&sa%OY<#3FtYF&H{`S5{&n#aQKe2Se9 zB?KD>qbcT%&$2w0lfgg>hoa-{bj}D!0GrB0(o9%dP6Pxsw8y%(rU7O|*#fSHYBm2h zyytq$C(2?`j}W=ORiP$Y;41*}G=Y$(2OhqHVfd_b2NmhSboLunMtOr5!~U=jF_g7g zx!U^R$M++HtM%nJWA0HW6A->{j|_B;D@i9waP$)>{6HyW zi?%Q-uGS3xs5_COdmgZjld7Pfo4dBxil@eQDw4^F*Vcb}d)bfW?|OD#N(nd^;T^jB zZea;L9}obXL9cH4o}9qQv(@ovFw_meU5D94g#m>tZ>F(pY-+sVc~p1lWWYncfsZBD zlLUulh#8ZKbJZaXx~7T%9*9kCI?ptUWNtB6zk6wB?Esa@U>adq3-GJsAap@@buxd8 zEh*0kH65g*0pwfcCE82`98Gls@jB5(U`@lWMLxq4sPDlmq!Rv*Vp(zSX$437XGBPqZRXNva3-1V4LK`FF19js@6mZK*48gf-Z-ZNB zLM=}?fKd18YCyN<3I%#wqeFjR9^PLn0C|nbyn1-&Ph!re@O0EEp`97_ouN^T>luaA zQbRd68s2B-M1Q}bL`59M`{jC(<_`P4m+_LOgr`2Gt(Rm4y+wDaGcvik0$;t-0c3C{ zKhx0TB~7CpakFn?r9>!&+;ccIO!hd{$-sX1k+O&#=VmV@?^gOz?c=kZ*8x}L)H)dP zYzhfqNU`(IVUtd)A!)GN@5UL@&OX&+@1C?lb`+!>)>=w1JnE$X>Lw#Yjk7&t)#5>X#Cjs|&jQ!X46aWn?QOjkKm*1G ztbhAifM)AKF=tIbp&vSIPqX&9FQ`BEN|??$UXR)85VQkj*P`!)ht-9)fQ|t&EI}c) zY_Dp0Km2C(q8potDF7er6kZ;VOs*dAVznYFU=Tj)$Gq2%pheYQJdTMt)xV?d0aA0f zf!9BB;E?X!!FWTWHx>8q_1{a`32+aVn2QqF4@>>wO;ea#m&96EhNkjIR(#vwq%yr` zfH0w))fHpM%M^W;nW$_)tb@EVVvhrYi*g_wUlF^|U`HFf<~&JOeBOMX&56=R~^VwL+|j!Ca?>Tx==&$#g^C#2+mS?tyG29g?7BC;5|* zhNhNJ?*-LgdlM)3Jx?L+w7;FK4mFXC;;XzQ429NM`AD>QNUJVX`T3s9}m~hbK7csE0P(!l|C~FWjU=g#?C}12ipKQAA~kz3%msO zg2N0*dRqd|SG=WcPVM-2UAcd>w1y8d%zsl=9Z^nq83TK_9xPH=!{}}AuqY7aaFPnP l;BjQ_^4`vQQuBMqxOYB4T*@HG=I>V@U~v|0R%wcf{y(a=p27eC diff --git a/main/interfaces/Concept/templates/static/images/darkness/ui-icons_ffffff_256x240.png b/main/interfaces/Concept/templates/static/images/darkness/ui-icons_ffffff_256x240.png deleted file mode 100755 index bef5178a9054c16582876bac57017f783272e750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 l!Q;r%?Y*7ztoF~2ao>D^xRgPV&GAM diff --git a/main/interfaces/Concept/templates/static/images/logo.png b/main/interfaces/Concept/templates/static/images/logo.png deleted file mode 100644 index a6e50298ca7dd230b4f3e7e1187736ed904702c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 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 DSH>_4 diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-bg_flat_55_fbec88_40x100.png b/main/interfaces/Concept/templates/static/images/redmond/ui-bg_flat_55_fbec88_40x100.png deleted file mode 100755 index 47acaadd737478ddb090f47f618810712163317b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*Fsaj7L$B>N1x91EQ8x$BA993)+ za~~)OO5|O5sDCi_{N8&XlRv*c;OQ6|AR59NN?mFzWBXJVGojypu|S6~c)I$ztaD0e F0syyrGF|`x diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_75_d0e5f5_1x400.png b/main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_75_d0e5f5_1x400.png deleted file mode 100755 index 9fb564f8d0a117f17aa6b844490309dadbd94821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq?|on978O6-=0_GYj6;7zWBfT zzjhI`OjAO{6(N>+Em!s|xjZW|^1EO|(5d{JeUmv{p6fa-GJh;t>KCH4`R~7(L8qj} Y_egNRQF(If70@^aPgg&ebxsLQ0Qgob)Bpeg diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_85_dfeffc_1x400.png b/main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_85_dfeffc_1x400.png deleted file mode 100755 index 014951529c315d6042e72febc310a4d2db5b4a82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq?|lm978O6-<~(*YA_IRxoBVf zfAX@vsV!R#l$@#*eLnw)_Sv|_?i7P!ORnX)SxaXh+BPpZ!Fw~yjr&#G|Jw^YMHDhV X&EsZx`7bsSXc~j3tDnm{r-UW|&(SK+ diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_95_fef1ec_1x400.png b/main/interfaces/Concept/templates/static/images/redmond/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100755 index 4443fdc1a156babad4336f004eaf5ca5dfa0f9ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hIh978O6-<~(*YA|4MzBvER z|7}eQtdCVXoUc2b{PaWeaIKu7gJx>{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/main/interfaces/Concept/templates/static/images/redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png deleted file mode 100755 index 81ecc362d50ef5abbc0420aacd5345822f1f6098..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3457 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 diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-icons_217bc0_256x240.png b/main/interfaces/Concept/templates/static/images/redmond/ui-icons_217bc0_256x240.png deleted file mode 100755 index fef3aaa3e13f6269cac6dd6ae8adcbcd95b32f03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 zcmd^?`8O2)_s3^phOrG}UnfiUEn8(9QW1?MNkxXVDEpFin2{xWrLx5kBC;k~GmPmYTG^FX}c% zlGE{DS1Q;~I7-6ze&TN@+F-xsI6sd%SwK#*O5K|pDRZqEy< zJg0Nd8F@!OxqElm`~U#piM22@u@8B<moyKE%ct`B(jysxK+1m?G)UyIFs1t0}L zemGR&?jGaM1YQblj?v&@0iXS#fi-VbR9zLEnHLP?xQ|=%Ihrc7^yPWR!tW$yH!zrw z#I2}_!JnT^(qk)VgJr`NGdPtT^dmQIZc%=6nTAyJDXk+^3}wUOilJuwq>s=T_!9V) zr1)DT6VQ2~rgd@!Jlrte3}}m~j}juCS`J4(d-5+e-3@EzzTJNCE2z)w(kJ90z*QE) zBtnV@4mM>jTrZZ*$01SnGov0&=A-JrX5Ge%Pce1Vj}=5YQqBD^W@n4KmFxxpFK`uH zP;(xKV+6VJ2|g+?_Lct7`uElL<&jzGS8Gfva2+=8A@#V+xsAj9|Dkg)vL5yhX@~B= zN2KZSAUD%QH`x>H+@Ou(D1~Pyv#0nc&$!1kI?IO01yw3jD0@80qvc?T*Nr8?-%rC8 z@5$|WY?Hqp`ixmEkzeJTz_`_wsSRi1%Zivd`#+T{Aib6-rf$}M8sz6v zb6ERbr-SniO2wbOv!M4)nb}6UVzoVZEh5kQWh_5x4rYy3c!871NeaM(_p=4(kbS6U#x<*k8Wg^KHs2ttCz<+pBxQ$Z zQMv;kVm5_fF_vH`Mzrq$Y&6u?j6~ftIV0Yg)Nw7JysIN_ z-_n*K_v1c&D}-1{NbBwS2h#m1y0a5RiEcYil+58$8IDh49bPnzE7R8In6P%V{2IZU z7#clr=V4yyrRe@oXNqbqo^^LvlLE?%8XaI&N(Np90-psU}7kqmbWk zZ;YBwJNnNs$~d!mx9oMGyT( znaBoj0d}gpQ^aRr?6nW)$4god*`@Uh2e+YpS@0(Mw{|z|6ko3NbTvDiCu3YO+)egL z>uW(^ahKFj>iJ-JF!^KhKQyPTznJa;xyHYwxJgr16&Wid_9)-%*mEwo{B_|M9t@S1 zf@T@q?b2Qgl!~_(Roe;fdK)y|XG0;ls;ZbT)w-aOVttk#daQcY7$cpY496H*`m@+L zeP#$&yRbBjFWv}B)|5-1v=(66M_;V1SWv6MHnO}}1=vby&9l+gaP?|pXwp0AFDe#L z&MRJ^*qX6wgxhA_`*o=LGZ>G_NTX%AKHPz4bO^R72ZYK}ale3lffDgM8H!Wrw{B7A z{?c_|dh2J*y8b04c37OmqUw;#;G<* z@nz@dV`;7&^$)e!B}cd5tl0{g(Q>5_7H^@bEJi7;fQ4B$NGZerH#Ae1#8WDTH`iB&) zC6Et3BYY#mcJxh&)b2C^{aLq~psFN)Q1SucCaBaBUr%5PYX{~-q{KGEh)*;n;?75k z=hq%i^I}rd;z-#YyI`8-OfMpWz5kgJE3I!3ean6=UZi!BxG7i(YBk? z02HM7wS0)Wni{dWbQMRtd-A)_Az!t>F;IwWf~!*)-Az4}yryNkz&9)w>ElA80Oc`6 zHo#9H!Y3*Qx9n@Jn)!w6G^hb;e_n8zpIyXCN`JFkPc)^Q?2MsLNFhMgrcZI-<#1ne zjH;KFf?4eAT9mQZ}ZfHLGA#d%s;SZK4p0FwZT2S^{ zQ2BG1xJsbK6?yrHTjJi|5C0u=!|r!?*4FL%y%3q#(d+e>b_2I9!*iI!30}42Ia0bq zUf`Z?LGSEvtz8s``Tg5o_CP(FbR0X$FlE0yCnB7suDPmI2=yOg^*2#cY9o`X z;NY-3VBHZjnVcGS){GZ98{e+lq~O$u6pEcgd0CrnIsWffN1MbCZDH<7c^hv+Z0Ucf0{w zSzi^qKuUHD9Dgp0EAGg@@$zr32dQx>N=ws`MESEsmzgT2&L;?MSTo&ky&!-JR3g~1 zPGTt515X)wr+Bx(G9lWd;@Y3^Vl}50Wb&6-Tiy;HPS0drF`rC}qYq22K4)G#AoD0X zYw$E+Bz@Zr^50MAwu@$?%f9$r4WHH?*2|67&FXFhXBrVFGmg)6?h3^-1?t;UzH0*I zNVf9wQLNLnG2@q>6CGm>&y|lC`iCFfYd}9i%+xkl^5oBJ?<;aneCfcHqJh7Yl5uLS z9Fx-(kMdcNyZejXh22N{mCw_rX1O!cOE&3>e(ZH81PR95wQC37En4O{w;{3q9n1t&;p)D%&Z%Nw$gSPa!nz8Slh7=ko2am)XARwOWw zpsz0~K!s{(dM$NB=(A=kkp>T(*yU6<_dwIx>cH4+LWl282hXa6-EUq>R3t?G2623< z*RwTN%-fgBmD{fu*ejNn)1@KG?Sg*8z3hYtkQJQjB6 zQ|x>wA=o$=O)+nLmgTXW3_6diA;b4EY{*i*R%6dO2EMg z@6g?M3rpbnfB@hOdUeb96=~I?OIA3@BWAGmTwiQ{x5Cqq<8c10L!P zd@Qk^BseTX%$Q7^s}5n%HB|)gKx}H$d8Sb$bBnq9-AglT2dGR2(+I;_fL|R4p$odJ zllfb0NqI)7=^z~qAm1V{(PkpxXsQ#4*NH9yYZ`Vf@)?#ueGgtCmGGY|9U#v|hRdg- zQ%0#cGIfXCd{Y)JB~qykO;KPvHu|5Ck&(Hn%DF~cct@}j+87xhs2ew;fLm5#2+mb| z8{9e*YI(u|gt|{x1G+U=DA3y)9s2w7@cvQ($ZJIA)x$e~5_3LKFV~ASci8W}jF&VeJoPDUy(BB>ExJpck;%;!`0AAo zAcHgcnT8%OX&UW_n|%{2B|<6Wp2MMGvd5`T2KKv;ltt_~H+w00x6+SlAD`{K4!9zx z*1?EpQ%Lwiik){3n{-+YNrT;fH_niD_Ng9|58@m8RsKFVF!6pk@qxa{BH-&8tsim0 zdAQ(GyC^9ane7_KW*#^vMIoeQdpJqmPp%%px3GIftbwESu#+vPyI*YTuJ6+4`z{s? zpkv~0x4c_PFH`-tqafw5)>4AuQ78SkZ!$8}INLK;Egr;2tS18hEO5=t;QDmZ-qu?I zG+=DN`nR72Xto{{bJp||`k}-2G;5#xg8E~xgz22)^_Z;=K|4@(E&5J)SY2of=olcw z5)@L)_Ntcm!*5nEy0M9v0`S33;pO4TN;>4(Z+19p_0>u#e-vE zXCU(6gAvu~I7Cw(xd%0e59MNLw^U37ZDbsBrj%eDCexw8a3G`nTcXVNL6{B7Hj@i& zbVB{;ApEtHk76q08DJ48dSxd$C(;$K6=FpU<~l9pVoT9arW^Vu{%Bcn4`eIpkOVC| z$)AKYG_`ypM{0@BUb3^9lqi_c?ONH|4UJMJWDowMVjacycX7}9g={O7swOB+{;+?; zjBo!9?+nd)ie#x5IbFW-zBOo0c4q@9wGVt5;pNt`=-~Zgcw#*`m($6ibxtZ`H=e=} zF#GZ~5$%AUn};8U#tRem0J(JTR}d4vR(dgK2ML~lZsPhayJ2h1%sD4FVst| zKF)+@`iNzLRjg4=K8@**0=5cE>%?FDc({I^+g9USk<8$&^qD~@%W0i4b|yMG*p4`N zh}I!ltTRI8Ex$+@V{02Br%xq#O?UlhO{r8WsaZnZCZq0MK9%AXU%MDLT;3=0A9(BV z9VxxxJd7jo$hw3q;3o?yBLmA=azBUrd9>-<_ANs0n3?-Ic*6&ytb@H~?0E(*d>T5n z-HiH2jsDf6uWhID%#n>SzOqrFCPDfUcu5QPd?<(=w6pv1BE#nsxS{n!UnC9qAha1< z;3cpZ9A-e$+Y)%b;w@!!YRA9p%Kf9IHGGg^{+p`mh;q8i7}&e@V3EQaMsItEMS&=X plT@$;k0WcB_jb;cn%_Idz4HO$QU*abf4}+wi?e96N>fbq{{bKGP38aq diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-icons_2e83ff_256x240.png b/main/interfaces/Concept/templates/static/images/redmond/ui-icons_2e83ff_256x240.png deleted file mode 100755 index 45e8928e5284adacea3f9ec07b9b50667d2ac65f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-icons_469bdd_256x240.png b/main/interfaces/Concept/templates/static/images/redmond/ui-icons_469bdd_256x240.png deleted file mode 100755 index 22952e3127c2429121e9c42a76a2289335a535c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-icons_6da8d5_256x240.png b/main/interfaces/Concept/templates/static/images/redmond/ui-icons_6da8d5_256x240.png deleted file mode 100755 index 04db1df0f855063068f6bdcbef5e3de6a3524348..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-icons_cd0a0a_256x240.png b/main/interfaces/Concept/templates/static/images/redmond/ui-icons_cd0a0a_256x240.png deleted file mode 100755 index 7930a558099bc8d92b4264eb67a0f040460f4a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-icons_d8e7f3_256x240.png b/main/interfaces/Concept/templates/static/images/redmond/ui-icons_d8e7f3_256x240.png deleted file mode 100755 index 230aa922f7315d7671e2f8d217a60cbfd59fef24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5355 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 W{%j@Nkj?-5Wj;~YSF2TVi1{B6s+0%- diff --git a/main/interfaces/Concept/templates/static/images/redmond/ui-icons_f9bd01_256x240.png b/main/interfaces/Concept/templates/static/images/redmond/ui-icons_f9bd01_256x240.png deleted file mode 100755 index 1619b868d4613e0c8e03a226a3908ff62912ca51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4369 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 diff --git a/main/interfaces/Concept/templates/static/images/sabnzbdplus.ico b/main/interfaces/Concept/templates/static/images/sabnzbdplus.ico deleted file mode 100644 index 9bd8d1333f965c9b6ba145c2b5b155f4972880d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmeH{%}Z2K7{-6M$+Vhsn!d)$)W+1ZrfDXf(HwKM(aEtiC~J{Ki?k@HHf^&-3pcfh zAc{iJMK1bS1mPwU0zr_FHiZ~{5Cmb1q7S6z_MEG>nfe0)&*68T_j%8I&f&g`3znwG zgELNK!74>%!lVj?MUGaevmD7-Y}xO&ssg<@s=? zkG4tqfnRWWjOcsC$FAUhF0E+cm8o@m;o1bg7m6Q=rY`9F%<->^Pu{@wOj>mSdPX4F zK*6|tM-M!Z=J^S|m3nV))FpNlhCpq=q=HMrro93-h60X02OT%#WB}7`` z&J^QjZ&(b8hvKdX#G$4gZhr({5rk88eN(>vD3N#4L7Q|stvj0`c1TS-0*#%}|Alkv z&uP8eY3lEbdt%_H`q7`!)49Z42ma3vBoYZ`nf?O#nQ8p&p2<0WX8q$c&N~H8wVV3F z%HrbOwexn!d;M!*adK;3Ypo}&qQ;6nT357fS-815XMetbmvgXSU)K8NzN*zr=5KU- zUG=(>hGk2)Z3w#^U$lGC-asJk%HCP(_ytibvQopUp7v#x!Io4iwJ8`f|3!`M WWQ{T1u76-@Q*?_b*?;GCF8l@_M4M*- diff --git a/main/interfaces/Concept/templates/static/javascripts/concept.js b/main/interfaces/Concept/templates/static/javascripts/concept.js deleted file mode 100644 index 6fb0bd0..0000000 --- a/main/interfaces/Concept/templates/static/javascripts/concept.js +++ /dev/null @@ -1,300 +0,0 @@ -// assembled by pairofdimes through use of examples - - - - - // ******************************************** - // ******************************************** - // ******************************************** - // ******************************************** - // ******************************************** layout - -var PageLayout, Downloads, InnerLayout, $Tabs; - -var showResizeMsgs = false; - -var msg; - -function resizeTabLayout () { - if (!$Tabs) return; // make sure tabs are initialized - var selected = $Tabs.tabs('option', 'selected'); - // ONLY resize the layout when first tab is 'visible' - if (selected === 0) { // Tab #1 (index=1) - msg = ""; - - // now resize the outermost layout to fit the new container size... - PageLayout.resizeAll(); // ...triggers cascading resize of inner-layouts - if initialized - - // make sure all inner-layouts are initialized and 'visible' - initAppLayout(); - } -} - - function initAppLayout () { - var $Container = $('#Downloads'); - - // make sure Container element is not hidden - $Container.show(); - // if Container is still not visible, then must be INSIDE a hidden element - if ( !$Container.is(':visible') ) return; // ABORT - - // init the Layout if not already done - if (!Downloads) - Downloads = $Container.layout({ - name: "Downloads" - , resizeWithWindow: false - , triggerEventsOnLoad: false - , center__paneSelector: ".outer-center" - , west__paneSelector: ".outer-west" - , east__paneSelector: ".outer-east" - , north__paneSelector: ".outer-north" - , south__paneSelector: ".outer-south" - , contentSelector: ".ui-widget-content" - , spacing_open: 4 - , spacing_closed: 4 - , north__minSize: 20 - , north__spacing_open: 1 - , north__togglerLength_open: 0 - , north__togglerLength_close: -1 - , north__resizable: false - , north__slidable: false - , north__fxName: 'none' - , east__size: 520 - //, west__initClosed: true - , south__minSize: 5 - , south__size: 100 - //, south__size: 'auto' - , south__togglerLength_open: 0 - , south__togglerLength_close: -1 - , south__resizable: true - , south__slidable: true - , south__spacing_open: 1 - , center__onresize: "InnerLayout.resizeAll" - , onresizeall_start: function () { if (showResizeMsgs) alert( 'Downloads.onresizeall_start()' ); } - , onresizeall_end: function () { if (showResizeMsgs) alert( 'Downloads.onresizeall_end()' ); } - }); - - // now show/init the inner layout - initInnerLayout(); -} - - function initInnerLayout () { - var $Container = $('#InnerLayout'); - - // make sure Container element is not hidden - $Container.show(); - // if Container is still not visible, then must be INSIDE a hidden element - if ( !$Container.is(':visible') ) return; // ABORT - - // init the Layout if not already done - if (!InnerLayout) - InnerLayout = $Container.layout({ - name: "InnerLayout" - , triggerEventsOnLoad: false - , center__paneSelector: ".inner-center" - , west__paneSelector: ".inner-west" - , east__paneSelector: ".inner-east" - , north__paneSelector: ".inner-north" - , contentSelector: ".ui-widget-content" - , west__initClosed: true - , east__initClosed: true - //, north__initClosed: true - //, north__initHidden: true - , spacing_open: 4 - , spacing_closed: 4 - , west__size: 361 - , east__size: 400 - , east__fxSpeed: 'slow' - , north__minSize: 15 - , north__spacing_open: 2 - , north__togglerLength_open: 50 - , north__togglerLength_close: -1 - , onresizeall_start: function () { if (showResizeMsgs) alert( 'InnerLayout.onresizeall_start()' ); } - , onresizeall_end: function () { if (showResizeMsgs) alert( 'InnerLayout.onresizeall_end()' ); } - }); -} - - -$(document).ready(function () { - - // best to create the tabs first, because is 'container' for the tab-layout (Downloads) - $Tabs = $("#tabs").tabs({ - show: resizeTabLayout // resize layout EACH TIME the layout-tab becomes 'visible' - //, disabled: [4,5,6] - }); - - $cTabs = $("#footertabs").tabs({ - }); - $cTabs = $("#configtabs").tabs({ - }); - $sTabs = $("#searchtabs").tabs({ - }); - - - // use different outer-layout classNames to simplify/clarify CSS - PageLayout = $('body').layout({ - name: "PageLayout" - , triggerEventsOnLoad: false - , north__paneSelector: "#TabButtons" - , center__paneSelector: "#TabPanelsContainer" - , center__onresize: "Downloads.resizeAll" - , spacing_open: 0 - /* OLD - uses 1-pane with header & 'content' divs instead of north & center 'panes' - center__paneSelector: ".page-layout-center" - , contentSelector: "#TabPanelsContainer" - */ - }); - - // resize div.ui-layout-ui-widget-content AFTER initializing the tabs - PageLayout.resizeAll(); - - // initialize the inner-layouts - IF CONTAINER-TAB IS VISIBLE - initAppLayout(); - $('#tabs').tabs('option', 'selected', 0); - - - - - - - - // ******************************************** - // ******************************************** - // ******************************************** - // ******************************************** - // ******************************************** grid - - $.jgrid.defaults = $.extend($.jgrid.defaults,{loadui:"enable"}); - - jQuery("#queueGrid").jqGrid({ - jsonReader : { - root: "slots", - records: "noofslots", - repeatitems: false, - id: "index" - }, - datatype: function(postdata) { - jQuery.ajax({ - url: 'tapi?mode=queue&output=json&session='+apikey, - data:postdata, - dataType:"json", - complete: function(jsondata,stat){ - if(stat=="success") { - var thegrid = jQuery("#queueGrid")[0]; - var json = eval("("+jsondata.responseText+")").queue; - json.page=1; - thegrid.addJSONData(json); - - // update header stats - switch(json.status){ - case 'Downloading': $('#stat-Status').css('color','lightgreen');break; - case 'Idle': $('#stat-Status').css('color','yellow'); break; - case 'Paused': $('#stat-Status').css('color','red'); break; - }; - $('#stat-Status').html(json.status); - $('#stat-Speed').html( parseInt(json.kbpersec) ); - $('#stat-Timeleft').html(json.timeleft); - - } - } - }); - }, - colNames:['Name','%','MB Left','Size','Age','Category','Priority','Processing','Script','Status'], - colModel:[ - {name:'filename',index:'Name', width:300, editable:true}, - {name:'percentage',index:'%', width:20, sortable:false, align:"right"}, - {name:'mbleft',index:'MB Left', width:60, sortable:false, align:"right"}, - {name:'size',index:'Size', width:80, align:"right"}, - {name:'avg_age',index:'Age', width:36, align:"right"}, - {name:'cat',index:'Category', sortable:false, width:80}, - {name:'priority',index:'Priority', sortable:false, width:80}, - {name:'unpackopts',index:'Processing', width:80}, - {name:'script',index:'Script', width:80}, - {name:'status',index:'Status', width:80} - ], - rowNum:10, - rowList:[10,20,30,999], - caption: "Queue", - autowidth: true, - height: '100%', - imgpath: 'static/images/jqgrid/', - sortname: 'index', - sortorder: "asc", - viewrecords: true, - multiselect: true, - pager: jQuery('#queueGridSub') - - }); - jQuery("#queueGrid").jqGrid('navGrid','#queueGridSub',{add:false,edit:false}); - jQuery("#queueGrid").jqGrid('navButtonAdd','#queueGridSub',{ - caption: "Columns", - title: "Reorder Columns", - onClickButton : function (){ - jQuery("#queueGrid").jqGrid('columnChooser'); - } - }); - //jQuery("#queueGrid").jqGrid('gridResize'); - - - - jQuery("#historyGrid").jqGrid({ - jsonReader : { - root: "slots", - records: "noofslots", - repeatitems: false, - id: "index" - }, - datatype: function(postdata) { - jQuery.ajax({ - url: 'tapi?mode=history&output=json&session='+apikey, - data:postdata, - dataType:"json", - complete: function(jsondata,stat){ - if(stat=="success") { - var thegrid = jQuery("#historyGrid")[0]; - var json = eval("("+jsondata.responseText+")").history; - json.page=1; - thegrid.addJSONData(json); - } - } - }); - }, - colNames:['Name','Status','When'], - colModel:[ - {name:'name',index:'Name', width:300}, - {name:'status',index:'Status', width:60}, - {name:'completed',index:'When', width:100, formatter:dateFmatter} - ], - rowNum:10, - rowList:[10,20,30,999], - caption: "History", - autowidth: true, - height: '100%', - imgpath: 'static/images/jqgrid/', - sortname: 'index', - sortorder: "asc", - viewrecords: true, - multiselect: true, - pager: jQuery('#historyGridSub') - - }); - jQuery("#historyGrid").jqGrid('navGrid','#historyGridSub',{add:false,edit:false}); - jQuery("#historyGrid").jqGrid('navButtonAdd','#historyGridSub',{ - caption: "", - title: "Reorder Columns", - onClickButton : function (){ - jQuery("#historyGrid").jqGrid('columnChooser'); - } - }); - //jQuery("#historyGrid").jqGrid('gridResize'); - - - // format history 'completed' time to date - function dateFmatter (cellvalue, options, rowObject) { - var d = new Date(); - d.setTime(cellvalue*1000); - return d.toDateString(); - } - -}); - \ No newline at end of file diff --git a/main/interfaces/Concept/templates/static/javascripts/lib.js b/main/interfaces/Concept/templates/static/javascripts/lib.js deleted file mode 100644 index 5ed3cdf..0000000 --- a/main/interfaces/Concept/templates/static/javascripts/lib.js +++ /dev/null @@ -1,417 +0,0 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
      "]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
      ","
      "]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="
      ";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

      ";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
      ";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
      ").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
      ';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); - - -/* - * jQuery UI 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* - * jQuery UI Draggable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.leftthis.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.topthis.containment[3])?g:(!(g-this.offset.click.topthis.containment[2])?f:(!(f-this.offset.click.left
      ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y=p&&n<=k)||(m>=p&&m<=k)||(nk))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(ec));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d
      ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f
      ');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidthk.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e
      ');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/* - * jQuery UI Selectable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.rightg||j.bottomd&&j.righth&&j.bottom=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)f&&(e+h)m[this.floating?"width":"height"])){return g}else{return(f0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.topthis.containment[3])?g:(!(g-this.offset.click.topthis.containment[2])?f:(!(f-this.offset.click.left=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/* - * jQuery UI Accordion 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Accordion - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.2",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/* - * jQuery UI Dialog 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * ui.core.js - * ui.draggable.js - * ui.resizable.js - */ -(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||" ",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("
      ")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("
      ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("
      ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||" ");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("
      ").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e
      ");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("
      ")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('
      ').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){if(!c.disabled){a(this).addClass("ui-state-hover")}},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(!c.disabled){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}else{a(this).blur()}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((this.options.values.length==2&&this.options.range===true)&&((e==0&&d>b)||(e==1&&d1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled")}else{this.handles.removeAttr("disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(cthis._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.2",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/* - * jQuery UI Tabs 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"
      ",spinner:"Loading…",tabTemplate:'
    • #{label}
    • '}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i
      ')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
      '))}},_connectDatepicker:function(target,inst){var input=$(target);inst.append=$([]);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){inst.append=$(''+appendText+"");input[isRTL?"before":"after"](inst.append)}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.append.remove();inst.trigger.remove();$target.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormatmaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?''+prevText+"":(hideIfNoPrevNext?"":''+prevText+""));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?''+nextText+"":(hideIfNoPrevNext?"":''+nextText+""));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'":"");var buttonPanel=(showButtonPanel)?'
      '+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'":"")+(isRTL?"":controls)+"
      ":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'
      ';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="=5?' class="ui-datepicker-week-end"':"")+'>'+dayNamesMin[day]+""}calender+=thead+"";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);tbody+='";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="
      =currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?''+printDate.getDate()+"":'=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+""))+"
      "+(isMultiMonth?"
      "+((numMonths[0]>0&&col==numMonths[1]-1)?'
      ':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+=''+drawYear+""}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="
      ";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}if(options=="option"&&arguments.length==2&&typeof arguments[1]=="string"){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.2";window.DP_jQuery=$})(jQuery);;/* - * jQuery UI Progressbar 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Progressbar - * - * Depends: - * ui.core.js - */ -(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('
      ').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;/* - * jQuery UI Effects 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/ - */ -jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/* - * jQuery UI Effects Fold 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Fold - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/* - * jQuery UI Effects Highlight 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Highlight - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/* - * jQuery UI Effects Pulsate 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Effects/Pulsate - * - * Depends: - * effects.core.js - */ -(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);; - - -/* - * jquery.layout 1.2.0 - * - * Copyright (c) 2008 - * Fabrizio Balliano (http://www.fabrizioballiano.net) - * Kevin Dalman (http://allpro.net) - * - * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) - * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. - * - * $Date: 2008-12-27 02:17:22 +0100 (sab, 27 dic 2008) $ - * $Rev: 203 $ - * - * NOTE: For best code readability, view this with a fixed-space font and tabs equal to 4-chars - */ -(function($){$.fn.layout=function(opts){var -prefix="ui-layout-",defaults={paneClass:prefix+"pane",resizerClass:prefix+"resizer",togglerClass:prefix+"toggler",togglerInnerClass:prefix+"",buttonClass:prefix+"button",contentSelector:"."+prefix+"content",contentIgnoreSelector:"."+prefix+"ignore"};var options={name:"",scrollToBookmarkOnLoad:true,defaults:{applyDefaultStyles:false,closable:true,resizable:true,slidable:true,contentSelector:defaults.contentSelector,contentIgnoreSelector:defaults.contentIgnoreSelector,paneClass:defaults.paneClass,resizerClass:defaults.resizerClass,togglerClass:defaults.togglerClass,buttonClass:defaults.buttonClass,resizerDragOpacity:1,maskIframesOnResize:true,minSize:0,maxSize:0,spacing_open:6,spacing_closed:6,togglerLength_open:50,togglerLength_closed:50,togglerAlign_open:"center",togglerAlign_closed:"center",togglerTip_open:"Close",togglerTip_closed:"Open",resizerTip:"Resize",sliderTip:"Slide Open",sliderCursor:"pointer",slideTrigger_open:"click",slideTrigger_close:"mouseout",hideTogglerOnSlide:false,togglerContent_open:"",togglerContent_closed:"",showOverflowOnHover:false,enableCursorHotkey:true,customHotkeyModifier:"SHIFT",fxName:"slide",fxSpeed:null,fxSettings:{},initClosed:false,initHidden:false},north:{paneSelector:"."+prefix+"north",size:"auto",resizerCursor:"n-resize"},south:{paneSelector:"."+prefix+"south",size:"auto",resizerCursor:"s-resize"},east:{paneSelector:"."+prefix+"east",size:200,resizerCursor:"e-resize"},west:{paneSelector:"."+prefix+"west",size:200,resizerCursor:"w-resize"},center:{paneSelector:"."+prefix+"center"}};var effects={slide:{all:{duration:"fast"},north:{direction:"up"},south:{direction:"down"},east:{direction:"right"},west:{direction:"left"}},drop:{all:{duration:"slow"},north:{direction:"up"},south:{direction:"down"},east:{direction:"right"},west:{direction:"left"}},scale:{all:{duration:"fast"}}};var config={allPanes:"north,south,east,west,center",borderPanes:"north,south,east,west",zIndex:{resizer_normal:1,pane_normal:2,mask:4,sliding:100,resizing:10000,animation:10000},resizers:{cssReq:{position:"absolute",padding:0,margin:0,fontSize:"1px",textAlign:"left",overflow:"hidden",zIndex:1},cssDef:{background:"#DDD",border:"none"}},togglers:{cssReq:{position:"absolute",display:"block",padding:0,margin:0,overflow:"hidden",textAlign:"center",fontSize:"1px",cursor:"pointer",zIndex:1},cssDef:{background:"#AAA"}},content:{cssReq:{overflow:"auto"},cssDef:{}},defaults:{cssReq:{position:"absolute",margin:0,zIndex:2},cssDef:{padding:"10px",background:"#FFF",border:"1px solid #BBB",overflow:"auto"}},north:{edge:"top",sizeType:"height",dir:"horz",cssReq:{top:0,bottom:"auto",left:0,right:0,width:"auto"}},south:{edge:"bottom",sizeType:"height",dir:"horz",cssReq:{top:"auto",bottom:0,left:0,right:0,width:"auto"}},east:{edge:"right",sizeType:"width",dir:"vert",cssReq:{left:"auto",right:0,top:"auto",bottom:"auto",height:"auto"}},west:{edge:"left",sizeType:"width",dir:"vert",cssReq:{left:0,right:"auto",top:"auto",bottom:"auto",height:"auto"}},center:{dir:"center",cssReq:{left:"auto",right:"auto",top:"auto",bottom:"auto",height:"auto",width:"auto"}}};var state={id:Math.floor(Math.random()*10000),container:{},north:{},south:{},east:{},west:{},center:{}};var -altEdge={top:"bottom",bottom:"top",left:"right",right:"left"},altSide={north:"south",south:"north",east:"west",west:"east"};var isStr=function(o){if(typeof o=="string")return true;else if(typeof o=="object"){try{var match=o.constructor.toString().match(/string/i);return(match!==null);}catch(e){}}return false;};var str=function(o){if(typeof o=="string"||isStr(o))return $.trim(o);else return o;};var min=function(x,y){return Math.min(x,y);};var max=function(x,y){return Math.max(x,y);};var transformData=function(d){var json={defaults:{fxSettings:{}},north:{fxSettings:{}},south:{fxSettings:{}},east:{fxSettings:{}},west:{fxSettings:{}},center:{fxSettings:{}}};d=d||{};if(d.effects||d.defaults||d.north||d.south||d.west||d.east||d.center)json=$.extend(json,d);else -$.each(d,function(key,val){a=key.split("__");json[a[1]?a[0]:"defaults"][a[1]?a[1]:a[0]]=val;});return json;};var setFlowCallback=function(action,pane,param){var -cb=action+","+pane+","+(param?1:0),cP,cbPane;$.each(c.borderPanes.split(","),function(i,p){if(c[p].isMoving){bindCallback(p);return false;}});function bindCallback(p,test){cP=c[p];if(!cP.doCallback){cP.doCallback=true;cP.callback=cb;}else{cpPane=cP.callback.split(",")[1];if(cpPane!=p&&cpPane!=pane)bindCallback(cpPane,true);}}};var execFlowCallback=function(pane){var cP=c[pane];c.isLayoutBusy=false;delete cP.isMoving;if(!cP.doCallback||!cP.callback)return;cP.doCallback=false;var -cb=cP.callback.split(","),param=(cb[2]>0?true:false);if(cb[0]=="open")open(cb[1],param);else if(cb[0]=="close")close(cb[1],param);if(!cP.doCallback)cP.callback=null;};var execUserCallback=function(pane,v_fn){if(!v_fn)return;var fn;try{if(typeof v_fn=="function")fn=v_fn;else if(typeof v_fn!="string")return;else if(v_fn.indexOf(",")>0){var -args=v_fn.split(","),fn=eval(args[0]);if(typeof fn=="function"&&args.length>1)return fn(args[1]);}else -fn=eval(v_fn);if(typeof fn=="function")return fn(pane,$Ps[pane],$.extend({},state[pane]),$.extend({},options[pane]),options.name);}catch(ex){}};var cssNum=function($E,prop){var -val=0,hidden=false,visibility="";if(!$.browser.msie){if($.curCSS($E[0],"display",true)=="none"){hidden=true;visibility=$.curCSS($E[0],"visibility",true);$E.css({display:"block",visibility:"hidden"});}}val=parseInt($.curCSS($E[0],prop,true),10)||0;if(hidden){$E.css({display:"none"});if(visibility&&visibility!="hidden")$E.css({visibility:visibility});}return val;};var cssW=function(e,outerWidth){var $E;if(isStr(e)){e=str(e);$E=$Ps[e];}else -$E=$(e);if(outerWidth<=0)return 0;else if(!(outerWidth>0))outerWidth=isStr(e)?getPaneSize(e):$E.outerWidth();if(!$.boxModel)return outerWidth;else -return outerWidth --cssNum($E,"paddingLeft")-cssNum($E,"paddingRight")-($.curCSS($E[0],"borderLeftStyle",true)=="none"?0:cssNum($E,"borderLeftWidth"))-($.curCSS($E[0],"borderRightStyle",true)=="none"?0:cssNum($E,"borderRightWidth"));};var cssH=function(e,outerHeight){var $E;if(isStr(e)){e=str(e);$E=$Ps[e];}else -$E=$(e);if(outerHeight<=0)return 0;else if(!(outerHeight>0))outerHeight=(isStr(e))?getPaneSize(e):$E.outerHeight();if(!$.boxModel)return outerHeight;else -return outerHeight --cssNum($E,"paddingTop")-cssNum($E,"paddingBottom")-($.curCSS($E[0],"borderTopStyle",true)=="none"?0:cssNum($E,"borderTopWidth"))-($.curCSS($E[0],"borderBottomStyle",true)=="none"?0:cssNum($E,"borderBottomWidth"));};var cssSize=function(pane,outerSize){if(c[pane].dir=="horz")return cssH(pane,outerSize);else -return cssW(pane,outerSize);};var getPaneSize=function(pane,inclSpace){var -$P=$Ps[pane],o=options[pane],s=state[pane],oSp=(inclSpace?o.spacing_open:0),cSp=(inclSpace?o.spacing_closed:0);if(!$P||s.isHidden)return 0;else if(s.isClosed||(s.isSliding&&inclSpace))return cSp;else if(c[pane].dir=="horz")return $P.outerHeight()+oSp;else -return $P.outerWidth()+oSp;};var setPaneMinMaxSizes=function(pane){var -d=cDims,edge=c[pane].edge,dir=c[pane].dir,o=options[pane],s=state[pane],$P=$Ps[pane],$altPane=$Ps[altSide[pane]],paneSpacing=o.spacing_open,altPaneSpacing=options[altSide[pane]].spacing_open,altPaneSize=(!$altPane?0:(dir=="horz"?$altPane.outerHeight():$altPane.outerWidth())),containerSize=(dir=="horz"?d.innerHeight:d.innerWidth),limitSize=containerSize-paneSpacing-altPaneSize-altPaneSpacing,minSize=s.minSize||0,maxSize=Math.min(s.maxSize||9999,limitSize),minPos,maxPos;switch(pane){case"north":minPos=d.offsetTop+minSize;maxPos=d.offsetTop+maxSize;break;case"west":minPos=d.offsetLeft+minSize;maxPos=d.offsetLeft+maxSize;break;case"south":minPos=d.offsetTop+d.innerHeight-maxSize;maxPos=d.offsetTop+d.innerHeight-minSize;break;case"east":minPos=d.offsetLeft+d.innerWidth-maxSize;maxPos=d.offsetLeft+d.innerWidth-minSize;break;}$.extend(s,{minSize:minSize,maxSize:maxSize,minPosition:minPos,maxPosition:maxPos});};var getPaneDims=function(){var d={top:getPaneSize("north",true),bottom:getPaneSize("south",true),left:getPaneSize("west",true),right:getPaneSize("east",true),width:0,height:0};with(d){width=cDims.innerWidth-left-right;height=cDims.innerHeight-bottom-top;top+=cDims.top;bottom+=cDims.bottom;left+=cDims.left;right+=cDims.right;}return d;};var getElemDims=function($E){var -d={},e,b,p;$.each("Left,Right,Top,Bottom".split(","),function(){e=str(this);b=d["border"+e]=cssNum($E,"border"+e+"Width");p=d["padding"+e]=cssNum($E,"padding"+e);d["offset"+e]=b+p;if($E==$Container)d[e.toLowerCase()]=($.boxModel?p:0);});d.innerWidth=d.outerWidth=$E.outerWidth();d.innerHeight=d.outerHeight=$E.outerHeight();if($.boxModel){d.innerWidth-=(d.offsetLeft+d.offsetRight);d.innerHeight-=(d.offsetTop+d.offsetBottom);}return d;};var setTimer=function(pane,action,fn,ms){var -Layout=window.layout=window.layout||{},Timers=Layout.timers=Layout.timers||{},name="layout_"+state.id+"_"+pane+"_"+action;if(Timers[name])return;else Timers[name]=setTimeout(fn,ms);};var clearTimer=function(pane,action){var -Layout=window.layout=window.layout||{},Timers=Layout.timers=Layout.timers||{},name="layout_"+state.id+"_"+pane+"_"+action;if(Timers[name]){clearTimeout(Timers[name]);delete Timers[name];return true;}else -return false;};var create=function(){initOptions();initContainer();initPanes();initHandles();initResizable();sizeContent("all");if(options.scrollToBookmarkOnLoad)with(self.location)if(hash)replace(hash);initHotkeys();$(window).resize(function(){var timerID="timerLayout_"+state.id;if(window[timerID])clearTimeout(window[timerID]);window[timerID]=null;if(true||$.browser.msie)window[timerID]=setTimeout(resizeAll,100);else -resizeAll();});};var initContainer=function(){try{if($Container[0].tagName=="BODY"){$("html").css({height:"100%",overflow:"hidden"});$("body").css({position:"relative",height:"100%",overflow:"hidden",margin:0,padding:0,border:"none"});}else{var -CSS={overflow:"hidden"},p=$Container.css("position"),h=$Container.css("height");if(!$Container.hasClass("ui-layout-pane")){if(!p||"fixed,absolute,relative".indexOf(p)<0)CSS.position="relative";if(!h||h=="auto")CSS.height="100%";}$Container.css(CSS);}}catch(ex){}cDims=state.container=getElemDims($Container);};var initHotkeys=function(){$.each(c.borderPanes.split(","),function(i,pane){var o=options[pane];if(o.enableCursorHotkey||o.customHotkey){$(document).keydown(keyDown);return false;}});};var initOptions=function(){opts=transformData(opts);if(opts.effects){$.extend(effects,opts.effects);delete opts.effects;}$.each("name,scrollToBookmarkOnLoad".split(","),function(idx,key){if(opts[key]!==undefined)options[key]=opts[key];else if(opts.defaults[key]!==undefined){options[key]=opts.defaults[key];delete opts.defaults[key];}});$.each("paneSelector,resizerCursor,customHotkey".split(","),function(idx,key){delete opts.defaults[key];});$.extend(options.defaults,opts.defaults);c.center=$.extend(true,{},c.defaults,c.center);$.extend(options.center,opts.center);var o_Center=$.extend(true,{},options.defaults,opts.defaults,options.center);$.each("paneClass,contentSelector,contentIgnoreSelector,applyDefaultStyles,showOverflowOnHover".split(","),function(idx,key){options.center[key]=o_Center[key];});var defs=options.defaults;$.each(c.borderPanes.split(","),function(i,pane){c[pane]=$.extend(true,{},c.defaults,c[pane]);o=options[pane]=$.extend(true,{},options.defaults,options[pane],opts.defaults,opts[pane]);if(!o.paneClass)o.paneClass=defaults.paneClass;if(!o.resizerClass)o.resizerClass=defaults.resizerClass;if(!o.togglerClass)o.togglerClass=defaults.togglerClass;$.each(["_open","_close",""],function(i,n){var -sName="fxName"+n,sSpeed="fxSpeed"+n,sSettings="fxSettings"+n;o[sName]=opts[pane][sName]||opts[pane].fxName||opts.defaults[sName]||opts.defaults.fxName||o[sName]||o.fxName||defs[sName]||defs.fxName||"none";var fxName=o[sName];if(fxName=="none"||!$.effects||!$.effects[fxName]||(!effects[fxName]&&!o[sSettings]&&!o.fxSettings))fxName=o[sName]="none";var -fx=effects[fxName]||{},fx_all=fx.all||{},fx_pane=fx[pane]||{};o[sSettings]=$.extend({},fx_all,fx_pane,defs.fxSettings||{},defs[sSettings]||{},o.fxSettings,o[sSettings],opts.defaults.fxSettings,opts.defaults[sSettings]||{},opts[pane].fxSettings,opts[pane][sSettings]||{});o[sSpeed]=opts[pane][sSpeed]||opts[pane].fxSpeed||opts.defaults[sSpeed]||opts.defaults.fxSpeed||o[sSpeed]||o[sSettings].duration||o.fxSpeed||o.fxSettings.duration||defs.fxSpeed||defs.fxSettings.duration||fx_pane.duration||fx_all.duration||"normal";});});};var initPanes=function(){$.each(c.allPanes.split(","),function(){var -pane=str(this),o=options[pane],s=state[pane],fx=s.fx,dir=c[pane].dir,size=o.size=="auto"||isNaN(o.size)?0:o.size,minSize=o.minSize||1,maxSize=o.maxSize||9999,spacing=o.spacing_open||0,sel=o.paneSelector,isIE6=($.browser.msie&&$.browser.version<7),CSS={},$P,$C;$Cs[pane]=false;if(sel.substr(0,1)==="#")$P=$Ps[pane]=$Container.find(sel+":first");else{$P=$Ps[pane]=$Container.children(sel+":first");if(!$P.length)$P=$Ps[pane]=$Container.children("form:first").children(sel+":first");}if(!$P.length){$Ps[pane]=false;return true;}$P.attr("pane",pane).addClass(o.paneClass+" "+o.paneClass+"-"+pane);if(pane!="center"){s.isClosed=false;s.isSliding=false;s.isResizing=false;s.isHidden=false;s.noRoom=false;c[pane].pins=[];}CSS=$.extend({visibility:"visible",display:"block"},c.defaults.cssReq,c[pane].cssReq);if(o.applyDefaultStyles)$.extend(CSS,c.defaults.cssDef,c[pane].cssDef);$P.css(CSS);CSS={};switch(pane){case"north":CSS.top=cDims.top;CSS.left=cDims.left;CSS.right=cDims.right;break;case"south":CSS.bottom=cDims.bottom;CSS.left=cDims.left;CSS.right=cDims.right;break;case"west":CSS.left=cDims.left;break;case"east":CSS.right=cDims.right;break;case"center":}if(dir=="horz"){if(size===0||size=="auto"){$P.css({height:"auto"});size=$P.outerHeight();}size=max(size,minSize);size=min(size,maxSize);size=min(size,cDims.innerHeight-spacing);CSS.height=max(1,cssH(pane,size));s.size=size;s.maxSize=maxSize;s.minSize=max(minSize,size-CSS.height+1);$P.css(CSS);}else if(dir=="vert"){if(size===0||size=="auto"){$P.css({width:"auto",float:"left"});size=$P.outerWidth();$P.css({float:"none"});}size=max(size,minSize);size=min(size,maxSize);size=min(size,cDims.innerWidth-spacing);CSS.width=max(1,cssW(pane,size));s.size=size;s.maxSize=maxSize;s.minSize=max(minSize,size-CSS.width+1);$P.css(CSS);sizeMidPanes(pane,null,true);}else if(pane=="center"){$P.css(CSS);sizeMidPanes("center",null,true);}if(o.initClosed&&o.closable){$P.hide().addClass("closed");s.isClosed=true;}else if(o.initHidden||o.initClosed){hide(pane,true);s.isHidden=true;}else -$P.addClass("open");if(o.showOverflowOnHover)$P.hover(allowOverflow,resetOverflow);if(o.contentSelector){$C=$Cs[pane]=$P.children(o.contentSelector+":first");if(!$C.length){$Cs[pane]=false;return true;}$C.css(c.content.cssReq);if(o.applyDefaultStyles)$C.css(c.content.cssDef);$P.css({overflow:"hidden"});}});};var initHandles=function(){$.each(c.borderPanes.split(","),function(){var -pane=str(this),o=options[pane],s=state[pane],rClass=o.resizerClass,tClass=o.togglerClass,$P=$Ps[pane];$Rs[pane]=false;$Ts[pane]=false;if(!$P||(!o.closable&&!o.resizable))return;var -edge=c[pane].edge,isOpen=$P.is(":visible"),spacing=(isOpen?o.spacing_open:o.spacing_closed),_pane="-"+pane,_state=(isOpen?"-open":"-closed"),$R,$T;$R=$Rs[pane]=$("");if(isOpen&&o.resizable);else if(!isOpen&&o.slidable)$R.attr("title",o.sliderTip).css("cursor",o.sliderCursor);$R.attr("id",(o.paneSelector.substr(0,1)=="#"?o.paneSelector.substr(1)+"-resizer":"")).attr("resizer",pane).css(c.resizers.cssReq).css(edge,cDims[edge]+getPaneSize(pane)).addClass(rClass+" "+rClass+_pane+" "+rClass+_state+" "+rClass+_pane+_state).appendTo($Container);if(o.applyDefaultStyles)$R.css(c.resizers.cssDef);if(o.closable){$T=$Ts[pane]=$("
      ");$T.attr("id",(o.paneSelector.substr(0,1)=="#"?o.paneSelector.substr(1)+"-toggler":"")).css(c.togglers.cssReq).attr("title",(isOpen?o.togglerTip_open:o.togglerTip_closed)).click(function(evt){toggle(pane);evt.stopPropagation();}).mouseover(function(evt){evt.stopPropagation();}).addClass(tClass+" "+tClass+_pane+" "+tClass+_state+" "+tClass+_pane+_state).appendTo($R);if(o.togglerContent_open)$(""+o.togglerContent_open+"").addClass("content content-open").css("display",s.isClosed?"none":"block").appendTo($T);if(o.togglerContent_closed)$(""+o.togglerContent_closed+"").addClass("content content-closed").css("display",s.isClosed?"block":"none").appendTo($T);if(o.applyDefaultStyles)$T.css(c.togglers.cssDef);if(!isOpen)bindStartSlidingEvent(pane,true);}});sizeHandles("all",true);};var initResizable=function(){var -draggingAvailable=(typeof $.fn.draggable=="function"),minPosition,maxPosition,edge;$.each(c.borderPanes.split(","),function(){var -pane=str(this),o=options[pane],s=state[pane];if(!draggingAvailable||!$Ps[pane]||!o.resizable){o.resizable=false;return true;}var -rClass=o.resizerClass,dragClass=rClass+"-drag",dragPaneClass=rClass+"-"+pane+"-drag",draggingClass=rClass+"-dragging",draggingPaneClass=rClass+"-"+pane+"-dragging",draggingClassSet=false,$P=$Ps[pane],$R=$Rs[pane];if(!s.isClosed)$R.attr("title",o.resizerTip).css("cursor",o.resizerCursor);$R.draggable({containment:$Container[0],axis:(c[pane].dir=="horz"?"y":"x"),delay:200,distance:1,helper:"clone",opacity:o.resizerDragOpacity,zIndex:c.zIndex.resizing,start:function(e,ui){if(false===execUserCallback(pane,o.onresize_start))return false;s.isResizing=true;clearTimer(pane,"closeSlider");$R.addClass(dragClass+" "+dragPaneClass);draggingClassSet=false;var resizerWidth=(pane=="east"||pane=="south"?o.spacing_open:0);setPaneMinMaxSizes(pane);s.minPosition-=resizerWidth;s.maxPosition-=resizerWidth;edge=(c[pane].dir=="horz"?"top":"left");$(o.maskIframesOnResize===true?"iframe":o.maskIframesOnResize).each(function(){$('
      ').css({background:"#fff",opacity:"0.001",zIndex:9,position:"absolute",width:this.offsetWidth+"px",height:this.offsetHeight+"px"}).css($(this).offset()).appendTo(this.parentNode);});},drag:function(e,ui){if(!draggingClassSet){$(".ui-draggable-dragging").addClass(draggingClass+" "+draggingPaneClass).children().css("visibility","hidden");draggingClassSet=true;if(s.isSliding)$Ps[pane].css("zIndex",c.zIndex.sliding);}if(ui.position[edge]s.maxPosition)ui.position[edge]=s.maxPosition;},stop:function(e,ui){var -dragPos=ui.position,resizerPos,newSize;$R.removeClass(dragClass+" "+dragPaneClass);switch(pane){case"north":resizerPos=dragPos.top;break;case"west":resizerPos=dragPos.left;break;case"south":resizerPos=cDims.outerHeight-dragPos.top-$R.outerHeight();break;case"east":resizerPos=cDims.outerWidth-dragPos.left-$R.outerWidth();break;}newSize=resizerPos-cDims[c[pane].edge];sizePane(pane,newSize);$("div.ui-layout-mask").remove();s.isResizing=false;}});});};var hide=function(pane,onInit){var -o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane];if(!$P||s.isHidden)return;if(false===execUserCallback(pane,o.onhide_start))return;s.isSliding=false;if($R)$R.hide();if(onInit||s.isClosed){s.isClosed=true;s.isHidden=true;$P.hide();sizeMidPanes(c[pane].dir=="horz"?"all":"center");execUserCallback(pane,o.onhide_end||o.onhide);}else{s.isHiding=true;close(pane,false);}};var show=function(pane,openPane){var -o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane];if(!$P||!s.isHidden)return;if(false===execUserCallback(pane,o.onshow_start))return;s.isSliding=false;s.isShowing=true;if($R&&o.spacing_open>0)$R.show();if(openPane===false)close(pane,true);else -open(pane);};var toggle=function(pane){var s=state[pane];if(s.isHidden)show(pane);else if(s.isClosed)open(pane);else -close(pane);};var close=function(pane,force,noAnimation){var -$P=$Ps[pane],$R=$Rs[pane],$T=$Ts[pane],o=options[pane],s=state[pane],doFX=!noAnimation&&!s.isClosed&&(o.fxName_close!="none"),edge=c[pane].edge,rClass=o.resizerClass,tClass=o.togglerClass,_pane="-"+pane,_open="-open",_sliding="-sliding",_closed="-closed",isShowing=s.isShowing,isHiding=s.isHiding;delete s.isShowing;delete s.isHiding;if(!$P||(!o.resizable&&!o.closable))return;else if(!force&&s.isClosed&&!isShowing)return;if(c.isLayoutBusy){setFlowCallback("close",pane,force);return;}if(!isShowing&&false===execUserCallback(pane,o.onclose_start))return;c[pane].isMoving=true;c.isLayoutBusy=true;s.isClosed=true;if(isHiding)s.isHidden=true;else if(isShowing)s.isHidden=false;syncPinBtns(pane,false);if(!s.isSliding)sizeMidPanes(c[pane].dir=="horz"?"all":"center");if($R){$R.css(edge,cDims[edge]).removeClass(rClass+_open+" "+rClass+_pane+_open).removeClass(rClass+_sliding+" "+rClass+_pane+_sliding).addClass(rClass+_closed+" "+rClass+_pane+_closed);if(o.resizable)$R.draggable("disable").css("cursor","default").attr("title","");if($T){$T.removeClass(tClass+_open+" "+tClass+_pane+_open).addClass(tClass+_closed+" "+tClass+_pane+_closed).attr("title",o.togglerTip_closed);}sizeHandles();}if(doFX){lockPaneForFX(pane,true);$P.hide(o.fxName_close,o.fxSettings_close,o.fxSpeed_close,function(){lockPaneForFX(pane,false);if(!s.isClosed)return;close_2();});}else{$P.hide();close_2();}function close_2(){bindStartSlidingEvent(pane,true);if(!isShowing)execUserCallback(pane,o.onclose_end||o.onclose);if(isShowing)execUserCallback(pane,o.onshow_end||o.onshow);if(isHiding)execUserCallback(pane,o.onhide_end||o.onhide);execFlowCallback(pane);}};var open=function(pane,slide,noAnimation){var -$P=$Ps[pane],$R=$Rs[pane],$T=$Ts[pane],o=options[pane],s=state[pane],doFX=!noAnimation&&s.isClosed&&(o.fxName_open!="none"),edge=c[pane].edge,rClass=o.resizerClass,tClass=o.togglerClass,_pane="-"+pane,_open="-open",_closed="-closed",_sliding="-sliding",isShowing=s.isShowing;delete s.isShowing;if(!$P||(!o.resizable&&!o.closable))return;else if(!s.isClosed&&!s.isSliding)return;if(s.isHidden&&!isShowing){show(pane,true);return;}if(c.isLayoutBusy){setFlowCallback("open",pane,slide);return;}if(false===execUserCallback(pane,o.onopen_start))return;c[pane].isMoving=true;c.isLayoutBusy=true;if(s.isSliding&&!slide)bindStopSlidingEvents(pane,false);s.isClosed=false;if(isShowing)s.isHidden=false;setPaneMinMaxSizes(pane);if(s.size>s.maxSize)$P.css(c[pane].sizeType,max(1,cssSize(pane,s.maxSize)));bindStartSlidingEvent(pane,false);if(doFX){lockPaneForFX(pane,true);$P.show(o.fxName_open,o.fxSettings_open,o.fxSpeed_open,function(){lockPaneForFX(pane,false);if(s.isClosed)return;open_2();});}else{$P.show();open_2();}function open_2(){if(!s.isSliding)sizeMidPanes(c[pane].dir=="vert"?"center":"all");if($R){$R.css(edge,cDims[edge]+getPaneSize(pane)).removeClass(rClass+_closed+" "+rClass+_pane+_closed).addClass(rClass+_open+" "+rClass+_pane+_open).addClass(!s.isSliding?"":rClass+_sliding+" "+rClass+_pane+_sliding);if(o.resizable)$R.draggable("enable").css("cursor",o.resizerCursor).attr("title",o.resizerTip);else -$R.css("cursor","default");if($T){$T.removeClass(tClass+_closed+" "+tClass+_pane+_closed).addClass(tClass+_open+" "+tClass+_pane+_open).attr("title",o.togglerTip_open);}sizeHandles("all");}sizeContent(pane);syncPinBtns(pane,!s.isSliding);execUserCallback(pane,o.onopen_end||o.onopen);if(isShowing)execUserCallback(pane,o.onshow_end||o.onshow);execFlowCallback(pane);}};var lockPaneForFX=function(pane,doLock){var $P=$Ps[pane];if(doLock){$P.css({zIndex:c.zIndex.animation});if(pane=="south")$P.css({top:cDims.top+cDims.innerHeight-$P.outerHeight()});else if(pane=="east")$P.css({left:cDims.left+cDims.innerWidth-$P.outerWidth()});}else{if(!state[pane].isSliding)$P.css({zIndex:c.zIndex.pane_normal});if(pane=="south")$P.css({top:"auto"});else if(pane=="east")$P.css({left:"auto"});}};var bindStartSlidingEvent=function(pane,enable){var -o=options[pane],$R=$Rs[pane],trigger=o.slideTrigger_open;if(!$R||!o.slidable)return;if(trigger!="click"&&trigger!="dblclick"&&trigger!="mouseover")trigger="click";$R -[enable?"bind":"unbind"](trigger,slideOpen).css("cursor",(enable?o.sliderCursor:"default")).attr("title",(enable?o.sliderTip:""));};var bindStopSlidingEvents=function(pane,enable){var -o=options[pane],s=state[pane],trigger=o.slideTrigger_close,action=(enable?"bind":"unbind"),$P=$Ps[pane],$R=$Rs[pane];s.isSliding=enable;clearTimer(pane,"closeSlider");$P.css({zIndex:(enable?c.zIndex.sliding:c.zIndex.pane_normal)});$R.css({zIndex:(enable?c.zIndex.sliding:c.zIndex.resizer_normal)});if(trigger!="click"&&trigger!="mouseout")trigger="mouseout";if(enable){$P.bind(trigger,slideClosed);$R.bind(trigger,slideClosed);if(trigger="mouseout"){$P.bind("mouseover",cancelMouseOut);$R.bind("mouseover",cancelMouseOut);}}else{$P.unbind(trigger);$R.unbind(trigger);if(trigger="mouseout"){$P.unbind("mouseover");$R.unbind("mouseover");clearTimer(pane,"closeSlider");}}function cancelMouseOut(evt){clearTimer(pane,"closeSlider");evt.stopPropagation();}};var slideOpen=function(){var pane=$(this).attr("resizer");if(state[pane].isClosed){bindStopSlidingEvents(pane,true);open(pane,true);}};var slideClosed=function(){var -$E=$(this),pane=$E.attr("pane")||$E.attr("resizer"),o=options[pane],s=state[pane];if(s.isClosed||s.isResizing)return;else if(o.slideTrigger_close=="click")close_NOW();else -setTimer(pane,"closeSlider",close_NOW,300);function close_NOW(){bindStopSlidingEvents(pane,false);if(!s.isClosed)close(pane);}};var sizePane=function(pane,size){var -edge=c[pane].edge,dir=c[pane].dir,o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane];setPaneMinMaxSizes(pane);s.minSize=max(s.minSize,o.minSize);if(o.maxSize>0)s.maxSize=min(s.maxSize,o.maxSize);size=max(size,s.minSize);size=min(size,s.maxSize);s.size=size;$R.css(edge,size+cDims[edge]);$P.css(c[pane].sizeType,max(1,cssSize(pane,size)));if(!s.isSliding)sizeMidPanes(dir=="horz"?"all":"center");sizeHandles();sizeContent(pane);execUserCallback(pane,o.onresize_end||o.onresize);};var sizeMidPanes=function(panes,overrideDims,onInit){if(!panes||panes=="all")panes="east,west,center";var d=getPaneDims();if(overrideDims)$.extend(d,overrideDims);$.each(panes.split(","),function(){if(!$Ps[this])return;var -pane=str(this),o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane],hasRoom=true,CSS={};if(pane=="center"){d=getPaneDims();CSS=$.extend({},d);CSS.width=max(1,cssW(pane,CSS.width));CSS.height=max(1,cssH(pane,CSS.height));hasRoom=(CSS.width>1&&CSS.height>1);if($.browser.msie&&(!$.boxModel||$.browser.version<7)){if($Ps.north)$Ps.north.css({width:cssW($Ps.north,cDims.innerWidth)});if($Ps.south)$Ps.south.css({width:cssW($Ps.south,cDims.innerWidth)});}}else{CSS.top=d.top;CSS.bottom=d.bottom;CSS.height=max(1,cssH(pane,d.height));hasRoom=(CSS.height>1);}if(hasRoom){$P.css(CSS);if(s.noRoom){s.noRoom=false;if(s.isHidden)return;else show(pane,!s.isClosed);}if(!onInit){sizeContent(pane);execUserCallback(pane,o.onresize_end||o.onresize);}}else if(!s.noRoom){s.noRoom=true;if(s.isHidden)return;if(onInit){$P.hide();if($R)$R.hide();}else hide(pane);}});};var sizeContent=function(panes){if(!panes||panes=="all")panes=c.allPanes;$.each(panes.split(","),function(){if(!$Cs[this])return;var -pane=str(this),ignore=options[pane].contentIgnoreSelector,$P=$Ps[pane],$C=$Cs[pane],e_C=$C[0],height=cssH($P);;$P.children().each(function(){if(this==e_C)return;var $E=$(this);if(!ignore||!$E.is(ignore))height-=$E.outerHeight();});if(height>0)height=cssH($C,height);if(height<1)$C.hide();else -$C.css({height:height}).show();});};var sizeHandles=function(panes,onInit){if(!panes||panes=="all")panes=c.borderPanes;$.each(panes.split(","),function(){var -pane=str(this),o=options[pane],s=state[pane],$P=$Ps[pane],$R=$Rs[pane],$T=$Ts[pane];if(!$P||!$R||(!o.resizable&&!o.closable))return;var -dir=c[pane].dir,_state=(s.isClosed?"_closed":"_open"),spacing=o["spacing"+_state],togAlign=o["togglerAlign"+_state],togLen=o["togglerLength"+_state],paneLen,offset,CSS={};if(spacing==0){$R.hide();return;}else if(!s.noRoom&&!s.isHidden)$R.show();if(dir=="horz"){paneLen=$P.outerWidth();$R.css({width:max(1,cssW($R,paneLen)),height:max(1,cssH($R,spacing)),left:cssNum($P,"left")});}else{paneLen=$P.outerHeight();$R.css({height:max(1,cssH($R,paneLen)),width:max(1,cssW($R,spacing)),top:cDims.top+getPaneSize("north",true)});}if($T){if(togLen==0||(s.isSliding&&o.hideTogglerOnSlide)){$T.hide();return;}else -$T.show();if(!(togLen>0)||togLen=="100%"||togLen>paneLen){togLen=paneLen;offset=0;}else{if(typeof togAlign=="string"){switch(togAlign){case"top":case"left":offset=0;break;case"bottom":case"right":offset=paneLen-togLen;break;case"middle":case"center":default:offset=Math.floor((paneLen-togLen)/2);}}else{var x=parseInt(togAlign);if(togAlign>=0)offset=x;else offset=paneLen-togLen+x;}}var -$TC_o=(o.togglerContent_open?$T.children(".content-open"):false),$TC_c=(o.togglerContent_closed?$T.children(".content-closed"):false),$TC=(s.isClosed?$TC_c:$TC_o);if($TC_o)$TC_o.css("display",s.isClosed?"none":"block");if($TC_c)$TC_c.css("display",s.isClosed?"block":"none");if(dir=="horz"){var width=cssW($T,togLen);$T.css({width:max(0,width),height:max(1,cssH($T,spacing)),left:offset});if($TC)$TC.css("marginLeft",Math.floor((width-$TC.outerWidth())/2));}else{var height=cssH($T,togLen);$T.css({height:max(0,height),width:max(1,cssW($T,spacing)),top:offset});if($TC)$TC.css("marginTop",Math.floor((height-$TC.outerHeight())/2));}}if(onInit&&o.initHidden){$R.hide();if($T)$T.hide();}});};var resizeAll=function(){var -oldW=cDims.innerWidth,oldH=cDims.innerHeight;cDims=state.container=getElemDims($Container);var -checkH=(cDims.innerHeights.maxSize)sizePane(pane,s.maxSize);}});sizeMidPanes("all");sizeHandles("all");};function keyDown(evt){if(!evt)return true;var code=evt.keyCode;if(code<33)return true;var -PANE={38:"north",40:"south",37:"west",39:"east"},isCursorKey=(code>=37&&code<=40),ALT=evt.altKey,SHIFT=evt.shiftKey,CTRL=evt.ctrlKey,pane=false,s,o,k,m,el;if(!CTRL&&!SHIFT)return true;else if(isCursorKey&&options[PANE[code]].enableCursorHotkey)pane=PANE[code];else -$.each(c.borderPanes.split(","),function(i,p){o=options[p];k=o.customHotkey;m=o.customHotkeyModifier;if((SHIFT&&m=="SHIFT")||(CTRL&&m=="CTRL")||(CTRL&&SHIFT)){if(k&&code==(isNaN(k)||k<=9?k.toUpperCase().charCodeAt(0):k)){pane=p;return false;}}});if(!pane)return true;o=options[pane];s=state[pane];if(!o.enableCursorHotkey||s.isHidden||!$Ps[pane])return true;el=evt.target||evt.srcElement;if(el&&SHIFT&&isCursorKey&&(el.tagName=="TEXTAREA"||(el.tagName=="INPUT"&&(code==37||code==39))))return true;toggle(pane);evt.stopPropagation();evt.returnValue=false;return false;};function allowOverflow(elem){if(this&&this.tagName)elem=this;var $P;if(typeof elem=="string")$P=$Ps[elem];else{if($(elem).attr("pane"))$P=$(elem);else $P=$(elem).parents("div[pane]:first");}if(!$P.length)return;var -pane=$P.attr("pane"),s=state[pane];if(s.cssSaved)resetOverflow(pane);if(s.isSliding||s.isResizing||s.isClosed){s.cssSaved=false;return;}var -newCSS={zIndex:(c.zIndex.pane_normal+1)},curCSS={},of=$P.css("overflow"),ofX=$P.css("overflowX"),ofY=$P.css("overflowY");if(of!="visible"){curCSS.overflow=of;newCSS.overflow="visible";}if(ofX&&ofX!="visible"&&ofX!="auto"){curCSS.overflowX=ofX;newCSS.overflowX="visible";}if(ofY&&ofY!="visible"&&ofY!="auto"){curCSS.overflowY=ofX;newCSS.overflowY="visible";}s.cssSaved=curCSS;$P.css(newCSS);$.each(c.allPanes.split(","),function(i,p){if(p!=pane)resetOverflow(p);});};function resetOverflow(elem){if(this&&this.tagName)elem=this;var $P;if(typeof elem=="string")$P=$Ps[elem];else{if($(elem).hasClass("ui-layout-pane"))$P=$(elem);else $P=$(elem).parents("div[pane]:first");}if(!$P.length)return;var -pane=$P.attr("pane"),s=state[pane],CSS=s.cssSaved||{};if(!s.isSliding&&!s.isResizing)$P.css("zIndex",c.zIndex.pane_normal);$P.css(CSS);s.cssSaved=false;};function getBtn(selector,pane,action){var -$E=$(selector),err="Error Adding Button \n\nInvalid ";if(!$E.length)alert(err+"selector: "+selector);else if(c.borderPanes.indexOf(pane)==-1)alert(err+"pane: "+pane);else{var btn=options[pane].buttonClass+"-"+action;$E.addClass(btn+" "+btn+"-"+pane);return $E;}return false;};function addToggleBtn(selector,pane){var $E=getBtn(selector,pane,"toggle");if($E)$E.attr("title",state[pane].isClosed?"Open":"Close").click(function(evt){toggle(pane);evt.stopPropagation();});};function addOpenBtn(selector,pane){var $E=getBtn(selector,pane,"open");if($E)$E.attr("title","Open").click(function(evt){open(pane);evt.stopPropagation();});};function addCloseBtn(selector,pane){var $E=getBtn(selector,pane,"close");if($E)$E.attr("title","Close").click(function(evt){close(pane);evt.stopPropagation();});};function addPinBtn(selector,pane){var $E=getBtn(selector,pane,"pin");if($E){var s=state[pane];$E.click(function(evt){setPinState($(this),pane,(s.isSliding||s.isClosed));if(s.isSliding||s.isClosed)open(pane);else close(pane);evt.stopPropagation();});setPinState($E,pane,(!s.isClosed&&!s.isSliding));c[pane].pins.push(selector);}};function syncPinBtns(pane,doPin){$.each(c[pane].pins,function(i,selector){setPinState($(selector),pane,doPin);});};function setPinState($Pin,pane,doPin){var updown=$Pin.attr("pin");if(updown&&doPin==(updown=="down"))return;var -root=options[pane].buttonClass,class1=root+"-pin",class2=class1+"-"+pane,UP1=class1+"-up",UP2=class2+"-up",DN1=class1+"-down",DN2=class2+"-down";$Pin.attr("pin",doPin?"down":"up").attr("title",doPin?"Un-Pin":"Pin").removeClass(doPin?UP1:DN1).removeClass(doPin?UP2:DN2).addClass(doPin?DN1:UP1).addClass(doPin?DN2:UP2);};var -$Container=$(this).css({overflow:"hidden"}),$Ps={},$Cs={},$Rs={},$Ts={},c=config,cDims=state.container;create();return{options:options,state:state,panes:$Ps,toggle:toggle,open:open,close:close,hide:hide,show:show,resizeContent:sizeContent,sizePane:sizePane,resizeAll:resizeAll,addToggleBtn:addToggleBtn,addOpenBtn:addOpenBtn,addCloseBtn:addCloseBtn,addPinBtn:addPinBtn,allowOverflow:allowOverflow,resetOverflow:resetOverflow,cssWidth:cssW,cssHeight:cssH};}})(jQuery); - - -// jqgrid.locale-en.js -(function(a){a.jgrid={defaults:{recordtext:"View {0} - {1} of {2}",emptyrecords:"No records to view",loadtext:"Loading...",pgtext:"Page {0} of {1}"},search:{caption:"Search...",Find:"Find",Reset:"Reset",odata:["equal","not equal","less","less or equal","greater","greater or equal","begins with","does not begin with","is in","is not in","ends with","does not end with","contains","does not contain"],groupOps:[{op:"AND",text:"all"},{op:"OR",text:"any"}],matchText:" match",rulesText:" rules"},edit:{addCaption:"Add Record",editCaption:"Edit Record",bSubmit:"Submit",bCancel:"Cancel",bClose:"Close",saveData:"Data has been changed! Save changes?",bYes:"Yes",bNo:"No",bExit:"Cancel",msg:{required:"Field is required",number:"Please, enter valid number",minValue:"value must be greater than or equal to ",maxValue:"value must be less than or equal to",email:"is not a valid e-mail",integer:"Please, enter valid integer value",date:"Please, enter valid date value",url:"is not a valid URL. Prefix required ('http://' or 'https://')",nodefined:" is not defined!",novalue:" return value is required!",customarray:"Custom function should return array!",customfcheck:"Custom function should be present in case of custom checking!"}},view:{caption:"View Record",bClose:"Close"},del:{caption:"Delete",msg:"Delete selected record(s)?",bSubmit:"Delete",bCancel:"Cancel"},nav:{edittext:"",edittitle:"Edit selected row",addtext:"",addtitle:"Add new row",deltext:"",deltitle:"Delete selected row",searchtext:"",searchtitle:"Find records",refreshtext:"",refreshtitle:"Reload Grid",alertcap:"Warning",alerttext:"Please, select row",viewtext:"",viewtitle:"View selected row"},col:{caption:"Select columns",bSubmit:"Ok",bCancel:"Cancel"},errors:{errcap:"Error",nourl:"No url is set",norecords:"No records to process",model:"Length of colNames <> colModel!"},formatter:{integer:{thousandsSeparator:" ",defaultValue:"0"},number:{decimalSeparator:".",thousandsSeparator:" ",decimalPlaces:2,defaultValue:"0.00"},currency:{decimalSeparator:".",thousandsSeparator:" ",decimalPlaces:2,prefix:"",suffix:"",defaultValue:"0.00"},date:{dayNames:["Sun","Mon","Tue","Wed","Thr","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],AmPm:["am","pm","AM","PM"],S:function(b){return b<11||b>13?["st","nd","rd","th"][Math.min((b-1)%10,3)]:"th"},srcformat:"Y-m-d",newformat:"d/m/Y",masks:{ISO8601Long:"Y-m-d H:i:s",ISO8601Short:"Y-m-d",ShortDate:"n/j/Y",LongDate:"l, F d, Y",FullDateTime:"l, F d, Y g:i:s A",MonthDay:"F d",ShortTime:"g:i A",LongTime:"g:i:s A",SortableDateTime:"Y-m-d\\TH:i:s",UniversalSortableDateTime:"Y-m-d H:i:sO",YearMonth:"F, Y"},reformatAfterEdit:false},baseLinkUrl:"",showAction:"",target:"",checkbox:{disabled:true},idName:"id"}}})(jQuery); - - -/* -* jqGrid 3.6.1 - jQuery Grid -* Copyright (c) 2008, Tony Tomov, tony@trirand.com -* Dual licensed under the MIT and GPL licenses -* http://www.opensource.org/licenses/mit-license.php -* http://www.gnu.org/licenses/gpl.html -* Date:2009-11-23 -* Modules: grid.base.js; jquery.fmatter.js; grid.custom.js; grid.common.js; grid.formedit.js; jquery.searchFilter.js; grid.inlinedit.js; grid.celledit.js; jqModal.js; jqDnR.js; grid.subgrid.js; grid.treegrid.js; grid.import.js; JsonXml.js; grid.setcolumns.js; grid.postext.js; grid.tbltogrid.js; grid.jqueryui.js; -*/ -(function($){$.jgrid=$.jgrid||{};$.extend($.jgrid,{htmlDecode:function(value){if(value==" "||value==" "||(value.length==1&&value.charCodeAt(0)==160)){return""}return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,'"')},htmlEncode:function(value){return !value?value:String(value).replace(/&/g,"&").replace(/>/g,">").replace(/])*>/gi;if(v){return v.replace(regexp,"")}else{return v}},stringToDoc:function(xmlString){var xmlDoc;if(typeof xmlString!=="string"){return xmlString}try{var parser=new DOMParser();xmlDoc=parser.parseFromString(xmlString,"text/xml")}catch(e){xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async=false;xmlDoc.loadXML(xmlString)}return(xmlDoc&&xmlDoc.documentElement&&xmlDoc.documentElement.tagName!="parsererror")?xmlDoc:null},parse:function(jsonString){var js=jsonString,msg;if(js.substr(0,9)=="while(1);"){js=js.substr(9)}if(js.substr(0,2)=="/*"){js=js.substr(2,js.length-4)}if(!js){js="{}"}($.jgrid.useJSON===true&&typeof(JSON)==="object"&&typeof(JSON.parse)==="function")?msg=JSON.parse(js):msg=eval("("+js+")");return msg.hasOwnProperty("d")?msg.d:msg},empty:function(){while(this.firstChild){this.removeChild(this.firstChild)}},jqID:function(sid){sid=sid+"";return sid.replace(/([\.\:\[\]])/g,"\\$1")},ajaxOptions:{},extend:function(methods){$.extend($.fn.jqGrid,methods);if(!this.no_legacy_api){$.fn.extend(methods)}}});$.fn.jqGrid=function(pin){if(typeof pin=="string"){var fn=$.fn.jqGrid[pin];if(!fn){throw ("jqGrid - No such method: "+pin)}var args=$.makeArray(arguments).slice(1);return fn.apply(this,args)}return this.each(function(){if(this.grid){return}var p=$.extend(true,{url:"",height:150,page:1,rowNum:20,records:0,pager:"",pgbuttons:true,pginput:true,colModel:[],rowList:[],colNames:[],sortorder:"asc",sortname:"",datatype:"xml",mtype:"GET",altRows:false,selarrrow:[],savedRow:[],shrinkToFit:true,xmlReader:{},jsonReader:{},subGrid:false,subGridModel:[],reccount:0,lastpage:0,lastsort:0,selrow:null,beforeSelectRow:null,onSelectRow:null,onSortCol:null,ondblClickRow:null,onRightClickRow:null,onPaging:null,onSelectAll:null,loadComplete:null,gridComplete:null,loadError:null,loadBeforeSend:null,afterInsertRow:null,beforeRequest:null,onHeaderClick:null,viewrecords:false,loadonce:false,multiselect:false,multikey:false,editurl:null,search:false,caption:"",hidegrid:true,hiddengrid:false,postData:{},userData:{},treeGrid:false,treeGridModel:"nested",treeReader:{},treeANode:-1,ExpandColumn:null,tree_root_level:0,prmNames:{page:"page",rows:"rows",sort:"sidx",order:"sord",search:"_search",nd:"nd"},forceFit:false,gridstate:"visible",cellEdit:false,cellsubmit:"remote",nv:0,loadui:"enable",toolbar:[false,""],scroll:false,multiboxonly:false,deselectAfterSort:true,scrollrows:false,autowidth:false,scrollOffset:18,cellLayout:5,subGridWidth:20,multiselectWidth:20,gridview:false,rownumWidth:25,rownumbers:false,pagerpos:"center",recordpos:"right",footerrow:false,userDataOnFooter:false,hoverrows:true,altclass:"ui-priority-secondary",viewsortcols:[false,"vertical",true],resizeclass:"",autoencode:false,remapColumns:[],ajaxGridOptions:{},direction:"ltr"},$.jgrid.defaults,pin||{});var grid={headers:[],cols:[],footers:[],dragStart:function(i,x,y){this.resizing={idx:i,startX:x.clientX,sOL:y[0]};this.hDiv.style.cursor="col-resize";this.curGbox=$("#rs_m"+p.id,"#gbox_"+p.id);this.curGbox.css({display:"block",left:y[0],top:y[1],height:y[2]});if($.isFunction(p.resizeStart)){p.resizeStart.call(this,x,i)}document.onselectstart=new Function("return false")},dragMove:function(x){if(this.resizing){var diff=x.clientX-this.resizing.startX,h=this.headers[this.resizing.idx],newWidth=p.direction==="ltr"?h.width+diff:h.width-diff,hn,nWn;if(newWidth>33){this.curGbox.css({left:this.resizing.sOL+diff});if(p.forceFit===true){hn=this.headers[this.resizing.idx+p.nv];nWn=p.direction==="ltr"?hn.width-diff:hn.width+diff;if(nWn>33){h.newWidth=newWidth;hn.newWidth=nWn}}else{this.newWidth=p.direction==="ltr"?p.tblwidth+diff:p.tblwidth-diff;h.newWidth=newWidth}}}},dragEnd:function(){this.hDiv.style.cursor="default";if(this.resizing){var idx=this.resizing.idx,nw=this.headers[idx].newWidth||this.headers[idx].width;nw=parseInt(nw);this.resizing=false;$("#rs_m"+p.id).css("display","none");p.colModel[idx].width=nw;this.headers[idx].width=nw;this.headers[idx].el.style.width=nw+"px";if(this.cols.length>0){this.cols[idx].style.width=nw+"px"}if(this.footers.length>0){this.footers[idx].style.width=nw+"px"}if(p.forceFit===true){nw=this.headers[idx+p.nv].newWidth||this.headers[idx+p.nv].width;this.headers[idx+p.nv].width=nw;this.headers[idx+p.nv].el.style.width=nw+"px";if(this.cols.length>0){this.cols[idx+p.nv].style.width=nw+"px"}if(this.footers.length>0){this.footers[idx+p.nv].style.width=nw+"px"}p.colModel[idx+p.nv].width=nw}else{p.tblwidth=this.newWidth||p.tblwidth;$("table:first",this.bDiv).css("width",p.tblwidth+"px");$("table:first",this.hDiv).css("width",p.tblwidth+"px");this.hDiv.scrollLeft=this.bDiv.scrollLeft;if(p.footerrow){$("table:first",this.sDiv).css("width",p.tblwidth+"px");this.sDiv.scrollLeft=this.bDiv.scrollLeft}}if($.isFunction(p.resizeStop)){p.resizeStop.call(this,nw,idx)}}this.curGbox=null;document.onselectstart=new Function("return true")},populateVisible:function(){if(grid.timer){clearTimeout(grid.timer)}grid.timer=null;var dh=$(grid.bDiv).height();if(!dh){return}var table=$("table:first",grid.bDiv);var rows=$("> tbody > tr:visible:first",table);var rh=rows.outerHeight()||grid.prevRowHeight;if(!rh){return}grid.prevRowHeight=rh;var rn=p.rowNum;if(rn<10){rn=parseInt(dh/rh)+1<<1;if(rn<10){rn=10}p.rowNum=rn}var scrollTop=grid.scrollTop=grid.bDiv.scrollTop;var ttop=Math.round(table.position().top)-scrollTop;var tbot=ttop+table.height();var div=rh*rn;var page,npage,empty;if(ttop<=0&&tbot=0||npage<2||p.scroll===true){page=parseInt((tbot+scrollTop)/div)+1;ttop=-1}else{ttop=1}}if(ttop>0){page=parseInt(scrollTop/div)+1;npage=parseInt((scrollTop+dh)/div)+2-page;empty=true}if(npage){if(p.lastpage&&page>p.lastpage){return}if(grid.hDiv.loading){grid.timer=setTimeout(grid.populateVisible,200)}else{p.page=page;if(empty){grid.selectionPreserver(table[0]);grid.emptyRows(grid.bDiv)}grid.populate(npage)}}},scrollGrid:function(){if(p.scroll){var scrollTop=grid.bDiv.scrollTop;if(scrollTop!=grid.scrollTop){grid.scrollTop=scrollTop;if(grid.timer){clearTimeout(grid.timer)}grid.timer=setTimeout(grid.populateVisible,200)}}grid.hDiv.scrollLeft=grid.bDiv.scrollLeft;if(p.footerrow){grid.sDiv.scrollLeft=grid.bDiv.scrollLeft}},selectionPreserver:function(ts){var p=ts.p;var sr=p.selrow,sra=p.selarrrow?$.makeArray(p.selarrrow):null;var left=ts.grid.bDiv.scrollLeft;var complete=p.gridComplete;p.gridComplete=function(){p.selrow=null;p.selarrrow=[];if(p.multiselect&&sra&&sra.length>0){for(var i=0;i
      "),ii,isMSIE=$.browser.msie?true:false,isSafari=$.browser.safari?true:false;ts=this;ts.p.direction=$.trim(ts.p.direction.toLowerCase());if($.inArray(ts.p.direction,["ltr","rtl"])==-1){ts.p.direction="ltr"}dir=ts.p.direction;$(gv).insertBefore(this);$(this).appendTo(gv).removeClass("scroll");var eg=$("
      ");$(eg).insertBefore(gv).attr({id:"gbox_"+this.id,dir:dir});$(gv).appendTo(eg).attr("id","gview_"+this.id);if(isMSIE&&$.browser.version<=6){ii=''}else{ii=""}$("
      ").append(ii).insertBefore(gv);$("
      "+this.p.loadtext+"
      ").insertBefore(gv);$(this).attr({cellSpacing:"0",cellPadding:"0",border:"0",role:"grid","aria-multiselectable":!!this.p.multiselect,"aria-labelledby":"gbox_"+this.id});var sortkeys=["shiftKey","altKey","ctrlKey"],IntNum=function(val,defval){val=parseInt(val,10);if(isNaN(val)){return defval?defval:0}else{return val}},formatCol=function(pos,rowInd){var ral=ts.p.colModel[pos].align,result='style="',clas=ts.p.colModel[pos].classes;if(ral){result+="text-align:"+ral+";"}if(ts.p.colModel[pos].hidden===true){result+="display:none;"}if(rowInd===0){result+="width: "+grid.headers[pos].width+"px;"}return result+'"'+(clas!==undefined?(' class="'+clas+'"'):"")},addCell=function(rowId,cell,pos,irow,srvr){var v,prp;v=formatter(rowId,cell,pos,srvr,"add");prp=formatCol(pos,irow);return''+v+""},formatter=function(rowId,cellval,colpos,rwdat,_act){var cm=ts.p.colModel[colpos],v;if(typeof cm.formatter!=="undefined"){var opts={rowId:rowId,colModel:cm};if($.isFunction(cm.formatter)){v=cm.formatter(cellval,opts,rwdat,_act)}else{if($.fmatter){v=$.fn.fmatter(cm.formatter,cellval,opts,rwdat,_act)}else{v=cellVal(cellval)}}}else{v=cellVal(cellval)}return v},cellVal=function(val){return val===undefined||val===null||val===""?" ":ts.p.autoencode?$.jgrid.htmlEncode(val+""):val+""},addMulti=function(rowid,pos,irow){var v='',prp=formatCol(pos,irow);return""+v+""},addRowNum=function(pos,irow,pG,rN){var v=(parseInt(pG)-1)*parseInt(rN)+1+irow,prp=formatCol(pos,irow);return'"+v+""},reader=function(datatype){var field,f=[],j=0,i;for(i=0;idiv:first",parent).css({height:"auto"}).children("div:first").css({height:0,display:"none"});parent.scrollTop=0}tBody=null},addXmlData=function(xml,t,rcnt,more,adjust){var startReq=new Date();ts.p.reccount=0;if($.isXMLDoc(xml)){if(ts.p.treeANode===-1&&!ts.p.scroll){emptyRows(t);rcnt=0}else{rcnt=rcnt>0?rcnt:0}}else{return}var i,fpos,ir=0,v,row,gi=0,si=0,ni=0,idn,getId,f=[],F,rd={},rl=ts.rows.length,xmlr,rid,rowData=[],ari=0,cn=(ts.p.altRows===true)?" "+ts.p.altclass:"",cn1;if(!ts.p.xmlReader.repeatitems){f=reader("xml")}if(ts.p.keyIndex===false){idn=ts.p.xmlReader.id}else{idn=ts.p.keyIndex}if(f.length>0&&!isNaN(idn)){if(ts.p.remapColumns&&ts.p.remapColumns.length){idn=$.inArray(idn,ts.p.remapColumns)}idn=f[idn]}if((idn+"").indexOf("[")===-1){if(f.length){getId=function(trow,k){return $(idn,trow).text()||k}}else{getId=function(trow,k){return $(ts.p.xmlReader.cell,trow).eq(idn).text()||k}}}else{getId=function(trow,k){return trow.getAttribute(idn.replace(/[\[\]]/g,""))||k}}$(ts.p.xmlReader.page,xml).each(function(){ts.p.page=this.textContent||this.text||1});$(ts.p.xmlReader.total,xml).each(function(){ts.p.lastpage=this.textContent||this.text||1});$(ts.p.xmlReader.records,xml).each(function(){ts.p.records=this.textContent||this.text||0});$(ts.p.xmlReader.userdata,xml).each(function(){ts.p.userData[this.getAttribute("name")]=this.textContent||this.text});var gxml=$(ts.p.xmlReader.root+" "+ts.p.xmlReader.row,xml),gl=gxml.length,j=0;if(gxml&&gl){var rn=parseInt(ts.p.rowNum),br=ts.p.scroll?(parseInt(ts.p.page)-1)*rn+1:1;if(adjust){rn*=adjust+1}var afterInsRow=$.isFunction(ts.p.afterInsertRow);while(j';if(ts.p.rownumbers===true){rowData[ari++]=addRowNum(0,j,ts.p.page,ts.p.rowNum);ni=1}if(ts.p.multiselect===true){rowData[ari++]=addMulti(rid,ni,j);gi=1}if(ts.p.subGrid===true){rowData[ari++]=$(ts).jqGrid("addSubGridCell",gi+ni,j+rcnt);si=1}if(ts.p.xmlReader.repeatitems){if(!F){F=orderedCols(gi+si+ni)}var cells=$(ts.p.xmlReader.cell,xmlr);$.each(F,function(k){var cell=cells[this];if(!cell){return false}v=cell.textContent||cell.text;rd[ts.p.colModel[k+gi+si+ni].name]=v;rowData[ari++]=addCell(rid,v,k+gi+si+ni,j+rcnt,xmlr)})}else{for(i=0;i";if(ts.p.gridview===false){if(ts.p.treeGrid===true){fpos=ts.p.treeANode>=-1?ts.p.treeANode:0;row=$(rowData.join(""))[0];try{$(ts).jqGrid("setTreeNode",rd,row)}catch(e){}rl===0?$("tbody:first",t).append(row):$(ts.rows[j+fpos+rcnt]).after(row)}else{$("tbody:first",t).append(rowData.join(""))}if(ts.p.subGrid===true){try{$(ts).jqGrid("addSubGrid",ts.rows[ts.rows.length-1],gi+ni)}catch(e){}}if(afterInsRow){ts.p.afterInsertRow.call(ts,rid,rd,xmlr)}rowData=[];ari=0}rd={};ir++;j++;if(ir==rn){break}}}if(ts.p.gridview===true){$("tbody:first",t).append(rowData.join(""))}ts.p.totaltime=new Date()-startReq;if(ir>0){ts.grid.cols=ts.rows[0].cells;if(ts.p.records===0){ts.p.records=gl}}rowData=null;if(!ts.p.treeGrid&&!ts.p.scroll){ts.grid.bDiv.scrollTop=0}ts.p.reccount=ir;ts.p.treeANode=-1;if(ts.p.userDataOnFooter){$(ts).jqGrid("footerData","set",ts.p.userData,true)}if(!more){updatepager(false,true)}},addJSONData=function(data,t,rcnt,more,adjust){var startReq=new Date();ts.p.reccount=0;if(data){if(ts.p.treeANode===-1&&!ts.p.scroll){emptyRows(t);rcnt=0}else{rcnt=rcnt>0?rcnt:0}}else{return}var ir=0,v,i,j,row,f=[],F,cur,gi=0,si=0,ni=0,len,drows,idn,rd={},fpos,rl=ts.rows.length,idr,rowData=[],ari=0,cn=(ts.p.altRows===true)?" "+ts.p.altclass:"",cn1;ts.p.page=data[ts.p.jsonReader.page]||1;ts.p.lastpage=data[ts.p.jsonReader.total]||1;ts.p.records=data[ts.p.jsonReader.records]||0;ts.p.userData=data[ts.p.jsonReader.userdata]||{};if(!ts.p.jsonReader.repeatitems){F=f=reader("json")}if(ts.p.keyIndex===false){idn=ts.p.jsonReader.id}else{idn=ts.p.keyIndex}if(f.length>0&&!isNaN(idn)){if(ts.p.remapColumns&&ts.p.remapColumns.length){idn=$.inArray(idn,ts.p.remapColumns)}idn=f[idn]}drows=data[ts.p.jsonReader.root];if(drows){len=drows.length,i=0;var rn=parseInt(ts.p.rowNum),br=ts.p.scroll?(parseInt(ts.p.page)-1)*rn+1:1;if(adjust){rn*=adjust+1}var afterInsRow=$.isFunction(ts.p.afterInsertRow);while(i';if(ts.p.rownumbers===true){rowData[ari++]=addRowNum(0,i,ts.p.page,ts.p.rowNum);ni=1}if(ts.p.multiselect){rowData[ari++]=addMulti(idr,ni,i);gi=1}if(ts.p.subGrid){rowData[ari++]=$(ts).jqGrid("addSubGridCell",gi+ni,i+rcnt);si=1}if(ts.p.jsonReader.repeatitems){if(ts.p.jsonReader.cell){cur=cur[ts.p.jsonReader.cell]}if(!F){F=orderedCols(gi+si+ni)}}for(j=0;j";if(ts.p.gridview===false){if(ts.p.treeGrid===true){fpos=ts.p.treeANode>=-1?ts.p.treeANode:0;row=$(rowData.join(""))[0];try{$(ts).jqGrid("setTreeNode",rd,row)}catch(e){}rl===0?$("tbody:first",t).append(row):$(ts.rows[i+fpos+rcnt]).after(row)}else{$("tbody:first",t).append(rowData.join(""))}if(ts.p.subGrid===true){try{$(ts).jqGrid("addSubGrid",ts.rows[ts.rows.length-1],gi+ni)}catch(e){}}if(afterInsRow){ts.p.afterInsertRow(idr,rd,cur)}rowData=[];ari=0}rd={};ir++;i++;if(ir==rn){break}}if(ts.p.gridview===true){$("tbody:first",t).append(rowData.join(""))}ts.p.totaltime=new Date()-startReq;if(ir>0){ts.grid.cols=ts.rows[0].cells;if(ts.p.records===0){ts.p.records=len}}}if(!ts.p.treeGrid&&!ts.p.scroll){ts.grid.bDiv.scrollTop=0}ts.p.reccount=ir;ts.p.treeANode=-1;if(ts.p.userDataOnFooter){$(ts).jqGrid("footerData","set",ts.p.userData,true)}if(!more){updatepager(false,true)}},updatepager=function(rn,dnd){var cp,last,base,bs,from,to,tot,fmt;base=(parseInt(ts.p.page)-1)*parseInt(ts.p.rowNum);to=base+ts.p.reccount;if(ts.p.scroll){var rows=$("tbody:first > tr",ts.grid.bDiv);base=to-rows.length;var rh=rows.outerHeight();if(rh){var top=base*rh;var height=parseInt(ts.p.records,10)*rh;$(">div:first",ts.grid.bDiv).css({height:height}).children("div:first").css({height:top,display:top?"":"none"})}}if(ts.p.pager){fmt=$.jgrid.formatter.integer||{};if(ts.p.loadonce){cp=last=1;ts.p.lastpage=ts.page=1;$(".selbox",ts.p.pager).attr("disabled",true)}else{cp=IntNum(ts.p.page);last=IntNum(ts.p.lastpage);$(".selbox",ts.p.pager).attr("disabled",false)}if(ts.p.pginput===true){$(".ui-pg-input",ts.p.pager).val(ts.p.page);$("#sp_1",ts.p.pager).html($.fmatter?$.fmatter.util.NumberFormat(ts.p.lastpage,fmt):ts.p.lastpage).width()}if(ts.p.viewrecords){if(ts.p.reccount===0){$(".ui-paging-info",ts.p.pager).html(ts.p.emptyrecords)}else{from=base+1;tot=ts.p.records;if($.fmatter){from=$.fmatter.util.NumberFormat(from,fmt);to=$.fmatter.util.NumberFormat(to,fmt);tot=$.fmatter.util.NumberFormat(tot,fmt)}$(".ui-paging-info",ts.p.pager).html($.jgrid.format(ts.p.recordtext,from,to,tot))}}if(ts.p.pgbuttons===true){if(cp<=0){cp=last=1}if(cp==1){$("#first, #prev",ts.p.pager).addClass("ui-state-disabled").removeClass("ui-state-hover")}else{$("#first, #prev",ts.p.pager).removeClass("ui-state-disabled")}if(cp==last){$("#next, #last",ts.p.pager).addClass("ui-state-disabled").removeClass("ui-state-hover")}else{$("#next, #last",ts.p.pager).removeClass("ui-state-disabled")}}}if(rn===true&&ts.p.rownumbers===true){$("td.jqgrid-rownum",ts.rows).each(function(i){$(this).html(base+1+i)})}if(dnd&&ts.p.jqgdnd){$(ts).jqGrid("gridDnD","updateDnD")}if($.isFunction(ts.p.gridComplete)){ts.p.gridComplete()}},populate=function(npage){if(!ts.grid.hDiv.loading){var pvis=ts.p.scroll&&npage==false;var prm={},dt,dstr,pN=ts.p.prmNames;if(pN.search!==null){prm[pN.search]=ts.p.search}if(pN.nd!=null){prm[pN.nd]=new Date().getTime()}if(pN.rows!==null){prm[pN.rows]=ts.p.rowNum}if(pN.page!==null){prm[pN.page]=ts.p.page}if(pN.sort!==null){prm[pN.sort]=ts.p.sortname}if(pN.order!==null){prm[pN.order]=ts.p.sortorder}var lc=ts.p.loadComplete;var lcf=$.isFunction(lc);if(!lcf){lc=null}var adjust=0;npage=npage||1;if(npage>1){if(pN.npage!=null){prm[pN.npage]=npage;adjust=npage-1;npage=1}else{lc=function(req){if(lcf){ts.p.loadComplete.call(ts,req)}ts.grid.hDiv.loading=false;ts.p.page++;populate(npage-1)}}}else{if(pN.npage!=null){delete ts.p.postData[pN.npage]}}$.extend(ts.p.postData,prm);var rcnt=!ts.p.scroll?0:ts.rows.length-1;if($.isFunction(ts.p.datatype)){ts.p.datatype(ts.p.postData,"load_"+ts.p.id);return}else{if($.isFunction(ts.p.beforeRequest)){ts.p.beforeRequest.call(ts)}}dt=ts.p.datatype.toLowerCase();switch(dt){case"json":case"jsonp":case"xml":case"script":$.ajax($.extend({url:ts.p.url,type:ts.p.mtype,dataType:dt,data:$.isFunction(ts.p.serializeGridData)?ts.p.serializeGridData(ts.p.postData):ts.p.postData,complete:function(req,st){if(st=="success"||(req.statusText=="OK"&&req.status=="200")){if(dt==="xml"){addXmlData(req.responseXML,ts.grid.bDiv,rcnt,npage>1,adjust)}else{addJSONData($.jgrid.parse(req.responseText),ts.grid.bDiv,rcnt,npage>1,adjust)}if(lc){lc.call(ts,req)}if(pvis){ts.grid.populateVisible()}}req=null;endReq()},error:function(xhr,st,err){if($.isFunction(ts.p.loadError)){ts.p.loadError.call(ts,xhr,st,err)}endReq();xhr=null},beforeSend:function(xhr){beginReq();if($.isFunction(ts.p.loadBeforeSend)){ts.p.loadBeforeSend.call(this,xhr)}}},$.jgrid.ajaxOptions,ts.p.ajaxGridOptions));if(ts.p.loadonce||ts.p.treeGrid){ts.p.datatype="local"}break;case"xmlstring":beginReq();addXmlData(dstr=$.jgrid.stringToDoc(ts.p.datastr),ts.grid.bDiv);ts.p.datatype="local";if(lcf){ts.p.loadComplete.call(ts,dstr)}ts.p.datastr=null;endReq();break;case"jsonstring":beginReq();if(typeof ts.p.datastr=="string"){dstr=$.jgrid.parse(ts.p.datastr)}else{dstr=ts.p.datastr}addJSONData(dstr,ts.grid.bDiv);ts.p.datatype="local";if(lcf){ts.p.loadComplete.call(ts,dstr)}ts.p.datastr=null;endReq();break;case"local":case"clientside":beginReq();ts.p.datatype="local";sortArrayData();endReq();break}}},beginReq=function(){ts.grid.hDiv.loading=true;if(ts.p.hiddengrid){return}switch(ts.p.loadui){case"disable":break;case"enable":$("#load_"+ts.p.id).show();break;case"block":$("#lui_"+ts.p.id).show();$("#load_"+ts.p.id).show();break}},endReq=function(){ts.grid.hDiv.loading=false;switch(ts.p.loadui){case"disable":break;case"enable":$("#load_"+ts.p.id).hide();break;case"block":$("#lui_"+ts.p.id).hide();$("#load_"+ts.p.id).hide();break}},sortArrayData=function(){var stripNum=/[\$,%]/g;var rows=[],col=0,st,sv,findSortKey,newDir=(ts.p.sortorder=="asc")?1:-1;$.each(ts.p.colModel,function(i,v){if(this.index==ts.p.sortname||this.name==ts.p.sortname){col=ts.p.lastsort=i;st=this.sorttype;return false}});if(st=="float"||st=="number"||st=="currency"){findSortKey=function($cell){var key=parseFloat($cell.replace(stripNum,""));return isNaN(key)?0:key}}else{if(st=="int"||st=="integer"){findSortKey=function($cell){return IntNum($cell.replace(stripNum,""))}}else{if(st=="date"){findSortKey=function($cell){var fd=ts.p.colModel[col].datefmt||"Y-m-d";return parseDate(fd,$cell).getTime()}}else{findSortKey=function($cell){return $.trim($cell.toUpperCase())}}}}$.each(ts.rows,function(index,row){try{sv=$.unformat($(row).children("td").eq(col),{colModel:ts.p.colModel[col]},col,true)}catch(_){sv=$(row).children("td").eq(col).text()}row.sortKey=findSortKey(sv);rows[index]=this});if(ts.p.treeGrid){$(ts).jqGrid("SortTree",newDir)}else{rows.sort(function(a,b){if(a.sortKeyb.sortKey){return newDir}return 0});if(rows[0]){$("td",rows[0]).each(function(k){$(this).css("width",grid.headers[k].width+"px")});ts.grid.cols=rows[0].cells}var cn="";if(ts.p.altRows){cn=ts.p.altclass}$.each(rows,function(i,row){if(cn){if(i%2==1){$(row).addClass(cn)}else{$(row).removeClass(cn)}}$("tbody",ts.grid.bDiv).append(row);row.sortKey=null})}ts.grid.bDiv.scrollTop=0},parseDate=function(format,date){var tsp={m:1,d:1,y:1970,h:0,i:0,s:0},k,hl,dM;date=date.split(/[\\\/:_;.\t\T\s-]/);format=format.split(/[\\\/:_;.\t\T\s-]/);var dfmt=$.jgrid.formatter.date.monthNames;for(k=0,hl=format.length;k11){date[k]=dM+1-12}}tsp[format[k].toLowerCase()]=parseInt(date[k],10)}tsp.m=parseInt(tsp.m,10)-1;var ty=tsp.y;if(ty>=70&&ty<=99){tsp.y=1900+tsp.y}else{if(ty>=0&&ty<=69){tsp.y=2000+tsp.y}}return new Date(tsp.y,tsp.m,tsp.d,tsp.h,tsp.i,tsp.s,0)},setPager=function(){var sep="",pgid=$(ts.p.pager).attr("id")||"pager",pginp="",pgl="",str="",pgcnt,lft,cent,rgt,twd,tdw,i,clearVals=function(onpaging){if($.isFunction(ts.p.onPaging)){ts.p.onPaging(onpaging)}ts.p.selrow=null;if(ts.p.multiselect){ts.p.selarrrow=[];$("#cb_"+$.jgrid.jqID(ts.p.id),ts.grid.hDiv).attr("checked",false)}ts.p.savedRow=[]};pgcnt="pg_"+pgid;lft=pgid+"_left";cent=pgid+"_center";rgt=pgid+"_right";$(ts.p.pager).addClass("ui-jqgrid-pager corner-bottom").append("
      ").attr("dir","ltr");if(ts.p.rowList.length>0){str="";str+=""}if(dir=="rtl"){pgl+=str}if(ts.p.pginput===true){pginp=""+$.jgrid.format(ts.p.pgtext||"","","")+""}if(ts.p.pgbuttons===true){var po=["first","prev","next","last"];if(dir=="rtl"){po.reverse()}pgl+="";pgl+="";pgl+=pginp!=""?sep+pginp+sep:"";pgl+="";pgl+=""}else{if(pginp!=""){pgl+=pginp}}if(dir=="ltr"){pgl+=str}pgl+="";if(ts.p.viewrecords===true){$("td#"+pgid+"_"+ts.p.recordpos,"#"+pgcnt).append("
      ")}$("td#"+pgid+"_"+ts.p.pagerpos,"#"+pgcnt).append(pgl);tdw=$(".ui-jqgrid").css("font-size")||"11px";$("body").append("");twd=$(pgl).clone().appendTo("#testpg").width();$("#testpg").remove();if(twd>0){if(pginp!=""){twd+=50}$("td#"+pgid+"_"+ts.p.pagerpos,"#"+pgcnt).width(twd)}ts.p._nvtd=[];ts.p._nvtd[0]=twd?Math.floor((ts.p.width-twd)/2):Math.floor(ts.p.width/3);ts.p._nvtd[1]=0;pgl=null;$(".ui-pg-selbox","#"+pgcnt).bind("change",function(){ts.p.page=Math.round(ts.p.rowNum*(ts.p.page-1)/this.value-0.5)+1;ts.p.rowNum=this.value;clearVals("records");populate();return false});if(ts.p.pgbuttons===true){$(".ui-pg-button","#"+pgcnt).hover(function(e){if($(this).hasClass("ui-state-disabled")){this.style.cursor="default"}else{$(this).addClass("ui-state-hover");this.style.cursor="pointer"}},function(e){if($(this).hasClass("ui-state-disabled")){}else{$(this).removeClass("ui-state-hover");this.style.cursor="default"}});$("#first, #prev, #next, #last",ts.p.pager).click(function(e){var cp=IntNum(ts.p.page),last=IntNum(ts.p.lastpage),selclick=false,fp=true,pp=true,np=true,lp=true;if(last===0||last===1){fp=false;pp=false;np=false;lp=false}else{if(last>1&&cp>=1){if(cp===1){fp=false;pp=false}else{if(cp>1&&cp1&&cp===0){np=false;lp=false;cp=last-1}}}if(this.id==="first"&&fp){ts.p.page=1;selclick=true}if(this.id==="prev"&&pp){ts.p.page=(cp-1);selclick=true}if(this.id==="next"&&np){ts.p.page=(cp+1);selclick=true}if(this.id==="last"&&lp){ts.p.page=last;selclick=true}if(selclick){clearVals(this.id);populate()}return false})}if(ts.p.pginput===true){$("input.ui-pg-input","#"+pgcnt).keypress(function(e){var key=e.charCode?e.charCode:e.keyCode?e.keyCode:0;if(key==13){ts.p.page=($(this).val()>0)?$(this).val():ts.p.page;clearVals("user");populate();return false}return this})}},sortData=function(index,idxcol,reload,sor){if(!ts.p.colModel[idxcol].sortable){return}var imgs,so;if(ts.p.savedRow.length>0){return}if(!reload){if(ts.p.lastsort==idxcol){if(ts.p.sortorder=="asc"){ts.p.sortorder="desc"}else{if(ts.p.sortorder=="desc"){ts.p.sortorder="asc"}}}else{ts.p.sortorder="asc"}ts.p.page=1}if(sor){if(ts.p.lastsort==idxcol&&ts.p.sortorder==sor){return}else{ts.p.sortorder=sor}}var thd=$("thead:first",ts.grid.hDiv).get(0);$("tr th:eq("+ts.p.lastsort+") span.ui-grid-ico-sort",thd).addClass("ui-state-disabled");$("tr th:eq("+ts.p.lastsort+")",thd).attr("aria-selected","false");$("tr th:eq("+idxcol+") span.ui-icon-"+ts.p.sortorder,thd).removeClass("ui-state-disabled");$("tr th:eq("+idxcol+")",thd).attr("aria-selected","true");if(!ts.p.viewsortcols[0]){if(ts.p.lastsort!=idxcol){$("tr th:eq("+ts.p.lastsort+") span.s-ico",thd).hide();$("tr th:eq("+idxcol+") span.s-ico",thd).show()}}ts.p.lastsort=idxcol;index=index.substring(5);ts.p.sortname=ts.p.colModel[idxcol].index||index;so=ts.p.sortorder;if($.isFunction(ts.p.onSortCol)){ts.p.onSortCol.call(ts,index,idxcol,so)}if(ts.p.datatype=="local"){if(ts.p.deselectAfterSort){$(ts).jqGrid("resetSelection")}}else{ts.p.selrow=null;if(ts.p.multiselect){$("#cb_"+$.jgrid.jqID(ts.p.id),ts.grid.hDiv).attr("checked",false)}ts.p.selarrrow=[];ts.p.savedRow=[];if(ts.p.scroll){emptyRows(ts.grid.bDiv,true)}}if(ts.p.subGrid&&ts.p.datatype=="local"){$("td.sgexpanded","#"+ts.p.id).each(function(){$(this).trigger("click")})}populate();if(ts.p.sortname!=index&&idxcol){ts.p.lastsort=idxcol}},setColWidth=function(){var initwidth=0,brd=ts.p.cellLayout,vc=0,lvc,scw=ts.p.scrollOffset,cw,hs=false,aw,tw=0,gw=0,cl=0,cr;if(isSafari){brd=0}$.each(ts.p.colModel,function(i){if(typeof this.hidden==="undefined"){this.hidden=false}if(this.hidden===false){initwidth+=IntNum(this.width);if(this.fixed){tw+=this.width;gw+=this.width+brd}else{vc++}cl++}});if(isNaN(ts.p.width)){ts.p.width=grid.width=initwidth}else{grid.width=ts.p.width}ts.p.tblwidth=initwidth;if(ts.p.shrinkToFit===false&&ts.p.forceFit===true){ts.p.forceFit=false}if(ts.p.shrinkToFit===true&&vc>0){aw=grid.width-brd*vc-gw;if(isNaN(ts.p.height)){}else{aw-=scw;hs=true}initwidth=0;$.each(ts.p.colModel,function(i){if(this.hidden===false&&!this.fixed){cw=Math.floor(aw/(ts.p.tblwidth-tw)*this.width);this.width=cw;initwidth+=cw;lvc=i}});cr=0;if(hs){if(grid.width-gw-(initwidth+brd*vc)!==scw){cr=grid.width-gw-(initwidth+brd*vc)-scw}}else{if(!hs&&Math.abs(grid.width-gw-(initwidth+brd*vc))!==1){cr=grid.width-gw-(initwidth+brd*vc)}}ts.p.colModel[lvc].width+=cr;ts.p.tblwidth=initwidth+cr+tw+cl*brd}},nextVisible=function(iCol){var ret=iCol,j=iCol,i;for(i=iCol+1;i");this.p.colModel.unshift({name:"cb",width:isSafari?ts.p.multiselectWidth+ts.p.cellLayout:ts.p.multiselectWidth,sortable:false,resizable:false,hidedlg:true,search:false,align:"center",fixed:true})}if(this.p.rownumbers){this.p.colNames.unshift("");this.p.colModel.unshift({name:"rn",width:ts.p.rownumWidth,sortable:false,resizable:false,hidedlg:true,search:false,align:"center",fixed:true})}ts.p.xmlReader=$.extend({root:"rows",row:"row",page:"rows>page",total:"rows>total",records:"rows>records",repeatitems:true,cell:"cell",id:"[id]",userdata:"userdata",subgrid:{root:"rows",row:"row",repeatitems:true,cell:"cell"}},ts.p.xmlReader);ts.p.jsonReader=$.extend({root:"rows",page:"page",total:"total",records:"records",repeatitems:true,cell:"cell",id:"id",userdata:"userdata",subgrid:{root:"rows",repeatitems:true,cell:"cell"}},ts.p.jsonReader);if(ts.p.scroll){ts.p.pgbuttons=false;ts.p.pginput=false;ts.p.rowList=[]}var thead="",tdc,idn,w,res,sort,td,ptr,tbody,imgs,iac="",idc="";if(ts.p.shrinkToFit===true&&ts.p.forceFit===true){for(i=ts.p.colModel.length-1;i>=0;i--){if(!ts.p.colModel[i].hidden){ts.p.colModel[i].resizable=false;break}}}if(ts.p.viewsortcols[1]=="horizontal"){iac=" ui-i-asc";idc=" ui-i-desc"}tdc=isMSIE?"class='ui-th-div-ie'":"";imgs="";for(i=0;i";idn=ts.p.colModel[i].index||ts.p.colModel[i].name;thead+="
      "+ts.p.colNames[i];if(idn==ts.p.sortname){ts.p.lastsort=i}thead+=imgs+"
      "}thead+="";$(this).append(thead);$("thead tr:first th",this).hover(function(){$(this).addClass("ui-state-hover")},function(){$(this).removeClass("ui-state-hover")});if(this.p.multiselect){var onSA=true,emp=[],chk;if(typeof ts.p.onSelectAll!=="function"){onSA=false}$("#cb_"+$.jgrid.jqID(ts.p.id),this).bind("click",function(){if(this.checked){$("[id^=jqg_]",ts.rows).attr("checked",true);$(ts.rows).each(function(i){if(!$(this).hasClass("subgrid")){$(this).addClass("ui-state-highlight").attr("aria-selected","true");ts.p.selarrrow[i]=ts.p.selrow=this.id}});chk=true;emp=[]}else{$("[id^=jqg_]",ts.rows).attr("checked",false);$(ts.rows).each(function(i){if(!$(this).hasClass("subgrid")){$(this).removeClass("ui-state-highlight").attr("aria-selected","false");emp[i]=this.id}});ts.p.selarrrow=[];ts.p.selrow=null;chk=false}if(onSA){ts.p.onSelectAll(chk?ts.p.selarrrow:emp,chk)}})}$.each(ts.p.colModel,function(i){if(!this.width){this.width=150}this.width=parseInt(this.width)});if(ts.p.autowidth===true){var pw=$(eg).innerWidth();ts.p.width=pw>0?pw:"nw"}setColWidth();$(eg).css("width",grid.width+"px").append("
       
      ");$(gv).css("width",grid.width+"px");thead=$("thead:first",ts).get(0);var tfoot="";var thr=$("tr:first",thead);ts.p.disableClick=false;$("th",thr).each(function(j){var ht=$("div",this)[0];w=ts.p.colModel[j].width;if(typeof ts.p.colModel[j].resizable==="undefined"){ts.p.colModel[j].resizable=true}if(ts.p.colModel[j].resizable){res=document.createElement("span");$(res).html(" ").addClass("ui-jqgrid-resize ui-jqgrid-resize-"+dir);!$.browser.opera?$(res).css("cursor","col-resize"):"";$(this).addClass(ts.p.resizeclass)}else{res=""}$(this).css("width",w+"px").prepend(res);if(ts.p.colModel[j].hidden){$(this).css("display","none")}grid.headers[j]={width:w,el:this};sort=ts.p.colModel[j].sortable;if(typeof sort!=="boolean"){ts.p.colModel[j].sortable=true;sort=true}var nm=ts.p.colModel[j].name;if(!(nm=="cb"||nm=="subgrid"||nm=="rn")){if(ts.p.viewsortcols[2]){$("div",this).addClass("ui-jqgrid-sortable")}}if(sort){if(ts.p.viewsortcols[0]){$("div span.s-ico",this).show();if(j==ts.p.lastsort){$("div span.ui-icon-"+ts.p.sortorder,this).removeClass("ui-state-disabled")}}else{if(j==ts.p.lastsort){$("div span.s-ico",this).show();$("div span.ui-icon-"+ts.p.sortorder,this).removeClass("ui-state-disabled")}}}tfoot+=""}).mousedown(function(e){if($(e.target).closest("th>span.ui-jqgrid-resize").length!=1){return}var ci=$.jgrid.getCellIndex(this);if(ts.p.forceFit===true){ts.p.nv=nextVisible(ci)}grid.dragStart(ci,e,getOffset(ci));return false}).click(function(e){if(ts.p.disableClick){ts.p.disableClick=false;return false}var s="th>div.ui-jqgrid-sortable",r,d;if(!ts.p.viewsortcols[2]){s="th>div>span>span.ui-grid-ico-sort"}var t=$(e.target).closest(s);if(t.length!=1){return}var ci=$.jgrid.getCellIndex(this);if(!ts.p.viewsortcols[2]){r=true,d=t.attr("sort")}sortData($("div",this)[0].id,ci,r,d);return false});if(ts.p.sortable&&$.fn.sortable){try{$(ts).jqGrid("sortableColumns",thr)}catch(e){}}tfoot+="
       
      ";tbody=document.createElement("tbody");this.appendChild(tbody);$(this).addClass("ui-jqgrid-btable");var hTable=$("
      ").append(thead),hg=(ts.p.caption&&ts.p.hiddengrid===true)?true:false,hb=$("
      ");grid.hDiv=document.createElement("div");$(grid.hDiv).css({width:grid.width+"px"}).addClass("ui-state-default ui-jqgrid-hdiv").append(hb);$(hb).append(hTable);if(hg){$(grid.hDiv).hide()}ts.p._height=0;if(ts.p.pager){if(typeof ts.p.pager=="string"){if(ts.p.pager.substr(0,1)!="#"){ts.p.pager="#"+ts.p.pager}}$(ts.p.pager).css({width:grid.width+"px"}).appendTo(eg).addClass("ui-state-default ui-jqgrid-pager");ts.p._height+=parseInt($(ts.p.pager).height(),10);if(hg){$(ts.p.pager).hide()}setPager()}if(ts.p.cellEdit===false&&ts.p.hoverrows===true){$(ts).bind("mouseover",function(e){ptr=$(e.target).closest("tr.jqgrow");if($(ptr).attr("class")!=="subgrid"){$(ptr).addClass("ui-state-hover")}return false}).bind("mouseout",function(e){ptr=$(e.target).closest("tr.jqgrow");$(ptr).removeClass("ui-state-hover");return false})}var ri,ci;$(ts).before(grid.hDiv).click(function(e){td=e.target;var scb=$(td).hasClass("cbox");ptr=$(td,ts.rows).closest("tr.jqgrow");if($(ptr).length===0){return this}var cSel=true;if($.isFunction(ts.p.beforeSelectRow)){cSel=ts.p.beforeSelectRow.call(ts,ptr[0].id,e)}if(td.tagName=="A"||((td.tagName=="INPUT"||td.tagName=="TEXTAREA"||td.tagName=="OPTION"||td.tagName=="SELECT")&&!scb)){return true}if(cSel===true){if(ts.p.cellEdit===true){if(ts.p.multiselect&&scb){$(ts).jqGrid("setSelection",ptr[0].id,true)}else{ri=ptr[0].rowIndex;ci=$.jgrid.getCellIndex(td);try{$(ts).jqGrid("editCell",ri,ci,true)}catch(_){}}}else{if(!ts.p.multikey){if(ts.p.multiselect&&ts.p.multiboxonly){if(scb){$(ts).jqGrid("setSelection",ptr[0].id,true)}else{$(ts.p.selarrrow).each(function(i,n){var ind=ts.rows.namedItem(n);$(ind).removeClass("ui-state-highlight");$("#jqg_"+$.jgrid.jqID(n),ind).attr("checked",false)});ts.p.selarrrow=[];$("#cb_"+$.jgrid.jqID(ts.p.id),ts.grid.hDiv).attr("checked",false);$(ts).jqGrid("setSelection",ptr[0].id,true)}}else{$(ts).jqGrid("setSelection",ptr[0].id,true)}}else{if(e[ts.p.multikey]){$(ts).jqGrid("setSelection",ptr[0].id,true)}else{if(ts.p.multiselect&&scb){scb=$("[id^=jqg_]",ptr).attr("checked");$("[id^=jqg_]",ptr).attr("checked",!scb)}}}}if($.isFunction(ts.p.onCellSelect)){ri=ptr[0].id;ci=$.jgrid.getCellIndex(td);ts.p.onCellSelect.call(ts,ri,ci,$(td).html(),e)}}e.stopPropagation()}).bind("reloadGrid",function(e,opts){if(ts.p.treeGrid===true){ts.p.datatype=ts.p.treedatatype}if(opts&&opts.current){ts.grid.selectionPreserver(ts)}if(ts.p.datatype=="local"){$(ts).jqGrid("resetSelection")}else{if(!ts.p.treeGrid){ts.p.selrow=null;if(ts.p.multiselect){ts.p.selarrrow=[];$("#cb_"+$.jgrid.jqID(ts.p.id),ts.grid.hDiv).attr("checked",false)}ts.p.savedRow=[];if(ts.p.scroll){emptyRows(ts.grid.bDiv)}}}if(opts&&opts.page){var page=opts.page;if(page>ts.p.lastpage){page=ts.p.lastpage}if(page<1){page=1}ts.p.page=page;if(ts.grid.prevRowHeight){ts.grid.bDiv.scrollTop=(page-1)*ts.grid.prevRowHeight*ts.p.rowNum}else{ts.grid.bDiv.scrollTop=0}}if(ts.grid.prevRowHeight&&ts.p.scroll){delete ts.p.lastpage;ts.grid.populateVisible()}else{ts.grid.populate()}return false});if($.isFunction(this.p.ondblClickRow)){$(this).dblclick(function(e){td=e.target;ptr=$(td,ts.rows).closest("tr.jqgrow");if($(ptr).length===0){return false}ri=ptr[0].rowIndex;ci=$.jgrid.getCellIndex(td);ts.p.ondblClickRow.call(ts,$(ptr).attr("id"),ri,ci,e);return false})}if($.isFunction(this.p.onRightClickRow)){$(this).bind("contextmenu",function(e){td=e.target;ptr=$(td,ts.rows).closest("tr.jqgrow");if($(ptr).length===0){return false}if(!ts.p.multiselect){$(ts).jqGrid("setSelection",ptr[0].id,true)}ri=ptr[0].rowIndex;ci=$.jgrid.getCellIndex(td);ts.p.onRightClickRow.call(ts,$(ptr).attr("id"),ri,ci,e);return false})}grid.bDiv=document.createElement("div");$(grid.bDiv).append($('
      ').append("
      ").append(this)).addClass("ui-jqgrid-bdiv").css({height:ts.p.height+(isNaN(ts.p.height)?"":"px"),width:(grid.width)+"px"}).scroll(grid.scrollGrid);$("table:first",grid.bDiv).css({width:ts.p.tblwidth+"px"});if(isMSIE){if($("tbody",this).size()==2){$("tbody:first",this).remove()}if(ts.p.multikey){$(grid.bDiv).bind("selectstart",function(){return false})}}else{if(ts.p.multikey){$(grid.bDiv).bind("mousedown",function(){return false})}}if(hg){$(grid.bDiv).hide()}grid.cDiv=document.createElement("div");var arf=ts.p.hidegrid===true?$("").addClass("ui-jqgrid-titlebar-close HeaderButton").hover(function(){arf.addClass("ui-state-hover")},function(){arf.removeClass("ui-state-hover")}).append("").css((dir=="rtl"?"left":"right"),"0px"):"";$(grid.cDiv).append(arf).append(""+ts.p.caption+"").addClass("ui-jqgrid-titlebar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix");$(grid.cDiv).insertBefore(grid.hDiv);if(ts.p.toolbar[0]){grid.uDiv=document.createElement("div");if(ts.p.toolbar[1]=="top"){$(grid.uDiv).insertBefore(grid.hDiv)}else{if(ts.p.toolbar[1]=="bottom"){$(grid.uDiv).insertAfter(grid.hDiv)}}if(ts.p.toolbar[1]=="both"){grid.ubDiv=document.createElement("div");$(grid.uDiv).insertBefore(grid.hDiv).addClass("ui-userdata ui-state-default").attr("id","t_"+this.id);$(grid.ubDiv).insertAfter(grid.hDiv).addClass("ui-userdata ui-state-default").attr("id","tb_"+this.id);ts.p._height+=IntNum($(grid.ubDiv).height());if(hg){$(grid.ubDiv).hide()}}else{$(grid.uDiv).width(grid.width).addClass("ui-userdata ui-state-default").attr("id","t_"+this.id)}ts.p._height+=IntNum($(grid.uDiv).height());if(hg){$(grid.uDiv).hide()}}if(ts.p.footerrow){grid.sDiv=$("
      ")[0];hb=$("
      ");$(grid.sDiv).append(hb).insertAfter(grid.hDiv).width(grid.width);$(hb).append(tfoot);grid.footers=$(".ui-jqgrid-ftable",grid.sDiv)[0].rows[0].cells;if(ts.p.rownumbers){grid.footers[0].className="ui-state-default jqgrid-rownum"}if(hg){$(grid.sDiv).hide()}}if(ts.p.caption){ts.p._height+=parseInt($(grid.cDiv,ts).height(),10);var tdt=ts.p.datatype;if(ts.p.hidegrid===true){$(".ui-jqgrid-titlebar-close",grid.cDiv).click(function(e){var onHdCl=$.isFunction(ts.p.onHeaderClick);if(ts.p.gridstate=="visible"){$(".ui-jqgrid-bdiv, .ui-jqgrid-hdiv","#gview_"+ts.p.id).slideUp("fast");if(ts.p.pager){$(ts.p.pager).slideUp("fast")}if(ts.p.toolbar[0]===true){if(ts.p.toolbar[1]=="both"){$(grid.ubDiv).slideUp("fast")}$(grid.uDiv).slideUp("fast")}if(ts.p.footerrow){$(".ui-jqgrid-sdiv","#gbox_"+ts.p.id).slideUp("fast")}$("span",this).removeClass("ui-icon-circle-triangle-n").addClass("ui-icon-circle-triangle-s");ts.p.gridstate="hidden";if(onHdCl){if(!hg){ts.p.onHeaderClick.call(ts,ts.p.gridstate,e)}}}else{if(ts.p.gridstate=="hidden"){$(".ui-jqgrid-hdiv, .ui-jqgrid-bdiv","#gview_"+ts.p.id).slideDown("fast");if(ts.p.pager){$(ts.p.pager).slideDown("fast")}if(ts.p.toolbar[0]===true){if(ts.p.toolbar[1]=="both"){$(grid.ubDiv).slideDown("fast")}$(grid.uDiv).slideDown("fast")}if(ts.p.footerrow){$(".ui-jqgrid-sdiv","#gbox_"+ts.p.id).slideDown("fast")}$("span",this).removeClass("ui-icon-circle-triangle-s").addClass("ui-icon-circle-triangle-n");if(hg){ts.p.datatype=tdt;populate();hg=false}ts.p.gridstate="visible";if(onHdCl){ts.p.onHeaderClick.call(ts,ts.p.gridstate,e)}}}return false});if(hg){ts.p.datatype="local";$(".ui-jqgrid-titlebar-close",grid.cDiv).trigger("click")}}}else{$(grid.cDiv).hide()}$(grid.hDiv).after(grid.bDiv).mousemove(function(e){if(grid.resizing){grid.dragMove(e);return false}});$(".ui-jqgrid-labels",grid.hDiv).bind("selectstart",function(){return false});ts.p._height+=parseInt($(grid.hDiv).height(),10);$(document).mouseup(function(e){if(grid.resizing){grid.dragEnd();return false}return true});this.updateColumns=function(){var r=this.rows[0],self=this;if(r){$("td",r).each(function(k){$(this).css("width",self.grid.headers[k].width+"px")});this.grid.cols=r.cells}return this};ts.formatCol=formatCol;ts.sortData=sortData;ts.updatepager=updatepager;ts.formatter=function(rowId,cellval,colpos,rwdat,act){return formatter(rowId,cellval,colpos,rwdat,act)};$.extend(grid,{populate:populate,emptyRows:emptyRows});this.grid=grid;ts.addXmlData=function(d){addXmlData(d,ts.grid.bDiv)};ts.addJSONData=function(d){addJSONData(d,ts.grid.bDiv)};populate();ts.p.hiddengrid=false;$(window).unload(function(){$(this).empty();this.grid=null;this.p=null})})};$.jgrid.extend({getGridParam:function(pName){var $t=this[0];if(!$t.grid){return}if(!pName){return $t.p}else{return typeof($t.p[pName])!="undefined"?$t.p[pName]:null}},setGridParam:function(newParams){return this.each(function(){if(this.grid&&typeof(newParams)==="object"){$.extend(true,this.p,newParams)}})},getDataIDs:function(){var ids=[],i=0,len;this.each(function(){len=this.rows.length;if(len&&len>0){while(i=0){if(ner>olr){scrGrid(ner,"d")}else{scrGrid(ner,"u")}}}if(!$t.p.multiselect){if($(pt).attr("class")!=="subgrid"){if($t.p.selrow){$("tr#"+$.jgrid.jqID($t.p.selrow),$t.grid.bDiv).removeClass("ui-state-highlight").attr("aria-selected","false")}$t.p.selrow=pt.id;$(pt).addClass("ui-state-highlight").attr("aria-selected","true");if($t.p.onSelectRow&&onsr){$t.p.onSelectRow($t.p.selrow,true)}}}else{$t.p.selrow=pt.id;ia=$.inArray($t.p.selrow,$t.p.selarrrow);if(ia===-1){if($(pt).attr("class")!=="subgrid"){$(pt).addClass("ui-state-highlight").attr("aria-selected","true")}stat=true;$("#jqg_"+$.jgrid.jqID($t.p.selrow),$t.rows).attr("checked",stat);$t.p.selarrrow.push($t.p.selrow);if($t.p.onSelectRow&&onsr){$t.p.onSelectRow($t.p.selrow,stat)}}else{if($(pt).attr("class")!=="subgrid"){$(pt).removeClass("ui-state-highlight").attr("aria-selected","false")}stat=false;$("#jqg_"+$.jgrid.jqID($t.p.selrow),$t.rows).attr("checked",stat);$t.p.selarrrow.splice(ia,1);if($t.p.onSelectRow&&onsr){$t.p.onSelectRow($t.p.selrow,stat)}tpsr=$t.p.selarrrow[0];$t.p.selrow=(tpsr===undefined)?null:tpsr}}function scrGrid(iR,tp){var ch=$($t.grid.bDiv)[0].clientHeight,st=$($t.grid.bDiv)[0].scrollTop,nROT=$t.rows[iR].offsetTop+$t.rows[iR].clientHeight,pROT=$t.rows[iR].offsetTop;if(tp=="d"){if(nROT>=ch){$($t.grid.bDiv)[0].scrollTop=st+nROT-pROT}}if(tp=="u"){if(pROT span:first",ind).html(vl).attr("title",$.jgrid.stripHtml(vl))}else{$("td:eq("+i+")",ind).html(vl).attr("title",$.jgrid.stripHtml(vl))}success=true}})}if(cp==="string"){$(ind).addClass(cssp)}else{if(cp==="object"){$(ind).css(cssp)}}});return success},addRowData:function(rowid,data,pos,src){if(!pos){pos="last"}var success=false,nm,row="",gi=0,si=0,ni=0,sind,i,v,prp="";if(data){this.each(function(){var t=this;if(t.p.rownumbers===true){prp=t.formatCol(ni,1);row+='0";ni=1}if(t.p.multiselect){v='';prp=t.formatCol(ni,1);row+='"+v+"";gi=1}if(t.p.subGrid===true){row+=$(t).jqGrid("addSubGridCell",gi+ni,1);si=1}if(typeof(rowid)!="undefined"){rowid=rowid+""}else{rowid=(t.p.records+1)+"";if(t.p.keyIndex!==false){var cmn=t.p.colModel[t.p.keyIndex+gi+si+ni].name;if(typeof data[cmn]!="undefined"){rowid=data[cmn]}}}for(i=gi+si+ni;i'+v+""}row=''+row+"";if(t.p.subGrid===true){row=$(row)[0];$(t).jqGrid("addSubGrid",row,gi+ni)}if(t.rows.length===0){$("table:first",t.grid.bDiv).append(row)}else{switch(pos){case"last":$(t.rows[t.rows.length-1]).after(row);break;case"first":$(t.rows[0]).before(row);break;case"after":sind=t.rows.namedItem(src);if(sind){$(t.rows[sind.rowIndex+1]).hasClass("ui-subgrid")?$(t.rows[sind.rowIndex+1]).after(row):$(sind).after(row)}break;case"before":sind=t.rows.namedItem(src);if(sind){$(sind).before(row);sind=sind.rowIndex}break}}t.p.records++;t.p.reccount++;if(!t.grid.cols||!t.grid.cols.length){t.grid.cols=t.rows[0].cells}if(pos==="first"||(pos==="before"&&sind<=1)||t.rows.length===1){t.updateColumns()}if(t.p.altRows===true){var cn=t.p.altclass;if(pos=="last"){if((t.rows.length-1)%2==1){$(t.rows[t.rows.length-1]).addClass(cn)}}else{$(t.rows).each(function(i){if(i%2==1){$(this).addClass(cn)}else{$(this).removeClass(cn)}})}}try{t.p.afterInsertRow(rowid,data)}catch(e){}t.updatepager(true,true);success=true})}return success},footerData:function(action,data,format){var nm,success=false,res={};function isEmpty(obj){for(var i in obj){return false}return true}if(typeof(action)=="undefined"){action="get"}if(typeof(format)!="boolean"){format=true}action=action.toLowerCase();this.each(function(){var t=this,vl,ind;if(!t.grid||!t.p.footerrow){return false}if(action=="set"){if(isEmpty(data)){return false}}success=true;$(this.p.colModel).each(function(i){nm=this.name;if(action=="set"){if(data[nm]!=undefined){vl=format?t.formatter("",data[nm],i,data,"edit"):data[nm];$("tr.footrow td:eq("+i+")",t.grid.sDiv).html(vl).attr("title",$.jgrid.stripHtml(vl));success=true}}else{if(action=="get"){res[nm]=$("tr.footrow td:eq("+i+")",t.grid.sDiv).html()}}})});return action=="get"?res:success},ShowHideCol:function(colname,show){return this.each(function(){var $t=this,fndh=false;if(!$t.grid){return}if(typeof colname==="string"){colname=[colname]}show=show!="none"?"":"none";var sw=show==""?true:false;$(this.p.colModel).each(function(i){if($.inArray(this.name,colname)!==-1&&this.hidden===sw){$("tr",$t.grid.hDiv).each(function(){$("th:eq("+i+")",this).css("display",show)});$($t.rows).each(function(j){$("td:eq("+i+")",$t.rows[j]).css("display",show)});if($t.p.footerrow){$("td:eq("+i+")",$t.grid.sDiv).css("display",show)}if(show=="none"){$t.p.tblwidth-=this.width}else{$t.p.tblwidth+=this.width}this.hidden=!sw;fndh=true}});if(fndh===true){$("table:first",$t.grid.hDiv).width($t.p.tblwidth);$("table:first",$t.grid.bDiv).width($t.p.tblwidth);$t.grid.hDiv.scrollLeft=$t.grid.bDiv.scrollLeft;if($t.p.footerrow){$("table:first",$t.grid.sDiv).width($t.p.tblwidth);$t.grid.sDiv.scrollLeft=$t.grid.bDiv.scrollLeft}}})},hideCol:function(colname){return this.each(function(){$(this).jqGrid("ShowHideCol",colname,"none")})},showCol:function(colname){return this.each(function(){$(this).jqGrid("ShowHideCol",colname,"")})},remapColumns:function(permutation,updateCells,keepHeader){function resortArray(a){var ac;if(a.length){ac=$.makeArray(a)}else{ac=$.extend({},a)}$.each(permutation,function(i){a[i]=ac[this]})}var ts=this.get(0);function resortRows(parent,clobj){$(">tr"+(clobj||""),parent).each(function(){var row=this;var elems=$.makeArray(row.cells);$.each(permutation,function(){var e=elems[this];if(e){row.appendChild(e)}})})}resortArray(ts.p.colModel);resortArray(ts.p.colNames);resortArray(ts.grid.headers);resortRows($("thead:first",ts.grid.hDiv),keepHeader&&":not(.ui-jqgrid-labels)");if(updateCells){resortRows($("tbody:first",ts.grid.bDiv),".jqgrow")}if(ts.p.footerrow){resortRows($("tbody:first",ts.grid.sDiv))}if(ts.p.remapColumns){if(!ts.p.remapColumns.length){ts.p.remapColumns=$.makeArray(permutation)}else{resortArray(ts.p.remapColumns)}}ts.p.lastsort=$.inArray(ts.p.lastsort,permutation);if(ts.p.treeGrid){ts.p.expColInd=$.inArray(ts.p.expColInd,permutation)}},setGridWidth:function(nwidth,shrink){return this.each(function(){var $t=this,cw,initwidth=0,brd=$t.p.cellLayout,lvc,vc=0,hs=false,scw=$t.p.scrollOffset,aw,gw=0,tw=0,cl=0,cr;if(!$t.grid){return}if(typeof shrink!="boolean"){shrink=$t.p.shrinkToFit}if(isNaN(nwidth)){return}else{nwidth=parseInt(nwidth);$t.grid.width=$t.p.width=nwidth}$("#gbox_"+$t.p.id).css("width",nwidth+"px");$("#gview_"+$t.p.id).css("width",nwidth+"px");$($t.grid.bDiv).css("width",nwidth+"px");$($t.grid.hDiv).css("width",nwidth+"px");if($t.p.pager){$($t.p.pager).css("width",nwidth+"px")}if($t.p.toolbar[0]===true){$($t.grid.uDiv).css("width",nwidth+"px");if($t.p.toolbar[1]=="both"){$($t.grid.ubDiv).css("width",nwidth+"px")}}if($t.p.footerrow){$($t.grid.sDiv).css("width",nwidth+"px")}if(shrink===false&&$t.p.forceFit==true){$t.p.forceFit=false}if(shrink===true){if($.browser.safari){brd=0}$.each($t.p.colModel,function(i){if(this.hidden===false){initwidth+=parseInt(this.width,10);if(this.fixed){tw+=this.width;gw+=this.width+brd}else{vc++}cl++}});if(vc==0){return}$t.p.tblwidth=initwidth;aw=nwidth-brd*vc-gw;if(!isNaN($t.p.height)){if($($t.grid.bDiv)[0].clientHeight<$($t.grid.bDiv)[0].scrollHeight){hs=true;aw-=scw}}initwidth=0;var cle=$t.grid.cols.length>0;$.each($t.p.colModel,function(i){var tn=this.name;if(this.hidden===false&&!this.fixed){cw=Math.floor((aw)/($t.p.tblwidth-tw)*this.width);this.width=cw;initwidth+=cw;$t.grid.headers[i].width=cw;$t.grid.headers[i].el.style.width=cw+"px";if($t.p.footerrow){$t.grid.footers[i].style.width=cw+"px"}if(cle){$t.grid.cols[i].style.width=cw+"px"}lvc=i}});cr=0;if(hs){if(nwidth-gw-(initwidth+brd*vc)!==scw){cr=nwidth-gw-(initwidth+brd*vc)-scw}}else{if(Math.abs(nwidth-gw-(initwidth+brd*vc))!==1){cr=nwidth-gw-(initwidth+brd*vc)}}$t.p.colModel[lvc].width+=cr;cw=$t.p.colModel[lvc].width;$t.grid.headers[lvc].width=cw;$t.grid.headers[lvc].el.style.width=cw+"px";if(cle){$t.grid.cols[lvc].style.width=cw+"px"}$t.p.tblwidth=initwidth+cr+tw+brd*cl;$("table:first",$t.grid.bDiv).css("width",$t.p.tblwidth+"px");$("table:first",$t.grid.hDiv).css("width",$t.p.tblwidth+"px");$t.grid.hDiv.scrollLeft=$t.grid.bDiv.scrollLeft;if($t.p.footerrow){$t.grid.footers[lvc].style.width=cw+"px";$("table:first",$t.grid.sDiv).css("width",$t.p.tblwidth+"px")}}})},setGridHeight:function(nh){return this.each(function(){var $t=this;if(!$t.grid){return}$($t.grid.bDiv).css({height:nh+(isNaN(nh)?"":"px")});$t.p.height=nh;if($t.p.scroll){$t.grid.populateVisible()}})},setCaption:function(newcap){return this.each(function(){this.p.caption=newcap;$("span.ui-jqgrid-title",this.grid.cDiv).html(newcap);$(this.grid.cDiv).show()})},setLabel:function(colname,nData,prop,attrp){return this.each(function(){var $t=this,pos=-1;if(!$t.grid){return}if(isNaN(colname)){$($t.p.colModel).each(function(i){if(this.name==colname){pos=i;return false}})}else{pos=parseInt(colname,10)}if(pos>=0){var thecol=$("tr.ui-jqgrid-labels th:eq("+pos+")",$t.grid.hDiv);if(nData){var ico=$(".s-ico",thecol);$("[id^=jqgh_]",thecol).empty().html(nData).append(ico);$t.p.colNames[pos]=nData}if(prop){if(typeof prop==="string"){$(thecol).addClass(prop)}else{$(thecol).css(prop)}}if(typeof attrp==="object"){$(thecol).attr(attrp)}}})},setCell:function(rowid,colname,nData,cssp,attrp){return this.each(function(){var $t=this,pos=-1,v;if(!$t.grid){return}if(isNaN(colname)){$($t.p.colModel).each(function(i){if(this.name==colname){pos=i;return false}})}else{pos=parseInt(colname,10)}if(pos>=0){var ind=$t.rows.namedItem(rowid);if(ind){var tcell=$("td:eq("+pos+")",ind);if(nData!==""){v=$t.formatter(rowid,nData,pos,ind,"edit");$(tcell).html(v).attr("title",$.jgrid.stripHtml(v))}if(cssp){if(typeof cssp==="string"){$(tcell).addClass(cssp)}else{$(tcell).css(cssp)}}if(typeof attrp==="object"){$(tcell).attr(attrp)}}}})},getCell:function(rowid,col){var ret=false;this.each(function(){var $t=this,pos=-1;if(!$t.grid){return}if(isNaN(col)){$($t.p.colModel).each(function(i){if(this.name===col){pos=i;return false}})}else{pos=parseInt(col,10)}if(pos>=0){var ind=$t.rows.namedItem(rowid);if(ind){try{ret=$.unformat($("td:eq("+pos+")",ind),{colModel:$t.p.colModel[pos]},pos)}catch(e){ret=$.jgrid.htmlDecode($("td:eq("+pos+")",ind).html())}}}});return ret},getCol:function(col,obj,mathopr){var ret=[],val,sum=0;obj=typeof(obj)!="boolean"?false:obj;if(typeof mathopr=="undefined"){mathopr=false}this.each(function(){var $t=this,pos=-1;if(!$t.grid){return}if(isNaN(col)){$($t.p.colModel).each(function(i){if(this.name===col){pos=i;return false}})}else{pos=parseInt(col,10)}if(pos>=0){var ln=$t.rows.length,i=0;if(ln&&ln>0){while(i0){if(l<0){n+=k;l=n.length-1}else{if(k!=="."){n=n.replace(".",k)}}while((n.length-1-l)-1)?l:n.length;var o=n.substring(l);var e=-1;for(var j=l;j>0;j--){e++;if((e%3===0)&&(j!==l)&&(!h||(j>1))){o=p+o}o=n.charAt(j-1)+o}n=o}n=(d.prefix)?d.prefix+n:n;n=(d.suffix)?n+d.suffix:n;return n}else{return f}},DateFormat:function(I,L,O,x){var m=/\\.|[dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU]/g,C=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,K=/[^-+\dA-Z]/g,J=function(j,i){j=String(j);i=parseInt(i)||2;while(j.length11){L[E]=q+1-12}}d[I[E].toLowerCase()]=parseInt(L[E],10)}d.m=parseInt(d.m)-1;var M=d.y;if(M>=70&&M<=99){d.y=1900+d.y}else{if(M>=0&&M<=69){d.y=2000+d.y}}g=new Date(d.y,d.m,d.d,d.h,d.i,d.s,0);if(O in x.masks){O=x.masks[O]}else{if(!O){O="Y-m-d"}}var t=g.getHours(),H=g.getMinutes(),F=g.getDate(),B=g.getMonth()+1,A=g.getTimezoneOffset(),y=g.getSeconds(),v=g.getMilliseconds(),r=g.getDay(),e=g.getFullYear(),l=(r+6)%7+1,p=(new Date(e,B-1,F)-new Date(e,0,1))/86400000,h={d:J(F),D:D.i18n.dayNames[r],j:F,l:D.i18n.dayNames[r+7],N:l,S:x.S(F),w:r,z:p,W:l<5?Math.floor((p+l-1)/7)+1:Math.floor((p+l-1)/7)||((new Date(e-1,0,1).getDay()+6)%7<4?53:52),F:D.i18n.monthNames[B-1+12],m:J(B),M:D.i18n.monthNames[B-1],n:B,t:"?",L:"?",o:"?",Y:e,y:String(e).substring(2),a:t<12?x.AmPm[0]:x.AmPm[1],A:t<12?x.AmPm[2]:x.AmPm[3],B:"?",g:t%12||12,G:t,h:J(t%12||12),H:J(t),i:J(H),s:J(y),u:v,e:"?",I:"?",O:(A>0?"-":"+")+J(Math.floor(Math.abs(A)/60)*100+Math.abs(A)%60,4),P:"?",T:(String(g).match(C)||[""]).pop().replace(K,""),Z:"?",c:"?",r:"?",U:Math.floor(g/1000)};return O.replace(m,function(i){return i in h?h[i]:i.substring(1)})}};c.fn.fmatter.defaultFormat=function(e,d){return(isValue(e)&&e!=="")?e:d.defaultValue?d.defaultValue:" "};c.fn.fmatter.email=function(e,d){if(!isEmpty(e)){return'
      '+e+""}else{return c.fn.fmatter.defaultFormat(e,d)}};c.fn.fmatter.checkbox=function(g,e){var h=c.extend({},e.checkbox),f;if(!isUndefined(e.colModel.formatoptions)){h=c.extend({},h,e.colModel.formatoptions)}if(h.disabled===true){f="disabled"}else{f=""}if(isEmpty(g)||isUndefined(g)){g=c.fn.fmatter.defaultFormat(g,h)}g=g+"";g=g.toLowerCase();var d=g.search(/(false|0|no|off)/i)<0?" checked='checked' ":"";return'"},c.fn.fmatter.link=function(f,d){var g={target:d.target};var e="";if(!isUndefined(d.colModel.formatoptions)){g=c.extend({},g,d.colModel.formatoptions)}if(g.target){e="target="+g.target}if(!isEmpty(f)){return"'+f+""}else{return c.fn.fmatter.defaultFormat(f,d)}};c.fn.fmatter.showlink=function(f,d){var g={baseLinkUrl:d.baseLinkUrl,showAction:d.showAction,addParam:d.addParam||"",target:d.target,idName:d.idName},e="";if(!isUndefined(d.colModel.formatoptions)){g=c.extend({},g,d.colModel.formatoptions)}if(g.target){e="target="+g.target}idUrl=g.baseLinkUrl+g.showAction+"?"+g.idName+"="+d.rowId+g.addParam;if(isString(f)){return"'+f+""}else{return c.fn.fmatter.defaultFormat(f,d)}};c.fn.fmatter.integer=function(e,d){var f=c.extend({},d.integer);if(!isUndefined(d.colModel.formatoptions)){f=c.extend({},f,d.colModel.formatoptions)}if(isEmpty(e)){return f.defaultValue}return c.fmatter.util.NumberFormat(e,f)};c.fn.fmatter.number=function(e,d){var f=c.extend({},d.number);if(!isUndefined(d.colModel.formatoptions)){f=c.extend({},f,d.colModel.formatoptions)}if(isEmpty(e)){return f.defaultValue}return c.fmatter.util.NumberFormat(e,f)};c.fn.fmatter.currency=function(e,d){var f=c.extend({},d.currency);if(!isUndefined(d.colModel.formatoptions)){f=c.extend({},f,d.colModel.formatoptions)}if(isEmpty(e)){return f.defaultValue}return c.fmatter.util.NumberFormat(e,f)};c.fn.fmatter.date=function(g,f,d,e){var h=c.extend({},f.date);if(!isUndefined(f.colModel.formatoptions)){h=c.extend({},h,f.colModel.formatoptions)}if(!h.reformatAfterEdit&&e=="edit"){return c.fn.fmatter.defaultFormat(g,f)}else{if(!isEmpty(g)){return c.fmatter.util.DateFormat(h.srcformat,g,h.newformat,h)}else{return c.fn.fmatter.defaultFormat(g,f)}}};c.fn.fmatter.select=function(k,d,e,n){k=k+"";var g=false,m=[];if(!isUndefined(d.colModel.editoptions)){g=d.colModel.editoptions.value}if(g){var q=d.colModel.editoptions.multiple===true?true:false,p=[],o;if(q){p=k.split(",");p=c.map(p,function(i){return c.trim(i)})}if(isString(g)){var f=g.split(";"),h=0;for(var l=0;l-1){m[h]=o[1];h++}}else{if(c.trim(o[0])==c.trim(k)){m[0]=o[1];break}}}}else{if(isObject(g)){if(q){m=jQuery.map(p,function(r,j){return g[r]})}else{m[0]=g[k]||""}}}}k=m.join(", ");return k==""?c.fn.fmatter.defaultFormat(k,d):k};c.unformat=function(g,n,k,e){var j,h=n.colModel.formatter,i=n.colModel.formatoptions||{},o,m=/([\.\*\_\'\(\)\{\}\+\?\\])/g;unformatFunc=n.colModel.unformat||(c.fn.fmatter[h]&&c.fn.fmatter[h].unformat);if(typeof unformatFunc!=="undefined"&&isFunction(unformatFunc)){j=unformatFunc(c(g).text(),n,g)}else{if(typeof h!=="undefined"&&isString(h)){var d=c.jgrid.formatter||{},l;switch(h){case"integer":i=c.extend({},d.integer,i);o=i.thousandsSeparator.replace(m,"\\$1");l=new RegExp(o,"g");j=c(g).text().replace(l,"");break;case"number":i=c.extend({},d.number,i);o=i.thousandsSeparator.replace(m,"\\$1");l=new RegExp(o,"g");j=c(g).text().replace(l,"").replace(i.decimalSeparator,".");break;case"currency":i=c.extend({},d.currency,i);o=i.thousandsSeparator.replace(m,"\\$1");l=new RegExp(o,"g");j=c(g).text().replace(l,"").replace(i.decimalSeparator,".").replace(i.prefix,"").replace(i.suffix,"");break;case"checkbox":var f=(n.colModel.editoptions)?n.colModel.editoptions.value.split(":"):["Yes","No"];j=c("input",g).attr("checked")?f[0]:f[1];break;case"select":j=c.unformat.select(g,n,k,e);break;default:j=c(g).text();break}}}return j?j:e===true?c(g).text():c.jgrid.htmlDecode(c(g).html())};c.unformat.select=function(h,s,n,e){var m=[];var q=c(h).text();if(e==true){return q}var l=c.extend({},s.colModel.editoptions);if(l.value){var f=l.value,r=l.multiple===true?true:false,p=[],o;if(r){p=q.split(",");p=c.map(p,function(i){return c.trim(i)})}if(isString(f)){var d=f.split(";"),g=0;for(var k=0;k-1){m[g]=o[0];g++}}else{if(c.trim(o[1])==c.trim(q)){m[0]=o[0];break}}}}else{if(isObject(f)){if(!r){p[0]=q}m=jQuery.map(p,function(j){var i;c.each(f,function(t,u){if(u==j){i=t;return false}});if(i){return i}})}}return m.join(", ")}else{return q||""}};function a(h,i,g,d,e){var f=i;if(c.fn.fmatter[h]){f=c.fn.fmatter[h](i,g,d,e)}return f}function b(d){if(window.console&&window.console.log){window.console.log(d)}}isValue=function(d){return(isObject(d)||isString(d)||isNumber(d)||isBoolean(d))};isBoolean=function(d){return typeof d==="boolean"};isNull=function(d){return d===null};isNumber=function(d){return typeof d==="number"&&isFinite(d)};isString=function(d){return typeof d==="string"};isEmpty=function(d){if(!isString(d)&&isValue(d)){return false}else{if(!isValue(d)){return true}}d=c.trim(d).replace(/\ \;/ig,"").replace(/\ \;/ig,"");return d===""};isUndefined=function(d){return typeof d==="undefined"};isObject=function(d){return(d&&(typeof d==="object"||isFunction(d)))||false};isFunction=function(d){return typeof d==="function"}})(jQuery);(function(a){a.jgrid.extend({getColProp:function(d){var b={},f=this[0];if(!f.grid){return}var e=f.p.colModel;for(var c=0;c0){a(e).each(function(m){i=this;k=h.rows.namedItem(i[c]);if(k){g=i[c];if(d===true){if(h.p.jsonReader.repeatitems===true){if(h.p.jsonReader.cell){i=i[h.p.jsonReader.cell]}for(var l=0;l span:first",k).html(j).attr("title",a.jgrid.stripHtml(j))}else{a("td:eq("+l+")",k).html(j).attr("title",a.jgrid.stripHtml(j))}}f=true;return true}}a(h.p.colModel).each(function(n){b=d===true?this.jsonmap||this.name:this.name;if(i[b]!=undefined){j=h.formatter(g,i[b],n,i,"edit");if(h.p.treeGrid===true&&b==h.p.ExpandColumn){a("td:eq("+n+") > span:first",k).html(j).attr("title",a.jgrid.stripHtml(j))}else{a("td:eq("+n+")",k).html(j).attr("title",a.jgrid.stripHtml(j))}f=true}})}})}});return f},filterGrid:function(c,b){b=a.extend({gridModel:false,gridNames:false,gridToolbar:false,filterModel:[],formtype:"horizontal",autosearch:true,formclass:"filterform",tableclass:"filtertable",buttonclass:"filterbutton",searchButton:"Search",clearButton:"Clear",enableSearch:false,enableClear:false,beforeSearch:null,afterSearch:null,beforeClear:null,afterClear:null,url:"",marksearched:true},b||{});return this.each(function(){var l=this;this.p=b;if(this.p.filterModel.length==0&&this.p.gridModel===false){alert("No filter is set");return}if(!c){alert("No target grid is set!");return}this.p.gridid=c.indexOf("#")!=-1?c:"#"+c;var d=a(this.p.gridid).jqGrid("getGridParam","colModel");if(d){if(this.p.gridModel===true){var e=a(this.p.gridid)[0];var g;a.each(d,function(o,p){var m=[];this.search=this.search===false?false:true;if(this.editrules&&this.editrules.searchhidden===true){g=true}else{if(this.hidden===true){g=false}else{g=true}}if(this.search===true&&g===true){if(l.p.gridNames===true){m.label=e.p.colNames[o]}else{m.label=""}m.name=this.name;m.index=this.index||this.name;m.stype=this.edittype||"text";if(m.stype!="select"){m.stype="text"}m.defval=this.defval||"";m.surl=this.surl||"";m.sopt=this.editoptions||{};m.width=this.width;l.p.filterModel.push(m)}})}else{a.each(l.p.filterModel,function(o,p){for(var m=0;m0?true:false;a.extend(o.p.postData,q);var s;if(l.p.url){s=a(o).jqGrid("getGridParam","url");a(o).jqGrid("setGridParam",{url:l.p.url})}a(o).jqGrid("setGridParam",{search:r}).trigger("reloadGrid",[{page:1}]);if(s){a(o).jqGrid("setGridParam",{url:s})}if(a.isFunction(l.p.afterSearch)){l.p.afterSearch()}};var k=function(){var q={},n,p=0;var o=a(l.p.gridid)[0],m;if(a.isFunction(l.p.beforeClear)){l.p.beforeClear()}a.each(l.p.filterModel,function(t,w){m=this.index;n=(this.defval)?this.defval:"";if(!this.stype){this.stype=="text"}switch(this.stype){case"select":var v;a("select[name="+m+"] option",l).each(function(x){if(x==0){this.selected=true}if(a(this).text()==n){this.selected=true;v=a(this).val();return false}});if(v){q[m]=v;if(l.p.marksearched){a("#jqgh_"+this.name,o.grid.hDiv).addClass("dirty-cell")}p++}else{if(l.p.marksearched){a("#jqgh_"+this.name,o.grid.hDiv).removeClass("dirty-cell")}try{delete o.p.postData[this.index]}catch(u){}}break;case"text":a("input[name="+m+"]",l).val(n);if(n){q[m]=n;if(l.p.marksearched){a("#jqgh_"+this.name,o.grid.hDiv).addClass("dirty-cell")}p++}else{if(l.p.marksearched){a("#jqgh_"+this.name,o.grid.hDiv).removeClass("dirty-cell")}try{delete o.p.postData[this.index]}catch(u){}}break}});var r=p>0?true:false;a.extend(o.p.postData,q);var s;if(l.p.url){s=a(o).jqGrid("getGridParam","url");a(o).jqGrid("setGridParam",{url:l.p.url})}a(o).jqGrid("setGridParam",{search:r}).trigger("reloadGrid",[{page:1}]);if(s){a(o).jqGrid("setGridParam",{url:s})}if(a.isFunction(l.p.afterClear)){l.p.afterClear()}};var i=function(){var q=document.createElement("tr");var n,s,m,o,r,p;if(l.p.formtype=="horizontal"){a(f).append(q)}a.each(l.p.filterModel,function(A,v){o=document.createElement("td");a(o).append("");r=document.createElement("td");var z=this;if(!this.stype){this.stype="text"}switch(this.stype){case"select":if(this.surl){a(r).load(this.surl,function(){if(z.defval){a("select",this).val(z.defval)}a("select",this).attr({name:z.index||z.name,id:"sg_"+z.name});if(z.sopt){a("select",this).attr(z.sopt)}if(l.p.gridToolbar===true&&z.width){a("select",this).width(z.width)}if(l.p.autosearch===true){a("select",this).change(function(E){h();return false})}})}else{if(z.sopt.value){var t=z.sopt.value;var w=document.createElement("select");a(w).attr({name:z.index||z.name,id:"sg_"+z.name}).attr(z.sopt);if(typeof t==="string"){var u=t.split(";"),D,x;for(var y=0;y");if(z.sopt){a("input",r).attr(z.sopt)}if(l.p.gridToolbar===true&&z.width){if(a.browser.msie){a("input",r).width(z.width-4)}else{a("input",r).width(z.width-2)}}if(l.p.autosearch===true){a("input",r).keypress(function(F){var E=F.charCode?F.charCode:F.keyCode?F.keyCode:0;if(E==13){h();return false}return this})}break}if(l.p.formtype=="horizontal"){if(l.p.gridToolbar===true&&l.p.gridNames===false){a(q).append(r)}else{a(q).append(o).append(r)}a(q).append(r)}else{n=document.createElement("tr");a(n).append(o).append(r);a(f).append(n)}});r=document.createElement("td");if(l.p.enableSearch===true){s="";a(r).append(s);a("input#sButton",r).click(function(){h();return false})}if(l.p.enableClear===true){m="";a(r).append(m);a("input#cButton",r).click(function(){k();return false})}if(l.p.enableClear===true||l.p.enableSearch===true){if(l.p.formtype=="horizontal"){a(q).append(r)}else{n=document.createElement("tr");a(n).append(" ").append(r);a(f).append(n)}}};var j=a("
      ");var f=a("
      ");a(j).append(f);i();a(this).append(j);this.triggerSearch=h;this.clearSearch=k})},filterToolbar:function(b){b=a.extend({autosearch:true,beforeSearch:null,afterSearch:null,beforeClear:null,afterClear:null,searchurl:""},b||{});return this.each(function(){var g=this;var c=function(){var o={},n=0,m,l;g.p.searchdata={};a.each(g.p.colModel,function(s,u){l=this.index||this.name;switch(this.stype){case"select":m=a("select[name="+l+"]",g.grid.hDiv).val();if(m){o[l]=m;n++}else{try{delete g.p.postData[l]}catch(t){}}break;case"text":m=a("input[name="+l+"]",g.grid.hDiv).val();if(m){o[l]=m;n++}else{try{delete g.p.postData[l]}catch(t){}}break}});var p=n>0?true:false;a.extend(g.p.postData,o);var r;if(g.p.searchurl){r=g.p.url;a(g).jqGrid("setGridParam",{url:g.p.searchurl})}var q=false;if(a.isFunction(b.beforeSearch)){q=b.beforeSearch.call(g)}if(!q){a(g).jqGrid("setGridParam",{search:p}).trigger("reloadGrid",[{page:1}])}if(r){a(g).jqGrid("setGridParam",{url:r})}if(a.isFunction(b.afterSearch)){b.afterSearch()}};var j=function(){var o={},m,n=0,l;a.each(g.p.colModel,function(s,v){m=(this.searchoptions&&this.searchoptions.defaultValue)?this.searchoptions.defaultValue:"";l=this.index||this.name;switch(this.stype){case"select":var u;a("select[name="+l+"] option",g.grid.hDiv).each(function(w){if(w==0){this.selected=true}if(a(this).text()==m){this.selected=true;u=a(this).val();return false}});if(u){o[l]=u;n++}else{try{delete g.p.postData[l]}catch(t){}}break;case"text":a("input[name="+l+"]",g.grid.hDiv).val(m);if(m){o[l]=m;n++}else{try{delete g.p.postData[l]}catch(t){}}break}});var q=n>0?true:false;a.extend(g.p.postData,o);var r;if(g.p.searchurl){r=g.p.url;a(g).jqGrid("setGridParam",{url:g.p.searchurl})}var p=false;if(a.isFunction(b.beforeClear)){p=b.beforeClear.call(g)}if(!p){a(g).jqGrid("setGridParam",{search:q}).trigger("reloadGrid",[{page:1}])}if(r){a(g).jqGrid("setGridParam",{url:r})}if(a.isFunction(b.afterClear)){b.afterClear()}};var k=function(){var l=a("tr.ui-search-toolbar",g.grid.hDiv);if(l.css("display")=="none"){l.show()}else{l.hide()}};function f(l,n){var m=a(l);if(m[0]!=null){jQuery.each(n,function(){if(this.data!=null){m.bind(this.type,this.data,this.fn)}else{m.bind(this.type,this.fn)}})}}var h=a(""),d,i,e;a.each(g.p.colModel,function(t,p){var v=this;d=a("");i=a("
      ");if(this.hidden===true){a(d).css("display","none")}this.search=this.search===false?false:true;if(typeof this.stype=="undefined"){this.stype="text"}e=a.extend({},this.searchoptions||{});if(this.search){switch(this.stype){case"select":var l=this.surl||e.dataUrl;if(l){var y=i;a.ajax(a.extend({url:l,dataType:"html",complete:function(z,n){if(e.buildSelect!=null){var A=e.buildSelect(z);if(A){a(y).append(A)}}else{a(y).append(z.responseText)}if(e.defaultValue){a("select",y).val(e.defaultValue)}a("select",y).attr({name:v.index||v.name,id:"gs_"+v.name});if(e.attr){a("select",y).attr(e.attr)}a("select",y).css({width:"100%"});if(e.dataInit!=null){e.dataInit(a("select",y)[0])}if(e.dataEvents!=null){f(a("select",y)[0],e.dataEvents)}if(b.autosearch===true){a("select",y).change(function(B){c();return false})}}},a.jgrid.ajaxOptions,g.p.ajaxSelectOptions||{}))}else{var m;if(v.searchoptions&&v.searchoptions.value){m=v.searchoptions.value}else{if(v.editoptions&&v.editoptions.value){m=v.editoptions.value}}if(m){var r=document.createElement("select");r.style.width="100%";a(r).attr({name:v.index||v.name,id:"gs_"+v.name});if(typeof m==="string"){var o=m.split(";"),x,q;for(var s=0;s");if(e.attr){a("input",i).attr(e.attr)}if(e.dataInit!=null){e.dataInit(a("input",i)[0])}if(e.dataEvents!=null){f(a("input",i)[0],e.dataEvents)}if(b.autosearch===true){a("input",i).keypress(function(z){var n=z.charCode?z.charCode:z.keyCode?z.keyCode:0;if(n==13){c();return false}return this})}break}}a(d).append(i);a(h).append(d)});a("table thead",g.grid.hDiv).append(h);this.triggerToolbar=c;this.clearToolbar=j;this.toggleToolbar=k})}})})(jQuery);var showModal=function(a){a.w.show()};var closeModal=function(a){a.w.hide().attr("aria-hidden","true");if(a.o){a.o.remove()}};var createModal=function(l,g,b,n,q,o){var k=document.createElement("div"),a;a=jQuery(b.gbox).attr("dir")=="rtl"?true:false;k.className="ui-widget ui-widget-content ui-corner-all ui-jqdialog";k.id=l.themodal;var d=document.createElement("div");d.className="ui-jqdialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix";d.id=l.modalhead;jQuery(d).append(""+b.caption+"");var m=jQuery("").hover(function(){m.addClass("ui-state-hover")},function(){m.removeClass("ui-state-hover")}).append("");jQuery(d).append(m);if(a){k.dir="rtl";jQuery(".ui-jqdialog-title",d).css("float","right");jQuery(".ui-jqdialog-titlebar-close",d).css("left",0.3+"em")}else{k.dir="ltr";jQuery(".ui-jqdialog-title",d).css("float","left");jQuery(".ui-jqdialog-titlebar-close",d).css("right",0.3+"em")}var i=document.createElement("div");jQuery(i).addClass("ui-jqdialog-content ui-widget-content").attr("id",l.modalcontent);jQuery(i).append(g);k.appendChild(i);jQuery(k).prepend(d);if(o===true){jQuery("body").append(k)}else{jQuery(k).insertBefore(n)}if(typeof b.jqModal==="undefined"){b.jqModal=true}var c={};if(jQuery.fn.jqm&&b.jqModal===true){if(b.left==0&&b.top==0){var h=[];h=findPos(q);b.left=h[0]+4;b.top=h[1]+4}c.top=b.top+"px";c.left=b.left}else{if(b.left!=0||b.top!=0){c.left=b.left;c.top=b.top+"px"}}jQuery("a.ui-jqdialog-titlebar-close",d).click(function(r){var p=jQuery("#"+l.themodal).data("onClose")||b.onClose;var s=jQuery("#"+l.themodal).data("gbox")||b.gbox;hideModal("#"+l.themodal,{gb:s,jqm:b.jqModal,onClose:p});return false});if(b.width==0||!b.width){b.width=300}if(b.height==0||!b.height){b.height=200}if(!b.zIndex){b.zIndex=950}var j=0;if(a&&c.left&&!o){j=jQuery(b.gbox).width()-(!isNaN(b.width)?parseInt(b.width):0)-8;c.left=parseInt(c.left)+parseInt(j)}if(c.left){c.left+="px"}jQuery(k).css(jQuery.extend({width:isNaN(b.width)?"auto":b.width+"px",height:isNaN(b.height)?"auto":b.height+"px",zIndex:b.zIndex,overflow:"hidden"},c)).attr({tabIndex:"-1",role:"dialog","aria-labelledby":l.modalhead,"aria-hidden":"true"});if(typeof b.drag=="undefined"){b.drag=true}if(typeof b.resize=="undefined"){b.resize=true}if(b.drag){jQuery(d).css("cursor","move");if(jQuery.fn.jqDrag){jQuery(k).jqDrag(d)}else{try{jQuery(k).draggable({handle:jQuery("#"+d.id)})}catch(f){}}}if(b.resize){if(jQuery.fn.jqResize){jQuery(k).append("
      ");jQuery("#"+l.themodal).jqResize(".jqResize",l.scrollelm?"#"+l.scrollelm:false)}else{try{jQuery(k).resizable({handles:"se, sw",alsoResize:l.scrollelm?"#"+l.scrollelm:false})}catch(f){}}}if(b.closeOnEscape===true){jQuery(k).keydown(function(r){if(r.which==27){var p=jQuery("#"+l.themodal).data("onClose")||b.onClose;hideModal(this,{gb:b.gbox,jqm:b.jqModal,onClose:p})}})}};var viewModal=function(a,c){c=jQuery.extend({toTop:true,overlay:10,modal:false,onShow:showModal,onHide:closeModal,gbox:"",jqm:true,jqM:true},c||{});if(jQuery.fn.jqm&&c.jqm==true){if(c.jqM){jQuery(a).attr("aria-hidden","false").jqm(c).jqmShow()}else{jQuery(a).attr("aria-hidden","false").jqmShow()}}else{if(c.gbox!=""){jQuery(".jqgrid-overlay:first",c.gbox).show();jQuery(a).data("gbox",c.gbox)}jQuery(a).show().attr("aria-hidden","false");try{jQuery(":input:visible",a)[0].focus()}catch(b){}}};var hideModal=function(a,d){d=jQuery.extend({jqm:true,gb:""},d||{});if(d.onClose){var b=d.onClose(a);if(typeof b=="boolean"&&!b){return}}if(jQuery.fn.jqm&&d.jqm===true){jQuery(a).attr("aria-hidden","true").jqmHide()}else{if(d.gb!=""){try{jQuery(".jqgrid-overlay:first",d.gb).hide()}catch(c){}}jQuery(a).hide().attr("aria-hidden","true")}};function info_dialog(n,h,b,m){var k={width:290,height:"auto",dataheight:"auto",drag:true,resize:false,caption:""+n+"",left:250,top:170,zIndex:1000,jqModal:true,closeOnEscape:true,align:"center",buttonalign:"center",buttons:[]};jQuery.extend(k,m||{});var c=k.jqModal;if(jQuery.fn.jqm&&!c){c=false}var f="";if(k.buttons.length>0){for(var d=0;d"+k.buttons[d].text+""}}var j=isNaN(k.dataheight)?k.dataheight:k.dataheight+"px",l="text-align:"+k.align+";";var a="
      ";a+="
      "+h+"
      ";a+=b?"
      "+b+""+f+"
      ":"";a+="
      ";try{if(jQuery("#info_dialog").attr("aria-hidden")=="false"){hideModal("#info_dialog",{jqm:c})}jQuery("#info_dialog").remove()}catch(g){}createModal({themodal:"info_dialog",modalhead:"info_head",modalcontent:"info_content",scrollelm:"infocnt"},a,k,"","",true);if(f){jQuery.each(k.buttons,function(e){jQuery("#"+this.id,"#info_id").bind("click",function(){k.buttons[e].onClick.call(jQuery("#info_dialog"));return false})})}jQuery("#closedialog","#info_id").click(function(i){hideModal("#info_dialog",{jqm:c});return false});jQuery(".fm-button","#info_dialog").hover(function(){jQuery(this).addClass("ui-state-hover")},function(){jQuery(this).removeClass("ui-state-hover")});viewModal("#info_dialog",{onHide:function(e){e.w.hide().remove();if(e.o){e.o.remove()}},modal:true,jqm:c})}function findPos(a){var b=curtop=0;if(a.offsetParent){do{b+=a.offsetLeft;curtop+=a.offsetTop}while(a=a.offsetParent)}return[b,curtop]}function isArray(a){if(a.constructor.toString().indexOf("Array")==-1){return false}else{return true}}function createEl(d,f,s,j,q){var r="";if(f.defaultValue){delete f.defaultValue}function k(i,e){if(jQuery.isFunction(e.dataInit)){i.id=e.id;e.dataInit(i);delete e.id;delete e.dataInit}if(e.dataEvents){jQuery.each(e.dataEvents,function(){if(this.data!=null){jQuery(i).bind(this.type,this.data,this.fn)}else{jQuery(i).bind(this.type,this.fn)}});delete e.dataEvents}return e}switch(d){case"textarea":r=document.createElement("textarea");if(j){if(!f.cols){jQuery(r).css({width:"98%"})}}else{if(!f.cols){f.cols=20}}if(!f.rows){f.rows=2}if(s==" "||s==" "||(s.length==1&&s.charCodeAt(0)==160)){s=""}r.value=s;f=k(r,f);jQuery(r).attr(f);break;case"checkbox":r=document.createElement("input");r.type="checkbox";if(!f.value){var u=s.toLowerCase();if(u.search(/(false|0|no|off|undefined)/i)<0&&u!==""){r.checked=true;r.defaultChecked=true;r.value=s}else{r.value="on"}jQuery(r).attr("offval","off")}else{var m=f.value.split(":");if(s===m[0]){r.checked=true;r.defaultChecked=true}r.value=m[0];jQuery(r).attr("offval",m[1]);try{delete f.value}catch(p){}}f=k(r,f);jQuery(r).attr(f);break;case"select":r=document.createElement("select");var b,g=[];if(f.multiple===true){b=true;r.multiple="multiple"}else{b=false}if(f.dataUrl!=null){jQuery.ajax(jQuery.extend({url:f.dataUrl,type:"GET",complete:function(x,w){try{delete f.dataUrl;delete f.value}catch(y){}var v;if(f.buildSelect!=null){var i=f.buildSelect(x);v=jQuery(i).html();delete f.buildSelect}else{v=jQuery(x.responseText).html()}if(v){jQuery(r).append(v);f=k(r,f);if(typeof f.size==="undefined"){f.size=b?3:1}if(b){g=s.split(",");g=jQuery.map(g,function(e){return jQuery.trim(e)})}else{g[0]=s}jQuery(r).attr(f);setTimeout(function(){jQuery("option",r).each(function(e){if(e==0){this.selected=""}if(jQuery.inArray(jQuery(this).text(),g)>-1||jQuery.inArray(jQuery(this).val(),g)>-1){this.selected="selected";if(!b){return false}}})},0)}}},q||{}))}else{if(f.value){var n;if(b){g=s.split(",");g=jQuery.map(g,function(e){return jQuery.trim(e)});if(typeof f.size==="undefined"){f.size=3}}else{f.size=1}if(typeof f.value==="function"){f.value=f.value()}if(typeof f.value==="string"){var o=f.value.split(";"),l,h;for(n=0;n-1||jQuery.inArray(l[0],g)>-1)){h.selected="selected"}r.appendChild(h)}}else{if(typeof f.value==="object"){var c=f.value;for(var t in c){h=document.createElement("option");h.value=t;h.innerHTML=c[t];if(!b&&(t==s||c[t]==s)){h.selected="selected"}if(b&&(jQuery.inArray(c[t],g)>-1||jQuery.inArray(t,g)>-1)){h.selected="selected"}r.appendChild(h)}}}f=k(r,f);try{delete f.value}catch(p){}jQuery(r).attr(f)}}break;case"text":case"password":case"button":r=document.createElement("input");r.type=d;r.value=jQuery.jgrid.htmlDecode(s);f=k(r,f);if(d!="button"){if(j){if(!f.size){jQuery(r).css({width:"98%"})}}else{if(!f.size){f.size=20}}}jQuery(r).attr(f);break;case"image":case"file":r=document.createElement("input");r.type=d;f=k(r,f);jQuery(r).attr(f);break;case"custom":r=document.createElement("span");try{if(jQuery.isFunction(f.custom_element)){var a=f.custom_element.call(this,s,f);if(a){a=jQuery(a).addClass("customelement").attr({id:f.id,name:f.name});jQuery(r).empty().append(a)}else{throw"e2"}}else{throw"e1"}}catch(p){if(p=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_element' "+jQuery.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose)}if(p=="e2"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_element' "+jQuery.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,p.message,jQuery.jgrid.edit.bClose)}}break}return r}function checkValues(c,m,j){var f,h,n;if(typeof(m)=="string"){for(h=0,len=j.p.colModel.length;h=0){f=j.p.colModel[m].editrules}}if(f){if(!n){n=j.p.colNames[m]}if(f.required===true){if(c.match(/^s+$/)||c==""){return[false,n+": "+jQuery.jgrid.edit.msg.required,""]}}var d=f.required===false?false:true;if(f.number===true){if(!(d===false&&isEmpty(c))){if(isNaN(c)){return[false,n+": "+jQuery.jgrid.edit.msg.number,""]}}}if(typeof f.minValue!="undefined"&&!isNaN(f.minValue)){if(parseFloat(c)parseFloat(f.maxValue)){return[false,n+": "+jQuery.jgrid.edit.msg.maxValue+" "+f.maxValue,""]}}var a;if(f.email===true){if(!(d===false&&isEmpty(c))){a=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;if(!a.test(c)){return[false,n+": "+jQuery.jgrid.edit.msg.email,""]}}}if(f.integer===true){if(!(d===false&&isEmpty(c))){if(isNaN(c)){return[false,n+": "+jQuery.jgrid.edit.msg.integer,""]}if((c%1!=0)||(c.indexOf(".")!=-1)){return[false,n+": "+jQuery.jgrid.edit.msg.integer,""]}}}if(f.date===true){if(!(d===false&&isEmpty(c))){var b=j.p.colModel[m].datefmt||"Y-m-d";if(!checkDate(b,c)){return[false,n+": "+jQuery.jgrid.edit.msg.date+" - "+b,""]}}}if(f.time===true){if(!(d===false&&isEmpty(c))){if(!checkTime(c)){return[false,n+": "+jQuery.jgrid.edit.msg.date+" - hh:mm (am/pm)",""]}}}if(f.url===true){if(!(d===false&&isEmpty(c))){a=/^(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;if(!a.test(c)){return[false,n+": "+jQuery.jgrid.edit.msg.url,""]}}}if(f.custom===true){if(!(d===false&&isEmpty(c))){if(jQuery.isFunction(f.custom_func)){var k=f.custom_func.call(j,c,n);if(jQuery.isArray(k)){return k}else{return[false,jQuery.jgrid.edit.msg.customarray,""]}}else{return[false,jQuery.jgrid.edit.msg.customfcheck,""]}}}}return[true,"",""]}function checkDate(l,c){var e={},n;l=l.toLowerCase();if(l.indexOf("/")!=-1){n="/"}else{if(l.indexOf("-")!=-1){n="-"}else{if(l.indexOf(".")!=-1){n="."}else{n="/"}}}l=l.split(n);c=c.split(n);if(c.length!=3){return false}var f=-1,m,g=-1,d=-1;for(var h=0;h12){return false}}if(g===-1){return false}else{k=e[l[g]].toString();if(k.length<1||e[l[g]]<1||e[l[g]]>31||(e[l[d]]==2&&e[l[g]]>daysInFebruary(e[l[f]]))||e[l[g]]>a[e[l[d]]]){return false}}return true}function daysInFebruary(a){return(((a%4==0)&&((!(a%100==0))||(a%400==0)))?29:28)}function DaysArray(b){for(var a=1;a<=b;a++){this[a]=31;if(a==4||a==6||a==9||a==11){this[a]=30}if(a==2){this[a]=29}}return this}function isEmpty(a){if(a.match(/^s+$/)||a==""){return true}else{return false}}function checkTime(c){var b=/^(\d{1,2}):(\d{2})([ap]m)?$/,a;if(!isEmpty(c)){a=c.match(b);if(a){if(a[3]){if(a[1]<1||a[1]>12){return false}}else{if(a[1]>23){return false}}if(a[2]>59){return false}}else{return false}}return true};(function(b){var a=null;b.jgrid.extend({searchGrid:function(c){c=b.extend({recreateFilter:false,drag:true,sField:"searchField",sValue:"searchString",sOper:"searchOper",sFilter:"filters",beforeShowSearch:null,afterShowSearch:null,onInitializeSearch:null,closeAfterSearch:false,closeOnEscape:false,multipleSearch:false,sopt:null,onClose:null},b.jgrid.search,c||{});return this.each(function(){var l=this;if(!l.grid){return}if(b.fn.searchFilter){var g="fbox_"+l.p.id;if(c.recreateFilter===true){b("#"+g).remove()}if(b("#"+g).html()!=null){if(b.isFunction(c.beforeShowSearch)){c.beforeShowSearch(b("#"+g))}f();if(b.isFunction(c.afterShowSearch)){c.afterShowSearch(b("#"+g))}}else{var n=[],v=b("#"+l.p.id).jqGrid("getGridParam","colNames"),s=b("#"+l.p.id).jqGrid("getGridParam","colModel"),u=["eq","ne","lt","le","gt","ge","bw","bn","in","ni","ew","en","cn","nc"],i,r,h,p;p=jQuery.fn.searchFilter.defaults.operators;if(c.sopt!=null){p=[];h=0;for(i=0;i0){for(i=0;i0){b("").insertBefore("#gview_"+l.p.id);b("#"+g).searchFilter(n,{groupOps:c.groupOps,operators:p,onClose:d,resetText:c.Reset,searchText:c.Find,windowTitle:c.caption,rulesText:c.rulesText,matchText:c.matchText,onSearch:t,onReset:m,stringResult:c.multipleSearch,ajaxSelectOptions:b.extend({},b.jgrid.ajaxOptions,l.p.ajaxSelectOptions||{})});b(".ui-widget-overlay","#"+g).remove();if(l.p.direction=="rtl"){b(".ui-closer","#"+g).css("float","left")}if(c.drag===true){b("#"+g+" table thead tr:first td:first").css("cursor","move");if(jQuery.fn.jqDrag){b("#"+g).jqDrag(b("#"+g+" table thead tr:first td:first"))}else{try{b("#"+g).draggable({handle:b("#"+g+" table thead tr:first td:first")})}catch(o){}}}if(c.multipleSearch===false){b(".ui-del, .ui-add, .ui-del, .ui-add-last, .matchText, .rulesText","#"+g).hide();b("select[name='groupOp']","#"+g).hide()}if(b.isFunction(c.onInitializeSearch)){c.onInitializeSearch(b("#"+g))}if(b.isFunction(c.beforeShowSearch)){c.beforeShowSearch(b("#"+g))}f();if(b.isFunction(c.afterShowSearch)){c.afterShowSearch(b("#"+g))}if(c.closeOnEscape===true){b("#"+g).keydown(function(j){if(j.which==27){d(b("#"+g))}})}}}}function t(w){var e=(w!==undefined),k=b("#"+l.p.id),j={};if(c.multipleSearch===false){j[c.sField]=w.rules[0].field;j[c.sValue]=w.rules[0].data;j[c.sOper]=w.rules[0].op}else{j[c.sFilter]=w}k[0].p.search=e;b.extend(k[0].p.postData,j);k.trigger("reloadGrid",[{page:1}]);if(c.closeAfterSearch){d(b("#"+g))}}function m(w){var e=(w!==undefined),k=b("#"+l.p.id),j=[];k[0].p.search=e;if(c.multipleSearch===false){j[c.sField]=j[c.sValue]=j[c.sOper]=""}else{j[c.sFilter]=""}b.extend(k[0].p.postData,j);k.trigger("reloadGrid",[{page:1}])}function d(e){if(c.onClose){var j=c.onClose(e);if(typeof j=="boolean"&&!j){return}}e.hide();b(".jqgrid-overlay:first","#gbox_"+l.p.id).hide()}function f(){var k=b(".ui-searchFilter").length;if(k>1){var j=b("#"+g).css("zIndex");b("#"+g).css({zIndex:parseInt(j)+k})}b("#"+g).show();b(".jqgrid-overlay:first","#gbox_"+l.p.id).show();try{b(":input:visible","#"+g)[0].focus()}catch(e){}}})},editGridRow:function(c,d){d=b.extend({top:0,left:0,width:300,height:"auto",dataheight:"auto",modal:false,drag:true,resize:true,url:null,mtype:"POST",clearAfterAdd:true,closeAfterEdit:false,reloadAfterSubmit:true,onInitializeForm:null,beforeInitData:null,beforeShowForm:null,afterShowForm:null,beforeSubmit:null,afterSubmit:null,onclickSubmit:null,afterComplete:null,onclickPgButtons:null,afterclickPgButtons:null,editData:{},recreateForm:false,jqModal:true,closeOnEscape:false,addedrow:"first",topinfo:"",bottominfo:"",saveicon:[],closeicon:[],savekey:[false,13],navkeys:[false,38,40],checkOnSubmit:false,checkOnUpdate:false,_savedData:{},onClose:null,ajaxEditOptions:{},serializeEditData:null},b.jgrid.edit,d||{});a=d;return this.each(function(){var e=this;if(!e.grid||!c){return}var C=e.p.id,y="FrmGrid_"+C,u="TblGrid_"+C,i={themodal:"editmod"+C,modalhead:"edithd"+C,modalcontent:"editcnt"+C,scrollelm:y},D=b.isFunction(a.beforeShowForm)?a.beforeShowForm:false,O=b.isFunction(a.afterShowForm)?a.afterShowForm:false,N=b.isFunction(a.beforeInitData)?a.beforeInitData:false,o=b.isFunction(a.onInitializeForm)?a.onInitializeForm:false,I=null,J=1,q=0,v,E,F,R,H,B;if(c=="new"){c="_empty";d.caption=d.addCaption}else{d.caption=d.editCaption}if(d.recreateForm===true&&b("#"+i.themodal).html()!=null){b("#"+i.themodal).remove()}var k=true;if(d.checkOnUpdate&&d.jqModal&&!d.modal){k=false}if(b("#"+i.themodal).html()!=null){b(".ui-jqdialog-title","#"+i.modalhead).html(d.caption);b("#FormError","#"+u).hide();if(a.topinfo){b(".topinfo","#"+u+"_2").html(a.topinfo);b(".tinfo","#"+u+"_2").show()}else{b(".tinfo","#"+u+"_2").hide()}if(a.bottominfo){b(".bottominfo","#"+u+"_2").html(a.bottominfo);b(".binfo","#"+u+"_2").show()}else{b(".binfo","#"+u+"_2").hide()}if(N){N(b("#"+y))}n(c,e,y);if(c=="_empty"){b("#pData, #nData","#"+u+"_2").hide()}else{b("#pData, #nData","#"+u+"_2").show()}if(d.processing===true){d.processing=false;b("#sData","#"+u+"_2").removeClass("ui-state-active")}if(b("#"+y).data("disabled")===true){b(".confirm","#"+i.themodal).hide();b("#"+y).data("disabled",false)}if(D){D(b("#"+y))}b("#"+i.themodal).data("onClose",a.onClose);viewModal("#"+i.themodal,{gbox:"#gbox_"+C,jqm:d.jqModal,jqM:false,closeoverlay:k,modal:d.modal});if(!k){b(".jqmOverlay").click(function(){if(!g()){return false}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false})}if(O){O(b("#"+y))}}else{b(e.p.colModel).each(function(Y){var Z=this.formoptions;J=Math.max(J,Z?Z.colpos||0:0);q=Math.max(q,Z?Z.rowpos||0:0)});var r=isNaN(d.dataheight)?d.dataheight:d.dataheight+"px";var M,U=b("
      ").data("disabled",false),A=b("
      ");b(U).append(A);M=b("");M[0].rp=0;b(A).append(M);M=b(""+a.topinfo+"");M[0].rp=0;b(A).append(M);if(N){N(b("#"+y))}var f=e.p.direction=="rtl"?true:false,T=f?"nData":"pData",V=f?"pData":"nData",z=s(c,e,A,J),l="",m="",h=""+d.bSubmit+"",t=""+d.bCancel+"";var Q="";Q+="";Q+="
      "+h+t+"
      ";if(q>0){var x=[];b.each(b(A)[0].rows,function(Y,Z){x[Y]=Z});x.sort(function(Z,Y){if(Z.rp>Y.rp){return 1}if(Z.rp").append(U).append(Q);createModal(i,P,d,"#gview_"+e.p.id,b("#gview_"+e.p.id)[0]);if(f){b("#pData, #nData","#"+u+"_2").css("float","right");b(".EditButton","#"+u+"_2").css("text-align","left")}if(a.topinfo){b(".tinfo","#"+u+"_2").show()}if(a.bottominfo){b(".binfo","#"+u+"_2").show()}P=null;Q=null;b("#"+i.themodal).keydown(function(Y){var Z=Y.target;if(b("#"+y).data("disabled")===true){return false}if(a.savekey[0]===true&&Y.which==a.savekey[1]){if(Z.tagName!="TEXTAREA"){b("#sData","#"+u+"_2").trigger("click");return false}}if(Y.which===27){if(!g()){return false}if(p){hideModal(this,{gb:d.gbox,jqm:d.jqModal,onClose:a.onClose})}return false}if(a.navkeys[0]===true){if(b("#id_g","#"+u).val()=="_empty"){return true}if(Y.which==a.navkeys[1]){b("#pData","#"+u+"_2").trigger("click");return false}if(Y.which==a.navkeys[2]){b("#nData","#"+u+"_2").trigger("click");return false}}});if(d.checkOnUpdate){b("a.ui-jqdialog-titlebar-close span","#"+i.themodal).removeClass("jqmClose");b("a.ui-jqdialog-titlebar-close","#"+i.themodal).unbind("click").click(function(){if(!g()){return false}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false})}d.saveicon=b.extend([true,"left","ui-icon-disk"],d.saveicon);d.closeicon=b.extend([true,"left","ui-icon-close"],d.closeicon);if(d.saveicon[0]==true){b("#sData","#"+u+"_2").addClass(d.saveicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(d.closeicon[0]==true){b("#cData","#"+u+"_2").addClass(d.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(a.checkOnSubmit||a.checkOnUpdate){h=""+d.bYes+"";m=""+d.bNo+"";t=""+d.bExit+"";var G,w=d.zIndex||999;w++;if(b.browser.msie&&b.browser.version==6){G=''}else{G=""}b("
      "+d.saveData+"

      "+h+m+t+"
      ").insertAfter("#"+y);b("#sNew","#"+i.themodal).click(function(){j();b("#"+y).data("disabled",false);b(".confirm","#"+i.themodal).hide();return false});b("#nNew","#"+i.themodal).click(function(){b(".confirm","#"+i.themodal).hide();b("#"+y).data("disabled",false);setTimeout(function(){b(":input","#"+y)[0].focus()},0);return false});b("#cNew","#"+i.themodal).click(function(){b(".confirm","#"+i.themodal).hide();b("#"+y).data("disabled",false);hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false})}if(o){o(b("#"+y))}if(c=="_empty"){b("#pData,#nData","#"+u+"_2").hide()}else{b("#pData,#nData","#"+u+"_2").show()}if(D){D(b("#"+y))}b("#"+i.themodal).data("onClose",a.onClose);viewModal("#"+i.themodal,{gbox:"#gbox_"+C,jqm:d.jqModal,closeoverlay:k,modal:d.modal});if(!k){b(".jqmOverlay").click(function(){if(!g()){return false}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false})}if(O){O(b("#"+y))}b(".fm-button","#"+i.themodal).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});b("#sData","#"+u+"_2").click(function(Y){E={};R={};b("#FormError","#"+u).hide();W();if(E.id=="_empty"){j()}else{if(d.checkOnSubmit===true){H=b.extend({},E,R);B=K(H,a._savedData);if(B){b("#"+y).data("disabled",true);b(".confirm","#"+i.themodal).show()}else{j()}}else{j()}}return false});b("#cData","#"+u+"_2").click(function(Y){if(!g()){return false}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose});return false});b("#nData","#"+u+"_2").click(function(Y){if(!g()){return false}b("#FormError","#"+u).hide();var Z=X();Z[0]=parseInt(Z[0]);if(Z[0]!=-1&&Z[1][Z[0]+1]){if(b.isFunction(d.onclickPgButtons)){d.onclickPgButtons("next",b("#"+y),Z[1][Z[0]])}n(Z[1][Z[0]+1],e,y);b(e).jqGrid("setSelection",Z[1][Z[0]+1]);if(b.isFunction(d.afterclickPgButtons)){d.afterclickPgButtons("next",b("#"+y),Z[1][Z[0]+1])}L(Z[0]+1,Z[1].length-1)}return false});b("#pData","#"+u+"_2").click(function(Z){if(!g()){return false}b("#FormError","#"+u).hide();var Y=X();if(Y[0]!=-1&&Y[1][Y[0]-1]){if(b.isFunction(d.onclickPgButtons)){d.onclickPgButtons("prev",b("#"+y),Y[1][Y[0]])}n(Y[1][Y[0]-1],e,y);b(e).jqGrid("setSelection",Y[1][Y[0]-1]);if(b.isFunction(d.afterclickPgButtons)){d.afterclickPgButtons("prev",b("#"+y),Y[1][Y[0]-1])}L(Y[0]-1,Y[1].length-1)}return false})}var S=X();L(S[0],S[1].length-1);function L(Z,aa,Y){if(Z==0){b("#pData","#"+u+"_2").addClass("ui-state-disabled")}else{b("#pData","#"+u+"_2").removeClass("ui-state-disabled")}if(Z==aa){b("#nData","#"+u+"_2").addClass("ui-state-disabled")}else{b("#nData","#"+u+"_2").removeClass("ui-state-disabled")}}function X(){var Z=b(e).jqGrid("getDataIDs"),Y=b("#id_g","#"+u).val(),aa=b.inArray(Y,Z);return[aa,Z]}function g(){var Y=true;b("#FormError","#"+u).hide();if(a.checkOnUpdate){E={};R={};W();H=b.extend({},E,R);B=K(H,a._savedData);if(B){b("#"+y).data("disabled",true);b(".confirm","#"+i.themodal).show();Y=false}}return Y}function W(){b(".FormElement","#"+u).each(function(aa){var ad=b(".customelement",this);if(ad.length){var ab=ad[0],Y=ab.name;b.each(e.p.colModel,function(ae,ag){if(this.name==Y&&this.editoptions&&b.isFunction(this.editoptions.custom_value)){try{E[Y]=this.editoptions.custom_value(b("#"+Y,"#"+u),"get");if(E[Y]===undefined){throw"e1"}}catch(af){if(af=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+b.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,af.message,jQuery.jgrid.edit.bClose)}}return true}})}else{switch(b(this).get(0).type){case"checkbox":if(b(this).attr("checked")){E[this.name]=b(this).val()}else{var Z=b(this).attr("offval");E[this.name]=Z}break;case"select-one":E[this.name]=b("option:selected",this).val();R[this.name]=b("option:selected",this).text();break;case"select-multiple":E[this.name]=b(this).val();if(E[this.name]){E[this.name]=E[this.name].join(",")}else{E[this.name]=""}var ac=[];b("option:selected",this).each(function(ae,af){ac[ae]=b(af).text()});R[this.name]=ac.join(",");break;case"password":case"text":case"textarea":case"button":E[this.name]=b(this).val();E[this.name]=!e.p.autoencode?E[this.name]:b.jgrid.htmlEncode(E[this.name]);break}}});return true}function s(ab,ah,ae,am){var Y,Z,aj,ak=0,ao,ap,ai,an=[],af=false,ag,aa,ac="  ",ad="";for(var al=1;al<=am;al++){ad+=ac}if(ab!="_empty"){af=b(ah).jqGrid("getInd",ab)}b(ah.p.colModel).each(function(au){Y=this.name;if(this.editrules&&this.editrules.edithidden==true){Z=false}else{Z=this.hidden===true?true:false}ap=Z?"style='display:none'":"";if(Y!=="cb"&&Y!=="subgrid"&&this.editable===true&&Y!=="rn"){if(af===false){ao=""}else{if(Y==ah.p.ExpandColumn&&ah.p.treeGrid===true){ao=b("td:eq("+au+")",ah.rows[af]).text()}else{try{ao=b.unformat(b("td:eq("+au+")",ah.rows[af]),{colModel:this},au)}catch(ar){ao=b("td:eq("+au+")",ah.rows[af]).html()}}}var at=b.extend({},this.editoptions||{},{id:Y,name:Y});frmopt=b.extend({},{elmprefix:"",elmsuffix:"",rowabove:false,rowcontent:""},this.formoptions||{}),ag=parseInt(frmopt.rowpos)||ak+1,aa=parseInt((parseInt(frmopt.colpos)||1)*2);if(ab=="_empty"&&at.defaultValue){ao=b.isFunction(at.defaultValue)?at.defaultValue():at.defaultValue}if(!this.edittype){this.edittype="text"}ai=createEl(this.edittype,at,ao,false,b.extend({},b.jgrid.ajaxOptions,ah.p.ajaxSelectOptions||{}));if(ao==""&&this.edittype=="checkbox"){ao=b(ai).attr("offval")}if(a.checkOnSubmit||a.checkOnUpdate){a._savedData[Y]=ao}b(ai).addClass("FormElement");aj=b(ae).find("tr[rowpos="+ag+"]");if(frmopt.rowabove){var av=b(""+frmopt.rowcontent+"");b(ae).append(av);av[0].rp=ag}if(aj.length==0){aj=b("").addClass("FormData").attr("id","tr_"+Y);b(aj).append(ad);b(ae).append(aj);aj[0].rp=ag}b("td:eq("+(aa-2)+")",aj[0]).html(typeof frmopt.label==="undefined"?ah.p.colNames[au]:frmopt.label);b("td:eq("+(aa-1)+")",aj[0]).append(frmopt.elmprefix).append(ai).append(frmopt.elmsuffix);an[ak]=au;ak++}});if(ak>0){var aq=b("");aq[0].rp=ak+999;b(ae).append(aq);if(a.checkOnSubmit||a.checkOnUpdate){a._savedData.id=ab}}return an}function n(Z,af,ab){var ak,ah,ac=0,ag,ae,Y,ad,ai;if(a.checkOnSubmit||a.checkOnUpdate){a._savedData={};a._savedData.id=Z}var aj=af.p.colModel;if(Z=="_empty"){b(aj).each(function(al){ak=this.name;Y=b.extend({},this.editoptions||{});ae=b("#"+b.jgrid.jqID(ak),"#"+ab);if(ae[0]!=null){ad="";if(Y.defaultValue){ad=b.isFunction(Y.defaultValue)?Y.defaultValue():Y.defaultValue;if(ae[0].type=="checkbox"){ai=ad.toLowerCase();if(ai.search(/(false|0|no|off|undefined)/i)<0&&ai!==""){ae[0].checked=true;ae[0].defaultChecked=true;ae[0].value=ad}else{ae.attr({checked:"",defaultChecked:""})}}else{ae.val(ad)}}else{if(ae[0].type=="checkbox"){ae[0].checked=false;ae[0].defaultChecked=false;ad=b(ae).attr("offval")}else{if(ae[0].type.substr(0,6)=="select"){ae[0].selectedIndex=0}else{ae.val(ad)}}}if(a.checkOnSubmit===true||a.checkOnUpdate){a._savedData[ak]=ad}}});b("#id_g","#"+ab).val("_empty");return}var aa=b(af).jqGrid("getInd",Z,true);if(!aa){return}b("td",aa).each(function(an){ak=aj[an].name;if(ak!=="cb"&&ak!=="subgrid"&&ak!=="rn"&&aj[an].editable===true){if(ak==af.p.ExpandColumn&&af.p.treeGrid===true){ag=b(this).text()}else{try{ag=b.unformat(this,{colModel:aj[an]},an)}catch(am){ag=b(this).html()}}if(a.checkOnSubmit===true||a.checkOnUpdate){a._savedData[ak]=ag}ak=b.jgrid.jqID(ak);switch(aj[an].edittype){case"password":case"text":case"button":case"image":ag=b.jgrid.htmlDecode(ag);b("#"+ak,"#"+ab).val(ag);break;case"textarea":if(ag==" "||ag==" "||(ag.length==1&&ag.charCodeAt(0)==160)){ag=""}b("#"+ak,"#"+ab).val(ag);break;case"select":var al=ag.split(",");al=b.map(al,function(aq){return b.trim(aq)});b("#"+ak+" option","#"+ab).each(function(aq){if(!aj[an].editoptions.multiple&&(al[0]==b(this).text()||al[0]==b(this).val())){this.selected=true}else{if(aj[an].editoptions.multiple){if(b.inArray(b(this).text(),al)>-1||b.inArray(b(this).val(),al)>-1){this.selected=true}else{this.selected=false}}else{this.selected=false}}});break;case"checkbox":ag=ag+"";ag=ag.toLowerCase();if(ag.search(/(false|0|no|off|undefined)/i)<0&&ag!==""){b("#"+ak,"#"+ab).attr("checked",true);b("#"+ak,"#"+ab).attr("defaultChecked",true)}else{b("#"+ak,"#"+ab).attr("checked",false);b("#"+ak,"#"+ab).attr("defaultChecked","")}break;case"custom":try{if(aj[an].editoptions&&b.isFunction(aj[an].editoptions.custom_value)){var ap=aj[an].editoptions.custom_value(b("#"+ak,"#"+ab),"set",ag)}else{throw"e1"}}catch(ao){if(ao=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+b.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,ao.message,jQuery.jgrid.edit.bClose)}}break}ac++}});if(ac>0){b("#id_g","#"+u).val(Z)}}function j(){var ac,aa=[true,"",""],Z={};if(b.isFunction(a.beforeCheckValues)){var Y=a.beforeCheckValues(E,b("#"+y),E.id=="_empty"?"add":"edit");if(Y&&typeof(Y)==="object"){E=Y}}for(var ab in E){aa=checkValues(E[ab],ab,e);if(aa[0]==false){break}}if(aa[0]){if(b.isFunction(a.onclickSubmit)){Z=a.onclickSubmit(a,E)||{}}if(b.isFunction(a.beforeSubmit)){aa=a.beforeSubmit(E,b("#"+y))}}v=a.url?a.url:b(e).jqGrid("getGridParam","editurl");if(aa[0]){if(!v){aa[0]=false;aa[1]+=" "+b.jgrid.errors.nourl}}if(aa[0]===false){b("#FormError>td","#"+u).html(aa[1]);b("#FormError","#"+u).show();return}if(!d.processing){d.processing=true;b("#sData","#"+u+"_2").addClass("ui-state-active");E.oper=E.id=="_empty"?"add":"edit";E=b.extend(E,a.editData,Z);b.ajax(b.extend({url:v,type:a.mtype,data:b.isFunction(a.serializeEditData)?a.serializeEditData(E):E,complete:function(ae,ad){if(ad!="success"){aa[0]=false;if(b.isFunction(a.errorTextFormat)){aa[1]=a.errorTextFormat(ae)}else{aa[1]=ad+" Status: '"+ae.statusText+"'. Error code: "+ae.status}}else{if(b.isFunction(a.afterSubmit)){aa=a.afterSubmit(ae,E)}}if(aa[0]===false){b("#FormError>td","#"+u).html(aa[1]);b("#FormError","#"+u).show()}else{b.each(e.p.colModel,function(ag,ai){if(R[this.name]&&this.formatter&&this.formatter=="select"){try{delete R[this.name]}catch(ah){}}});E=b.extend(E,R);if(E.id=="_empty"){if(!aa[2]){aa[2]=parseInt(e.p.records)+1}E.id=aa[2];if(a.closeAfterAdd){if(a.reloadAfterSubmit){b(e).trigger("reloadGrid")}else{b(e).jqGrid("addRowData",aa[2],E,d.addedrow);b(e).jqGrid("setSelection",aa[2])}hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose})}else{if(a.clearAfterAdd){if(a.reloadAfterSubmit){b(e).trigger("reloadGrid")}else{b(e).jqGrid("addRowData",aa[2],E,d.addedrow)}n("_empty",e,y)}else{if(a.reloadAfterSubmit){b(e).trigger("reloadGrid")}else{b(e).jqGrid("addRowData",aa[2],E,d.addedrow)}}}}else{if(a.reloadAfterSubmit){b(e).trigger("reloadGrid");if(!a.closeAfterEdit){setTimeout(function(){b(e).jqGrid("setSelection",E.id)},1000)}}else{if(e.p.treeGrid===true){b(e).jqGrid("setTreeRow",E.id,E)}else{b(e).jqGrid("setRowData",E.id,E)}}if(a.closeAfterEdit){hideModal("#"+i.themodal,{gb:"#gbox_"+C,jqm:d.jqModal,onClose:a.onClose})}}if(b.isFunction(a.afterComplete)){ac=ae;setTimeout(function(){a.afterComplete(ac,E,b("#"+y));ac=null},500)}}d.processing=false;if(a.checkOnSubmit||a.checkOnUpdate){b("#"+y).data("disabled",false);if(a._savedData.id!="_empty"){a._savedData=E}}b("#sData","#"+u+"_2").removeClass("ui-state-active");try{b(":input:visible","#"+y)[0].focus()}catch(af){}},error:function(af,ad,ae){b("#FormError>td","#"+u).html(ad+" : "+ae);b("#FormError","#"+u).show();d.processing=false;b("#"+y).data("disabled",false);b("#sData","#"+u+"_2").removeClass("ui-state-active")}},b.jgrid.ajaxOptions,a.ajaxEditOptions))}}function K(ab,Y){var Z=false,aa;for(aa in ab){if(ab[aa]!=Y[aa]){Z=true;break}}return Z}})},viewGridRow:function(c,d){d=b.extend({top:0,left:0,width:0,height:"auto",dataheight:"auto",modal:false,drag:true,resize:true,jqModal:true,closeOnEscape:false,labelswidth:"30%",closeicon:[],navkeys:[false,38,40],onClose:null},b.jgrid.view,d||{});return this.each(function(){var x=this;if(!x.grid||!c){return}if(!d.imgpath){d.imgpath=x.p.imgpath}var r=x.p.id,A="ViewGrid_"+r,s="ViewTbl_"+r,j={themodal:"viewmod"+r,modalhead:"viewhd"+r,modalcontent:"viewcnt"+r,scrollelm:A},h=1,f=0;if(b("#"+j.themodal).html()!=null){b(".ui-jqdialog-title","#"+j.modalhead).html(d.caption);b("#FormError","#"+s).hide();m(c,x);viewModal("#"+j.themodal,{gbox:"#gbox_"+r,jqm:d.jqModal,jqM:false,modal:d.modal});k()}else{b(x.p.colModel).each(function(F){var G=this.formoptions;h=Math.max(h,G?G.colpos||0:0);f=Math.max(f,G?G.rowpos||0:0)});var y=isNaN(d.dataheight)?d.dataheight:d.dataheight+"px";var w,C=b("
      "),l=b("
      ");b(C).append(l);var v=n(c,x,l,h),z=x.p.direction=="rtl"?true:false,E=z?"nData":"pData",g=z?"pData":"nData",t="",u="",D=""+d.bClose+"";if(f>0){var e=[];b.each(b(l)[0].rows,function(F,G){e[F]=G});e.sort(function(G,F){if(G.rp>F.rp){return 1}if(G.rp").append(C).append("
      "+D+"
      ");createModal(j,B,d,"#gview_"+x.p.id,b("#gview_"+x.p.id)[0]);if(z){b("#pData, #nData","#"+s+"_2").css("float","right");b(".EditButton","#"+s+"_2").css("text-align","left")}B=null;b("#"+j.themodal).keydown(function(F){if(F.which===27){if(q){hideModal(this,{gb:d.gbox,jqm:d.jqModal,onClose:d.onClose})}return false}if(d.navkeys[0]===true){if(F.which===d.navkeys[1]){b("#pData","#"+s+"_2").trigger("click");return false}if(F.which===d.navkeys[2]){b("#nData","#"+s+"_2").trigger("click");return false}}});d.closeicon=b.extend([true,"left","ui-icon-close"],d.closeicon);if(d.closeicon[0]==true){b("#cData","#"+s+"_2").addClass(d.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}viewModal("#"+j.themodal,{gbox:"#gbox_"+r,jqm:d.jqModal,modal:d.modal});b(".fm-button:not(.ui-state-disabled)","#"+s+"_2").hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});k();b("#cData","#"+s+"_2").click(function(F){hideModal("#"+j.themodal,{gb:"#gbox_"+r,jqm:d.jqModal,onClose:d.onClose});return false});b("#nData","#"+s+"_2").click(function(F){b("#FormError","#"+s).hide();var G=i();G[0]=parseInt(G[0]);if(G[0]!=-1&&G[1][G[0]+1]){if(b.isFunction(d.onclickPgButtons)){d.onclickPgButtons("next",b("#"+A),G[1][G[0]])}m(G[1][G[0]+1],x);b(x).jqGrid("setSelection",G[1][G[0]+1]);if(b.isFunction(d.afterclickPgButtons)){d.afterclickPgButtons("next",b("#"+A),G[1][G[0]+1])}o(G[0]+1,G[1].length-1)}k();return false});b("#pData","#"+s+"_2").click(function(G){b("#FormError","#"+s).hide();var F=i();if(F[0]!=-1&&F[1][F[0]-1]){if(b.isFunction(d.onclickPgButtons)){d.onclickPgButtons("prev",b("#"+A),F[1][F[0]])}m(F[1][F[0]-1],x);b(x).jqGrid("setSelection",F[1][F[0]-1]);if(b.isFunction(d.afterclickPgButtons)){d.afterclickPgButtons("prev",b("#"+A),F[1][F[0]-1])}o(F[0]-1,F[1].length-1)}k();return false})}function k(){if(d.closeOnEscape===true||d.navkeys[0]===true){setTimeout(function(){b(".ui-jqdialog-titlebar-close","#"+j.modalhead).focus()},0)}}var p=i();o(p[0],p[1].length-1);function o(G,H,F){if(G==0){b("#pData","#"+s+"_2").addClass("ui-state-disabled")}else{b("#pData","#"+s+"_2").removeClass("ui-state-disabled")}if(G==H){b("#nData","#"+s+"_2").addClass("ui-state-disabled")}else{b("#nData","#"+s+"_2").removeClass("ui-state-disabled")}}function i(){var G=b(x).jqGrid("getDataIDs"),F=b("#id_g","#"+s).val(),H=b.inArray(F,G);return[H,G]}function n(L,R,P,X){var H,K,S,aa,F,V=0,Z,ab,Y=[],Q=false,N="  ",O="",I="  ",M=["integer","number","currency"],U=0,T=0,J,G;for(var W=1;W<=X;W++){O+=W==1?N:I}b(R.p.colModel).each(function(ad){if(this.editrules&&this.editrules.edithidden===true){K=false}else{K=this.hidden===true?true:false}if(!K&&this.align==="right"){if(this.formatter&&b.inArray(this.formatter,M)!==-1){U=Math.max(U,parseInt(this.width,10))}else{T=Math.max(T,parseInt(this.width,10))}}});J=U!==0?U:T!==0?T:0;Q=b(R).jqGrid("getInd",L);b(R.p.colModel).each(function(ae){H=this.name;G=false;if(this.editrules&&this.editrules.edithidden===true){K=false}else{K=this.hidden===true?true:false}ab=K?"style='display:none'":"";if(H!=="cb"&&H!=="subgrid"&&H!=="rn"){if(Q===false){Z=""}else{if(H==R.p.ExpandColumn&&R.p.treeGrid===true){Z=b("td:eq("+ae+")",R.rows[Q]).text()}else{Z=b("td:eq("+ae+")",R.rows[Q]).html()}}G=this.align==="right"&&J!==0?true:false;var ad=b.extend({},this.editoptions||{},{id:H,name:H}),ai=b.extend({},{rowabove:false,rowcontent:""},this.formoptions||{}),af=parseInt(ai.rowpos)||V+1,ah=parseInt((parseInt(ai.colpos)||1)*2);if(ai.rowabove){var ag=b(""+ai.rowcontent+"");b(P).append(ag);ag[0].rp=af}S=b(P).find("tr[rowpos="+af+"]");if(S.length==0){S=b("").addClass("FormData").attr("id","trv_"+H);b(S).append(O);b(P).append(S);S[0].rp=af}b("td:eq("+(ah-2)+")",S[0]).html(""+(typeof ai.label==="undefined"?R.p.colNames[ae]:ai.label)+"");b("td:eq("+(ah-1)+")",S[0]).append(""+Z+"").attr("id","v_"+H);if(G){b("td:eq("+(ah-1)+") span",S[0]).css({"text-align":"right",width:J+"px"})}Y[V]=ae;V++}});if(V>0){var ac=b("");ac[0].rp=V+99;b(P).append(ac)}return Y}function m(J,L){var F,M,I=0,H,G,K;K=b(L).jqGrid("getInd",J,true);if(!K){return}b("td",K).each(function(N){F=L.p.colModel[N].name;if(L.p.colModel[N].editrules&&L.p.colModel[N].editrules.edithidden===true){M=false}else{M=L.p.colModel[N].hidden===true?true:false}if(F!=="cb"&&F!=="subgrid"&&F!=="rn"){if(F==L.p.ExpandColumn&&L.p.treeGrid===true){H=b(this).text()}else{H=b(this).html()}G=b.extend({},L.p.colModel[N].editoptions||{});F=b.jgrid.jqID("v_"+F);b("#"+F+" span","#"+s).html(H);if(M){b("#"+F,"#"+s).parents("tr:first").hide()}I++}});if(I>0){b("#id_g","#"+s).val(J)}}})},delGridRow:function(c,d){d=b.extend({top:0,left:0,width:240,height:"auto",dataheight:"auto",modal:false,drag:true,resize:true,url:"",mtype:"POST",reloadAfterSubmit:true,beforeShowForm:null,afterShowForm:null,beforeSubmit:null,onclickSubmit:null,afterSubmit:null,jqModal:true,closeOnEscape:false,delData:{},delicon:[],cancelicon:[],onClose:null,ajaxDelOptions:{},serializeDelData:null},b.jgrid.del,d||{});a=d;return this.each(function(){var l=this;if(!l.grid){return}if(!c){return}var m=typeof d.beforeShowForm==="function"?true:false,g=typeof d.afterShowForm==="function"?true:false,e=l.p.id,f={},j="DelTbl_"+e,h={themodal:"delmod"+e,modalhead:"delhd"+e,modalcontent:"delcnt"+e,scrollelm:j};if(isArray(c)){c=c.join()}if(b("#"+h.themodal).html()!=null){b("#DelData>td","#"+j).text(c);b("#DelError","#"+j).hide();if(d.processing===true){d.processing=false;b("#dData","#"+j).removeClass("ui-state-active")}if(m){d.beforeShowForm(b("#"+j))}viewModal("#"+h.themodal,{gbox:"#gbox_"+e,jqm:d.jqModal,jqM:false,modal:d.modal});if(g){d.afterShowForm(b("#"+j))}}else{var n=isNaN(d.dataheight)?d.dataheight:d.dataheight+"px";var k="
      ";k+="";k+="";k+="";k+='";k+="
      '+d.msg+"
       
      ";var i=""+d.bSubmit+"",o=""+d.bCancel+"";k+="
      "+i+" "+o+"
      ";d.gbox="#gbox_"+e;createModal(h,k,d,"#gview_"+l.p.id,b("#gview_"+l.p.id)[0]);b(".fm-button","#"+j+"_2").hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});d.delicon=b.extend([true,"left","ui-icon-scissors"],d.delicon);d.cancelicon=b.extend([true,"left","ui-icon-cancel"],d.cancelicon);if(d.delicon[0]==true){b("#dData","#"+j+"_2").addClass(d.delicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(d.cancelicon[0]==true){b("#eData","#"+j+"_2").addClass(d.cancelicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}b("#dData","#"+j+"_2").click(function(s){var q=[true,""];f={};var r=b("#DelData>td","#"+j).text();if(typeof d.onclickSubmit==="function"){f=d.onclickSubmit(a)||{}}if(typeof d.beforeSubmit==="function"){q=d.beforeSubmit(r)}if(q[0]){var p=a.url?a.url:b(l).jqGrid("getGridParam","editurl");if(!p){q[0]=false;q[1]+=" "+b.jgrid.errors.nourl}}if(q[0]===false){b("#DelError>td","#"+j).html(q[1]);b("#DelError","#"+j).show()}else{if(!d.processing){d.processing=true;b(this).addClass("ui-state-active");var t=b.extend({oper:"del",id:r},a.delData,f);b.ajax(b.extend({url:p,type:d.mtype,data:b.isFunction(d.serializeDelData)?d.serializeDelData(t):t,complete:function(x,v){if(v!="success"){q[0]=false;if(b.isFunction(a.errorTextFormat)){q[1]=a.errorTextFormat(x)}else{q[1]=v+" Status: '"+x.statusText+"'. Error code: "+x.status}}else{if(typeof a.afterSubmit==="function"){q=a.afterSubmit(x,r)}}if(q[0]===false){b("#DelError>td","#"+j).html(q[1]);b("#DelError","#"+j).show()}else{if(a.reloadAfterSubmit){if(l.p.treeGrid){b(l).jqGrid("setGridParam",{treeANode:0,datatype:l.p.treedatatype})}b(l).trigger("reloadGrid")}else{var u=[];u=r.split(",");if(l.p.treeGrid===true){try{b(l).jqGrid("delTreeNode",u[0])}catch(y){}}else{for(var w=0;wtd","#"+j).html(u+" : "+v);b("#DelError","#"+j).show();d.processing=false;b("#dData","#"+j+"_2").removeClass("ui-state-active")}},b.jgrid.ajaxOptions,d.ajaxDelOptions))}}return false});b("#eData","#"+j+"_2").click(function(p){hideModal("#"+h.themodal,{gb:"#gbox_"+e,jqm:d.jqModal,onClose:a.onClose});return false});if(m){d.beforeShowForm(b("#"+j))}viewModal("#"+h.themodal,{gbox:"#gbox_"+e,jqm:d.jqModal,modal:d.modal});if(g){d.afterShowForm(b("#"+j))}}if(d.closeOnEscape===true){setTimeout(function(){b(".ui-jqdialog-titlebar-close","#"+h.modalhead).focus()},0)}})},navGrid:function(f,h,e,g,d,c,i){h=b.extend({edit:true,editicon:"ui-icon-pencil",add:true,addicon:"ui-icon-plus",del:true,delicon:"ui-icon-trash",search:true,searchicon:"ui-icon-search",refresh:true,refreshicon:"ui-icon-refresh",refreshstate:"firstpage",view:false,viewicon:"ui-icon-document",position:"left",closeOnEscape:true,afterRefresh:null},b.jgrid.nav,h||{});return this.each(function(){var j={themodal:"alertmod",modalhead:"alerthd",modalcontent:"alertcnt"},n=this,m,s,o,k;if(!n.grid){return}if(b("#"+j.themodal).html()==null){if(typeof window.innerWidth!="undefined"){m=window.innerWidth,s=window.innerHeight}else{if(typeof document.documentElement!="undefined"&&typeof document.documentElement.clientWidth!="undefined"&&document.documentElement.clientWidth!=0){m=document.documentElement.clientWidth,s=document.documentElement.clientHeight}else{m=1024;s=768}}createModal(j,"
      "+h.alerttext+"
      ",{gbox:"#gbox_"+n.p.id,jqModal:true,drag:true,resize:true,caption:h.alertcap,top:s/2-25,left:m/2-100,width:200,height:"auto",closeOnEscape:h.closeOnEscape},"","",true)}var p,q=b(""),r="",l=b(n.p.pager).attr("id")||"pager";if(n.p.direction=="rtl"){b(q).attr("dir","rtl").css("float","right")}if(h.add){g=g||{};p=b("");b(p).append("
      "+h.addtext+"
      ");b("tr",q).append(p);b(p,q).attr({title:h.addtitle||"",id:g.id||"add_"+n.p.id}).click(function(){if(typeof h.addfunc=="function"){h.addfunc()}else{b(n).jqGrid("editGridRow","new",g)}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.edit){p=b("");e=e||{};b(p).append("
      "+h.edittext+"
      ");b("tr",q).append(p);b(p,q).attr({title:h.edittitle||"",id:e.id||"edit_"+n.p.id}).click(function(){var t=n.p.selrow;if(t){if(typeof h.editfunc=="function"){h.editfunc(t)}else{b(n).jqGrid("editGridRow",t,e)}}else{viewModal("#"+j.themodal,{gbox:"#gbox_"+n.p.id,jqm:true});b("#jqg_alrt").focus()}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.view){p=b("");i=i||{};b(p).append("
      "+h.viewtext+"
      ");b("tr",q).append(p);b(p,q).attr({title:h.viewtitle||"",id:i.id||"view_"+n.p.id}).click(function(){var t=n.p.selrow;if(t){b(n).jqGrid("viewGridRow",t,i)}else{viewModal("#"+j.themodal,{gbox:"#gbox_"+n.p.id,jqm:true});b("#jqg_alrt").focus()}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.del){p=b("");d=d||{};b(p).append("
      "+h.deltext+"
      ");b("tr",q).append(p);b(p,q).attr({title:h.deltitle||"",id:d.id||"del_"+n.p.id}).click(function(){var t;if(n.p.multiselect){t=n.p.selarrrow;if(t.length==0){t=null}}else{t=n.p.selrow}if(t){b(n).jqGrid("delGridRow",t,d)}else{viewModal("#"+j.themodal,{gbox:"#gbox_"+n.p.id,jqm:true});b("#jqg_alrt").focus()}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.add||h.edit||h.del||h.view){b("tr",q).append(r)}if(h.search){p=b("");c=c||{};b(p).append("
      "+h.searchtext+"
      ");b("tr",q).append(p);b(p,q).attr({title:h.searchtitle||"",id:c.id||"search_"+n.p.id}).click(function(){b(n).jqGrid("searchGrid",c);return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}if(h.refresh){p=b("");b(p).append("
      "+h.refreshtext+"
      ");b("tr",q).append(p);b(p,q).attr({title:h.refreshtitle||"",id:"refresh_"+n.p.id}).click(function(){n.p.search=false;try{var t=n.p.id;b("#fbox_"+t).searchFilter().reset()}catch(u){}switch(h.refreshstate){case"firstpage":b(n).trigger("reloadGrid",[{page:1}]);break;case"current":b(n).trigger("reloadGrid",[{current:true}]);break}if(b.isFunction(h.afterRefresh)){h.afterRefresh()}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")});p=null}k=b(".ui-jqgrid").css("font-size")||"11px";b("body").append("");o=b(q).clone().appendTo("#testpg2").width();b("#testpg2").remove();b("#"+l+"_"+h.position,"#"+l).append(q);if(n.p._nvtd){if(o>n.p._nvtd[0]){b("#"+l+"_"+h.position,"#"+l).width(o);n.p._nvtd[0]=o}n.p._nvtd[1]=o}})},navButtonAdd:function(c,d){d=b.extend({caption:"newButton",title:"",buttonicon:"ui-icon-newwin",onClickButton:null,position:"last",cursor:"pointer"},d||{});return this.each(function(){if(!this.grid){return}if(c.indexOf("#")!=0){c="#"+c}var e=b(".navtable",c)[0],g=this;if(e){var f=b("");b(f).addClass("ui-pg-button ui-corner-all").append("
      "+d.caption+"
      ");if(d.id){b(f).attr("id",d.id)}if(d.position=="first"){if(e.rows[0].cells.length===0){b("tr",e).append(f)}else{b("tr td:eq(0)",e).before(f)}}else{b("tr",e).append(f)}b(f,e).attr("title",d.title||"").click(function(h){if(b.isFunction(d.onClickButton)){d.onClickButton.call(g,h)}return false}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")}).css("cursor",d.cursor?d.cursor:"normal")}})},navSeparatorAdd:function(c,d){d=b.extend({sepclass:"ui-separator",sepcontent:""},d||{});return this.each(function(){if(!this.grid){return}if(c.indexOf("#")!=0){c="#"+c}var f=b(".navtable",c)[0];if(f){var e=""+d.sepcontent+"";b("tr",f).append(e)}})},GridToForm:function(c,d){return this.each(function(){var g=this;if(!g.grid){return}var f=b(g).jqGrid("getRowData",c);if(f){for(var e in f){if(b("[name="+e+"]",d).is("input:radio")||b("[name="+e+"]",d).is("input:checkbox")){b("[name="+e+"]",d).each(function(){if(b(this).val()==f[e]){b(this).attr("checked","checked")}else{b(this).attr("checked","")}})}else{b("[name="+e+"]",d).val(f[e])}}}})},FormToGrid:function(d,e,f,c){return this.each(function(){var i=this;if(!i.grid){return}if(!f){f="set"}if(!c){c="first"}var g=b(e).serializeArray();var h={};b.each(g,function(j,k){h[k.name]=k.value});if(f=="add"){b(i).jqGrid("addRowData",d,h,c)}else{if(f=="set"){b(i).jqGrid("setRowData",d,h)}}})}})})(jQuery);jQuery.fn.searchFilter=function(a,c){function b(j,p,g){this.$=j;this.add=function(z){if(z==null){j.find(".ui-add-last").click()}else{j.find(".sf:eq("+z+") .ui-add").click()}return this};this.del=function(z){if(z==null){j.find(".sf:last .ui-del").click()}else{j.find(".sf:eq("+z+") .ui-del").click()}return this};this.search=function(z){j.find(".ui-search").click();return this};this.reset=function(z){j.find(".ui-reset").click();return this};this.close=function(){j.find(".ui-closer").click();return this};if(p!=null){function v(){jQuery(this).toggleClass("ui-state-hover");return false}function i(z){jQuery(this).toggleClass("ui-state-active",(z.type=="mousedown"));return false}function e(z,A){return""}function s(B,z,A){return""}function w(z,B){var A=j.find("tr.sf td.data "+z);if(A[0]!=null){B(A)}}function q(z,B){var A=j.find("tr.sf td.data "+z);if(A[0]!=null){jQuery.each(B,function(){if(this.data!=null){A.bind(this.type,this.data,this.fn)}else{A.bind(this.type,this.fn)}})}}var n=jQuery.extend({},jQuery.fn.searchFilter.defaults,g);var y=-1;var x="";jQuery.each(n.groupOps,function(){x+=e(this.op,this.text)});x="";j.html("").addClass("ui-searchFilter").append("
       
      "+n.windowTitle+"
       
      "+n.resetText+""+n.searchText+""+n.matchText+" "+x+" "+n.rulesText+" 
      ");var k=j.find("tr.sf");var h=k.find("td.fields");var f=k.find("td.ops");var o=k.find("td.data");var r="";jQuery.each(n.operators,function(){r+=e(this.op,this.text)});r=s("default",r,true);f.append(r);var l="";o.append(l);var u="";var t=false;var d=false;jQuery.each(p,function(C){var B=C;u+=e(this.itemval,this.text);if(this.ops!=null){t=true;var z="";jQuery.each(this.ops,function(){z+=e(this.op,this.text)});z=s("field"+B,z,true);f.append(z)}if(this.dataUrl!=null){if(C>y){y=C}d=true;var F=this.dataEvents;var D=this.dataInit;var A=this.buildSelect;jQuery.ajax(jQuery.extend({url:this.dataUrl,complete:function(H){var G;if(A!=null){G=jQuery("
      ").append(A(H))}else{G=jQuery("
      ").append(H.responseText)}G.find("select").addClass("field"+B).hide();o.append(G.html());if(D){w(".field"+C,D)}if(F){q(".field"+C,F)}if(C==y){j.find("tr.sf td.fields select[name='field']").change()}}},n.ajaxSelectOptions))}else{if(this.dataValues!=null){d=true;var E="";jQuery.each(this.dataValues,function(){E+=e(this.value,this.text)});E=s("field"+B,E,true);o.append(E)}else{if(this.dataEvents!=null||this.dataInit!=null){d=true;var E="";o.append(E)}}}if(this.dataInit!=null&&C!=y){w(".field"+C,this.dataInit)}if(this.dataEvents!=null&&C!=y){q(".field"+C,this.dataEvents)}});u="";h.append(u);var m=h.find("select[name='field']");if(t){m.change(function(B){var A=B.target.selectedIndex;var C=jQuery(B.target).parents("tr.sf").find("td.ops");C.find("select").removeAttr("name").hide();var z=C.find(".field"+A);if(z[0]==null){z=C.find(".default")}z.attr("name","op").show()})}else{f.find(".default").attr("name","op").show()}if(d){m.change(function(B){var A=B.target.selectedIndex;var C=jQuery(B.target).parents("tr.sf").find("td.data");C.find("select,input").removeClass("vdata").hide();var z=C.find(".field"+A);if(z[0]==null){z=C.find(".default")}z.show().addClass("vdata")})}else{o.find(".default").show().addClass("vdata")}if(t||d){m.change()}j.find(".ui-state-default").hover(v,v).mousedown(i).mouseup(i);j.find(".ui-closer").click(function(z){n.onClose(jQuery(j.selector));return false});j.find(".ui-del").click(function(z){var A=jQuery(z.target).parents(".sf");if(A.siblings(".sf").length>0){if(n.datepickerFix===true&&jQuery.fn.datepicker!==undefined){A.find(".hasDatepicker").datepicker("destroy")}A.remove()}else{A.find("select[name='field']")[0].selectedIndex=0;A.find("select[name='op']")[0].selectedIndex=0;A.find(".data input").val("");A.find(".data select").each(function(){this.selectedIndex=0});A.find("select[name='field']").change()}return false});j.find(".ui-add").click(function(C){var D=jQuery(C.target).parents(".sf");var B=D.clone(true).insertAfter(D);B.find(".ui-state-default").removeClass("ui-state-hover ui-state-active");if(n.clone){B.find("select[name='field']")[0].selectedIndex=D.find("select[name='field']")[0].selectedIndex;var A=(B.find("select[name='op']")[0]==null);if(!A){B.find("select[name='op']").focus()[0].selectedIndex=D.find("select[name='op']")[0].selectedIndex}var z=B.find("select.vdata");if(z[0]!=null){z[0].selectedIndex=D.find("select.vdata")[0].selectedIndex}}else{B.find(".data input").val("");B.find("select[name='field']").focus()}if(n.datepickerFix===true&&jQuery.fn.datepicker!==undefined){D.find(".hasDatepicker").each(function(){var E=jQuery.data(this,"datepicker").settings;B.find("#"+this.id).unbind().removeAttr("id").removeClass("hasDatepicker").datepicker(E)})}B.find("select[name='field']").change();return false});j.find(".ui-search").click(function(C){var B=jQuery(j.selector);var z;var A=B.find("select[name='groupOp'] :selected").val();if(!n.stringResult){z={groupOp:A,rules:[]}}else{z='{"groupOp":"'+A+'","rules":['}B.find(".sf").each(function(D){var G=jQuery(this).find("select[name='field'] :selected").val();var F=jQuery(this).find("select[name='op'] :selected").val();var E=jQuery(this).find("input.vdata,select.vdata :selected").val();if(!n.stringResult){z.rules.push({field:G,op:F,data:E})}else{if(D>0){z+=","}z+='{"field":"'+G+'",';z+='"op":"'+F+'",';z+='"data":"'+E+'"}'}});if(n.stringResult){z+="]}"}n.onSearch(z);return false});j.find(".ui-reset").click(function(A){var z=jQuery(j.selector);z.find(".ui-del").click();z.find("select[name='groupOp']")[0].selectedIndex=0;n.onReset();return false});j.find(".ui-add-last").click(function(){var A=jQuery(j.selector+" .sf:last");var z=A.clone(true).insertAfter(A);z.find(".ui-state-default").removeClass("ui-state-hover ui-state-active");z.find(".data input").val("");z.find("select[name='field']").focus();if(n.datepickerFix===true&&jQuery.fn.datepicker!==undefined){A.find(".hasDatepicker").each(function(){var B=jQuery.data(this,"datepicker").settings;z.find("#"+this.id).unbind().removeAttr("id").removeClass("hasDatepicker").datepicker(B)})}z.find("select[name='field']").change();return false})}}return new b(this,a,c)};jQuery.fn.searchFilter.version="1.2.9";jQuery.fn.searchFilter.defaults={clone:true,datepickerFix:true,onReset:function(a){alert("Reset Clicked. Data Returned: "+a)},onSearch:function(a){alert("Search Clicked. Data Returned: "+a)},onClose:function(a){a.hide()},groupOps:[{op:"AND",text:"all"},{op:"OR",text:"any"}],operators:[{op:"eq",text:"is equal to"},{op:"ne",text:"is not equal to"},{op:"lt",text:"is less than"},{op:"le",text:"is less or equal to"},{op:"gt",text:"is greater than"},{op:"ge",text:"is greater or equal to"},{op:"in",text:"is in"},{op:"ni",text:"is not in"},{op:"bw",text:"begins with"},{op:"bn",text:"does not begin with"},{op:"ew",text:"ends with"},{op:"en",text:"does not end with"},{op:"cn",text:"contains"},{op:"nc",text:"does not contain"}],matchText:"match",rulesText:"rules",resetText:"Reset",searchText:"Search",stringResult:true,windowTitle:"Search Rules",ajaxSelectOptions:{}};(function(a){a.jgrid.extend({editRow:function(c,i,h,j,b,e,d,f,g){return this.each(function(){var n=this,s,o,l,m=0,r=null,q={},k,p;if(!n.grid){return}k=a(n).jqGrid("getInd",c,true);if(k==false){return}l=a(k).attr("editable")||"0";if(l=="0"&&!a(k).hasClass("not-editable-row")){p=n.p.colModel;a("td",k).each(function(w){s=p[w].name;var v=n.p.treeGrid===true&&s==n.p.ExpandColumn;if(v){o=a("span:first",this).html()}else{try{o=a.unformat(this,{colModel:p[w]},w)}catch(t){o=a(this).html()}}if(s!="cb"&&s!="subgrid"&&s!="rn"){q[s]=o;if(p[w].editable===true){if(r===null){r=w}if(v){a("span:first",this).html("")}else{a(this).html("")}var u=a.extend({},p[w].editoptions||{},{id:c+"_"+s,name:s});if(!p[w].edittype){p[w].edittype="text"}var x=createEl(p[w].edittype,u,o,true,a.extend({},a.jgrid.ajaxOptions,n.p.ajaxSelectOptions||{}));a(x).addClass("editable");if(v){a("span:first",this).append(x)}else{a(this).append(x)}if(p[w].edittype=="select"&&p[w].editoptions.multiple===true&&a.browser.msie){a(x).width(a(x).width())}m++}}});if(m>0){q.id=c;n.p.savedRow.push(q);a(k).attr("editable","1");a("td:eq("+r+") input",k).focus();if(i===true){a(k).bind("keydown",function(t){if(t.keyCode===27){a(n).jqGrid("restoreRow",c,g)}if(t.keyCode===13){a(n).jqGrid("saveRow",c,j,b,e,d,f,g);return false}t.stopPropagation()})}if(a.isFunction(h)){h(c)}}}})},saveRow:function(h,g,e,f,d,c,b){return this.each(function(){var o=this,u,p={},l={},j,r,q,i;if(!o.grid){return}i=a(o).jqGrid("getInd",h,true);if(i==false){return}j=a(i).attr("editable");e=e?e:o.p.editurl;if(j==="1"&&e){var t;a("td",i).each(function(v){t=o.p.colModel[v];u=t.name;if(u!="cb"&&u!="subgrid"&&t.editable===true&&u!="rn"){switch(t.edittype){case"checkbox":var k=["Yes","No"];if(t.editoptions){k=t.editoptions.value.split(":")}p[u]=a("input",this).attr("checked")?k[0]:k[1];break;case"text":case"password":case"textarea":case"button":p[u]=!o.p.autoencode?a("input, textarea",this).val():a.jgrid.htmlEncode(a("input, textarea",this).val());break;case"select":if(!t.editoptions.multiple){p[u]=a("select>option:selected",this).val();l[u]=a("select>option:selected",this).text()}else{var w=a("select",this),y=[];p[u]=a(w).val();if(p[u]){p[u]=p[u].join(",")}else{p[u]=""}a("select > option:selected",this).each(function(z,A){y[z]=a(A).text()});l[u]=y.join(",")}if(t.formatter&&t.formatter=="select"){l={}}break;case"custom":try{if(t.editoptions&&a.isFunction(t.editoptions.custom_value)){p[u]=t.editoptions.custom_value(a(".customelement",this),"get");if(p[u]===undefined){throw"e2"}}else{throw"e1"}}catch(x){if(x=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose)}if(x=="e2"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,x.message,jQuery.jgrid.edit.bClose)}}break}q=checkValues(p[u],v,o);if(q[0]===false){q[1]=p[u]+" "+q[1];return false}}});if(q[0]===false){try{info_dialog(a.jgrid.errors.errcap,q[1],a.jgrid.edit.bClose)}catch(s){alert(q[1])}return}if(p){p.id=h;if(f){p=a.extend({},p,f)}}if(!o.grid.hDiv.loading){o.grid.hDiv.loading=true;a("div.loading",o.grid.hDiv).fadeIn("fast");if(e=="clientArray"){p=a.extend({},p,l);var n=a(o).jqGrid("setRowData",h,p);a(i).attr("editable","0");for(var m=0;m=0){o.p.savedRow.splice(r,1)}if(a.isFunction(d)){d(h,n)}}else{a.ajax(a.extend({url:e,data:a.isFunction(o.p.serializeRowData)?o.p.serializeRowData(p):p,type:"POST",complete:function(x,y){if(y==="success"){var w;if(a.isFunction(g)){w=g(x)}else{w=true}if(w===true){p=a.extend({},p,l);a(o).jqGrid("setRowData",h,p);a(i).attr("editable","0");for(var v=0;v=0){o.p.savedRow.splice(r,1)}if(a.isFunction(d)){d(h,x)}}else{a(o).jqGrid("restoreRow",h,b)}}},error:function(k,v){if(a.isFunction(c)){c(h,k,v)}else{alert("Error Row: "+h+" Result: "+k.status+":"+k.statusText+" Status: "+v)}}},a.jgrid.ajaxOptions,o.p.ajaxRowOptions||{}))}o.grid.hDiv.loading=false;a("div.loading",o.grid.hDiv).fadeOut("fast");a(i).unbind("keydown")}}})},restoreRow:function(c,b){return this.each(function(){var i=this,d,g;if(!i.grid){return}g=a(i).jqGrid("getInd",c,true);if(g==false){return}for(var f=0;f=0){if(a.isFunction(a.fn.datepicker)){try{a("input.hasDatepicker","#"+g.id).datepicker("hide")}catch(h){}}a(i).jqGrid("setRowData",c,i.p.savedRow[d]);a(g).attr("editable","0").unbind("keydown");i.p.savedRow.splice(d,1)}if(a.isFunction(b)){b(c)}})}})})(jQuery);(function(a){a.jgrid.extend({editCell:function(d,c,b){return this.each(function(){var j=this,m,k,g;if(!j.grid||j.p.cellEdit!==true){return}c=parseInt(c,10);j.p.selrow=j.rows[d].id;if(!j.p.knv){a(j).jqGrid("GridNav")}if(j.p.savedRow.length>0){if(b===true){if(d==j.p.iRow&&c==j.p.iCol){return}}var h=a("td:eq("+j.p.savedRow[0].ic+")>#"+j.p.savedRow[0].id+"_"+a.jgrid.jqID(j.p.savedRow[0].name),j.rows[j.p.savedRow[0].id]).val();if(j.p.savedRow[0].v!=h){a(j).jqGrid("saveCell",j.p.savedRow[0].id,j.p.savedRow[0].ic)}else{a(j).jqGrid("restoreCell",j.p.savedRow[0].id,j.p.savedRow[0].ic)}}else{window.setTimeout(function(){a("#"+j.p.knv).attr("tabindex","-1").focus()},0)}m=j.p.colModel[c].name;if(m=="subgrid"||m=="cb"||m=="rn"){return}g=a("td:eq("+c+")",j.rows[d]);if(j.p.colModel[c].editable===true&&b===true&&!g.hasClass("not-editable-cell")){if(parseInt(j.p.iCol)>=0&&parseInt(j.p.iRow)>=0){a("td:eq("+j.p.iCol+")",j.rows[j.p.iRow]).removeClass("edit-cell ui-state-highlight");a(j.rows[j.p.iRow]).removeClass("selected-row ui-state-hover")}a(g).addClass("edit-cell ui-state-highlight");a(j.rows[d]).addClass("selected-row ui-state-hover");try{k=a.unformat(g,{colModel:j.p.colModel[c]},c)}catch(l){k=a(g).html()}if(!j.p.colModel[c].edittype){j.p.colModel[c].edittype="text"}j.p.savedRow.push({id:d,ic:c,name:m,v:k});if(a.isFunction(j.p.formatCell)){var i=j.p.formatCell(j.rows[d].id,m,k,d,c);if(i!=undefined){k=i}}var f=a.extend({},j.p.colModel[c].editoptions||{},{id:d+"_"+m,name:m});var e=createEl(j.p.colModel[c].edittype,f,k,true,a.extend({},a.jgrid.ajaxOptions,j.p.ajaxSelectOptions||{}));if(a.isFunction(j.p.beforeEditCell)){j.p.beforeEditCell(j.rows[d].id,m,k,d,c)}a(g).html("").append(e).attr("tabindex","0");window.setTimeout(function(){a(e).focus()},0);a("input, select, textarea",g).bind("keydown",function(n){if(n.keyCode===27){if(a("input.hasDatepicker",g).length>0){if(a(".ui-datepicker").is(":hidden")){a(j).jqGrid("restoreCell",d,c)}else{a("input.hasDatepicker",g).datepicker("hide")}}else{a(j).jqGrid("restoreCell",d,c)}}if(n.keyCode===13){a(j).jqGrid("saveCell",d,c)}if(n.keyCode==9){if(n.shiftKey){a(j).jqGrid("prevCell",d,c)}else{a(j).jqGrid("nextCell",d,c)}}n.stopPropagation()});if(a.isFunction(j.p.afterEditCell)){j.p.afterEditCell(j.rows[d].id,m,k,d,c)}}else{if(parseInt(j.p.iCol)>=0&&parseInt(j.p.iRow)>=0){a("td:eq("+j.p.iCol+")",j.rows[j.p.iRow]).removeClass("edit-cell ui-state-highlight");a(j.rows[j.p.iRow]).removeClass("selected-row ui-state-hover")}g.addClass("edit-cell ui-state-highlight");a(j.rows[d]).addClass("selected-row ui-state-hover");if(a.isFunction(j.p.onSelectCell)){k=g.html().replace(/\ \;/ig,"");j.p.onSelectCell(j.rows[d].id,m,k,d,c)}}j.p.iCol=c;j.p.iRow=d})},saveCell:function(c,b){return this.each(function(){var k=this,m;if(!k.grid||k.p.cellEdit!==true){return}if(k.p.savedRow.length>=1){m=0}else{m=null}if(m!=null){var h=a("td:eq("+b+")",k.rows[c]),s,p,r=k.p.colModel[b],t=r.name,g=a.jgrid.jqID(t);switch(r.edittype){case"select":if(!r.editoptions.multiple){s=a("#"+c+"_"+g+">option:selected",k.rows[c]).val();p=a("#"+c+"_"+g+">option:selected",k.rows[c]).text()}else{var d=a("#"+c+"_"+g,k.rows[c]),f=[];s=a(d).val();if(s){s.join(",")}else{s=""}a("option:selected",d).each(function(e,u){f[e]=a(u).text()});p=f.join(",")}if(r.formatter){p=s}break;case"checkbox":var i=["Yes","No"];if(r.editoptions){i=r.editoptions.value.split(":")}s=a("#"+c+"_"+g,k.rows[c]).attr("checked")?i[0]:i[1];p=s;break;case"password":case"text":case"textarea":case"button":s=!k.p.autoencode?a("#"+c+"_"+g,k.rows[c]).val():a.jgrid.htmlEncode(a("#"+c+"_"+g,k.rows[c]).val());p=s;break;case"custom":try{if(r.editoptions&&a.isFunction(r.editoptions.custom_value)){s=r.editoptions.custom_value(a(".customelement",h),"get");if(s===undefined){throw"e2"}else{p=s}}else{throw"e1"}}catch(n){if(n=="e1"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.nodefined,jQuery.jgrid.edit.bClose)}if(n=="e2"){info_dialog(jQuery.jgrid.errors.errcap,"function 'custom_value' "+a.jgrid.edit.msg.novalue,jQuery.jgrid.edit.bClose)}else{info_dialog(jQuery.jgrid.errors.errcap,n.message,jQuery.jgrid.edit.bClose)}}break}if(p!=k.p.savedRow[m].v){if(a.isFunction(k.p.beforeSaveCell)){var q=k.p.beforeSaveCell(k.rows[c].id,t,s,c,b);if(q){s=q}}var j=checkValues(s,b,k);if(j[0]===true){var l={};if(a.isFunction(k.p.beforeSubmitCell)){l=k.p.beforeSubmitCell(k.rows[c].id,t,s,c,b);if(!l){l={}}}if(p==""){p=" "}if(a("input.hasDatepicker",h).length>0){a("input.hasDatepicker",h).datepicker("hide")}if(k.p.cellsubmit=="remote"){if(k.p.cellurl){var o={};o[t]=s;o.id=k.rows[c].id;o=a.extend(l,o);a.ajax(a.extend({url:k.p.cellurl,data:a.isFunction(k.p.serializeCellData)?k.p.serializeCellData(o):o,type:"POST",complete:function(e,v){if(v=="success"){if(a.isFunction(k.p.afterSubmitCell)){var u=k.p.afterSubmitCell(e,o.id,t,s,c,b);if(u[0]===true){a(h).empty();a(k).jqGrid("setCell",k.rows[c].id,b,p);a(h).addClass("dirty-cell");a(k.rows[c]).addClass("edited");if(a.isFunction(k.p.afterSaveCell)){k.p.afterSaveCell(k.rows[c].id,t,s,c,b)}k.p.savedRow.splice(0,1)}else{info_dialog(a.jgrid.errors.errcap,u[1],a.jgrid.edit.bClose);a(k).jqGrid("restoreCell",c,b)}}else{a(h).empty();a(k).jqGrid("setCell",k.rows[c].id,b,p);a(h).addClass("dirty-cell");a(k.rows[c]).addClass("edited");if(a.isFunction(k.p.afterSaveCell)){k.p.afterSaveCell(k.rows[c].id,t,s,c,b)}k.p.savedRow.splice(0,1)}}},error:function(e,u){if(a.isFunction(k.p.errorCell)){k.p.errorCell(e,u);a(k).jqGrid("restoreCell",c,b)}else{info_dialog(a.jgrid.errors.errcap,e.status+" : "+e.statusText+"
      "+u,a.jgrid.edit.bClose);a(k).jqGrid("restoreCell",c,b)}}},a.jgrid.ajaxOptions,k.p.ajaxCellOptions||{}))}else{try{info_dialog(a.jgrid.errors.errcap,a.jgrid.errors.nourl,a.jgrid.edit.bClose);a(k).jqGrid("restoreCell",c,b)}catch(n){}}}if(k.p.cellsubmit=="clientArray"){a(h).empty();a(k).jqGrid("setCell",k.rows[c].id,b,p);a(h).addClass("dirty-cell");a(k.rows[c]).addClass("edited");if(a.isFunction(k.p.afterSaveCell)){k.p.afterSaveCell(k.rows[c].id,t,s,c,b)}k.p.savedRow.splice(0,1)}}else{try{window.setTimeout(function(){info_dialog(a.jgrid.errors.errcap,s+" "+j[1],a.jgrid.edit.bClose)},100);a(k).jqGrid("restoreCell",c,b)}catch(n){}}}else{a(k).jqGrid("restoreCell",c,b)}}if(a.browser.opera){a("#"+k.p.knv).attr("tabindex","-1").focus()}else{window.setTimeout(function(){a("#"+k.p.knv).attr("tabindex","-1").focus()},0)}})},restoreCell:function(c,b){return this.each(function(){var h=this,d;if(!h.grid||h.p.cellEdit!==true){return}if(h.p.savedRow.length>=1){d=0}else{d=null}if(d!=null){var g=a("td:eq("+b+")",h.rows[c]);if(a.isFunction(a.fn.datepicker)){try{a("input.hasDatepicker",g).datepicker("hide")}catch(f){}}a(g).empty().attr("tabindex","-1");a(h).jqGrid("setCell",h.rows[c].id,b,h.p.savedRow[d].v);h.p.savedRow.splice(0,1)}window.setTimeout(function(){a("#"+h.p.knv).attr("tabindex","-1").focus()},0)})},nextCell:function(c,b){return this.each(function(){var f=this,e=false;if(!f.grid||f.p.cellEdit!==true){return}for(var d=b+1;d0){a(f).jqGrid("saveCell",c,b)}}})},prevCell:function(c,b){return this.each(function(){var f=this,e=false;if(!f.grid||f.p.cellEdit!==true){return}for(var d=b-1;d>=0;d--){if(f.p.colModel[d].editable===true){e=d;break}}if(e!==false){a(f).jqGrid("editCell",c,e,true)}else{if(f.p.savedRow.length>0){a(f).jqGrid("saveCell",c,b)}}})},GridNav:function(){return this.each(function(){var g=this;if(!g.grid||g.p.cellEdit!==true){return}g.p.knv=g.p.id+"_kn";var f=a(""),d,c;a(f).insertBefore(g.grid.cDiv);a("#"+g.p.knv).focus().keydown(function(h){c=h.keyCode;if(g.p.direction=="rtl"){if(c==37){c=39}else{if(c==39){c=37}}}switch(c){case 38:if(g.p.iRow-1>=0){e(g.p.iRow-1,g.p.iCol,"vu");a(g).jqGrid("editCell",g.p.iRow-1,g.p.iCol,false)}break;case 40:if(g.p.iRow+1<=g.rows.length-1){e(g.p.iRow+1,g.p.iCol,"vd");a(g).jqGrid("editCell",g.p.iRow+1,g.p.iCol,false)}break;case 37:if(g.p.iCol-1>=0){d=b(g.p.iCol-1,"lft");e(g.p.iRow,d,"h");a(g).jqGrid("editCell",g.p.iRow,d,false)}break;case 39:if(g.p.iCol+1<=g.p.colModel.length-1){d=b(g.p.iCol+1,"rgt");e(g.p.iRow,d,"h");a(g).jqGrid("editCell",g.p.iRow,d,false)}break;case 13:if(parseInt(g.p.iCol,10)>=0&&parseInt(g.p.iRow,10)>=0){a(g).jqGrid("editCell",g.p.iRow,g.p.iCol,true)}break}return false});function e(p,n,o){if(o.substr(0,1)=="v"){var h=a(g.grid.bDiv)[0].clientHeight,q=a(g.grid.bDiv)[0].scrollTop,r=g.rows[p].offsetTop+g.rows[p].clientHeight,l=g.rows[p].offsetTop;if(o=="vd"){if(r>=h){a(g.grid.bDiv)[0].scrollTop=a(g.grid.bDiv)[0].scrollTop+g.rows[p].clientHeight}}if(o=="vu"){if(l=k+parseInt(j)){a(g.grid.bDiv)[0].scrollLeft=a(g.grid.bDiv)[0].scrollLeft+g.rows[p].cells[n].clientWidth}else{if(m=0;j--){if(g.p.colModel[j].hidden!==true){k=j;break}}}if(h=="rgt"){k=l-1;for(j=l;j0)?v:3000;var f=d("
      ").css({height:"100%",width:"100%",position:"fixed",left:0,top:0,"z-index":v-1,opacity:q.overlay/100});if(p.a){return l}p.t=A;p.a=true;p.w.css("z-index",v);if(q.modal){if(!a[0]){setTimeout(function(){i("bind")},1)}a.push(B)}else{if(q.overlay>0){if(q.closeoverlay){p.w.jqmAddClose(f)}}else{f=l}}p.o=(f)?f.addClass(q.overlayClass).prependTo("body"):l;if(c){d("html,body").css({height:"100%",width:"100%"});if(f){f=f.css({position:"absolute"})[0];for(var w in {Top:1,Left:1}){f.style.setExpression(w.toLowerCase(),"(_=(document.documentElement.scroll"+w+" || document.body.scroll"+w+"))+'px'")}}}if(q.ajax){var e=q.target||p.w,x=q.ajax;e=(typeof e=="string")?d(e,p.w):d(e);x=(x.substr(0,1)=="@")?d(A).attr(x.substring(1)):x;e.html(q.ajaxText).load(x,function(){if(q.onLoad){q.onLoad.call(this,p)}if(m){p.w.jqmAddClose(d(m,p.w))}h(p)})}else{if(m){p.w.jqmAddClose(d(m,p.w))}}if(q.toTop&&p.o){p.w.before('').insertAfter(p.o)}(q.onShow)?q.onShow(p):p.w.show();h(p);return l},close:function(f){var e=k[f];if(!e.a){return l}e.a=l;if(a[0]){a.pop();if(!a[0]){i("unbind")}}if(e.c.toTop&&e.o){d("#jqmP"+e.w[0]._jqm).after(e.w).remove()}if(e.c.onHide){e.c.onHide(e)}else{e.w.hide();if(e.o){e.o.remove()}}return l},params:{}};var n=0,k=d.jqm.hash,a=[],c=d.browser.msie&&(d.browser.version=="6.0"),l=false,h=function(f){var e=d('').css({opacity:0});if(c){if(f.o){f.o.html('

      ').prepend(e)}else{if(!d("iframe.jqm",f.w)[0]){f.w.prepend(e)}}}g(f)},g=function(f){try{d(":input:visible",f.w)[0].focus()}catch(e){}},i=function(e){d()[e]("keypress",b)[e]("keydown",b)[e]("mousedown",b)},b=function(o){var f=k[a[a.length-1]],m=(!d(o.target).parents(".jqmID"+f.s)[0]);if(m){g(f)}return !m},j=function(e,f,m){return e.each(function(){var o=this._jqm;d(f).each(function(){if(!this[m]){this[m]=[];d(this).click(function(){for(var p in {jqmShow:1,jqmHide:1}){for(var q in this[p]){if(k[this[p][q]]){k[this[p][q]].w[p](this)}}}return l})}this[m].push(o)})})}})(jQuery);(function(g){g.fn.jqDrag=function(f){return c(this,f,"d")};g.fn.jqResize=function(i,f){return c(this,i,"r",f)};g.jqDnR={dnr:{},e:0,drag:function(f){if(h.k=="d"){e.css({left:h.X+f.pageX-h.pX,top:h.Y+f.pageY-h.pY})}else{e.css({width:Math.max(f.pageX-h.pX+h.W,0),height:Math.max(f.pageY-h.pY+h.H,0)});if(M1){a.css({width:Math.max(f.pageX-M1.pX+M1.W,0),height:Math.max(f.pageY-M1.pY+M1.H,0)})}}return false},stop:function(){g().unbind("mousemove",b.drag).unbind("mouseup",b.stop)}};var b=g.jqDnR,h=b.dnr,e=b.e,a,c=function(l,j,i,f){return l.each(function(){j=(j)?g(j,l):l;j.bind("mousedown",{e:l,k:i},function(k){var o=k.data,n={};e=o.e;a=f?g(f):false;if(e.css("position")!="relative"){try{e.position(n)}catch(m){}}h={X:n.left||d("left")||0,Y:n.top||d("top")||0,W:d("width")||e[0].scrollWidth||0,H:d("height")||e[0].scrollHeight||0,pX:k.pageX,pY:k.pageY,k:o.k};if(a&&o.k!="d"){M1={X:n.left||f1("left")||0,Y:n.top||f1("top")||0,W:a[0].offsetWidth||f1("width")||0,H:a[0].offsetHeight||f1("height")||0,pX:k.pageX,pY:k.pageY,k:o.k}}else{M1=false}g().mousemove(g.jqDnR.drag).mouseup(g.jqDnR.stop);return false})})},d=function(f){return parseInt(e.css(f))||false};f1=function(f){return parseInt(a.css(f))||false}})(jQuery);(function(a){a.jgrid.extend({setSubGrid:function(){return this.each(function(){var c=this,b;c.p.colNames.unshift("");c.p.colModel.unshift({name:"subgrid",width:a.browser.safari?c.p.subGridWidth+c.p.cellLayout:c.p.subGridWidth,sortable:false,resizable:false,hidedlg:true,search:false,fixed:true});b=c.p.subGridModel;if(b[0]){b[0].align=a.extend([],b[0].align||[]);for(i=0;i"}else{return""}},addSubGrid:function(b,c){return this.each(function(){var m=this;if(!m.grid){return}var n,o,p,j,k,g,h;a("td:eq("+c+")",b).click(function(q){if(a(this).hasClass("sgcollapsed")){p=m.p.id;n=a(this).parent();j=c>=1?" ":"";o=a(n).attr("id");h=true;if(a.isFunction(m.p.subGridBeforeExpand)){h=m.p.subGridBeforeExpand(p+"_"+o,o)}if(h===false){return false}k=0;a.each(m.p.colModel,function(s,r){if(this.hidden===true||this.name=="rn"||this.name=="cb"){k++}});g=""+j+"

      ";a(this).parent().after(g+"
      ");if(a.isFunction(m.p.subGridRowExpanded)){m.p.subGridRowExpanded(p+"_"+o,o)}else{l(n)}a(this).html("").removeClass("sgcollapsed").addClass("sgexpanded")}else{if(a(this).hasClass("sgexpanded")){h=true;if(a.isFunction(m.p.subGridRowColapsed)){n=a(this).parent();o=a(n).attr("id");h=m.p.subGridRowColapsed(p+"_"+o,o)}if(h===false){return false}a(this).parent().next().remove(".ui-subgrid");a(this).html("").removeClass("sgexpanded").addClass("sgcollapsed")}}return false});var l=function(u){var t,q,v,s,r;q=a(u).attr("id");v={id:q,nd_:(new Date().getTime())};if(!m.p.subGridModel[0]){return false}if(m.p.subGridModel[0].params){for(r=0;r").html(q);a(r).append(s)};var d=function(v,t){var x,u,w,q,s=a("
      "),r=a("");for(u=0;u");a(x).html(m.p.subGridModel[0].name[u]);a(x).width(m.p.subGridModel[0].width[u]);a(r).append(x)}a(s).append(r);if(v){q=m.p.xmlReader.subgrid;a(q.root+" "+q.row,v).each(function(){r=a("");if(q.repeatitems===true){a(q.cell,this).each(function(A){e(r,a(this).text()||" ",A)})}else{var z=m.p.subGridModel[0].mapping||m.p.subGridModel[0].name;if(z){for(u=0;u"),r=a("");for(v=0;v");a(z).html(m.p.subGridModel[0].name[v]);a(z).width(m.p.subGridModel[0].width[v]);a(r).append(z)}a(s).append(r);if(x){q=m.p.jsonReader.subgrid;B=x[q.root];if(typeof B!=="undefined"){for(v=0;v");if(q.repeatitems===true){if(q.cell){y=y[q.cell]}for(var t=0;t";d+="
      ";if(parseInt(b[e],10)!==parseInt(g.p.tree_root_level,10)){if(!a(g).jqGrid("isVisibleNode",c)){a(c).css("display","none")}}a("td:eq("+j+")",c).wrapInner("").prepend(d);a(".treeclick",c).bind("click",function(o){var n=o.target||o.srcElement;var m=a(n,g.rows).parents("tr.jqgrow")[0].rowIndex;if(!g.rows[m].isLeaf){if(g.rows[m].expanded){a(g).jqGrid("collapseRow",g.rows[m]);a(g).jqGrid("collapseNode",g.rows[m])}else{a(g).jqGrid("expandRow",g.rows[m]);a(g).jqGrid("expandNode",g.rows[m])}}return false});if(g.p.ExpandColClick===true){a("span",c).css("cursor","pointer").bind("click",function(o){var n=o.target||o.srcElement;var m=a(n,g.rows).parents("tr.jqgrow")[0].rowIndex;if(!g.rows[m].isLeaf){if(g.rows[m].expanded){a(g).jqGrid("collapseRow",g.rows[m]);a(g).jqGrid("collapseNode",g.rows[m])}else{a(g).jqGrid("expandRow",g.rows[m]);a(g).jqGrid("expandNode",g.rows[m])}}a(g).jqGrid("setSelection",g.rows[m].id);return false})}})},setTreeGrid:function(){return this.each(function(){var e=this,d=0,b;if(!e.p.treeGrid){return}if(!e.p.treedatatype){a.extend(e.p,{treedatatype:e.p.datatype})}e.p.subGrid=false;e.p.altRows=false;e.p.pgbuttons=false;e.p.pginput=false;e.p.multiselect=false;e.p.rowList=[];b="ui-icon-triangle-1-"+(e.p.direction=="rtl"?"w":"e");e.p.treeIcons=a.extend({plus:b,minus:"ui-icon-triangle-1-s",leaf:"ui-icon-radio-off"},e.p.treeIcons||{});if(e.p.treeGridModel=="nested"){e.p.treeReader=a.extend({level_field:"level",left_field:"lft",right_field:"rgt",leaf_field:"isLeaf",expanded_field:"expanded"},e.p.treeReader)}else{if(e.p.treeGridModel=="adjacency"){e.p.treeReader=a.extend({level_field:"level",parent_id_field:"parent",leaf_field:"isLeaf",expanded_field:"expanded"},e.p.treeReader)}}for(var c in e.p.colModel){if(e.p.colModel[c].name==e.p.ExpandColumn){e.p.expColInd=d;break}d++}if(!e.p.expColInd){e.p.expColInd=0}a.each(e.p.treeReader,function(f,g){if(g){e.p.colNames.push(g);e.p.colModel.push({name:g,width:1,hidden:true,sortable:false,resizable:false,hidedlg:true,editable:true,search:false})}})})},expandRow:function(b){this.each(function(){var d=this;if(!d.grid||!d.p.treeGrid){return}var c=a(d).jqGrid("getNodeChildren",b);a(c).each(function(e){a(this).css("display","");if(this.expanded){a(d).jqGrid("expandRow",this)}})})},collapseRow:function(b){this.each(function(){var d=this;if(!d.grid||!d.p.treeGrid){return}var c=a(d).jqGrid("getNodeChildren",b);a(c).each(function(e){a(this).css("display","none");if(this.expanded){a(d).jqGrid("collapseRow",this)}})})},getRootNodes:function(){var b=[];this.each(function(){var d=this;if(!d.grid||!d.p.treeGrid){return}switch(d.p.treeGridModel){case"nested":var c=d.p.treeReader.level_field;a(d.rows).each(function(e){if(parseInt(this[c],10)===parseInt(d.p.tree_root_level,10)){b.push(this)}});break;case"adjacency":a(d.rows).each(function(e){if(this.parent_id==null||this.parent_id.toLowerCase()=="null"){b.push(this)}});break}});return b},getNodeDepth:function(c){var b=null;this.each(function(){var d=this;if(!this.grid||!this.p.treeGrid){return}switch(d.p.treeGridModel){case"nested":b=parseInt(c.level,10)-parseInt(this.p.tree_root_level,10);break;case"adjacency":b=a(d).jqGrid("getNodeAncestors",c).length;break}});return b},getNodeParent:function(c){var b=null;this.each(function(){var g=this;if(!g.grid||!g.p.treeGrid){return}switch(g.p.treeGridModel){case"nested":var e=parseInt(c.lft,10),d=parseInt(c.rgt,10),f=parseInt(c.level,10);a(this.rows).each(function(){if(parseInt(this.level,10)===f-1&&parseInt(this.lft)d){b=this;return false}});break;case"adjacency":a(this.rows).each(function(){if(this.id==c.parent_id){b=this;return false}});break}});return b},getNodeChildren:function(c){var b=[];this.each(function(){var g=this;if(!g.grid||!g.p.treeGrid){return}switch(g.p.treeGridModel){case"nested":var e=parseInt(c.lft,10),d=parseInt(c.rgt,10),f=parseInt(c.level,10);a(this.rows).each(function(h){if(parseInt(this.level,10)===f+1&&parseInt(this.lft,10)>e&&parseInt(this.rgt,10)=f&&parseInt(this.lft,10)>=e&&parseInt(this.lft,10)<=d){b.push(this)}});break;case"adjacency":b.push(c);a(this.rows).each(function(h){len=b.length;for(h=0;h0){b=true}else{b=false}}});return b},expandNode:function(b){return this.each(function(){if(!this.grid||!this.p.treeGrid){return}if(!b.expanded){if(a(this).jqGrid("isNodeLoaded",b)){b.expanded=true;a("div.treeclick",b).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus")}else{b.expanded=true;a("div.treeclick",b).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus");this.p.treeANode=b.rowIndex;this.p.datatype=this.p.treedatatype;if(this.p.treeGridModel=="nested"){a(this).jqGrid("setGridParam",{postData:{nodeid:b.id,n_left:b.lft,n_right:b.rgt,n_level:b.level}})}else{a(this).jqGrid("setGridParam",{postData:{nodeid:b.id,parentid:b.parent_id,n_level:b.level}})}a(this).trigger("reloadGrid");if(this.p.treeGridModel=="nested"){a(this).jqGrid("setGridParam",{postData:{nodeid:"",n_left:"",n_right:"",n_level:""}})}else{a(this).jqGrid("setGridParam",{postData:{nodeid:"",parentid:"",n_level:""}})}}}})},collapseNode:function(b){return this.each(function(){if(!this.grid||!this.p.treeGrid){return}if(b.expanded){b.expanded=false;a("div.treeclick",b).removeClass(this.p.treeIcons.minus+" tree-minus").addClass(this.p.treeIcons.plus+" tree-plus")}})},SortTree:function(b){return this.each(function(){if(!this.grid||!this.p.treeGrid){return}var f,c,g,e=[],h=this,d=a(this).jqGrid("getRootNodes");d.sort(function(j,i){if(j.sortKeyi.sortKey){return b}return 0});if(d[0]){a("td",d[0]).each(function(i){a(this).css("width",h.grid.headers[i].width+"px")});h.grid.cols=d[0].cells}for(f=0,c=d.length;fi.sortKey){return c}return 0});for(g=0,e=f.length;g0){for(var c=0;cgrid",data:"roots>rows"},jsonGrid:{config:"grid",data:"data"}},b||{});return this.each(function(){var f=this;var d=function(h,m){var g=a(m.xmlGrid.config,h)[0];var l=a(m.xmlGrid.data,h)[0];if(xmlJsonClass.xml2json&&a.jgrid.parse){var n=xmlJsonClass.xml2json(g," ");var n=a.jgrid.parse(n);for(var i in n){var j=n[i]}if(l){var k=n.grid.datatype;n.grid.datatype="xmlstring";n.grid.datastr=h;a(f).jqGrid(j).jqGrid("setGridParam",{datatype:k})}else{a(f).jqGrid(j)}n=null;j=null}else{alert("xml2json or parse are not present")}};var e=function(h,k){if(h&&typeof h=="string"){var g=a.jgrid.parse(h);var l=g[k.jsonGrid.config];var i=g[k.jsonGrid.data];if(i){var j=l.datatype;l.datatype="jsonstring";l.datastr=i;a(f).jqGrid(l).jqGrid("setGridParam",{datatype:j})}else{a(f).jqGrid(l)}}};switch(b.imptype){case"xml":a.ajax({url:b.impurl,type:b.mtype,data:b.impData,dataType:"xml",complete:function(g,h){if(h=="success"){d(g.responseXML,b);if(a.isFunction(b.importComplete)){b.importComplete(g)}}g=null}});break;case"xmlstring":if(b.impstring&&typeof b.impstring=="string"){var c=a.jgrid.stringToDoc(b.impstring);if(c){d(c,b);if(a.isFunction(b.importComplete)){b.importComplete(c)}b.impstring=null}c=null}break;case"json":a.ajax({url:b.impurl,type:b.mtype,data:b.impData,dataType:"json",complete:function(g,h){if(h=="success"){e(g.responseText,b);if(a.isFunction(b.importComplete)){b.importComplete(g)}}g=null}});break;case"jsonstring":if(b.impstring&&typeof b.impstring=="string"){e(b.impstring,b);if(a.isFunction(b.importComplete)){b.importComplete(b.impstring)}b.impstring=null}break}})},jqGridExport:function(c){c=a.extend({exptype:"xmlstring",root:"grid",ident:"\t"},c||{});var b=null;this.each(function(){if(!this.grid){return}var e=a(this).jqGrid("getGridParam");if(e.rownumbers){e.colNames.splice(0);e.colModel.splice(0)}if(e.multiselect){e.colNames.splice(0);e.colModel.splice(0)}if(e.subgrid){e.colNames.splice(0);e.colModel.splice(0)}if(e.treeGrid){for(var d in e.treeReader){e.colNames.splice(e.colNames.length-1);e.colModel.splice(e.colModel.length-1)}}switch(c.exptype){case"xmlstring":b="<"+c.root+">"+xmlJsonClass.json2xml(e,c.ident)+"";break;case"jsonstring":b="{"+xmlJsonClass.toJson(e,c.root,c.ident)+"}";break}});return b}})})(jQuery);var xmlJsonClass={xml2json:function(b,d){if(b.nodeType===9){b=b.documentElement}var a=this.removeWhite(b);var e=this.toObj(a);var c=this.toJson(e,b.nodeName,"\t");return"{\n"+d+(d?c.replace(/\t/g,d):c.replace(/\t|\n/g,""))+"\n}"},json2xml:function(d,c){var e=function(q,f,h){var o="";var l,g;if(q instanceof Array){if(q.length===0){o+=h+"<"+f+">__EMPTY_ARRAY_\n"}else{for(l=0,g=q.length;l":"/>";if(k){for(j in q){if(q.hasOwnProperty(j)){if(j==="#text"){o+=q[j]}else{if(j==="#cdata"){o+=""}else{if(j.charAt(0)!=="@"){o+=e(q[j],j,h+"\t")}}}}}o+=(o.charAt(o.length-1)==="\n"?h:"")+""}}else{if(typeof(q)==="function"){o+=h+"<"+f+">"}else{if(q.toString()==='""'||q.toString().length===0){o+=h+"<"+f+">__EMPTY_STRING_"}else{o+=h+"<"+f+">"+q.toString()+""}}}}return o};var b="";var a;for(a in d){if(d.hasOwnProperty(a)){b+=e(d[a],a,"")}}return c?b.replace(/\t/g,c):b.replace(/\t|\n/g,"")},toObj:function(b){var g={};var f=/function/i;if(b.nodeType===1){if(b.attributes.length){var e;for(e=0;e1){g=this.escape(this.innerXml(b))}else{for(h=b.firstChild;h;h=h.nextSibling){if(f.test(b.firstChild.nodeValue)){g=b.firstChild.nodeValue;break}else{g["#cdata"]=this.escape(h.nodeValue)}}}}}}}if(!b.attributes.length&&!b.firstChild){g=null}}else{if(b.nodeType===9){g=this.toObj(b.documentElement)}else{alert("unhandled node type: "+b.nodeType)}}return g},toJson:function(b,a,d){var l=a?('"'+a+'"'):"";if(b==="[]"){l+=(a?":[]":"[]")}else{if(b instanceof Array){var c,h,f=[];for(h=0,c=b.length;h1?("\n"+d+"\t"+f.join(",\n"+d+"\t")+"\n"+d):f.join(""))+"]"}else{if(b===null){l+=(a&&":")+"null"}else{if(typeof(b)==="object"){var j=[];var e;for(e in b){if(b.hasOwnProperty(e)){j[j.length]=this.toJson(b[e],e,d+"\t")}}l+=(a?":{":"{")+(j.length>1?("\n"+d+"\t"+j.join(",\n"+d+"\t")+"\n"+d):j.join(""))+"}"}else{if(typeof(b)==="string"){var k=/(^-?\d+\.?\d*$)/;var p=/function/i;var g=b.toString();if(k.test(g)||p.test(g)||g==="false"||g==="true"){l+=(a&&":")+g}else{l+=(a&&":")+'"'+b+'"'}}else{l+=(a&&":")+b.toString()}}}}}return l},innerXml:function(d){var b="";if("innerHTML" in d){b=d.innerHTML}else{var a=function(j){var g="",f;if(j.nodeType===1){g+="<"+j.nodeName;for(f=0;f"}else{g+="/>"}}else{if(j.nodeType===3){g+=j.nodeValue}else{if(j.nodeType===4){g+=""}}}return g};for(var e=d.firstChild;e;e=e.nextSibling){b+=a(e)}}return b},escape:function(a){return a.replace(/[\\]/g,"\\\\").replace(/[\"]/g,'\\"').replace(/[\n]/g,"\\n").replace(/[\r]/g,"\\r")},removeWhite:function(b){b.normalize();var c;for(c=b.firstChild;c;){if(c.nodeType===3){if(!c.nodeValue.match(/[^ \f\n\r\t\v]/)){var a=c.nextSibling;b.removeChild(c);c=a}else{c=c.nextSibling}}else{if(c.nodeType===1){this.removeWhite(c);c=c.nextSibling}else{c=c.nextSibling}}}return b}};(function(a){a.jgrid.extend({setColumns:function(b){b=a.extend({top:0,left:0,width:200,height:"auto",dataheight:"auto",modal:false,drag:true,beforeShowForm:null,afterShowForm:null,afterSubmitForm:null,closeOnEscape:true,ShrinkToFit:false,jqModal:false,saveicon:[true,"left","ui-icon-disk"],closeicon:[true,"left","ui-icon-close"],onClose:null,colnameview:true,closeAfterSubmit:true,updateAfterCheck:false},a.jgrid.col,b||{});return this.each(function(){var j=this;if(!j.grid){return}var k=typeof b.beforeShowForm==="function"?true:false;var d=typeof b.afterShowForm==="function"?true:false;var e=typeof b.afterSubmitForm==="function"?true:false;var c=j.p.id,h="ColTbl_"+c,f={themodal:"colmod"+c,modalhead:"colhd"+c,modalcontent:"colcnt"+c,scrollelm:h};if(a("#"+f.themodal).html()!=null){if(k){b.beforeShowForm(a("#"+h))}viewModal("#"+f.themodal,{gbox:"#gbox_"+c,jqm:b.jqModal,jqM:false,modal:b.modal});if(d){b.afterShowForm(a("#"+h))}}else{var l=isNaN(b.dataheight)?b.dataheight:b.dataheight+"px";var m="
      ";m+="";for(i=0;i"}}m+="
      ";var g=!b.updateAfterCheck?""+b.bSubmit+"":"",n=""+b.bCancel+"";m+="
      "+g+" "+n+"
      ";b.gbox="#gbox_"+c;createModal(f,m,b,"#gview_"+j.p.id,a("#gview_"+j.p.id)[0]);if(b.saveicon[0]==true){a("#dData","#"+h+"_2").addClass(b.saveicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(b.closeicon[0]==true){a("#eData","#"+h+"_2").addClass(b.closeicon[1]=="right"?"fm-button-icon-right":"fm-button-icon-left").append("")}if(!b.updateAfterCheck){a("#dData","#"+h+"_2").click(function(p){for(i=0;i0;var g=!d&&h.length>0;var j=d||g;var i=p.attr("name")||h.attr("name");var l=[];var o=[];$("th",$(this)).each(function(){if(l.length==0&&j){l.push({name:"__selection__",index:"__selection__",width:0,hidden:true});o.push("__selection__")}else{l.push({name:$(this).attr("id")||$(this).html(),index:$(this).attr("id")||$(this).html(),width:$(this).width()||150});o.push($(this).html())}});var f=[];var e=[];var m=[];$("tbody > tr",$(this)).each(function(){var r={};var q=0;$("td",$(this)).each(function(){if(q==0&&j){var s=$("input",$(this));var t=s.attr("value");e.push(t||f.length);if(s.attr("checked")){m.push(t)}r[l[q].name]=s.attr("value")}else{r[l[q].name]=$(this).html()}q++});if(q>0){f.push(r)}});$(this).empty();$(this).addClass("scroll");$(this).jqGrid($.extend({datatype:"local",width:n,colNames:o,colModel:l,multiselect:d},b||{}));for(var k=0;k0){c=e[k];if(c&&c.replace){c=encodeURIComponent(c).replace(/[.\-%]/g,"_")}}if(c==null){c=k+1}$(this).jqGrid("addRowData",c,f[k])}for(var k=0;kth:not(:has(#jqgh_cb,#jqgh_rn,#jqgh_subgrid),:hidden)",placeholder:{element:function(item){var el=$(document.createElement(item[0].nodeName)).addClass(item[0].className+" ui-sortable-placeholder ui-state-highlight").removeClass("ui-sortable-helper")[0];return el},update:function(self,p){p.height(self.currentItem.innerHeight()-parseInt(self.currentItem.css("paddingTop")||0,10)-parseInt(self.currentItem.css("paddingBottom")||0,10));p.width(self.currentItem.innerWidth()-parseInt(self.currentItem.css("paddingLeft")||0,10)-parseInt(self.currentItem.css("paddingRight")||0,10))}},update:function(event,ui){var p=$(ui.item).parent();var th=$(">th",p);var colModel=ts.p.colModel;var cmMap={};$.each(colModel,function(i){cmMap[this.name]=i});var permutation=[];th.each(function(i){var id=$(">div",this).get(0).id.replace(/^jqgh_/,"");if(id in cmMap){permutation.push(cmMap[id])}});$(ts).jqGrid("remapColumns",permutation,true,true);if($.isFunction(ts.p.sortable.update)){ts.p.sortable.update(permutation)}setTimeout(function(){ts.p.disableClick=false},50)}};if(ts.p.sortable.options){$.extend(sortable_opts,ts.p.sortable.options)}else{if($.isFunction(ts.p.sortable)){ts.p.sortable={update:ts.p.sortable}}}if(sortable_opts.start){var s=sortable_opts.start;sortable_opts.start=function(e,ui){start();s.call(this,e,ui)}}else{sortable_opts.start=start}if(ts.p.sortable.exclude){sortable_opts.items+=":not("+ts.p.sortable.exclude+")"}tblrow.sortable(sortable_opts).data("sortable").floating=true})},columnChooser:function(opts){var self=this;var selector=$('
      ');var select=$("select",selector);opts=$.extend({width:420,height:240,classname:null,done:function(perm){if(perm){self.jqGrid("remapColumns",perm,true)}},msel:"multiselect",dlog:"dialog",dlog_opts:function(opts){var buttons={};buttons[opts.bSubmit]=function(){opts.apply_perm();opts.cleanup(false)};buttons[opts.bCancel]=function(){opts.cleanup(true)};return{buttons:buttons,close:function(){opts.cleanup(true)},modal:false,resizable:false,width:opts.width+20}},apply_perm:function(){$("option",select).each(function(i){if(this.selected){self.jqGrid("showCol",colModel[this.value].name)}else{self.jqGrid("hideCol",colModel[this.value].name)}});var perm=fixedCols.slice(0);$("option[selected]",select).each(function(){perm.push(parseInt(this.value))});$.each(perm,function(){delete colMap[colModel[this].name]});$.each(colMap,function(){perm.push(parseInt(this))});if(opts.done){opts.done.call(self,perm)}},cleanup:function(calldone){call(opts.dlog,selector,"destroy");call(opts.msel,select,"destroy");selector.remove();if(calldone&&opts.done){opts.done.call(self)}}},$.jgrid.col,opts||{});if(opts.caption){selector.attr("title",opts.caption)}if(opts.classname){selector.addClass(classname);select.addClass(classname)}if(opts.width){$(">div",selector).css({width:opts.width,margin:"0 auto"});select.css("width",opts.width)}if(opts.height){$(">div",selector).css("height",opts.height);select.css("height",opts.height-10)}var colModel=self.jqGrid("getGridParam","colModel");var colNames=self.jqGrid("getGridParam","colNames");var colMap={},fixedCols=[];select.empty();$.each(colModel,function(i){colMap[this.name]=i;if(this.hidedlg){if(!this.hidden){fixedCols.push(i)}return}select.append("")});function call(fn,obj){if(!fn){return}if(typeof fn=="string"){if($.fn[fn]){$.fn[fn].apply(obj,$.makeArray(arguments).slice(2))}}else{if($.isFunction(fn)){fn.apply(obj,$.makeArray(arguments).slice(2))}}}var dopts=$.isFunction(opts.dlog_opts)?opts.dlog_opts.call(self,opts):opts.dlog_opts;call(opts.dlog,selector,dopts);var mopts=$.isFunction(opts.msel_opts)?opts.msel_opts.call(self,opts):opts.msel_opts;call(opts.msel,select,opts.msel_opts)},sortableRows:function(opts){return this.each(function(){var $t=this;if(!$t.grid){return}if($t.p.treeGrid){return}if($.fn.sortable){opts=$.extend({cursor:"move",axis:"y",items:".jqgrow"},opts||{});if(opts.start&&$.isFunction(opts.start)){opts._start_=opts.start;delete opts.start}else{opts._start_=false}if(opts.update&&$.isFunction(opts.update)){opts._update_=opts.update;delete opts.update}else{opts._update_=false}opts.start=function(ev,ui){$(ui.item).css("border-width","0px");$("td",ui.item).each(function(i){this.style.width=$t.grid.cols[i].style.width});if($t.p.subGrid){var subgid=$(ui.item).attr("id");try{$($t).jqGrid("collapseSubGridRow",subgid)}catch(e){}}if(opts._start_){opts._start_.apply(this,[ev,ui])}};opts.update=function(ev,ui){$(ui.item).css("border-width","");$t.updateColumns();if(opts._update_){opts._update_.apply(this,[ev,ui])}};$("tbody:first",$t).sortable(opts)}})},gridDnD:function(opts){return this.each(function(){var $t=this;if(!$t.grid){return}if($t.p.treeGrid){return}if(!$.fn.draggable||!$.fn.droppable){return}function updateDnD(){var datadnd=$.data($t,"dnd");$("tr.jqgrow:not(.ui-draggable)",$t).draggable($.isFunction(datadnd.drag)?datadnd.drag.call($($t),datadnd):datadnd.drag)}var appender="
      ";if($("#jqgrid_dnd").html()==null){$("body").append(appender)}if(typeof opts=="string"&&opts=="updateDnD"&&$t.p.jqgdnd==true){updateDnD();return}opts=$.extend({drag:function(opts){return $.extend({start:function(ev,ui){if($t.p.subGrid){var subgid=$(ui.helper).attr("id");try{$($t).jqGrid("collapseSubGridRow",subgid)}catch(e){}}for(var i=0;iÄlteste→Neuste -sortAgeDesc Sortieren nach Alter Neuste→Älteste -sortNameAsc Sortieren nach Name A→Z -sortNameDesc Sortieren nach Name Z→A -sortSizeAsc Sortieren nach Grösse Kleinste→Grösste -sortSizeDesc Sortieren nach Grösse Grösste→Kleiste diff --git a/main/interfaces/Mobile/language/fr-fr.txt b/main/interfaces/Mobile/language/fr-fr.txt deleted file mode 100644 index 042a944..0000000 --- a/main/interfaces/Mobile/language/fr-fr.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: latin-1 -*- -# France # Français -# Mobile - -# misc -button-prev Préc. -button-next Suiv. -button-first Premier -button-last Dernier -button-refresh Rafraîchir -button-close Fermer -button-options Options -page Page -confirm-delete Etes-vous sûr de vouloir supprimer ? -warnings Avertissements -button-purgeQ Vider la Queue -confirm-purgeQ Vider la Queue ? -button-purgeH Vider l'Historique -confirm-purgeH Vider l'Historique ? -left Rest. -rename Renommer - -# pause interval -button-pauseInterval Entrer Durée Pause -pauseInterval Pause Interval -pause5m Pause pour 5 minutes -pause15m Pause pour 15 minutes -pause30m Pause pour 30 minutes -pause1h Pause pour 1 heure -pause3h Pause pour 3 heures -pause6h Pause pour 6 heures -pause12h Pause pour 12 heures -pause24h Pause pour 24 heures - -# queue sort -sort Trier -sortAgeAsc Trier par Age Moins récent→Plus récent -sortAgeDesc Trier par Age Plus récent→Moins récent -sortNameAsc Trier par Nom A→Z -sortNameDesc Trier par Nom Z→A -sortSizeAsc Trier par Taille Plus petit→Plus gros -sortSizeDesc Trier par Taille Plus gros→Plus petit diff --git a/main/interfaces/Mobile/language/nl-du.txt b/main/interfaces/Mobile/language/nl-du.txt deleted file mode 100644 index c7c56a5..0000000 --- a/main/interfaces/Mobile/language/nl-du.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: UTF-8 -*- -# Netherlandss # Nederlands -# Mobile - -# misc -button-prev Vorige -button-next Volgende -button-first Eerste -button-last Laatste -button-refresh Ververs -button-close Sluiten -button-options Opties -page Pagina -confirm-delete Weet u zeker dat u wilt verwijderen -warnings Meldingen -button-purgeQ Verwijder uit de Wachtrij -confirm-purgeQ Verwijder uit de Wachtrij? -button-purgeH Wis de volledige geschiedenis -confirm-purgeH Wis de volledige geschiedenis? -left Over -rename Naam - -# pause interval -button-pauseInterval Set Pauze Interval -pauseInterval Pauze Interval -pause5m Pauzeer 5 minuten -pause15m Pauzeer 15 minuten -pause30m Pauzeer 30 minuten -pause1h Pauzeer 1 uur -pause3h Pauzeer 3 uur -pause6h Pauzeer 6 uur -pause12h Pauzeer 12 uur -pause24h Pauzeer 24 uur - -# queue sort -sort Sorteren -sortAgeAsc Sorteer op Leeftijd Oud→Nieuw -sortAgeDesc Sorteer op Leeftijd Nieuw→Oud -sortNameAsc Sorteer op Naam A→Z -sortNameDesc Sorteer op Naam Z→A -sortSizeAsc Sorteer op Omvang Klein→Groot -sortSizeDesc Sorteer op Omvang Groot→Klein diff --git a/main/interfaces/Mobile/language/sv-se.txt b/main/interfaces/Mobile/language/sv-se.txt deleted file mode 100644 index 06df66c..0000000 --- a/main/interfaces/Mobile/language/sv-se.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Sverige # Svenska -# Translation by "Kristoffer (Malmis) Malmström" -# Mobile - -# misc -button-prev FöregÃ¥ende -button-next Nästa -button-refresh Uppdatera -button-close Stäng -button-options Alternativ -page Sida -confirm-delete Är du säker pÃ¥ att du vill ta bort -warnings Varningar -button-purgeQ Töm kö -confirm-purgeQ Vill du verkligen tömma kön? -button-purgeH Töm historik -confirm-purgeH Vill du verkligen tömma historiken? -left Vänster - -# pause interval -button-pauseInterval Sätt pausintervall -pauseInterval Pausintervall -pause5m Pausa 5 minuter -pause15m Pause 15 minuter -pause30m Pausa 30 minuter -pause1h Pausa 1 timme -pause3h Pausa 3 timmar -pause6h Pausa 6 timmar -pause12h Pausa 12 timmar -pause24h Pausa 24 timmar - -# queue sort -sort Sortera -sortAgeAsc Sortera efter Ã¥lder Äldst→Nyast -sortAgeDesc Sortera efter Ã¥lder Nyast→Äldst -sortNameAsc Sortera efter namn A→Z -sortNameDesc Sortera efter namn Z→A -sortSizeAsc Sortera efter storlek Minst→Störst -sortSizeDesc Sortera efter storlek Störst→Minst diff --git a/main/interfaces/Mobile/language/us-en.txt b/main/interfaces/Mobile/language/us-en.txt deleted file mode 100644 index e3f9372..0000000 --- a/main/interfaces/Mobile/language/us-en.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: latin-1 -*- -# United States # English -# Mobile - -# misc -button-prev Prev -button-next Next -button-first First -button-last Last -button-refresh Refresh -button-close Close -button-options Options -page Page -confirm-delete Are you sure you want to delete -warnings Warnings -button-purgeQ Purge Queue -confirm-purgeQ Purge the Queue? -button-purgeH Purge History -confirm-purgeH Purge the History? -left Left -rename Rename - -# pause interval -button-pauseInterval Set Pause Interval -pauseInterval Pause Interval -pause5m Pause for 5 minutes -pause15m Pause for 15 minutes -pause30m Pause for 30 minutes -pause1h Pause for 1 hour -pause3h Pause for 3 hours -pause6h Pause for 6 hours -pause12h Pause for 12 hours -pause24h Pause for 24 hours - -# queue sort -sort Sort -sortAgeAsc Sort by Age Oldest→Newest -sortAgeDesc Sort by Age Newest→Oldest -sortNameAsc Sort by Name A→Z -sortNameDesc Sort by Name Z→A -sortSizeAsc Sort by Size Smallest→Largest -sortSizeDesc Sort by Size Largest→Smallest diff --git a/main/interfaces/Mobile/licenses/LICENSE-BSD.txt b/main/interfaces/Mobile/licenses/LICENSE-BSD.txt deleted file mode 100644 index b90d331..0000000 --- a/main/interfaces/Mobile/licenses/LICENSE-BSD.txt +++ /dev/null @@ -1,18 +0,0 @@ - = Regents of the University of California - = University of California, Berkeley - = 1998 - -In the original BSD license, both occurrences of the phrase "COPYRIGHT HOLDERS AND CONTRIBUTORS" in the disclaimer read "REGENTS AND CONTRIBUTORS". - -Here is the license template: - -Copyright (c) , -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/main/interfaces/Mobile/licenses/LICENSE-CC.txt b/main/interfaces/Mobile/licenses/LICENSE-CC.txt deleted file mode 100644 index ad5f44f..0000000 --- a/main/interfaces/Mobile/licenses/LICENSE-CC.txt +++ /dev/null @@ -1,63 +0,0 @@ -http://creativecommons.org/licenses/by/3.0/ -http://creativecommons.org/licenses/by/3.0/legalcode - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - 4. to Distribute and Publicly Perform Adaptations. - 5. - - For the avoidance of doubt: - 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, - 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. - 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/main/interfaces/Mobile/licenses/LICENSE-GPL.txt b/main/interfaces/Mobile/licenses/LICENSE-GPL.txt deleted file mode 100644 index d511905..0000000 --- a/main/interfaces/Mobile/licenses/LICENSE-GPL.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/main/interfaces/Mobile/licenses/LICENSE-MIT.txt b/main/interfaces/Mobile/licenses/LICENSE-MIT.txt deleted file mode 100644 index e9c74d0..0000000 --- a/main/interfaces/Mobile/licenses/LICENSE-MIT.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) - -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. \ No newline at end of file diff --git a/main/interfaces/Mobile/templates/main.tmpl b/main/interfaces/Mobile/templates/main.tmpl deleted file mode 100644 index dba7993..0000000 --- a/main/interfaces/Mobile/templates/main.tmpl +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - SAB+ Mobile - - - - - - - - - - - -
      -
      -

      - SAB+ MobileB/s -      - -

      - $T('Mobile-button-refresh') -
      - - -
      - - - - - -
      -
      -

      $T('Mobile-button-options')

      - $T('Mobile-button-close') -
      - -

      $T('onQueueFinish'):

      -
        -
      • - -
      • -
      - -
      - - - - - - - - -
      -
      -

      $T('menu-queue') NZB

      - $T('button-back') - $T('Mobile-rename') -
      -
      - -
      - -
        - -
      • $T('remainTotal') ⁄  $T('MB') %
      • -
      • $T('eta')
      • -
      • $T('Mobile-left')
      • -
      • $T('nzo-age')
      • - -
      • $T('link-pause') NZB
      • - -
      • $T('order')
      • -
      • - -
      • $T('category')
      • -
      • - -
      • $T('priority')
      • -
      • - -
      • $T('pp')
      • -
      • - -
      • $T('script')
      • -
      • - -
      • $T('nzo-delete') NZB
      • - -
      - -
      -
      - - - - - -
      -
      -

      $T('Mobile-button-options')

      - $T('Mobile-button-close') -
      - -
      - - -
      -
      -

      $T('menu-history') NZB

      - $T('button-back') -
      -
      - -
      -
      -
      - -
        -
      • $T('status')
      • -
      • $T('size')
      • -
      • $T('completed')
      • -
      • $T('category')
      • -
      - -
        -
      • $T('connections')
      • -
      - -
        - -
          -
        • $T('catFolderPath')
        • -
        • -
        - - - -
        -
        - - -
        -
        -

        $T('script')

        - $T('Mobile-button-close') -
        -
        -
        - - -
        -
        -

        $T('add') NZB

        - $T('button-back') -
        -
          -
        • -
        - - - - - -
        - - -
        -
        -

        $T('Mobile-warnings')

        - $T('button-back') - $T('button-clear') -
        -
        - -
        - - - - diff --git a/main/interfaces/Mobile/templates/static/images/dark/back_button.png b/main/interfaces/Mobile/templates/static/images/dark/back_button.png deleted file mode 100644 index 9873901c0e74ba89d1399acfee2a7066601bd6fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3756 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 Hu0mjf-jO>3 diff --git a/main/interfaces/Mobile/templates/static/images/dark/button.png b/main/interfaces/Mobile/templates/static/images/dark/button.png deleted file mode 100644 index 52cc7e279723b94d969ca54a8db3ce7e921dc804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3315 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 diff --git a/main/interfaces/Mobile/templates/static/images/dark/button_clicked.png b/main/interfaces/Mobile/templates/static/images/dark/button_clicked.png deleted file mode 100644 index 25d478fc8fcd7bc94bdf26cd2e857c26ec228200..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3283 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 RN&Nr-002ovPDHLkV1iWTX0iYP diff --git a/main/interfaces/Mobile/templates/static/images/dark/chevron.png b/main/interfaces/Mobile/templates/static/images/dark/chevron.png deleted file mode 100644 index 5bdaa46de7995267a392da77bfeacacbe2004f49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3074 zcma)8c{CL68vcevBUy?>jf7IR355|cj3v@srl^$3KK6Yq(a4f9t&Ao%p5Rgb3z&$^i`x$6oG8yZYs!i+7wA5U~riNF(4yc zSU_t&Dz70b^UPzx6URIoy7*s~oQaOmF4=$ta7j;3NMFX#dFdj-R7RbO`+8B`x|+kA zKPkbQKo482`#PckVtY++ISPnfxhxMmhi8XkPKUA+v=ZgGiK{Qzz{K{_;yg>;WIHg? z;i?6I+u(u7N!6W4=;N(Fpg{64$R#xmAwf1DQ1lX1IH$yZ@Z|&5J2EkMsr+t4AT@2;}|4JR1(zvL&e%7(NT|8EdbIW!uX|*yllix^Z}`2 z{tBeveB_`84t#YSC=sLR%b#54U-5{)Q( z@el*JKxmUV(Exe|MQ$;*y=3~BEOE2tel~0iruIAqB`>bgqLIyeLN7!|GhMh*(=I}%=*6N2(9Mo(C6;rag@3f216!yQD+5Lg@#F*`d{D;v%;K8O)hYG+Gk{m zzwC)vo3;|`w`_%0;LmR=ruJ+FO4in|5s#UG%)#kZxrg$N+*JV#Q5(I?OEk^Q5| zrds*wC$m#BEh&dhY57hVvjWjeEd&q^hmA7tzP^4;4dmrY*#}k>_PLyMFHV!w1cz|+6kHlP3CMYj<#w| zQxa_FX%A$mF>Dy>g7MMspjN2tQe@7ZoZBMR6gy5@1^zLW*%W?Fq4=$OwK-qd|uqkOYO=#%DN&EBHPNHxK%1V{vzp% zK2)9s(P*EXGdWWI7y6yLt8>=0MF-Ya>|^PA0H7}ph%n0My%X63uaC?h%Qxs;;g>F0Vz-s4T&b~$D-7!Ow-t{hx> zB4o^cgM<>gB%~r|7;o9;)AlBQ;4NC_Tp^~=sj#p=ubf)m6iD&?raYxQfa}Ix>RA|s zyVSaRxrn&@by2JMRKZapSD`R(JU{jO@{sRva0R~fTX9kOqlxrM_((=WM#rRzzKni` zP5E@kT>IQ!kGZk?n?0|{wZltK?Y$1{fKh)U@t$BlDn7d`X)IOZF3)6$Ky{LoLQ5SC$ zsq5{`HRaV~{{8-%ON#3P0et~Hfp-Hb0bk^m%-P{J9hG~bo&*Te+|Bv%w8;BWG+(pkMJ8wAS7`o+=9xSe2_lDt0ThWiOY#}i<&{Z67wmaDM`)>G z0zy_QIz~kc#PJ5hLt6zl}X?* zEl1ssY90?DRzyWM!=}8Ju%-H50n6xU{ZrD~yS~?Bt{^A4tv2EJz2~ww z?$GNS{ZW(Ap>Yry-nW_Wu34>_g$8Q}eEQXQv2X;s1~nI2FFIt=gU&XURH&x*2mfC1 z4fl=l9s5No8n55;F3H>UA_g0xzJ4)%FgN3VvOa&u-dbllazXKD={-?H(Hv2C_vKNa zbj!LcA8Q|Zw=fuToAFa}MIYox1M{u*nipKlTw7i1;y%T_8@XQLKDt+Op`3ZE{DyDO zk+D<1@U>&-hXaBW2Hw-g0&9%?9t}zidE?z1=nN6+>*(O@V72Yke!T&|kha~5dK1d~ z?1i3?xji~NKPQ5DkNJz236pi!5+(C|ej;$>-gf6kO}}0;t?qhCZp>#7i-66c4dVE? zrhrfOuJnfEG;i+Jc~u(X*634Z1vi+hq3fLMGw0uGn%n+C$w4C}Vy=%yA2lxOt{Ha3 z+EE-S&>PoNIG|3JaA_UdTaWn7+u592GsI8t3f7$6Y3ANL-su~NPpzNzTxyc~ zVDv@7Tj7JHXMOkROt0_!IZE1dUv<2Sm2cH>V8_~>yWiSV%?31z(&{FIrW>#Cb;x{R zj54bmps!K&#&N`(?4N%Urv7~KG>gh{>IP{^_LIQ)HGcs{Z&xEZ&ABB zX2P%6G@r-_-^ni%gKWlvn$k+M;9eP;q@^!F#}wD!l$L-ss?BaM-P9(NPn*)OM+M%>Fe?eSA!u|V{53Zjo})w z!D1D$1h(7&(Fg6-c!dYXBltf8>Bjx|Kk}c$x9N341jVZHx@4d0~9(dvQWZ-ZF9G+z!zVly$tGg}EKHz^Cb{NYoECVn^ LndrVpVjuq-_e0dN diff --git a/main/interfaces/Mobile/templates/static/images/dark/chevron_circle.png b/main/interfaces/Mobile/templates/static/images/dark/chevron_circle.png deleted file mode 100644 index b477e7c9540a8ca98961e2a4a2f16db825e9097f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 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 Gi~ldihm0Tq diff --git a/main/interfaces/Mobile/templates/static/images/dark/rowhead.png b/main/interfaces/Mobile/templates/static/images/dark/rowhead.png deleted file mode 100644 index b2fa8f67b012f2c5eb7965fc7b401e13bce2d8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!31P*e0{tR#3^x&C<)F_D=AMbN@Z|N$xljE z@XSq2PYp^6;7*cV|x66~SK|z4!c-aBgM}ba1CVUK)tNFe~ct^#G zlAx&$ky=XxQg05`M?I SqL~?JFoUP7pUXO@geCyCj6Bx> diff --git a/main/interfaces/Mobile/templates/static/images/dark/toggle.png b/main/interfaces/Mobile/templates/static/images/dark/toggle.png deleted file mode 100644 index 3b62ebf26eaf8b21e341d413a6bd7cebcf5e7075..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2815 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 diff --git a/main/interfaces/Mobile/templates/static/images/dark/whiteButton.png b/main/interfaces/Mobile/templates/static/images/dark/whiteButton.png deleted file mode 100644 index 5514b270053a41039e9e96ef8591796521ee0312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmV;@11}R*8aG1*L?d1O->_T@+D~u1Y}!yL0VI=|WL) zUB!jV?nDqFVEqcjNU7Q;7-O1A(q?8dlX-96yZ5-5q-Ly5=jDGlkNe*5{m(h~zIU$B ztvpZh0>hld-kwYNkqy3Ko}K-V%D(G)Z`(9CN35XDjL&xuH$Mh_XF(}UB(Tw%lJL(m|<1LC)=R9eoc+{eJ zNQwFm3ZOo%tAYib`a=Ya6#-N=4JiO(J0G^!!{zGLYx*)_QJi=^gsb6jQm_J=B!6wD zD%0-bC{8`;0(Q9FGD%w0qhLC5rQirtj;nGAUq!X!Dqd2rt6&lNPuJ>g7pqvn zrLC}dJQx&>lhnC-)EE`H)reg0T)izKV$|3W#Z{x-uG+(BCOFiFCeuK~FK_qmdcCS1 z>8qPuMY7^&mwW$}US2j%`m-B`MG8c7zyGk_Te#n^&tIcWp2Z*u%VSYOaGhsH3-(@~ zmGI-aXiXaBcJ0@|xe~1jq8+&sKXGKh9t>WX-&ip>B{%Tf)t#qUx1u_4ei+87UrHDfl6dXpw%k7!k~_oku06C3S8F^@(Qf&-L}LBUh<3`S518 zHslKoXby|rLrF-aMbk8j+ef37#cK7AgI*>xK3*KI+wDGQqnw)Edn!H~2Jv7#l+-p> zSL68q&WJ!JQ!W>a*5>p3XLojzq*mM7in|*4KU7;ZTp6~iyZ`_I07*qoM6N<$f;?{4 AHUIzs diff --git a/main/interfaces/Mobile/templates/static/images/light/backButton.png b/main/interfaces/Mobile/templates/static/images/light/backButton.png deleted file mode 100644 index 935f914ea2672151083594dab0215c8ed1555c56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 783 zcmV+q1MvKbP)VGsr2dAHlrMxhic zAO(@DAcA1I$8eDlA@TCT|ER&lps6A;L=!ZU2xti2h*6YqODMG6w!7QyJ2MKR1`FTX z<;nR0lXFJgdol~hOC}SuGta+%`5cYxK(+``T~mK`aHPEA8~~_9498geu@ZVX9;m8s z?;Xka`XEb~Xmfq#(Sz}h?!I7GpGrh zCjBL)DltI@O^Z!Ep6DF9SzHoO6onW_B4m$nIP-lat=+?mZ|7CaSiv-miTih(g4YU* z$_asxAUC|evTu0QA52e$%Fkc&msLq5$SvV=7ySPR%b%8XiyP{ikr`1!jyYWJLmlYJ z#OqftI|lC{J1|Xb0_1q#7 z01WmbWc9_f$v{K5a5xVNu)hPZzrvtA(hN8W2|cBZjSf37MkvKe03noJO~2kB)T5is z3@1TBBujFCXQLk55(4ZFfWi!>C5wuD^_9hDGI|0X@V;1FZ)vJMty*@G8}PeR zx&}GMgzh}2!Wn)&M6mUON9fWrAeYjX;rA8nt&o|mZEc|EGU{PWryw_&+0?=PQ>1o{_%6ycWDlXV%!C$R?QE^HSg6Ony+quOCP#-lJ}iG1>xvbKoZ zomcAjwgrO(BBCW#=Hqut6a2G$37eJC1 zL6jIkkr_sy8b+TQNTnJ{ryEPG98R(wN1Gi_wH;8m9Z|X-OQs%7s2)_n9#p{}Rl^@v z#UEG3Aw!5EM2R9qhayFZB464gM~)*%kR)Q>CrXbeWZx)Cjwn*4DpRK}PK_>U;4fOR zFlyj4ZQwa@;X!xfLwMsxdgDlGuSsvbO@HK6gymI&z*vXoS%~IaiRNI9=VXuQXOie{ zi?eTqv2l&Fa)_mKiKTOkymODWb&jxhkFa)+v3i!di=fGsp0SywyPT-NrL)GTwa4zB zu!H~r0J=#;K~xyijmXy$!9W;>;SV7zS{9M$y@u#r5MA#7g3PRw{bw9_&fXWkf9`}J z1UhHm$9o*K`Xixl1;=mfRA;%_3Y(>)9#FT}61$1aVkKFm!Dj@AF(nLS9U==pBsfww zkwRiXBoOZsal{%#3|fuQz{&)Jk|Pu-Ch=p0=?EiFM-h38D55||>5ox0_qa}&ZhXto+2n%b?bJ&~1lBv41sCu<^TcbQd%6WH^KYEFCb>M6lGmBCgZF_RMP;g_&g!eAw8+>M~{e^us?&19oxF zesu1f-zQziO$!7&@4IwANODeU)>*x*Rn^qtPS=tAh0|PL2=Z@Q!F+ZRSJaYqUMAhQ zG`Dhu3(aFX@_xb(O9venU+*Q2KNu!0^l!Yucs8g@r!jItQ`$kM_RelF{r G5}E+j-eN=m diff --git a/main/interfaces/Mobile/templates/static/images/light/grayButton.png b/main/interfaces/Mobile/templates/static/images/light/grayButton.png deleted file mode 100644 index 0ce6a30d4b5f6d9b2b13a2414f76c344e4991a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 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 N002ovPDHLkV1i-QPa^;T diff --git a/main/interfaces/Mobile/templates/static/images/light/loading.gif b/main/interfaces/Mobile/templates/static/images/light/loading.gif deleted file mode 100644 index 8522ddf1a6ebd07d999926dd018f2f8af62ee804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1435 zcmZ?wbhEHblw=TL*v!E2|NsAAzyH4d^yk6LUzhIxIC|~-w$oo%9{MtS$EUvaAL^I9 zFPi-}dEy(7x);_Z&w+{+|8x7fh6Fo12DlpO889<4Ffb_oWMSoE;AhZbU|?bp073?q z!Vf2(zc4I)b=|F);X=UdD-6xT9p_e zCjY=i7V9oLHAd}acT3oj)KbHCm(8mkPDu2;o^i>?_7x^ixw#O)RJ+hp(Kxs+)tAi39 za;jZxp54$8HAJBiUK>rCWijd-DIDhAwEt7^~-0}%C6b<+tBH~2-*)}A8^?ECDXvxQbA5DuV zJ)NXk+a}SbQ#{AR`iT3rD=P!HiLeDQvAJUPN;c4BiN!y5stQl?m~6>0UB%z1BeK{e zU3r1X=8n!JMHf>MA$H}11wJyohno*fGO-YGcTBuuvM#jiP=bcax*I)71_CmRX0SOn zI-1G*a~j+*uv*3B@JaDRnizu@e?W#XGlRHtCPR*7Umb?eKnWHUb5V;Uj8=-Azq7T% zi_xpo*zRakWZ$WXQ;MS7uAI54C?Rp2wYb1D$?(FX0tO}7Q%sEw7QQ^(OTKQblv$u~ zB=JMR4Gwiig^w%VIq-cg;NWLybKB9#u*?O;yUf6J2}&rDA5LCZNiI73x8V4hgSiT2 z6@62@e81{&q^eB5yhhsTh>V@;yo();8d)uqCnUCo%xy87p8MfJAwz@9B8R1-7Mu)8 z1_3r1i`lj*6$nh=W^lVu$I~Qz{jfq0ifypm7!CB?oW&9MuFp!5z7`|9yk*McQol!u zvr`Sbr)Ws7k*Vm@)R$j6QG-jJw`J2eNdtp*iHr;{e7Txh)EE>h*t(7`{1CvyCv^0( zo5Gc>_Alb-WeSL_OtK7Q7f(IKdl@3W!G2jAW(#RHc*FD*#te{9~? z?$B`JhnW2FMGYH6oBF4#6c*TV^d}vB5GY|%x58Rl|sI%aUEiXevud?ZKCqKVvP5$7W!A>HrElaOmP+;?T zxNb$|4hgpIzDEu=MpIpresys1cRXUcK4GtlgxjI2j87_jhaPUM(-Fu&H7Bq3fmfNa Is33zi04%B!Q2+n{ diff --git a/main/interfaces/Mobile/templates/static/images/light/on_off.png b/main/interfaces/Mobile/templates/static/images/light/on_off.png deleted file mode 100644 index 62325a8232cb4512e806fad9568b5a438a108475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2634 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 NgQu&X%Q~loCIB>$9?k#& diff --git a/main/interfaces/Mobile/templates/static/images/light/selection.png b/main/interfaces/Mobile/templates/static/images/light/selection.png deleted file mode 100644 index 537e3f0b13ea422a5ac5487317872414d51574c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiX1&%978x{Sr2X$Jj5WtvT?p{@1r}0Gc6VGKL6Qv;l%Dc zTgw%X}gxBOXmxAbz1ds%&OUSwBY#<9&n!x%hW{an^L HB{Ts5+CMp^ diff --git a/main/interfaces/Mobile/templates/static/images/light/thumb.png b/main/interfaces/Mobile/templates/static/images/light/thumb.png deleted file mode 100644 index 81495a09287fd57a2e3ab5372c4e976ca8b8929e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2834 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 LNkvXXu0mjf9G~Ji diff --git a/main/interfaces/Mobile/templates/static/images/light/toolbar.png b/main/interfaces/Mobile/templates/static/images/light/toolbar.png deleted file mode 100644 index 2159c7dd0cd5efb3a64f2653ea60e0c9564197b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf-!2~4D97_9ulw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlA}>!D$B>F!zCDV34Gsd#v;Y3TJ|TmJseIn)i>a4+H5bh+ zbJ_UTea>|bh33daK%zl0UMIIXm_ Q6=*7hr>mdKI;Vst0L2kLjsO4v diff --git a/main/interfaces/Mobile/templates/static/images/light/whiteButton.png b/main/interfaces/Mobile/templates/static/images/light/whiteButton.png deleted file mode 100644 index 5514b270053a41039e9e96ef8591796521ee0312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmV;@11}R*8aG1*L?d1O->_T@+D~u1Y}!yL0VI=|WL) zUB!jV?nDqFVEqcjNU7Q;7-O1A(q?8dlX-96yZ5-5q-Ly5=jDGlkNe*5{m(h~zIU$B ztvpZh0>hld-kwYNkqy3Ko}K-V%D(G)Z`(9CN35XDjL&xuH$Mh_XF(}UB(Tw%lJL(m|<1LC)=R9eoc+{eJ zNQwFm3ZOo%tAYib`a=Ya6#-N=4JiO(J0G^!!{zGLYx*)_QJi=^gsb6jQm_J=B!6wD zD%0-bC{8`;0(Q9FGD%w0qhLC5rQirtj;nGAUq!X!Dqd2rt6&lNPuJ>g7pqvn zrLC}dJQx&>lhnC-)EE`H)reg0T)izKV$|3W#Z{x-uG+(BCOFiFCeuK~FK_qmdcCS1 z>8qPuMY7^&mwW$}US2j%`m-B`MG8c7zyGk_Te#n^&tIcWp2Z*u%VSYOaGhsH3-(@~ zmGI-aXiXaBcJ0@|xe~1jq8+&sKXGKh9t>WX-&ip>B{%Tf)t#qUx1u_4ei+87UrHDfl6dXpw%k7!k~_oku06C3S8F^@(Qf&-L}LBUh<3`S518 zHslKoXby|rLrF-aMbk8j+ef37#cK7AgI*>xK3*KI+wDGQqnw)Edn!H~2Jv7#l+-p> zSL68q&WJ!JQ!W>a*5>p3XLojzq*mM7in|*4KU7;ZTp6~iyZ`_I07*qoM6N<$f;?{4 AHUIzs diff --git a/main/interfaces/Mobile/templates/static/images/sab.png b/main/interfaces/Mobile/templates/static/images/sab.png deleted file mode 100644 index 2c629000630096dd5d40024416156703104cb533..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2745 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.data;i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)}else delete t[p]}i=c(a.target).closest(f,a.currentTarget); -n=0;for(l=i.length;n)[^>]*$|^#([\w-]+)$/,Pa=/^.[^:#\[\.,]*$/,Qa=/\S/, -Ra=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Sa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],M,ca=Object.prototype.toString,da=Object.prototype.hasOwnProperty,ea=Array.prototype.push,R=Array.prototype.slice,V=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Oa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Sa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])]; -c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=ua([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return U.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a)}else return!b||b.jquery?(b||U).find(a):c(b).find(a);else if(c.isFunction(a))return U.ready(a);if(a.selector!==w){this.selector=a.selector; -this.context=a.context}return c.isArray(a)?this.setArray(a):c.makeArray(a,this)},selector:"",jquery:"1.4",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){a=c(a||null);a.prevObject=this;a.context=this.context;if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;else if(b)a.selector=this.selector+"."+b+"("+d+")";return a},setArray:function(a){this.length= -0;ea.apply(this,a);return this},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject|| -c(null)},push:ea,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
        a";var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!i)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length, -htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(i.getAttribute("style")),hrefNormalized:i.getAttribute("href")==="/a",opacity:/^0.55$/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(j){}a.insertBefore(b, -a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function o(){c.support.noCloneEvent=false;d.detachEvent("onclick",o)});d.cloneNode(true).fireEvent("onclick")}c(function(){var o=s.createElement("div");o.style.width=o.style.paddingLeft="1px";s.body.appendChild(o);c.boxModel=c.support.boxModel=o.offsetWidth===2;s.body.removeChild(o).style.display="none"});a=function(o){var p=s.createElement("div");o="on"+o;var n=o in -p;if(!n){p.setAttribute(o,"return;");n=typeof p[o]==="function"}return n};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=i=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var H="jQuery"+K(),Ta=0,ya={},Ua={};c.extend({cache:{},expando:H,noData:{embed:true,object:true,applet:true},data:function(a, -b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?ya:a;var f=a[H],e=c.cache;if(!b&&!f)return null;f||(f=++Ta);if(typeof b==="object"){a[H]=f;e=e[f]=c.extend(true,{},b)}else e=e[f]?e[f]:typeof d==="undefined"?Ua:(e[f]={});if(d!==w){a[H]=f;e[b]=d}return typeof b==="string"?e[b]:e}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?ya:a;var d=a[H],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{try{delete a[H]}catch(i){a.removeAttribute&& -a.removeAttribute(H)}delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,a,b)})},removeData:function(a){return this.each(function(){c.removeData(this, -a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this, -a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var za=/[\n\t]/g,fa=/\s+/,Va=/\r/g,Wa=/href|src|style/,Xa=/(button|input)/i,Ya=/(button|input|object|select|textarea)/i,Za=/^(a|area)$/i,Aa=/radio|checkbox/;c.fn.extend({attr:function(a, -b){return $(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(p){var n=c(this);n.addClass(a.call(this,p,n.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(fa),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var i=b?d:0;for(d=b?d+1:e.length;i=0;else if(c.nodeName(this,"select")){var z=c.makeArray(t);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),z)>=0});if(!z.length)this.selectedIndex= --1}else this.value=t}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var i=Wa.test(b);if(b in a&&f&&!i){if(e){if(b==="type"&&Xa.test(a.nodeName)&&a.parentNode)throw"type property can't be changed";a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue; -if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Ya.test(a.nodeName)||Za.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var $a=function(a){return a.replace(/[^\w\s\.\|`]/g,function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType=== -3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;if(!d.guid)d.guid=c.guid++;if(f!==w){d=c.proxy(d);d.data=f}var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;if(!i){j=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):w};i=c.data(a,"handle",j)}if(i){i.elem=a;b=b.split(/\s+/);for(var o,p=0;o=b[p++];){var n=o.split(".");o=n.shift();d.type=n.slice(0).sort().join(".");var t=e[o],z=this.special[o]||{};if(!t){t=e[o]={}; -if(!z.setup||z.setup.call(a,f,n,d)===false)if(a.addEventListener)a.addEventListener(o,i,false);else a.attachEvent&&a.attachEvent("on"+o,i)}if(z.add)if((n=z.add.call(a,d,f,n,t))&&c.isFunction(n)){n.guid=n.guid||d.guid;d=n}t[d.guid]=d;this.global[o]=true}a=null}}},global:{},remove:function(a,b,d){if(!(a.nodeType===3||a.nodeType===8)){var f=c.data(a,"events"),e,i,j;if(f){if(b===w||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{if(b.type){d=b.handler;b=b.type}b=b.split(/\s+/); -for(var o=0;i=b[o++];){var p=i.split(".");i=p.shift();var n=!p.length,t=c.map(p.slice(0).sort(),$a);t=new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.)?")+"(\\.|$)");var z=this.special[i]||{};if(f[i]){if(d){j=f[i][d.guid];delete f[i][d.guid]}else for(var B in f[i])if(n||t.test(f[i][B].type))delete f[i][B];z.remove&&z.remove.call(a,p,j);for(e in f[i])break;if(!e){if(!z.teardown||z.teardown.call(a,p)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+ -i,c.data(a,"handle"));e=null;delete f[i]}}}}for(e in f)break;if(!e){if(B=c.data(a,"handle"))B.elem=null;c.removeData(a,"events");c.removeData(a,"handle")}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[H]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();this.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType=== -8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;var i=c.data(d,"handle");i&&i.apply(d,b);var j,o;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){j=d[e];o=d["on"+e]}}catch(p){}i=c.nodeName(d,"a")&&e==="click";if(!f&&j&&!a.isDefaultPrevented()&&!i){this.triggered=true;try{d[e]()}catch(n){}}else if(o&&d["on"+e].apply(d,b)===false)a.result=false;this.triggered=false;if(!a.isPropagationStopped())(d=d.parentNode||d.ownerDocument)&&c.event.trigger(a,b,d,true)}, -handle:function(a){var b,d;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;d=a.type.split(".");a.type=d.shift();b=!d.length&&!a.exclusive;var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");d=(c.data(this,"events")||{})[a.type];for(var e in d){var i=d[e];if(b||f.test(i.type)){a.handler=i;a.data=i.data;i=i.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}return a.result}, -props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[H])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement|| -s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&& -a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a,b){c.extend(a,b||{});a.guid+=b.selector+b.live;c.event.add(this,b.live,qa,b)},remove:function(a){if(a.length){var b=0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");c.each(c.data(this,"events").live||{},function(){d.test(this.type)&&b++});b<1&&c.event.remove(this,a[0],qa)}},special:{}},beforeunload:{setup:function(a, -b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=K();this[H]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ba;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped= -ba;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ba;this.stopPropagation()},isDefaultPrevented:aa,isPropagationStopped:aa,isImmediatePropagationStopped:aa};var Ba=function(a){for(var b=a.relatedTarget;b&&b!==this;)try{b=b.parentNode}catch(d){break}if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}},Ca=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover", -mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ca:Ba,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ca:Ba)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(a,b,d){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="submit"||i==="image")&&c(e).closest("form").length)return pa("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit."+ -d.guid,function(f){var e=f.target,i=e.type;if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return pa("submit",this,arguments)})}else return false},remove:function(a,b){c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));c.event.remove(this,"keypress.specialSubmit"+(b?"."+b.guid:""))}};if(!c.support.changeBubbles){var ga=/textarea|input|select/i;function Da(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex> --1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d}function ha(a,b){var d=a.target,f,e;if(!(!ga.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Da(d);if(e!==f){if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",e);if(d.type!=="select"&&(f!=null||e)){a.type="change";return c.event.trigger(a,b,this)}}}}c.event.special.change={filters:{focusout:ha,click:function(a){var b=a.target,d=b.type;if(d=== -"radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ha.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ha.call(this,a)},beforeactivate:function(a){a=a.target;a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Da(a))}},setup:function(a,b,d){for(var f in W)c.event.add(this,f+".specialChange."+d.guid,W[f]);return ga.test(this.nodeName)}, -remove:function(a,b){for(var d in W)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),W[d]);return ga.test(this.nodeName)}};var W=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d, -f,e){if(typeof d==="object"){for(var i in d)this[b](i,f,d[i],e);return this}if(c.isFunction(f)){thisObject=e;e=f;f=w}var j=b==="one"?c.proxy(e,function(o){c(this).unbind(o,j);return e.apply(this,arguments)}):e;return d==="unload"&&b!=="one"?this.one(d,f,e,thisObject):this.each(function(){c.event.add(this,d,j,f)})}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault){for(var d in a)this.unbind(d,a[d]);return this}return this.each(function(){c.event.remove(this,a,b)})},trigger:function(a, -b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},toggle:function(a){for(var b=arguments,d=1;d0){y=u;break}}u=u[g]}m[r]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,i=Object.prototype.toString,j=false,o=true;[0,0].sort(function(){o=false;return 0});var p=function(g,h,k,m){k=k||[];var r=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return k;for(var q=[],v,u,y,S,I=true,N=x(h),J=g;(f.exec(""),v=f.exec(J))!==null;){J=v[3];q.push(v[1]);if(v[2]){S=v[3];break}}if(q.length>1&&t.exec(g))if(q.length===2&&n.relative[q[0]])u=ia(q[0]+q[1],h);else for(u=n.relative[q[0]]?[h]:p(q.shift(),h);q.length;){g=q.shift();if(n.relative[g])g+=q.shift(); -u=ia(g,u)}else{if(!m&&q.length>1&&h.nodeType===9&&!N&&n.match.ID.test(q[0])&&!n.match.ID.test(q[q.length-1])){v=p.find(q.shift(),h,N);h=v.expr?p.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:q.pop(),set:B(m)}:p.find(q.pop(),q.length===1&&(q[0]==="~"||q[0]==="+")&&h.parentNode?h.parentNode:h,N);u=v.expr?p.filter(v.expr,v.set):v.set;if(q.length>0)y=B(u);else I=false;for(;q.length;){var E=q.pop();v=E;if(n.relative[E])v=q.pop();else E="";if(v==null)v=h;n.relative[E](y,v,N)}}else y=[]}y||(y=u);if(!y)throw"Syntax error, unrecognized expression: "+ -(E||g);if(i.call(y)==="[object Array]")if(I)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&F(h,y[g])))k.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&k.push(u[g]);else k.push.apply(k,y);else B(y,k);if(S){p(S,r,k,m);p.uniqueSort(k)}return k};p.uniqueSort=function(g){if(D){j=o;g.sort(D);if(j)for(var h=1;h":function(g,h){var k=typeof h==="string";if(k&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,r=g.length;m=0))k||m.push(v);else if(k)h[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,k,m,r,q){h=g[1].replace(/\\/g,"");if(!q&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,k,m,r){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=p(g[3],null,null,h);else{g=p.filter(g[3],h,k,true^r);k||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,k){return!!p(k[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,k,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,k){return hk[3]-0},nth:function(g,h,k){return k[3]-0===h},eq:function(g,h,k){return k[3]-0===h}},filter:{PSEUDO:function(g,h,k,m){var r=h[1],q=n.filters[r];if(q)return q(g,k,h,m);else if(r==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(r==="not"){h= -h[3];k=0;for(m=h.length;k=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var k=h[1];g=n.attrHandle[k]?n.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);k=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?k===h:m==="*="?k.indexOf(h)>=0:m==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:m==="!="?k!==h:m==="^="?k.indexOf(h)===0:m==="$="?k.substr(k.length-h.length)===h:m==="|="?k===h||k.substr(0,h.length+1)===h+"-":false},POS:function(g,h,k,m){var r=n.setFilters[h[2]];if(r)return r(g,k,h,m)}}},t=n.match.POS;for(var z in n.match){n.match[z]=new RegExp(n.match[z].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[z]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[z].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var B=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){B=function(g,h){h=h||[];if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var k=0,m=g.length;k";var k=s.documentElement;k.insertBefore(g,k.firstChild);if(s.getElementById(h)){n.find.ID=function(m,r,q){if(typeof r.getElementById!=="undefined"&&!q)return(r=r.getElementById(m[1]))?r.id===m[1]||typeof r.getAttributeNode!=="undefined"&& -r.getAttributeNode("id").nodeValue===m[1]?[r]:w:[]};n.filter.ID=function(m,r){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===r}}k.removeChild(g);k=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,k){k=k.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;k[m];m++)k[m].nodeType===1&&h.push(k[m]);k=h}return k};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=p,h=s.createElement("div");h.innerHTML="

        ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){p=function(m,r,q,v){r=r||s;if(!v&&r.nodeType===9&&!x(r))try{return B(r.querySelectorAll(m),q)}catch(u){}return g(m,r,q,v)};for(var k in g)p[k]=g[k];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
        ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,k,m){if(typeof k.getElementsByClassName!=="undefined"&&!m)return k.getElementsByClassName(h[1])};g=null}}})();var F=s.compareDocumentPosition?function(g,h){return g.compareDocumentPosition(h)&16}:function(g, -h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ia=function(g,h){var k=[],m="",r;for(h=h.nodeType?[h]:h;r=n.match.PSEUDO.exec(g);){m+=r[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;r=0;for(var q=h.length;r=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var i=d;i0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,i= -{},j;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:j,elem:f});delete i[j]}}f=f.parentNode}}return d}var p=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,t){for(;t&&t.ownerDocument&&t!==b;){if(p?p.index(t)>-1:c(t).is(a))return t;t=t.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(sa(a[0])||sa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);ab.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||cb.test(f))&&bb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ga=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,db=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/"},G={option:[1,""], -legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]};G.optgroup=G.option;G.tbody=G.tfoot=G.colgroup=G.caption=G.thead;G.th=G.td;if(!c.support.htmlSerialize)G._default=[1,"div
        ","
        "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this); -return d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.getText(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&& -this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this, -"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ga,"").replace(Y,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ta(this,b);ta(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType=== -1?this[0].innerHTML.replace(Ga,""):null;else if(typeof a==="string"&&!/ - - - - #if $color_scheme and $color_scheme != "plush-default.css" and $color_scheme != "default.css"# - - #end if# - - - - - - - - - - -
        -
        diff --git a/main/interfaces/Plush/templates/config_newzbin.tmpl b/main/interfaces/Plush/templates/config_newzbin.tmpl deleted file mode 100644 index 481a413..0000000 --- a/main/interfaces/Plush/templates/config_newzbin.tmpl +++ /dev/null @@ -1,94 +0,0 @@ - - - - -
        - - -
        -
        - - Newzbin $T('accountInfo') - - $T('explain-newzbin') - -

        - $T('opt-username_newzbin'):
        - $T('explain-username_newzbin')
        - - -

        - $T('opt-password_newzbin'):
        - $T('explain-password_newzbin')
        - - -
        -
        - -
        -
        - -   Newzbin $T('newzbinBookmarks') - -
        - - - - - - - -

        - 0 then "checked=1" else ""#--> /> - $T('opt-newzbin_bookmarks')
        - $T('explain-newzbin_bookmarks')
        - -
        - 0 then "checked=1" else ""#--> /> - $T('opt-newzbin_unbookmark')
        - $T('explain-newzbin_unbookmark')
        - -
        - $T('opt-bookmark_rate'):
        - $T('explain-bookmark_rate')
        - - -
        -
        - -
        -
        - -   $T('processedBM') - - - $msgid
        - - -
        -
        - - -
        -
        -
        - - NzbMatrix $T('accountInfo') - $T('explain-nzbmatrix') - -

        - $T('opt-username_matrix'):
        - $T('explain-username_matrix')
        - - -

        - $T('opt-apikey_matrix'):
        - $T('explain-apikey_matrix')
        - - -
        -
        - -
        - - diff --git a/main/interfaces/Plush/templates/config_rss.tmpl b/main/interfaces/Plush/templates/config_rss.tmpl deleted file mode 100644 index 2a40c37..0000000 --- a/main/interfaces/Plush/templates/config_rss.tmpl +++ /dev/null @@ -1,227 +0,0 @@ - - - - -
        - - -
        -
        -  $T('newFeedURI') - - - -
        - -
        - -
        -

        $T('explain-RSS')

        - - -
        -
        - - -
        -
        - /> $feed - -

        - - - -      - - - - - - - - - - -      - - - - - - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        $T('rss-order')$T('rss-type')$T('rss-filter')$T('pp')
        - - - - - - - - - - - -
        - - - -
        - - - - - - - - - - - - - -
        - - - - -
        -
        - -
        -
        - - - - diff --git a/main/interfaces/Plush/templates/config_scheduling.tmpl b/main/interfaces/Plush/templates/config_scheduling.tmpl deleted file mode 100644 index a380c3e..0000000 --- a/main/interfaces/Plush/templates/config_scheduling.tmpl +++ /dev/null @@ -1,103 +0,0 @@ - - - - -
        - - -
        -
        - -   $T('addSchedule') -<%import time -t = time.localtime() -hour = t[3] -if hour != 23: - hour += 1 -else: - hour = 0 %> - - - - - - - - - - - - -
        -
        $T('hour').capitalize()/$T('minute').capitalize():
        -
        -  :  -
        -
        $T('sch-frequency'):
        -
        - -
        -
        $T('sch-action'):
        -
        - -
        -
        $T('sch-arguments'):
        -
        - -
        - -
        -
        - - - -
        - -
        - - -
        -
        -   $T('currentSchedules') - - - - - - - - - - - - - - - -
        $taskinfo[$schednum][1]:$taskinfo[$schednum][2]$taskinfo[$schednum][3]$taskinfo[$schednum][4]
        -
        -
        - - - diff --git a/main/interfaces/Plush/templates/config_server.tmpl b/main/interfaces/Plush/templates/config_server.tmpl deleted file mode 100644 index c7a9839..0000000 --- a/main/interfaces/Plush/templates/config_server.tmpl +++ /dev/null @@ -1,123 +0,0 @@ - - - - -
        - -
        - - -
        - -   $T('addServer') - - - - - - - -
        $T('srv-host'):
        $T('srv-port'):
         
        $T('srv-username'):
        $T('srv-password'):
        - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - -
        # $T('srv-connections'):
        $T('srv-timeout'):
         $T('second')
         
        />

        - - -        -
        - -
        -
        - - - - - - - -
        - - -
        - -   $server - - - - - - - -
        $T('srv-host'):
        $T('srv-port'):
         
        $T('srv-username'):
        $T('srv-password'):
        - -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        # $T('srv-connections'):
        $T('srv-timeout'):
         seconds
         
        />
        />
        />
        />
        - -
        -
        - - - -        -
        - -
        -
        - - -
        - - diff --git a/main/interfaces/Plush/templates/config_sorting.tmpl b/main/interfaces/Plush/templates/config_sorting.tmpl deleted file mode 100644 index f9e4baf..0000000 --- a/main/interfaces/Plush/templates/config_sorting.tmpl +++ /dev/null @@ -1,476 +0,0 @@ - - - - - - - - -
        - - -
        - -
        -  $T('seriesSorting') - - - 0 then "checked=1" else ""#--> /> $T('opt-tvsort') -

        - $T('affectedCat'): - -

        -  ± $T('sort-legenda')  -

        - - - - - - - - - - - - -
        $T('sortString'): - - -
        $T('presetSort'): - - - - -
        $T('example'):
        - -
        - -
        - -
        -  $T('genericSort') - - 0 then "checked=1" else ""#--> /> $T('opt-movieSort') -
        - 0 then "checked=1" else ""#--> /> $T('opt-movieExtra') -
        - $T('affectedCat'): - -

        -  ± $T('sort-legenda')  -

        - - - - - - - - - - - - - - - -
        $T('sortString'): - - -
        $T('multiPartLabel'): - - -
        $T('presetSort'): - - -
        $T('example'):
        -
        - -
        - -
        -  $T('dateSorting') - - 0 then "checked=1" else ""#--> /> $T('opt-dateSort') -
        - $T('affectedCat'): - -

        -  ± $T('sort-legenda')  -

        - - - - - - - - - - - - -
        $T('sortString'): - -
        $T('presetSort'): - - - -
        $T('example'):
        - -
        - -
        - -
        - - diff --git a/main/interfaces/Plush/templates/config_switches.tmpl b/main/interfaces/Plush/templates/config_switches.tmpl deleted file mode 100644 index f0ad999..0000000 --- a/main/interfaces/Plush/templates/config_switches.tmpl +++ /dev/null @@ -1,225 +0,0 @@ - - - - -
        - - -
        -
        - -   $T('processingSwitches') - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        $T('opt-quick_check'):
        0 then "checked=1" else ""#--> />$T('explain-quick_check')
        $T('opt-enable_unrar'):
        0 then "checked=1" else ""#--> />$T('explain-enable_unrar')
        $T('opt-enable_unzip'):
        0 then "checked=1" else ""#--> />$T('explain-enable_unzip')
        $T('opt-enable_filejoin'):
        0 then "checked=1" else ""#--> />$T('explain-enable_filejoin')
        $T('opt-enable_tsjoin'):
        0 then "checked=1" else ""#--> />$T('explain-ts_join')
        $T('opt-enable_par_cleanup'):
        0 then "checked=1" else ""#--> />$T('explain-enable_par_cleanup')
        $T('opt-fail_on_crc'):
        0 then "checked=1" else ""#--> />$T('explain-fail_on_crc')
        $T('opt-safe_postproc'):
        0 then "checked=1" else ""#--> />$T('explain-safe_postproc')
        $T('opt-no_dupes'):
        0 then "checked=1" else ""#--> />$T('explain-no_dupes')
        $T('opt-top_only'):
        0 then "checked=1" else ""#--> />$T('explain-top_only')
        $T('opt-par2_multicore'):
        0 then "checked=1" else ""#--> />$T('explain-par2_multicore')
        - -
        - - - - - - - - -
        - - $T('opt-dirscan_priority'):
        - $T('explain-dirscan_priority')
        - - -
        - - $T('opt-dirscan_opts'):
        - $T('explain-dirscan_opts')
        - - -
        - - $T('opt-dirscan_script'):
        - $T('explain-dirscan_script')
        - - -
         
        - - $T('opt-par_option'):
        - $T('explain-par_option')
        - - -
        - - - $T('opt-nice'):
        - $T('explain-nice')
        - - - -
        - - - $T('opt-ionice'):
        - $T('explain-ionice')
        - - - -
        - - -
        - -
        - -   $T('otherSwitches') - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        $T('opt-check_new_rel'):
        0 then "checked=1" else ""#--> />$T('explain-check_new_rel')
        $T('opt-auto_browser'):
        0 then "checked=1" else ""#--> />$T('explain-auto_browser')
        $T('opt-auto_disconnect'):
        0 then "checked=1" else ""#--> />$T('explain-auto_disconnect')
        $T('opt-send_group'):
        0 then "checked=1" else ""#--> />$T('explain-send_group')
        $T('opt-auto_sort'):
        0 then "checked=1" else ""#--> />$T('explain-auto_sort')
        $T('opt-replace_spaces'):
        0 then "checked=1" else ""#--> />$T('explain-replace_spaces')
        $T('opt-replace_illegal'):
        0 then "checked=1" else ""#--> />$T('explain-replace_illegal')
        $T('opt-pause_on_post_processing'):
        0 then "checked=1" else ""#--> />$T('explain-pause_on_post_processing')
        - -
        - - - - - - - -
        - $T('opt-ignore_samples'):
        - $T('explain-ignore_samples')
        - -
        -       - - $T('opt-ssl_type'):
        - $T('explain-ssl_type')
        - -
        - -
        -
        - -
        - - diff --git a/main/interfaces/Plush/templates/connection_info.tmpl b/main/interfaces/Plush/templates/connection_info.tmpl deleted file mode 100644 index 281a4de..0000000 --- a/main/interfaces/Plush/templates/connection_info.tmpl +++ /dev/null @@ -1,58 +0,0 @@ - - - - -
        - $T('version'): $version ⋅ $T('uptime'): $uptime ⋅ - $T('link-showLog') ⋅ - $T('link-showWeblog') ⋅ - $T('logging'): - $msg -
        - - - -
        - -   - $server[0]:$server[1]:$server[2] - - ($T('server-blocked')) -   $server[6] - - -
          - -
        1. ⇒ $thrd[1]
          ⇒ $thrd[2]
          ⇒ $thrd[3]
        2. - -
        $T('none')
        -
        - - - - -
        - $T('emailResult') - $lastmail -
        - - - -
        - -   - $T('lastWarnings') ($T('clearWarnings')) - -
          - -
        1. $warn
        2. - -
          -
        - - - diff --git a/main/interfaces/Plush/templates/history.tmpl b/main/interfaces/Plush/templates/history.tmpl deleted file mode 100644 index 5fd4342..0000000 --- a/main/interfaces/Plush/templates/history.tmpl +++ /dev/null @@ -1,80 +0,0 @@ -<% import datetime %> - - - - - - - - - - - - - - - - - - -
        -  
        Loadedmain_sprite_container sprite_hv_errormain_sprite_container sprite_hv_star"> 
        -
        - $line.name - - - -

        https://www.newzbin.com/browse/post/$line.report'> 
        -
        - -
         
        - - - -
         
        -
        - -
         
        - - -

        $T('category'): $line.category

        $T('Plush-path'):


        $T('Plush-storage'):
        '> 
        - -
         
        - - - - -
         
        -
        - - -

        - - - -

        '> 
        - - - -

        » $line.action_line 

        - - -

        » $line.fail_message 

        - -
        - - <% d = datetime.datetime.fromtimestamp(float(line['completed'])) %> - $d -
         
        - -
        - diff --git a/main/interfaces/Plush/templates/main.tmpl b/main/interfaces/Plush/templates/main.tmpl deleted file mode 100644 index d574d0b..0000000 --- a/main/interfaces/Plush/templates/main.tmpl +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - SABnzbd+ Plush - - - - - - - - - - - - - - - - - - - -
        - - - -
        -
        - - -
        -

         

        -
        -
        -
        -
        - - -
        -
        - - -
        -

        $T('menu-history').upper()

        -
        -
          -
        • -
        • -
        -
        -
        -
        - - -
        -

         

        -
        -
        -
        -
        - - -
        -
         
        -
        - -
        - -
        -
        -
        -
        - -
        - - - diff --git a/main/interfaces/Plush/templates/nzo.tmpl b/main/interfaces/Plush/templates/nzo.tmpl deleted file mode 100644 index 8614826..0000000 --- a/main/interfaces/Plush/templates/nzo.tmpl +++ /dev/null @@ -1,121 +0,0 @@ - - - - SABnzbd+ $version - $T('queued'): $mbleft $T('MB') - - - - - - - - - - - - - - - - - - -
        - - - - -
        - - - - - - - - - - -
        - -
        - - -
        - - - - - -
        -
        - - - - - - - active"> - - - - - - -
        $T('Plush-progress')$T('nzo-filename')/$T('nzo-subject')$T('nzo-age')
        > -
        -
        px -347px"> -
        $file.mbleft $T('Plush-left')
        -
        $file.mb $T('MB')
        -
        -
        -
        $file.filename$file.age
        - -
        -
        - -
        - - - - diff --git a/main/interfaces/Plush/templates/queue.tmpl b/main/interfaces/Plush/templates/queue.tmpl deleted file mode 100644 index 7042198..0000000 --- a/main/interfaces/Plush/templates/queue.tmpl +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - class="alt"> - - - - - - - - - - - - - -
        -  
        main_sprite_container sprite_ql_grip_pausedmain_sprite_container sprite_ql_grip_activemain_sprite_container sprite_ql_grip_queued"> 
        -
        - $slot.filename - -
        -
        px -347px"> -
         $T('Plush-left')
        -
         $T('MB')
        -
        -
        -
        - - $slot.timeleft $T('Plush-left')
        $slot.eta - -  
          - -
        - - - - - - - - -
         
        -
        diff --git a/main/interfaces/Plush/templates/static/images/plush-default-split.tar.gz b/main/interfaces/Plush/templates/static/images/plush-default-split.tar.gz deleted file mode 100644 index 73c7c4acd882bf524d6bd3e5c3df02556d4b24df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83082 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%0A_EBini)b{CcrdNhQN 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¥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

        qAORaQ6_tbpA;+5 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

        9qj1`PM+6>G&o}XnO>dYq2$m zUKA9;cemzy!m6JoX=){k2?)8+Q7xJf_~-CKhwhqa)Gf8ZBJNwetR3?*IUtluRV+AZ zRaKo%5h{#YTo+od_|jI8>cu*F;4f#diP6H#FkXV-#cPyOXc1#;{_?*yr<-c4L` zHwF*a2HMfu=Pf%yn-4dvX>D~4xwAvU&U{_s>xy!YAU9Op4k|1nIW6^B&>Re#9ZMUH z>83n0aMl0GbasqbI*lO_x6eD4#s%LUBl!1dDZ}OZ>Rwo1x?*!>}-fdH<)?D9h#@F7T zmJ2KC7Lxil7T@<;22Z}_JO_?tS>w$a({==W@WF<1mDMP56nk=?PbNmgROoq52eNW) zgjEUvIxWPI4GGMBc3Tzg7-GfG5 zQteGBkV@%y7d<8D%87;^aJiu~!3@oC?JY#POt6;9J3OZk4) zCWa9Vjs)F}r_9%6!Qk8`X&c4Q%ysXR%)%V!bn@nWNTVlbB8Cr=CkkbT#&5D6V|>ok z_A~q4-^{)YNRjIP8o#XP62;kNi3O;)lX&OPH$z}Po#aIsQ@{=tadYgIUHe?xffB8` zzR!^2k95)a@NYO_*^D{Z16oEnBZ`)5M=<*?O2+e2@AwGT0~vHrHBWe4=EekkaJdN` zlF%MZ!V}xZyGZ@JV8?0Aj^EpD>=%V_e-A!=yq@Y`eG_Xm3U^EH;b-P+{D#|FH%7OB z5X-?|yqk+|Pwa3JN5cO|G12)zcGMsF$GBJl2Dzf}mmVzXe6E;3A0K{zZ;M@r@#*X7 zxJ8gFx94uZbo1`!v$sHUa=)l(U+7b12B4z;H83!6vieMLet+6B@np>% zyVI&tVy^Xus?5W2*xL*oWKpa`3EOd9a`-zB8@-Xxb{~2|gcuUzCg96oXFo~5OjPET zD^0?!6q>o3&qzNGpc(qWmZcsVFt5*^#s$2%H|yr|!|QVenSh@%k^3jO)kxtxV;>Ue z4_?`cC(FI#Gs`qJwM2ADb@GX2(A6SSxj)t9UozAo;^Cxjl=C+CG(?+Se&wM{7P~e} z_yGam7o}2LF zB0jYIHx32EdGyr1#Ko0*CKVZU#o#pJ zYa$UfTm5c!qdP2@@N;rTK6GnwF)l3o2k@U(r7O~-Qe=9~NuRI1q6{2@ZTb4_qSGe_ z%I;Gw8}U($Ynv!#e+`C=4k8d^h;Uck#>%fYs*;?7Y0v@~z_4(z0j>nS+}C8Pdtf1j zPbsDq_kXm?UJnrS!$<`z4q^hAgJrS6{rOizKy{Ehn5=V~$g#rcBFme*K-@=RDP@)P z;_B?>eC3L0BB0ylV337YodOTBYLxo+?@XP3&X8d{ZD2O$lqDTCu_c+{YkQ{Bx0>GY zx-ScT1*#bfuEN}cG>=YkA1hF|WuvtYZ0YuRE@jDXIFurF$y1G4pr7!|fqf(u+?Nbx z(rAJ}S1U_Rk;mW}fS=a=RMkqOEF(=;HxQ_~)DN2VxFf=k!*$-`qa2gRT<2n-WnZbv=st}cF;Wp|bvZSc?0b%$ z%@^oc;YSZk*2dZ=|E{IA@c|zm?787r@r?jGPV|PZ^V@7;O&i^1@z>fnL7)9Kf{j8i zrN2&Jy#`>;ZO3&46ez`)OP%1}mYJpxgM&|>oh$8?Ys@4xqlqeavrenk)v(m|LgO8- zpsIrjyC~&t|JA(vfx2;O3qT4nGrrY>Y1h{e?NeMk{heDSQvY6C9aWDw?)=CeGN$-0 zn*MU;yK$o8OXHcxQq3DUAKejqdW8SLI5fX=fsBccmaqA#5+&`6EeRrCpR*$>LEUjMF5hwrw|Gqu@s;69h0UUK9I=(_F= z$$P^e8C%?iyc_c)mN=U$!{#_TgV@9bFXPF95|6zjoMK;+MlVYbl|pnH1-htAMldTo zq$@-o?*CHj&9cqhigw{3+ij=eww(m;VmJ{;a+p=I&^NP4?ve_{WVbik54f4%<*T7>1^K1QZYWRqvtI4h#>H^4^Sx0C!DWG zJUF2Q{G9D{>>VT&=y}Pn8Z?$xr=py%pS^mnlKHT~KpiTu8c4k>^`qwj=Nk20x?%1d zOi21)p#%JX3*88K1>6jh&c>V{06Tp`Ut0;_Ww6d@UVYj(Niifno&kxYqLLviGM35n z23G7619X~g?jJf#@BV%Sm>VwWv}Kzhg5qOo5tqoHB|JOdZg(r0^8?0F0$|mL&*XGQ zH=pSO*(k(KUOj+Q7#>5tGD35#z?diq0RrSv#aDI--@S;fWnot|G6jWiY+uEi_oq$h z@56YOP3<6OOz&uqHmSNa9UXzp$JlH;OHKZ#v;kPsM!$83&9fD2|BzX2Uv;@glEmH zRS=;*M0yUi?-HVQ>n=p}#JQ&jweBNx9~vR?4FEE#+EiT$ohBsJlB`Vp1LB|UWEQTM zdBY>UF^bxi@S-hA2gy&yIwS{NH~$}}=VDCoCM*gZkEu5eh|-V<#e^OSB5TI+2K}{N z^k#@c3Z5`En_^bXY}6?bKcZ`dh2g3tl#5YkJf47r_(5CH69@}VpTn@u9yY$F5zw(9 zjw_B2wlu30)r?>IR;rG!OAm+?6&9YKiU=A+@$*}6=6E_q-Zob zDQv8*e*$VeL_&%GYJaUW96f5!>+Iw=s{$y82K?E~$dE7;Auz9c9lgJY+q7A|#|Y2T zUOgeEBf+^S%y}ZZN{fzzq;ZPd88oXuC73*4Y2;>Sdx3>zrfJ!lnTRMueQOxHb=rv# z4>y;h90V#)P^aMumqnDU@v8>>gW(j#~ zT1A@LP`b&1dfRGiaF6H^om{nU^~8^nHt!^sAvDA*KlSxJ?Roi1RFPFNBW2T<2 zO)K0JAGc5L{l>`m$^9+%Nvh=YI67YL@u7zSnt31ju&M_`Nak&F!z!Ta7rem3{F~XD zT}0KI%zubG8*irrvl+G*m!5DWT4S#bA)V$9Xl!`ErUhhpCycTI{P@n;w)$0N367!zdC;X^uR3QKS3iL>R*h zEdBhbc6D@7T1;U*%c85%t1;=<^5O_x=R}huluk1?zat#kt~g$T{#hYEjkAIsuDkX{ z+`Yh=e>M4#trcD3HsyT)2ArqARaNrFR&=Qg^b3GF->kuR{bJJE=1q*?boAK2FjAc- zd8LNoSbv_U#H)!hZ($ z#KJW0DF~I|MoXDG_8|8qHX1;zrB6lrygZwho0Li(c?l2N=MsO?KS2(HLpM@V&%RN`D)Ju?N@dnjU<5qU`rOmlRz)#-iW;iFSD4RD5Iyjf{G}fTqgVB$W(Vt1y z)acafw#qR13wi{0ViF>vO*(;EMM81$oi+#Q&tn%Eo4&IO#n*2OykOr?wWsGO7y7eT z6_%X?+oXMx)j*ECozFlbU_bbOQgCU{t?=mPre-79Rr`M9J=X;!{E>Uj^dVS@?eszA z9BsY0I~aYoJ(=O;BpC}4Z?r&Tm8g!+n3kFBrD~e-r?&Rl=3y64eQfcM9A0;)SvbL7 z1O8rF>|dTQl4ie{^Q!n4lXYC_J6hJadan~Ozm5$>s;MAyGv#M*Bx*a02Op=Vq5lh0DoJFVkTV>)hy#44sM~nFd^b>4GwvL{9k(mmHm@KCgmD&DeZ_z)evpQJ87VE7AzE{99(ZK3 zA88oM!pc9WXL)aly7uN^1x*v*{CT9c=a%8s+Go-M-rrT>SJb?Eh2wcu^r6UHZjZTR zcaF7(ib^J>(iQX^KEk&SslN!FJVXjGO@p{nojs>|u>*Es&wLtqmUBMr+|V|?vBqS}CLMI&n diff --git a/main/interfaces/Plush/templates/static/images/plush-default/sabnzbdplus.ico b/main/interfaces/Plush/templates/static/images/plush-default/sabnzbdplus.ico deleted file mode 100644 index 9bd8d1333f965c9b6ba145c2b5b155f4972880d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmeH{%}Z2K7{-6M$+Vhsn!d)$)W+1ZrfDXf(HwKM(aEtiC~J{Ki?k@HHf^&-3pcfh zAc{iJMK1bS1mPwU0zr_FHiZ~{5Cmb1q7S6z_MEG>nfe0)&*68T_j%8I&f&g`3znwG zgELNK!74>%!lVj?MUGaevmD7-Y}xO&ssg<@s=? zkG4tqfnRWWjOcsC$FAUhF0E+cm8o@m;o1bg7m6Q=rY`9F%<->^Pu{@wOj>mSdPX4F zK*6|tM-M!Z=J^S|m3nV))FpNlhCpq=q=HMrro93-h60X02OT%#WB}7`` z&J^QjZ&(b8hvKdX#G$4gZhr({5rk88eN(>vD3N#4L7Q|stvj0`c1TS-0*#%}|Alkv z&uP8eY3lEbdt%_H`q7`!)49Z42ma3vBoYZ`nf?O#nQ8p&p2<0WX8q$c&N~H8wVV3F z%HrbOwexn!d;M!*adK;3Ypo}&qQ;6nT357fS-815XMetbmvgXSU)K8NzN*zr=5KU- zUG=(>hGk2)Z3w#^U$lGC-asJk%HCP(_ytibvQopUp7v#x!Io4iwJ8`f|3!`M WWQ{T1u76-@Q*?_b*?;GCF8l@_M4M*- diff --git a/main/interfaces/Plush/templates/static/images/plush-default/spinner.gif b/main/interfaces/Plush/templates/static/images/plush-default/spinner.gif deleted file mode 100644 index 4ff08c960181ddbdfd4b273b3f8a3b0708ca7a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1169 zcmZ?wbhEHb6krfw_{_lY|NsBpyLXqDm#3wrb#!!uhK9PhxXhe6)7aQ})v8qt7(nqq zx1VcBu(M-;tC5}oGb2!e;!hSrgL&0n(abXkZ^qt`T%tHH)<`5`Qp8~{9OZ*EDdGfRdri#v%oFCAgaC!5IIgCvHq8=aS9rb2Gb{iwmOn#uLt^y}G z1@=nx2R6*)oX`_oz@j9eqERa0uG$)@D`+8bUa9lq%tP+iX7f0;^&fTjF3_`U44EK# zk;$@)-@!pPN%7f})7nf*m?nb*l#^#~vIn=ou9Fi&4m8S47GP*itGuMa5oK8GsmE$! z5$C{_=)v)$!kvE#KgK3BMaOmh)l5dkhzUUB1)i9s&Hg&GX-V#E7CtAP&aW-Y zXDrAOlab&)r1Cz=pd?}oCsTrkM2dw3BrNfnkrUhZOtp{?gVENSW0FDh7BmS zc!JHhXg>0Ni;D-VCxb%h#Dpc8tnDk$MsN3G3*c#PJ2$uMNy5x2Sx!m{4l^d?O`gyr zyoX~Q)5*`9n&qrDob@gm->Yjoq{4(NaD?_=4V!7g>$#!vkw{uJI}7{rs%wh=3)D}l zF59i;_NQg;hB8TxB3bUFAO?7WdAh&XJ>ijq;R9f`EUw@hL8%|e8-a_2F&MADst`M T%9-4>Nn4PkuHld_6N5DXh*@sI diff --git a/main/interfaces/Plush/templates/static/images/plush-default/sprite-config.png b/main/interfaces/Plush/templates/static/images/plush-default/sprite-config.png deleted file mode 100644 index 9333eec07d3e7ce7064caf4a5a41ce06c9507609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29590 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%0AtrSRoNFiIx@1&dK)y#%FR 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 diff --git a/main/interfaces/Plush/templates/static/images/plush-default/sprite-jq-colorbox.png b/main/interfaces/Plush/templates/static/images/plush-default/sprite-jq-colorbox.png deleted file mode 100755 index 41e0238f83b202cc7ddc1633e4bfc79f790e9628..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 zcmV<510ei~P)<>K+r@9*#U`1tty^Uu%E>+9?3^xH5nFsZ4jqS0fw+lRj2 zlfAvYlgdli*Vmk!oM2#J!^6YW>bDRO5TBo)aBy((_~+l>-}3VE&E~7H*n82@(NIuO zkB^VGwzjXYuioC?n$1_DqN3aF!yq6av3!VZ0008wNkld7A5Jj~l@d_Ah zYy)r+aa>0* zo~)MW?@Mbx?qXDr;YLrKKd}|(5MFSCu9F;HIIm3-|Lf3su_Ngm(xFg#W7qQH35vr>o@fGsk0w zap)r7l5_#-nJVftj^pdLjZ{P>3HLOei7Ggvi*+`L{-)qox97IX9ene(0y>YwG`$nz zdpbBxL%=OvbobNOy>xMQjADAiDEj(-`Zn*Qcfh4u4MESd0dpUnbV?8er)w{&$R}*D zf#(pf>A`4_=k@5x8wV_WG9@)=Bmo+F51qY{baZ_?+m8lR79cD3(OK5v2eN}t*V*3l zv)h)AcxunOPoKb!US3{aUS2<~84hnAvklv%>4weH6fRE65XRHREBgCT*^j#zmJ_(q ziHAti**B|+Cojt)|mCQ1Ht=yJXx=@Qass;KugO|RQFQ4y6S-P2Sis^Ew&7qdb1 zR|U7aJ-5}|!Ixhvpz}CP(<>>zr-Rd!1l-bPbw7R4OP71cD5fWjqA%{JZ{~gU3b<6O zBOJ>EUFM=k@5x8wV_WFeQ~}Bq17l51qY|baZ_y z+m8}d79uP5(b=rR4`c$p7yxKbEXC{-_h|qC N002ovPDHLkV1h&X{LlaZ diff --git a/main/interfaces/Plush/templates/static/images/plush-default/sprite-main.png b/main/interfaces/Plush/templates/static/images/plush-default/sprite-main.png deleted file mode 100644 index 6f29b85c78ab215f01e43d81f87a1d81ce32dfbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28659 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 Cuu$Fr diff --git a/main/interfaces/Plush/templates/static/images/plush-default/viewmag.png b/main/interfaces/Plush/templates/static/images/plush-default/viewmag.png deleted file mode 100644 index 359fd7d58be4d9ff7f70ed2a9869c57b74cf25dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1457 zcmV;i1y1^jP)4Tx0C)j~RL^S@K@|QrZmG~B2wH0nvUrdpNm;9C zMbtL^5n^i$+aIn^?(HA4aZWV5ov6ELTdbo0FI&wK{O>*+w4vx z20?>!`FrQsdJlnHR>OPycd~b_n$otK2Za4V;76L-DzNVtaSB-y0*E}{p()372;bw_ z^6ZZ}PI-92wGS&j#91PIKs7DSe@(bk%_Y-7gGe}(^>I=@oY#w#*Bu9GZf3^F5WP>3 zrn}7Ut74&?PWBFvy`A)aPP5)V!Xd&78LdA?xQ(9mjMYElVd13a#D+Z_7&Y|xU=_C- zsrWU*6kiZcC!$nw*)9$7n6CX+@=AhmkT}X@VSsa5NKe;HZuq)~1$`#h6R+ZTR#D-3 zj}vF!)ZOnz+5)dI4jl{{44Mr{P!L4~VVJN`K!!XTF*LGrKO?IK8z z<8w`3e3jI8lUGNUta*C8n(P`s>{pjD=7Kek#B;Fw@hxAK%$F&Q6vg9J^Xf~4by_hu z-=A!MJ3Znq&n~srbFGPsH&&aMXZ>nO`|hf|ljc?VPhR!${AbO?W8x_>CU%PFA&Hm8 zF7cAsOREdwU~R_;ot1_u(ruCYB-LPGn!NQdT|ZlRy+(fw^-+`=%+gee_kY4FWHg<* z4sZI8+sFJD270UUORdLHO0nA4V)%{fwsET5CQ>B?eK%uw4yQc~9?*JVo2}ze(;aRc zp*ceL#HUJSllrgm5wQKRQu+C;QrUh^8rFfA`ftFz{YAidi-`aL010qNS#tmY3ljhU z3ljkVnw%H_00LP_L_t(I5o7%S|33pIfCX7|Z=t29f|5d+pqQi?BO?>br+05|ynFL{ zT4K%CnaJvp*^Dq3Oe(R?HL$ShmD4a`6_eItU}9!rc>VMS!^0aV86MoaI(O6AP3fyv z{r`)s8N_A+5lyMOt~w@W6J=EmSp`KE8JJnv7#NwD8Tf@|7!))u7!=iYli6R26oS;E z1F!+|@^UqNf?|yS8U8bT`S60_)BC3kpWZ!T`10`u!=GP282E(58LX^y3d9&0dC(02 zhXKEku<_qNzZt%N`M~h^_b-NDKfi+2{r&Tc;pg`+48MPVXONJQmgeVYPy;;e_kfDEm|72igV`pFjdWnIVfgM>hhz<6_yVq|nvUBn>aPbN< z{QLVCY%9p-e}DflaB}l8aPx^UJbn1!{quJW_s|UhyI{xm6CHBODjT%S+!?s}MHzkr zT>(lRtZbYN99(=1_pTmg*s}fXyf6R%zeG0x?1I%N-fx`Rzo_-j#X~^nvoZ*X$}=Z0O+#QtiR5evJn3$Pa9^HHRZ1?_~ z3zX#flnQFAbxD$QA&}>54NbwWR4k zzkF!&|MPo$en(pig~RlqXod-5qeWR64C~^wo?SXP>HnEsoxdY21QI~%h&BMESb&v5 zzcO0=;l=$E{@2B8-y_)okOmP}2BSa|zU{I+3=tqcN+7}mh6DxxGF4C^5O4X*00000 LNkvXXu0mjfFf6+R diff --git a/main/interfaces/Plush/templates/static/javascripts/config.js b/main/interfaces/Plush/templates/static/javascripts/config.js deleted file mode 100644 index 2ce52cd..0000000 --- a/main/interfaces/Plush/templates/static/javascripts/config.js +++ /dev/null @@ -1,223 +0,0 @@ -// ***************************************************************** -// Plush Config code as follows, by pairofdimes (see LICENSE-CC.txt) - -jQuery(document).ready(function($){ - - // rounding - if ($.browser.safari) { // slow down rounding just a hair for Safari or it spazzes out - setTimeout (function(){ - $('.config_nav li a').corner("round tl bl"); - $('#config_container').corner("round"); - $('#config_content legend').corner("round"); - $('#force_disconnect, #save, #sabnzbd_restart, #test_email, #help').corner("round"); - }, 50); - } else { // the slight delay lags on Firefox, so don't run otherwise - $('.config_nav li a').corner("round tl bl"); - $('#config_container').corner("round"); - $('#config_content legend').corner("round"); - $('#force_disconnect, #save, #sabnzbd_restart, #test_email, #help').corner("round"); - } - - // Confirm user exits without saving changes first - if (config_pane != 'NZO') { - $(':input','form').change(function(){ - window.onbeforeunload = function(){return confirmWithoutSavingPrompt;} - }); - $('form').submit(function(){ - window.onbeforeunload = null; - }); - } - - switch(config_pane) { - - // not a config page, rather queued nzb file listing page - case 'NZO': - $('#nzo_reload').click(function(){ document.location.reload(); }); - - // operations - $('#nzo_delete').click(function(){ - $('#action_key').val('Delete'); - $('#bulk_operation').submit(); - }); - $('#nzo_top').click(function(){ - $('#action_key').val('Top'); - $('#bulk_operation').submit(); - }); - $('#nzo_up').click(function(){ - $('#action_key').val('Up'); - $('#bulk_operation').submit(); - }); - $('#nzo_down').click(function(){ - $('#action_key').val('Down'); - $('#bulk_operation').submit(); - }); - $('#nzo_bottom').click(function(){ - $('#action_key').val('Bottom'); - $('#bulk_operation').submit(); - }); - - // selections - $("#nzo_select_all").click(function(){ - $("INPUT[type='checkbox']").attr('checked', true).trigger('change'); - }); - var last1, last2; - $("#nzo_select_range").click(function(){ - if (last1 && last2 && last1 < last2) - $("INPUT[type='checkbox']").slice(last1,last2).attr('checked', true).trigger('change'); - else if (last1 && last2) - $("INPUT[type='checkbox']").slice(last2,last1).attr('checked', true).trigger('change'); - }); - $("#nzo_select_invert").click(function(){ - $("INPUT[type='checkbox']").each( function() { - $(this).attr('checked', !$(this).attr('checked')).trigger('change'); - }); - }); - $("#nzo_select_none").click(function(){ - $("INPUT[type='checkbox']").attr('checked', false).trigger('change'); - }); - - // click filenames to select - $('#config_content .nzoTable .nzf_row').click(function(event) { - $('#box-'+$(event.target).parent().attr('id')).attr('checked', !$('#box-'+$(event.target).parent().attr('id')).attr('checked')).trigger('change'); - - // range event interaction -- see further above - if (last1) last2 = last1; - last1 = $(event.target).parent()[0].rowIndex ? $(event.target).parent()[0].rowIndex : $(event.target).parent().parent()[0].rowIndex; - }); - - // - $('#config_content .nzoTable .nzf_row input').change(function(e){ - if ($(e.target).attr('checked')) - $(e.target).parent().parent().addClass("nzo_highlight"); - else - $(e.target).parent().parent().removeClass("nzo_highlight"); - }); - - // set highlighted property for checked rows upon reload - $('#config_content .nzoTable .nzf_row input:checked').parent().parent().addClass("nzo_highlight"); - - return; // skip the rest of the config methods - break; - - - case 'Connections': - $('#logging_level').change(function(event){ - window.location = './change_loglevel?loglevel='+$(event.target).val()+'&session='+apikey; - }); - break; - - case 'General': - $('#apikey').click(function(){ $('#apikey').select() }); - $('#generate_new_apikey').click(function(){ - $.ajax({ - type: "POST", - url: "../../tapi", - data: {mode:'config', name:'set_apikey', apikey: $('#apikey').val()}, - success: function(msg){ - $('#apikey').val(msg); - $('#hiddenSession').val(msg); - } - }); - }); - $('#sabnzbd_restart').click(function(){ - if (confirm($('#sabnzbd_restart').attr('rel'))) { - $('#sabnzbd_restart').html($('#sabnzbd_restart').attr('rel2')); - $.post('../../tapi', {mode: 'restart', session: apikey} ); - } - }); - break; - - case 'Servers': - $('form .testServer').click(function(event){ // test server - $(event.target).next('span').addClass('loading'); - $.ajax({ - type: "POST", - url: "../../tapi", - data: "mode=config&name=test_server&"+ $(event.target).parents('form:first').serialize() +"&apikey="+$('#apikey').val(), - success: function(msg){ - alert(msg); - $(event.target).next('span').removeClass('loading'); - } - }); - }); - $('form .delServer').click(function(event){ // delete server - if(confirm($(event.target).attr('rel'))) - $(event.target).parents('form:first').attr('action','delServer').submit(); - return false; - }); - break; - - case 'Categories': - $(':button').click(function(event){ // delete category - window.location="delete/?name="+$(event.target).attr('name')+'&session='+apikey; - }); - break; - - case 'RSS': - $(':checkbox').click(function(event){ // toggle feed - $(event.target).parents('form:first').attr('action','toggle_rss_feed').submit(); - return false; - }); - $('#config_content .EntryFieldSet .preview_feed').click(function(event){ - $.fn.colorbox({ - href:'test_rss_feed?'+$(event.target).parents('form:first').serialize(), - width:"80%", height:"80%", initialWidth:"80%", initialHeight:"80%", speed:0, opacity:0.7 - }); - return false; - }); - $().bind('cbox_complete', function(){ - $('#cboxLoadedContent input').hide(); // hide back button - $('#cboxLoadedContent h3').append('

        '); // add spacing to header - $('#cboxLoadedContent a').click(function(event){ - if( $(event.target).attr('target') != '_blank' ) { - $.ajax({ url: $(event.target).attr('href') }); // ajax downloads - $(event.target).replaceWith('Download'); - return false; - } - }); - }); - $('#config_content .EntryFieldSet .download_feed').click(function(event){ - if(confirm($(event.target).attr('rel'))) { - $.fn.colorbox({ - href:'download_rss_feed?'+$(event.target).parents('form:first').serialize(), - width:"80%", height:"80%", initialWidth:"80%", initialHeight:"80%", speed:0, opacity:0.7 - }); - } - return false; - }); - $('#config_content .EntryFieldSet .delete_feed').click(function(event){ - if(confirm($(event.target).attr('rel'))) - $(event.target).parents('form:first').attr('action','del_rss_feed').submit(); - return false; - }); - $('#config_content .EntryFieldSet .filter_order').change(function(event){ // update filter order - window.onbeforeunload = null; - window.location = $(event.target).val()+'&session='+apikey; - }); - break; - - case 'Email': - $('#test_email').click(function(){ - return confirm($('#test_email').attr('rel')); - }); - break; - - case 'Index Sites': - $('#getBookmarks').click(function(){ window.location='getBookmarks?session='+apikey; }); - $('#hideBookmarks').click(function(){ window.location='hideBookmarks?session='+apikey; }); - $('#showBookmarks').click(function(){ window.location='showBookmarks?session='+apikey; }); - break; - - case 'Sorting': - previewtv(); previewmovie(); previewdate(); // display sorting previews -- these functions are defined below - break; - - }; - - // page's save button for those pages that use it - $('#save').click(function(){ - window.onbeforeunload = null; - $('form').submit(); - }); - -}); // end Plush code diff --git a/main/interfaces/Plush/templates/static/javascripts/lib.js b/main/interfaces/Plush/templates/static/javascripts/lib.js deleted file mode 100644 index e75b7fe..0000000 --- a/main/interfaces/Plush/templates/static/javascripts/lib.js +++ /dev/null @@ -1,407 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
        a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

        ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
        ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
        ","
        "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
        ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
        "; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); - - -/* ColorBox v1.3.6 - a full featured, light-weight, customizable lightbox based on jQuery 1.3 */ -(function(c){function r(b,d){d=d==="x"?m.width():m.height();return typeof b==="string"?Math.round(b.match(/%/)?d/100*parseInt(b,10):parseInt(b,10)):b}function M(b){b=c.isFunction(b)?b.call(i):b;return a.photo||b.match(/\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i)}function Y(){for(var b in a)if(c.isFunction(a[b])&&b.substring(0,2)!=="on")a[b]=a[b].call(i);a.rel=a.rel||i.rel;a.href=a.href||i.href;a.title=a.title||i.title}function Z(b){i=b;a=c(i).data(q);Y();if(a.rel&&a.rel!=="nofollow"){g= c(".cboxElement").filter(function(){return(c(this).data(q).rel||this.rel)===a.rel});j=g.index(i);if(j<0){g=g.add(i);j=g.length-1}}else{g=c(i);j=0}if(!B){C=B=n;N=i;N.blur();c(document).bind("keydown.cbox_close",function(d){if(d.keyCode===27){d.preventDefault();e.close()}}).bind("keydown.cbox_arrows",function(d){if(g.length>1)if(d.keyCode===37){d.preventDefault();D.click()}else if(d.keyCode===39){d.preventDefault();E.click()}});a.overlayClose&&s.css({cursor:"pointer"}).one("click",e.close);c.event.trigger(aa); a.onOpen&&a.onOpen.call(i);s.css({opacity:a.opacity}).show();a.w=r(a.initialWidth,"x");a.h=r(a.initialHeight,"y");e.position(0);O&&m.bind("resize.cboxie6 scroll.cboxie6",function(){s.css({width:m.width(),height:m.height(),top:m.scrollTop(),left:m.scrollLeft()})}).trigger("scroll.cboxie6")}P.add(D).add(E).add(t).add(Q).hide();R.html(a.close).show();e.slideshow();e.load()}var q="colorbox",F="hover",n=true,e,x=!c.support.opacity,O=x&&!window.XMLHttpRequest,aa="cbox_open",H="cbox_load",S="cbox_complete", T="resize.cbox_resize",s,k,u,p,U,V,W,X,g,m,l,I,J,K,Q,P,t,E,D,R,y,z,v,w,i,N,j,a,B,C,$={transition:"elastic",speed:350,width:false,height:false,innerWidth:false,innerHeight:false,initialWidth:"400",initialHeight:"400",maxWidth:false,maxHeight:false,scalePhotos:n,scrolling:n,inline:false,html:false,iframe:false,photo:false,href:false,title:false,rel:false,opacity:0.9,preloading:n,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",open:false,overlayClose:n,slideshow:false, slideshowAuto:n,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:false,onLoad:false,onComplete:false,onCleanup:false,onClosed:false};e=c.fn.colorbox=function(b,d){var h=this;if(!h.length)if(h.selector===""){h=c("");b.open=n}else return this;h.each(function(){var f=c.extend({},c(this).data(q)?c(this).data(q):$,b);c(this).data(q,f).addClass("cboxElement");if(d)c(this).data(q).onComplete=d});b&&b.open&&Z(h);return this};e.init=function(){function b(d){return c('
        ')}m=c(window);k=c('
        ');s=b("Overlay").hide();u=b("Wrapper");p=b("Content").append(l=b("LoadedContent").css({width:0,height:0}),J=b("LoadingOverlay"),K=b("LoadingGraphic"),Q=b("Title"),P=b("Current"),t=b("Slideshow"),E=b("Next"),D=b("Previous"),R=b("Close"));u.append(c("
        ").append(b("TopLeft"),U=b("TopCenter"),b("TopRight")),c("
        ").append(V=b("MiddleLeft"),p,W=b("MiddleRight")),c("
        ").append(b("BottomLeft"),X=b("BottomCenter"),b("BottomRight"))).children().children().css({"float":"left"}); I=c("
        ");c("body").prepend(s,k.append(u,I));if(x){k.addClass("cboxIE");O&&s.css("position","absolute")}p.children().bind("mouseover mouseout",function(){c(this).toggleClass(F)}).addClass(F);y=U.height()+X.height()+p.outerHeight(n)-p.height();z=V.width()+W.width()+p.outerWidth(n)-p.width();v=l.outerHeight(n);w=l.outerWidth(n);k.css({"padding-bottom":y,"padding-right":z}).hide();E.click(e.next);D.click(e.prev);R.click(e.close);p.children().removeClass(F); c(".cboxElement").live("click",function(d){if(d.button!==0&&typeof d.button!=="undefined")return n;else{Z(this);return false}})};e.position=function(b,d){function h(A){U[0].style.width=X[0].style.width=p[0].style.width=A.style.width;K[0].style.height=J[0].style.height=p[0].style.height=V[0].style.height=W[0].style.height=A.style.height}var f=m.height();f=Math.max(f-a.h-v-y,0)/2+m.scrollTop();var o=Math.max(document.documentElement.clientWidth-a.w-w-z,0)/2+m.scrollLeft();b=k.width()===a.w+w&&k.height()=== a.h+v?0:b;u[0].style.width=u[0].style.height="9999px";k.dequeue().animate({width:a.w+w,height:a.h+v,top:f,left:o},{duration:b,complete:function(){h(this);C=false;u[0].style.width=a.w+w+z+"px";u[0].style.height=a.h+v+y+"px";d&&d()},step:function(){h(this)}})};e.resize=function(b){function d(){a.w=a.w||l.width();a.w=a.mw&&a.mw");l.show();Q.show().html(a.title);if(g.length>1){P.html(a.current.replace(/\{current\}/,j+1).replace(/\{total\}/,g.length)).show();E.html(a.next).show();D.html(a.previous).show();a.slideshow&&t.show()}J.hide();K.hide();c.event.trigger(S);a.onComplete&&a.onComplete.call(i);a.transition==="fade"&&k.fadeTo(L,1,function(){x&&k[0].style.removeAttribute("filter")}); m.bind(T,function(){e.position(0)})}})}if(B){var o,A,L=a.transition==="none"?0:a.speed;m.unbind(T);if(b){l.remove();l=c('
        ').html(b);l.hide().appendTo(I).css({width:d(),overflow:a.scrolling?"auto":"hidden"}).css({height:h()}).prependTo(p);c("#cboxPhoto").css({cssFloat:"none"});O&&c("select:not(#colorbox select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("cbox_cleanup",function(){this.style.visibility="inherit"});a.transition=== "fade"&&k.fadeTo(L,0,function(){f(0)})||f(L);if(a.preloading&&g.length>1){b=j>0?g[j-1]:g[g.length-1];o=j").attr("src",o);M(b)&&c("").attr("src",b)}}else setTimeout(function(){var G=l.wrapInner("
        ").children();a.h=G.height();l.css({height:a.h});G.replaceWith(G.children());e.position(L)},1)}};e.load=function(){var b,d,h,f=e.resize;C=n;i=g[j];a=c(i).data(q);Y();c.event.trigger(H); a.onLoad&&a.onLoad.call(i);a.h=a.height?r(a.height,"y")-v-y:a.innerHeight?r(a.innerHeight,"y"):false;a.w=a.width?r(a.width,"x")-w-z:a.innerWidth?r(a.innerWidth,"x"):false;a.mw=a.w;a.mh=a.h;if(a.maxWidth){a.mw=r(a.maxWidth,"x")-w-z;a.mw=a.w&&a.w').hide().insertBefore(c(b)[0]).bind(H+" cbox_cleanup",function(){c(this).replaceWith(l.children())}); f(c(b))}else if(a.iframe)f(" ");else if(a.html)f(a.html);else if(M(b)){d=new Image;d.onload=function(){var o;d.onload=null;d.id="cboxPhoto";c(d).css({margin:"auto",border:"none",display:"block",cssFloat:"left"});if(a.scalePhotos){h=function(){d.height-=d.height*o;d.width-=d.width*o};if(a.mw&&d.width>a.mw){o=(d.width-a.mw)/d.width;h()}if(a.mh&&d.height>a.mh){o=(d.height-a.mh)/d.height;h()}}if(a.h)d.style.marginTop=Math.max(a.h-d.height,0)/2+"px";f(d);g.length>1&&c(d).css({cursor:"pointer"}).click(e.next); if(x)d.style.msInterpolationMode="bicubic"};d.src=b}else c("
        ").appendTo(I).load(b,function(o,A){A==="success"?f(this):f(c("

        Request unsuccessful.

        "))})};e.next=function(){if(!C){j=j0?j-1:g.length-1;e.load()}};e.slideshow=function(){function b(){t.text(a.slideshowStop).bind(S,function(){h=setTimeout(e.next,a.slideshowSpeed)}).bind(H,function(){clearTimeout(h)}).one("click",function(){d();c(this).removeClass(F)});k.removeClass(f+ "off").addClass(f+"on")}var d,h,f="cboxSlideshow_";t.bind("cbox_closed",function(){t.unbind();clearTimeout(h);k.removeClass(f+"off "+f+"on")});d=function(){clearTimeout(h);t.text(a.slideshowStart).unbind(S+" "+H).one("click",function(){b();h=setTimeout(e.next,a.slideshowSpeed);c(this).removeClass(F)});k.removeClass(f+"on").addClass(f+"off")};if(a.slideshow&&g.length>1)a.slideshowAuto?b():d()};e.close=function(){c.event.trigger("cbox_cleanup");a.onCleanup&&a.onCleanup.call(i);B=false;c(document).unbind("keydown.cbox_close keydown.cbox_arrows"); m.unbind(T+" resize.cboxie6 scroll.cboxie6");s.css({cursor:"auto"}).fadeOut("fast");k.stop(n,false).fadeOut("fast",function(){c("#colorbox iframe").attr("src","about:blank");l.remove();k.css({opacity:1});try{N.focus()}catch(b){}c.event.trigger("cbox_closed");a.onClosed&&a.onClosed.call(i)})};e.element=function(){return c(i)};e.settings=$;c(e.init)})(jQuery); - - -/** - * jQuery Cookie plugin 1.0 - * - * Copyright (c) 2006 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - */ -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('o.5=B(9,b,2){6(h b!=\'E\'){2=2||{};6(b===n){b=\'\';2.3=-1}4 3=\'\';6(2.3&&(h 2.3==\'j\'||2.3.k)){4 7;6(h 2.3==\'j\'){7=w u();7.t(7.q()+(2.3*r*l*l*x))}m{7=2.3}3=\'; 3=\'+7.k()}4 8=2.8?\'; 8=\'+(2.8):\'\';4 a=2.a?\'; a=\'+(2.a):\'\';4 c=2.c?\'; c\':\'\';d.5=[9,\'=\',C(b),3,8,a,c].y(\'\')}m{4 e=n;6(d.5&&d.5!=\'\'){4 g=d.5.A(\';\');s(4 i=0;i35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';(n($){8 X=(n(){b(!$.1F.1G)5 18;8 A=13.15(\'A\');1W{A.k.1a(\'4\',\'0+0\')}1Z(e){5 18}5 29})();n Z(1U,p){5 x($.r(1U,p))||0};n N(s){8 s=x(s).28(16);5(s.1h<2)?\'0\'+s:s};n 1A(y){19(;y&&y.1X.1g()!=\'26\';y=y.J){8 v=$.r(y,\'1k\');b(v==\'22(0, 0, 0, 0)\')27;b(v.21(\'E\')>=0){8 E=v.F(/\\d+/g);5\'#\'+N(E[0])+N(E[1])+N(E[2])}b(v&&v!=\'1d\')5 v}5\'#2c\'};n 1R(K,i,4){25(K){a\'h\':5 7.h(4*(1-7.C(7.U(i/4))));a\'1m\':5 7.h(4*(1+7.C(7.U(i/4))));a\'1v\':5 7.h(4*(1-7.C(7.20(i/4))));a\'1f\':5 7.h(4*(7.C(7.U((4-i-1)/4))));a\'1u\':5 7.h(4*(7.1M(i,4/i)));a\'1w\':5 7.h(4*(7.1M(4,(4-i-1))));a\'1x\':5 7.h(4*(7.23(i)));a\'1y\':5 7.h(4*(7.C(i)));a\'1s\':5 7.h(4*(7.24(i)));a\'1r\':5 7.h(4*(7.1Y(i)));a\'1C\':5 7.h(4*(7.1V((4-i-1),4)));a\'1n\':5(i&1)?(i+1):4;a\'1p\':5(i&2)?(i+1):4;a\'1q\':5(i&3)?(i+1):4;a\'1t\':5(i%2)*4;a\'1c\':5 4;a\'1b\':5 i+1}};$.1E.Q=n(o){b(6.1h==0){b(!$.2a&&6.1j){8 s=6.1j,c=6.2b;$(n(){$(s,c).Q(o)})}5 6}o=(o||"").1g();8 W=/W/.G(o);8 Y=((o.F(/Y:(#[0-1e-f]+)/)||[])[1]);8 V=((o.F(/V:(#[0-1e-f]+)/)||[])[1]);8 4=x((o.F(/(\\d+)m/)||[])[1])||10;8 1o=/h|1b|1c|1f|1m|1v|1u|1w|1x|1y|1t|1s|1C|1r|1q|1p|1n/;8 K=((o.F(1o)||[\'h\'])[0]);8 12={T:0,B:1};8 l={M:/S|2e/.G(o),H:/S|2D/.G(o),O:/14|2F/.G(o),P:/14|2B/.G(o)};b(!l.M&&!l.H&&!l.O&&!l.P)l={M:1,H:1,O:1,P:1};8 u=13.15(\'A\');u.k.2A=\'2z\';u.k.1z=\'2y\';u.k.1k=V||\'1d\';u.k.1Q=\'11\';5 6.2w(n(2x){8 q={T:x($.r(6,\'2C\'))||0,R:x($.r(6,\'2G\'))||0,B:x($.r(6,\'2E\'))||0,L:x($.r(6,\'2u\'))||0};b(2j 6.k.1i!=2k)6.k.1i=1;b(!W)6.k.2d=\'D\';u.k.2h=Y||1A(6.J);8 1P=$.2v(6,\'1z\');19(8 j 2f 12){8 t=12[j];b((t&&(l.O||l.P))||(!t&&(l.M||l.H))){u.k.1Q=\'D \'+(l[j+\'R\']?\'11\':\'D\')+\' D \'+(l[j+\'L\']?\'11\':\'D\');8 d=13.15(\'A\');$(d).2g(\'1l-Q\');8 9=d.k;t?6.1T(d):6.1S(d,6.1O);b(t&&1P!=\'2l\'){b($.r(6,\'z\')==\'1D\')6.k.z=\'1B\';9.z=\'1H\';9.14=9.1N=9.1L=9.17=\'0\';b(X)9.1a(\'4\',\'6.J.1K\');I 9.4=\'1I%\'}I b(!t&&$.1F.1G){b($.r(6,\'z\')==\'1D\')6.k.z=\'1B\';9.z=\'1H\';9.S=9.1N=9.2m=9.1L=9.17=\'0\';b(X){8 1J=Z(6,\'2s\')+Z(6,\'2t\');9.1a(\'4\',\'6.J.1K - \'+1J+\'+ "m"\')}I 9.4=\'1I%\'}I{9.17=!t?\'-\'+q.T+\'m -\'+q.R+\'m \'+(q.T-4)+\'m -\'+q.L+\'m\':(q.B-4)+\'m -\'+q.R+\'m -\'+q.B+\'m -\'+q.L+\'m\'}19(8 i=0;i<4;i++){8 w=7.2r(0,1R(K,i,4));8 e=u.2q(18);e.k.2n=\'0 \'+(l[j+\'R\']?w:0)+\'m 0 \'+(l[j+\'L\']?w:0)+\'m\';t?d.1T(e):d.1S(e,d.1O)}}}})};$.1E.2o=n(){$(\'A.1l-Q\',6).2p();5 6}})(2i);',62,167,'||||width|return|this|Math|var|ds|case|if||||||round|||style|opts|px|function|||pad|css||bot|strip|||parseInt|node|position|div||cos|none|rgb|match|test|TR|else|parentNode|fx||TL|hex2|BL|BR|corner||top||asin|sc|keep|expr|cc|sz||solid|edges|document|bottom|createElement||margin|false|for|setExpression|bevel|notch|transparent|9a|bite|toLowerCase|length|zoom|selector|backgroundColor|jquery|cool|dog|re|dog2|dog3|long|wicked|fray|slide|sharp|jut|curl|tear|height|gpc|relative|sculpt|static|fn|browser|msie|absolute|100|bw|offsetWidth|padding|atan2|left|firstChild|cssHeight|borderStyle|getWidth|insertBefore|appendChild|el|log|try|nodeName|sqrt|catch|acos|indexOf|rgba|atan|tan|switch|html|continue|toString|true|isReady|context|ffffff|border|tl|in|addClass|borderColor|jQuery|typeof|undefined|auto|right|borderWidth|uncorner|remove|cloneNode|max|borderLeftWidth|borderRightWidth|paddingLeft|curCSS|each|index|1px|hidden|overflow|br|paddingTop|tr|paddingBottom|bl|paddingRight'.split('|'),0,{})) - - -/** -* jQuery hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+ -* -* -* @param f onMouseOver function || An object with configuration options -* @param g onMouseOut function || Nothing (use configuration options object) -* @author Brian Cherne -*/ -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(6($){$.J.K=6(f,g){8 5={y:7,l:I,H:0};5=$.u(5,g?{v:f,z:g}:f);8 d,b,k,i;8 h=6(3){d=3.G;b=3.B};8 m=6(3,2){2.4=o(2.4);9((w.x(k-d)+w.x(i-b))<5.y){$(2).D("n",h);2.j=1;c 5.v.t(2,[3])}E{k=d;i=b;2.4=r(6(){m(3,2)},5.l)}};8 C=6(3,2){2.4=o(2.4);2.j=0;c 5.z.t(2,[3])};8 q=6(e){8 p=(e.A=="s"?e.N:e.U)||e.T;R(p&&p!=a){S{p=p.O}P(e){p=a}}9(p==a){c Q}8 3=F.u({},e);8 2=a;9(2.4){2.4=o(2.4)}9(e.A=="s"){k=3.G;i=3.B;$(2).M("n",h);9(2.j!=1){2.4=r(6(){m(3,2)},5.l)}}E{$(2).D("n",h);9(2.j==1){2.4=r(6(){C(3,2)},5.H)}}};c a.s(q).L(q)}})(F);',57,57,'||ob|ev|hoverIntent_t|cfg|function||var|if|this|cY|return|cX||||track|pY|hoverIntent_s|pX|interval|compare|mousemove|clearTimeout||handleHover|setTimeout|mouseover|apply|extend|over|Math|abs|sensitivity|out|type|pageY|delay|unbind|else|jQuery|pageX|timeout|100|fn|hoverIntent|mouseout|bind|fromElement|parentNode|catch|false|while|try|relatedTarget|toElement'.split('|'),0,{})) - - -/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) - * Dual licensed under the MIT (MIT_LICENSE.txt) - * and GPL Version 2 (GPL_LICENSE.txt) licenses. - * - * Version: 1.1.1 - * Requires jQuery 1.3+ - * Docs: http://docs.jquery.com/Plugins/livequery - */ - -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(5($){$.I($.4,{3:5(6,4,8){g s=2,q;9($.K(6))8=4,4=6,6=A;$.d($.3.c,5(i,7){9(s.e==7.e&&s.f==7.f&&6==7.6&&(!4||4.$b==7.4.$b)&&(!8||8.$b==7.8.$b))k(q=7)&&t});q=q||Q $.3(2.e,2.f,6,4,8);q.u=t;q.m();k 2},10:5(6,4,8){g s=2;9($.K(6))8=4,4=6,6=A;$.d($.3.c,5(i,7){9(s.e==7.e&&s.f==7.f&&(!6||6==7.6)&&(!4||4.$b==7.4.$b)&&(!8||8.$b==7.8.$b)&&!2.u)$.3.w(7.a)});k 2}});$.3=5(e,f,6,4,8){2.e=e;2.f=f;2.6=6;2.4=4;2.8=8;2.l=[];2.u=t;2.a=$.3.c.D(2)-1;4.$b=4.$b||$.3.F++;9(8)8.$b=8.$b||$.3.F++;k 2};$.3.W={w:5(){g 7=2;9(2.6)2.l.Z(2.6,2.4);B 9(2.8)2.l.d(5(i,j){7.8.z(j)});2.l=[];2.u=H},m:5(){9(2.u)k;g 7=2;g o=2.l,v=$(2.e,2.f),E=v.U(o);2.l=v;9(2.6){E.R(2.6,2.4);9(o.p>0)$.d(o,5(i,j){9($.x(j,v)<0)$.S.G(j,7.6,7.4)})}B{E.d(5(){7.4.z(2)});9(2.8&&o.p>0)$.d(o,5(i,j){9($.x(j,v)<0)7.8.z(j)})}}};$.I($.3,{F:0,c:[],h:[],y:t,C:1e,J:5(){9($.3.y&&$.3.h.p){g p=$.3.h.p;1c(p--)$.3.c[$.3.h.1a()].m()}},14:5(){$.3.y=t},N:5(){$.3.y=H;$.3.m()},L:5(){$.d(M,5(i,n){9(!$.4[n])k;g O=$.4[n];$.4[n]=5(){g r=O.z(2,M);$.3.m();k r}})},m:5(a){9(a!=A){9($.x(a,$.3.h)<0)$.3.h.D(a)}B $.d($.3.c,5(a){9($.x(a,$.3.h)<0)$.3.h.D(a)});9($.3.C)Y($.3.C);$.3.C=16($.3.J,17)},w:5(a){9(a!=A)$.3.c[a].w();B $.d($.3.c,5(a){$.3.c[a].w()})}});$.3.L(\'19\',\'1d\',\'13\',\'1b\',\'1f\',\'15\',\'T\',\'P\',\'12\',\'V\',\'11\',\'G\',\'X\');$(5(){$.3.N()})})(18);',62,78,'||this|livequery|fn|function|type|query|fn2|if|id|lqguid|queries|each|selector|context|var|queue||el|return|elements|run||oEls|length|||self|false|stopped|els|stop|inArray|running|apply|undefined|else|timeout|push|nEls|guid|remove|true|extend|checkQueue|isFunction|registerPlugin|arguments|play|old|addClass|new|bind|event|removeAttr|not|toggleClass|prototype|html|clearTimeout|unbind|expire|empty|removeClass|after|pause|attr|setTimeout|20|jQuery|append|shift|before|while|prepend|null|wrap'.split('|'),0,{})) - - - - -/** - * Pagination jQuery plugin -- with modifications by pairofdimes, where noted - * - * @author Gabriel Birke (birke *at* d-scribe *dot* de) - * @version 1.2 - */ -jQuery.fn.pagination = function(maxentries, opts){ - opts = jQuery.extend({ - items_per_page:10, - num_display_entries:10, - current_page:0, - num_edge_entries:0, - link_to:"#", - prev_text:"Prev", - next_text:"Next", - ellipse_text:"...", - prev_show_always:true, - next_show_always:true, - callback:function(){return false;} - },opts||{}); - - return this.each(function() { - /** - * Calculate the maximum number of pages - */ - function numPages() { - return Math.ceil(maxentries/opts.items_per_page); - } - - /** - * Calculate start and end point of pagination links depending on - * current_page and num_display_entries. - * @return {Array} - */ - function getInterval() { - var ne_half = Math.ceil(opts.num_display_entries/2); - var np = numPages(); - var upper_limit = np-opts.num_display_entries; - var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0; - var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np); - return [start,end]; - } - - /** - * This is the event handling function for the pagination links. - * @param {int} page_id The new page number - */ - function pageSelected(page_id, evt){ - current_page = page_id; - drawLinks(); - var continuePropagation = opts.callback(page_id, panel); - if (!continuePropagation) { - if (evt.stopPropagation) { - evt.stopPropagation(); - } - else { - evt.cancelBubble = true; - } - } - return continuePropagation; - } - - /** - * This function inserts the pagination links into the container element - */ - function drawLinks() { - panel.empty(); - var interval = getInterval(); - var np = numPages(); - // This helper function returns a handler function that calls pageSelected with the right page_id - var getClickHandler = function(page_id) { - return function(evt){ return pageSelected(page_id,evt); } - } - // Helper function for generating a single link (or a span tag if it's the current page) - var appendItem = function(page_id, appendopts){ - page_id = page_id<0?0:(page_id"+(appendopts.text)+""); // modification by pairofdimes - } - else - { - var lnk = jQuery(""+(appendopts.text)+"") - .bind("click", getClickHandler(page_id)) - ; //.attr('href', opts.link_to.replace(/__id__/,page_id)); // modification by pairofdimes - - - } - if(appendopts.classes){lnk.addClass(appendopts.classes);} - panel.append(lnk); - } - // Generate "Previous"-Link - if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){ - appendItem(current_page-1,{text:opts.prev_text, classes:"prev"}); - } - // Generate starting points - if (interval[0] > 0 && opts.num_edge_entries > 0) - { - var end = Math.min(opts.num_edge_entries, interval[0]); - for(var i=0; i"+opts.ellipse_text+"").appendTo(panel); - } - } - // Generate interval links - for(var i=interval[0]; i 0) - { - if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text) - { - jQuery(""+opts.ellipse_text+"").appendTo(panel); - } - var begin = Math.max(np-opts.num_edge_entries, interval[1]); - for(var i=begin; i 0) { - pageSelected(current_page - 1); - return true; - } - else { - return false; - } - } - this.nextPage = function(){ - if(current_page < numPages()-1) { - pageSelected(current_page+1); - return true; - } - else { - return false; - } - } - // When all initialisation is done, draw the links - drawLinks(); - // call callback function - //opts.callback(current_page, this); // modification by pairofdimes - }); -} - - -/* - * Superfish v1.4.8 - jQuery menu widget - * Copyright (c) 2008 Joel Birch - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt - */ -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';(3($){$.h.F=3(b){8 2=$.h.F,c=2.c,$S=$([\' s;\'].f(\'\')),t=3(){8 $$=$(4),9=z($$);X(9.y);$$.10().1u().q()},I=3(){8 $$=$(4),9=z($$),o=2.b;X(9.y);9.y=1v(3(){o.x=($.1y($$[0],o.$k)>-1);$$.q();p(o.$k.G&&$$.J([\'d.\',o.g].f(\'\')).G<1){t.e(o.$k)}},o.1g)},z=3($9){8 9=$9.J([\'5.\',c.C,\':N\'].f(\'\'))[0];2.b=2.o[9.W];l 9},R=3($a){$a.u(c.M).1q($S.1i())};l 4.j(3(){8 s=4.W=2.o.G;8 o=$.12({},2.Y,b);o.$k=$(\'d.\'+o.B,4).1l(0,o.K).j(3(){$(4).u([o.g,c.D].f(\' \')).1n(\'d:T(5)\').Z(o.B)});2.o[s]=2.b=o;$(\'d:T(5)\',4)[($.h.P&&!o.13)?\'P\':\'1o\'](t,I).j(3(){p(o.1d)R($(\'>a:N-1M\',4))}).m(\'.\'+c.D).q();8 $a=$(\'a\',4);$a.j(3(i){8 $d=$a.U(i).J(\'d\');$a.U(i).1N(3(){t.e($d)}).1J(3(){I.e($d)})});o.14.e(4)}).j(3(){E=[c.C];p(2.b.A&&!($.n.V&&$.n.L<7))E.1D(c.r);$(4).u(E.f(\' \'))})};8 2=$.h.F;2.o=[];2.b={};2.H=3(){8 o=2.b;p($.n.V&&$.n.L>6&&o.A&&o.v.1f!=1G)4.1z(2.c.r+\'-15\')};2.c={D:\'2-1I\',C:\'2-1E-1B\',M:\'2-1O-5\',O:\'2-1p-1m\',r:\'2-1k\'};2.Y={g:\'1w\',B:\'1r\',K:1,1g:1A,v:{1f:\'1F\'},17:\'1H\',1d:w,A:w,13:11,14:3(){},19:3(){},18:3(){},1e:3(){}};$.h.12({q:3(){8 o=2.b,m=(o.x===w)?o.$k:\'\';o.x=11;8 $5=$([\'d.\',o.g].f(\'\'),4).1C(4).m(m).Z(o.g).16(\'>5\').1K().1c(\'1a\',\'1b\');o.1e.e($5);l 4},10:3(){8 o=2.b,1L=2.c.r+\'-15\',$5=4.u(o.g).16(\'>5:1b\').1c(\'1a\',\'1j\');2.H.e($5);o.19.e($5);$5.1x(o.v,o.17,3(){2.H.e($5);o.18.e($5)});l 4}})})(1h);',62,113,'||sf|function|this|ul|||var|menu||op||li|call|join|hoverClass|fn||each|path|return|not|browser||if|hideSuperfishUl|shadowClass||over|addClass|animation|true|retainPath|sfTimer|getMenu|dropShadows|pathClass|menuClass|bcClass|menuClasses|superfish|length|IE7fix|out|parents|pathLevels|version|anchorClass|first|arrowClass|hoverIntent|span|addArrow|arrow|has|eq|msie|serial|clearTimeout|defaults|removeClass|showSuperfishUl|false|extend|disableHI|onInit|off|find|speed|onShow|onBeforeShow|visibility|hidden|css|autoArrows|onHide|opacity|delay|jQuery|clone|visible|shadow|slice|indicator|filter|hover|sub|append|overideThisToUse|187|class|siblings|setTimeout|sfHover|animate|inArray|toggleClass|800|enabled|add|push|js|show|undefined|normal|breadcrumb|blur|hide|sh|child|focus|with'.split('|'),0,{})) - - -/** - * TableDnD plug-in for JQuery, allows you to drag and drop table rows - * You can set up various options to control how the system will work - * Copyright (c) Denis Howlett - * Licensed like jQuery, see http://docs.jquery.com/License. - * - */ -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1.3={j:f,h:f,G:f,F:0,1x:a(1p){8.z(a(){8.k=1.1A({1m:f,1r:f,v:"1C",12:f,t:f,w:5,15:/[^\\-]*$/,1N:f,N:f},1p||{});1.3.O(8)});1(g).1s(\'V\',1.3.V).1s(\'Z\',1.3.Z);9 8},O:a(c){4 7=c.k;6(c.k.N){4 1u=1("1J."+c.k.N,c);1u.z(a(){1(8).1l(a(b){1.3.h=8.Y;1.3.j=c;1.3.G=1.3.Q(8,b);6(7.t){7.t(c,8)}9 L})})}m{4 l=1("1H",c);l.z(a(){4 d=1(8);6(!d.1t("1K")){d.1l(a(b){6(b.P.1F=="1E"){1.3.h=8;1.3.j=c;1.3.G=1.3.Q(8,b);6(7.t){7.t(c,8)}9 L}}).11("1M","1L")}})}},1D:a(){8.z(a(){6(8.k){1.3.O(8)}})},U:a(b){6(b.1k||b.1h){9{x:b.1k,y:b.1h}}9{x:b.1z+g.o.1B-g.o.1w,y:b.1y+g.o.S-g.o.1G}},Q:a(P,b){b=b||q.23;4 X=8.C(P);4 p=8.U(b);9{x:p.x-X.x,y:p.y-X.y}},C:a(e){4 K=0;4 I=0;6(e.E==0){e=e.M}21(e.1f){K+=e.1e;I+=e.1g;e=e.1f}K+=e.1e;I+=e.1g;9{x:K,y:I}},V:a(b){6(1.3.h==f){9}4 D=1(1.3.h);4 7=1.3.j.k;4 p=1.3.U(b);4 y=p.y-1.3.G.y;4 u=q.27;6(g.26){6(18 g.17!=\'1b\'&&g.17!=\'24\'){u=g.T.S}m 6(18 g.o!=\'1b\'){u=g.o.S}}6(p.y-u<7.w){q.1v(0,-7.w)}m{4 1j=q.1a?q.1a:g.T.W?g.T.W:g.o.W;6(1j-(p.y-u)<7.w){q.1v(0,7.w)}}6(y!=1.3.F){4 R=y>1.3.F;1.3.F=y;6(7.v){D.1X(7.v)}m{D.11(7.1m)}4 r=1.3.1o(D,y);6(r){6(R&&1.3.h!=r){1.3.h.Y.1q(1.3.h,r.1W)}m 6(!R&&1.3.h!=r){1.3.h.Y.1q(1.3.h,r)}}}9 L},1o:a(16,y){4 l=1.3.j.l;1d(4 i=0;iB-H)&&(y<(B+H))){6(d==16){9 f}4 7=1.3.j.k;6(7.1i){6(7.1i(16,d)){9 d}m{9 f}}m{4 13=1(d).1t("13");6(!13){9 d}m{9 f}}9 d}}9 f},Z:a(e){6(1.3.j&&1.3.h){4 A=1.3.h;4 7=1.3.j.k;6(7.v){1(A).1V(7.v)}m{1(A).11(7.1r)}1.3.h=f;6(7.12){7.12(1.3.j,A)}1.3.j=f}},1Y:a(){6(1.3.j){9 1.3.14(1.3.j)}m{9"1U: 1T 1P J 19, 1Q 1R 20 19 1S J 1Z 28 c 25 1O d"}},14:a(c){4 n="";4 1c=c.J;4 l=c.l;1d(4 i=0;i0)n+="&";4 s=l[i].J;6(s&&s&&c.k&&c.k.15){s=s.22(c.k.15)[0]}n+=1c+\'[]=\'+s}9 n},1I:a(){4 n="";8.z(a(){n+=1.3.14(8)});9 n}}',62,133,'|jQuery||tableDnD|var||if|config|this|return|function|ev|table|row||null|document|dragObject||currentTable|tableDnDConfig|rows|else|result|body|mousePos|window|currentRow|rowId|onDragStart|yOffset|onDragClass|scrollAmount|||each|droppedRow|rowY|getPosition|dragObj|offsetHeight|oldY|mouseOffset|rowHeight|top|id|left|false|firstChild|dragHandle|makeDraggable|target|getMouseOffset|movingDown|scrollTop|documentElement|mouseCoords|mousemove|clientHeight|docPos|parentNode|mouseup|length|css|onDrop|nodrop|serializeTable|serializeRegexp|draggedRow|compatMode|typeof|set|innerHeight|undefined|tableId|for|offsetLeft|offsetParent|offsetTop|pageY|onAllowDrop|windowHeight|pageX|mousedown|onDragStyle|parseInt|findDropTargetRow|options|insertBefore|onDropStyle|bind|hasClass|cells|scrollBy|clientLeft|build|clientY|clientX|extend|scrollLeft|tDnD_whileDrag|updateTables|TD|tagName|clientTop|tr|serializeTables|td|nodrag|move|cursor|serializeParamName|every|Table|you|need|an|No|Error|removeClass|nextSibling|addClass|serialize|on|to|while|match|event|BackCompat|and|all|pageYOffset|your'.split('|'),0,{})) -jQuery.fn.extend({ tableDnD: jQuery.tableDnD.build, tableDnDUpdate: jQuery.tableDnD.updateTables, tableDnDSerialize: jQuery.tableDnD.serializeTables }); - - -/** -* -* AJAX IFRAME METHOD (AIM) -* http://www.webtoolkit.info/ -* -* Copyright (c) 2006-2008 www.webtoolkit.info -* Licensed under Gnu Public Licence V3 or higher. -* http://www.gnu.org/licenses/gpl.html -**/ -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('6={h:0(c){1 n=\'f\'+k.z(k.w()*u);1 d=3.y(\'C\');d.e=\'\';3.j.A(d);1 i=3.m(n);2(c&&a(c.4)==\'0\'){i.4=c.4}5 n},l:0(f,8){f.J(\'K\',8)},I:0(f,c){6.l(f,6.h(c));2(c&&a(c.b)==\'0\'){5 c.b()}9{5 E}},p:0(7){1 i=3.m(7);2(i.q){1 d=i.q}9 2(i.r){1 d=i.r.3}9{1 d=G.L[7].3}2(d.F.H=="g:s"){5}2(a(i.4)==\'0\'){i.4(d.j.e)}}}',48,48,'function|var|if|document|onComplete|return|AIM|id|name|else|typeof|onStart|||innerHTML||about|frame||body|Math|form|getElementById||iframe|loaded|contentDocument|contentWindow|blank|none|99999|onload|random|src|createElement|floor|appendChild|style|DIV|display|true|location|window|href|submit|setAttribute|target|frames'.split('|'),0,{})) diff --git a/main/interfaces/Plush/templates/static/javascripts/plush.js b/main/interfaces/Plush/templates/static/javascripts/plush.js deleted file mode 100644 index 2fd9251..0000000 --- a/main/interfaces/Plush/templates/static/javascripts/plush.js +++ /dev/null @@ -1,815 +0,0 @@ -// *************************************************************** -// Plush main code as follows, by pairofdimes (see LICENSE-CC.txt) - -jQuery(function($){ - - $.plush = { - - // *************************************************************** - // Plush defaults - - refreshRate: $.cookie('refreshRate') ? $.cookie('refreshRate') : 30, // refresh rate in seconds - queuePerPage: $.cookie('queuePerPage') ? $.cookie('queuePerPage') : 10, // pagination - nzbs per page - histPerPage: $.cookie('histPerPage') ? $.cookie('histPerPage') : 10, // pagination - nzbs per page - confirmDeleteQueue: $.cookie('confirmDeleteQueue') == 0 ? false : true, // confirm queue nzb removal - confirmDeleteHistory: $.cookie('confirmDeleteHistory') == 0 ? false : true, // confirm history nzb removal - blockRefresh: $.cookie('blockRefresh') == 0 ? false : true, // prevent refreshing when hovering queue - - - // *************************************************************** - // $.plush.Init() -- initialize all the UI events - - Init : function() { - $.plush.InitAddNZB(); - $.plush.InitMainMenu(); - $.plush.InitQueue(); - $.plush.InitHistory(); - $.plush.InitTooltips(); - }, // end $.plush.Init() - - - // *************************************************************** - // $.plush.InitAddNZB() -- "Add NZB" Methods - - InitAddNZB : function() { - // Fetch NZB by URL/Newzbin Report ID - $('#addID').click(function(){ // also works when hitting enter because of
        - if ($('#addID_input').val()!='URL') { - $.ajax({ - type: "POST", - url: "tapi", - data: { - mode: 'addid', - name: $("#addID_input").val(), - pp: $("#addID_pp").val(), - script: $("#addID_script").val(), - cat: $("#addID_cat").val(), - priority: $("#addID_priority").val(), - apikey: $.plush.apikey - }, - success: $.plush.RefreshQueue - }); - $("#addID_input").val(''); - } - return false; // aborts submission - }); - $('#addID_input').val('URL') - .focus( function(){ - if ($(this).val()=="URL") - $(this).val(''); - }).blur( function(){ - if (!$(this).val()) - $(this).val('URL'); - }); - - // Upload NZB ajax with webtoolkit - $('#uploadNZBFile').change( function(){ $('#uploadNZBForm').submit(); }); - $('#uploadNZBForm').submit( function(){ - return AIM.submit(this, {'onComplete': $.plush.RefreshQueue}) - }); - - // Fetch Newzbin Bookmarks - $('#fetch_newzbin_bookmarks').click(function(){ - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'newzbin', name:'get_bookmarks', apikey: $.plush.apikey}, - success: function(result){ - $.plush.RefreshQueue(); - } - }); - }); - - }, // end $.plush.InitAddNZB() - - - // *************************************************************** - // $.plush.InitMainMenu() -- Main Menu Events - - InitMainMenu : function() { - - // Main menu -- uses jQuery hoverIntent - $("#main_menu ul.sf-menu").superfish({ - autoArrows: true, - dropShadows: false - }); - $("#queue-buttons ul").superfish({ - autoArrows: false, - dropShadows: false - }); - - // Max Speed main menu input -- don't change value on refresh when focused - $("#maxSpeed-option").focus(function(){ $.plush.focusedOnSpeedChanger = true; }) - .blur(function(){ $.plush.focusedOnSpeedChanger = false; }); - $("#maxSpeed-option").change( function() { // works with hitting enter - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'config', name:'set_speedlimit', value: $(this).val(), apikey: $.plush.apikey} - }); - }); - - // Refresh rate - $("#refreshRate-option").val($.plush.refreshRate).change( function() { - $.plush.refreshRate = $("#refreshRate-option").val(); - $.cookie('refreshRate', $.plush.refreshRate, { expires: 365 }); - $.plush.Refresh(); - }); - - // Confirm Queue Deletions toggle - $("#confirmDeleteQueue").attr('checked', $.plush.confirmDeleteQueue ).change( function() { - $.plush.confirmDeleteQueue = $("#confirmDeleteQueue").attr('checked'); - $.cookie('confirmDeleteQueue', $.plush.confirmDeleteQueue ? 1 : 0, { expires: 365 }); - }); - - // Confirm History Deletions toggle - $("#confirmDeleteHistory").attr('checked', $.plush.confirmDeleteHistory ).change( function() { - $.plush.confirmDeleteHistory = $("#confirmDeleteHistory").attr('checked'); - $.cookie('confirmDeleteHistory', $.plush.confirmDeleteHistory ? 1 : 0, { expires: 365 }); - }); - - // Block Refreshes on Hover toggle - $("#blockRefresh").attr('checked', $.plush.blockRefresh ).change( function() { - $.plush.blockRefresh = $("#blockRefresh").attr('checked'); - $.cookie('blockRefresh', $.plush.blockRefresh ? 1 : 0, { expires: 365 }); - }); - - // Sabnzbd shutdown - $('#shutdown_sabnzbd').click( function(){ - if(confirm($('#shutdown_sabnzbd').attr('rel'))) - window.location='shutdown?session='+$.plush.apikey; - }); - - // Queue "Upon Completion" script - $("#onQueueFinish-option").change( function() { - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'queue', name:'change_complete_action', value: $(this).val(), apikey: $.plush.apikey} - }); - }); - - // Queue purge - $('#queue_purge').click(function(event) { - if(confirm($('#queue_purge').attr('rel'))){ - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'queue', name:'delete', value:'all', apikey: $.plush.apikey}, - success: $.plush.RefreshQueue - }); - } - }); - - // Queue sort (6-in-1) - $('#queue_sort_list .queue_sort').click(function(event) { - var sort, dir; - switch ($(this).attr('id')) { - case 'sortAgeAsc': sort='avg_age'; dir='asc'; break; - case 'sortAgeDesc': sort='avg_age'; dir='desc'; break; - case 'sortNameAsc': sort='name'; dir='asc'; break; - case 'sortNameDesc': sort='name'; dir='desc'; break; - case 'sortSizeAsc': sort='size'; dir='asc'; break; - case 'sortSizeDesc': sort='size'; dir='desc'; break; - } - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'queue', name:'sort', sort: sort, dir: dir, apikey: $.plush.apikey}, - success: $.plush.RefreshQueue - }); - }); - - // Queue pause intervals - $('#set_pause_list .set_pause').click(function(event) { - var minutes = $(event.target).attr('rel'); - if (minutes == "custom") - minutes = prompt($(event.target).attr('title')); - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'config', name:'set_pause', value: minutes, apikey: $.plush.apikey}, - success: $.plush.RefreshQueue - }); - }); - - // Manual refresh - $('#manual_refresh_wrapper').click(function(e){ - // prevent button text highlighting - e.target.onselectstart = function() { return false; }; - e.target.unselectable = "on"; - e.target.style.MozUserSelect = "none"; - //e.target.style.cursor = "default"; - - $.plush.Refresh(true); - }); - - }, // end $.plush.InitMainMenu() - - - // *************************************************************** - // $.plush.InitTooltips() -- title tootlips on hover - - InitTooltips : function() { - - /* - jQuery FlipTip (with modifications by pairofdimes) - http://learningjquery.com - Copyright (c) 2010 Karl Swedberg - See http://creativecommons.org/licenses/by-sa/2.5/ - */ - var $liveTip = $('
        ').hide().appendTo('body'); - var $win = $(window), tipTitle = ''; - - var tipPosition = function(event) { - var winWidth = $win.width(), - winBottom = $win.scrollTop() + $win.height(), - tipWidth = $liveTip.outerWidth(), - tipHeight = $liveTip.outerHeight(), - pageX = event.pageX, - pageY = event.pageY; - if (pageX + tipWidth + 12 > winWidth) - pageX += 12 - (pageX + tipWidth + 12 - winWidth); - else - pageX += 12; - if (pageY + tipHeight + 12 > winBottom) - pageY -= (tipHeight + 12); - else - pageY += 12; - $liveTip.css({ - top: pageY, - left: pageX - }); - }; - - // make these work: #time-left, #have_warnings, #explain-blockRefresh, #uploadTip, #fetch_newzbin_bookmarks, #pauseForPrompt, - $('#pause_resume, #hist_purge, #queueTable td.download-title a, #queueTable td.options .icon_nzb_remove, #historyTable td.options .icon_nzb_remove, #historyTable td div.icon_history_verbose').live('mouseover mouseout mousemove', function(event) { - var $link = $(event.target); - if (!$link.length) { return; } - var link = $link[0]; - var coords = {left: '-1000em'}; - - switch(event.type){ - case 'mouseover': - $link.data('tipActive', true); - tipTitle = link.title; - link.title = ''; - if (!tipTitle) { return; } - $liveTip.html('
        '+tipTitle+'
        ').show() - tipPosition(event); - break; - - case 'mouseout': - $link.removeData('tipActive'); - $liveTip.hide(); - link.title = tipTitle || link.title; - break; - - case 'mousemove': - if ($link.data('tipActive')) - tipPosition(event); - break; - }; - }); - }, - - - // *************************************************************** - // $.plush.InitQueue() - Queue Events - - InitQueue : function() { - - // Pause/resume toggle (queue) - $('#pause_resume').click(function(event) { - if ( $(event.target).hasClass('sprite_q_pause_on') ) { - $('#pause_resume').removeClass('sprite_q_pause_on').addClass('sprite_q_pause'); - $('#pause_int').html(""); - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'resume', apikey: $.plush.apikey} - }); - } else { - $('#pause_resume').removeClass('sprite_q_pause').addClass('sprite_q_pause_on'); - $('#pause_int').html(""); - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'pause', apikey: $.plush.apikey} - }); - } - }); - - // Set queue per-page preference - $("#queue-pagination-perpage").val($.plush.queuePerPage); - $.plush.queuecurpage = 0; // default 1st page - - // Pagination per-page selection - $("#queue-pagination-perpage").change(function(event){ - $.plush.queuecurpage = Math.floor($.plush.queuecurpage * $.plush.queuePerPage / $(event.target).val() ); - $.plush.queuePerPage = $(event.target).val(); - $.cookie('queuePerPage', $.plush.queuePerPage, { expires: 365 }); - $.plush.queueforcerepagination = true; - $.plush.RefreshQueue(); - }); - - // Skip queue refresh on mouseover - $('#queue').hover( - function(){ $.plush.skipRefresh=true; }, // over - function(){ $.plush.skipRefresh=false; } // out - ); - - // refresh on mouseout after deletion - $('#queue').hover( // $.mouseout was triggering too often - function(){}, // over - function(){ // out - if ($.plush.pendingQueueRefresh) { - $.plush.pendingQueueRefresh = false; - $.plush.RefreshQueue(); - } - } - ); - - // NZB pause/resume individual toggle - $('#queueTable .nzb_status').live('click',function(event){ - var pid = $(this).parent().parent().attr('id'); - if ($(this).hasClass('sprite_ql_grip_queued_on')) { - $(this).toggleClass('sprite_ql_grip_queued_on').toggleClass('sprite_ql_grip_paused_on'); - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'queue', name:'pause', value: pid, apikey: $.plush.apikey} - }); - } else if ($(this).hasClass('sprite_ql_grip_active')) { - $(this).toggleClass('sprite_ql_grip_active').toggleClass('sprite_ql_grip_paused_on'); - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'queue', name:'pause', value: pid, apikey: $.plush.apikey} - }); - } else { - $(this).toggleClass('sprite_ql_grip_queued_on').toggleClass('sprite_ql_grip_paused_on'); - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'queue', name:'resume', value: pid, apikey: $.plush.apikey} - }); - } - }); - - // NZB individual deletion - $('#queue .sprite_ql_cross').live('click', function(event) { - if (!$.plush.confirmDeleteQueue || confirm($.plush.Tconfirmation)){ - delid = $(event.target).parent().parent().attr('id'); - $('#'+delid).fadeTo('normal',0.25); - $.plush.pendingQueueRefresh = true; - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'queue', name:'delete', value: delid, apikey: $.plush.apikey}, - success: function(){ - if ( $("#queueTable tr:visible").length - 1 < 1 ) { // don't leave stranded on non-page - $.plush.skipRefresh = false; - $.plush.queueforcerepagination = true; - $.plush.RefreshQueue($.plush.queuecurpage-1); - } - } - }); - } - }); - - // NZB change priority - $('#queueTable .options .proc_priority').live('change',function(){ - var nzbid = $(this).parent().parent().attr('id'); - var oldPos = $('#'+nzbid)[0].rowIndex + $.plush.queuecurpage * $.plush.queuePerPage; - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'queue', name:'priority', value: nzbid, value2: $(this).val(), apikey: $.plush.apikey}, - success: function(newPos){ - // reposition the nzb if necessary (new position is returned by the API) - if (parseInt(newPos) < $.plush.queuecurpage * $.plush.queuePerPage - || ($.plush.queuecurpage + 1) * $.plush.queuePerPage < parseInt(newPos)) { - $.plush.skipRefresh = false; - $.plush.RefreshQueue(); - } else if (oldPos < newPos) - $('#'+nzbid).insertAfter($('#queueTable tr:eq('+ (newPos - $.plush.queuecurpage * $.plush.queuePerPage) +')')); - else if (oldPos > newPos) - $('#'+nzbid).insertBefore($('#queueTable tr:eq('+ (newPos - $.plush.queuecurpage * $.plush.queuePerPage) +')')); - } - }); - }); - - // 3-in-1 change nzb [category + processing + script] - $('#queueTable .options .change_cat, #queueTable .options .change_opts, #queueTable .options .change_script').live('change',function(e){ - var val = $(this).parent().parent().attr('id'); - var cval = $(this).attr('class').split(" ")[0]; // ignore added "hovering" class - $.ajax({ - type: "POST", - url: "tapi", - data: {mode: cval, value: val, value2: $(this).val(), apikey: $.plush.apikey}, - success: function(resp){ - // each category can define different priority/processing/script -- must be accounted for - if (cval=="change_cat") { - $.plush.skipRefresh = false; - $.plush.RefreshQueue(); // this is not ideal, but the API does not yet offer a nice way of refreshing just one nzb - } - } - }); - }); - - // NZB icon hover states -- done here rather than in CSS:hover due to sprites - $('#queueTable tr').live('mouseover mouseout', function(event) { - if (event.type == 'mouseover') { - $(this).find('td .icon_nzb_remove').addClass('sprite_ql_cross'); - $(this).find('td .sprite_ql_grip_queued').toggleClass('sprite_ql_grip_queued').toggleClass('sprite_ql_grip_queued_on'); - $(this).find('td .sprite_ql_grip_paused').toggleClass('sprite_ql_grip_paused').toggleClass('sprite_ql_grip_paused_on'); - } else { - $(this).find('td .icon_nzb_remove').removeClass('sprite_ql_cross'); - $(this).find('td .sprite_ql_grip_queued_on').toggleClass('sprite_ql_grip_queued').toggleClass('sprite_ql_grip_queued_on'); - $(this).find('td .sprite_ql_grip_paused_on').toggleClass('sprite_ql_grip_paused').toggleClass('sprite_ql_grip_paused_on'); - } - }); - $('#queueTable tr td .icon_nzb_remove').live('mouseover mouseout', function(event) { - if (event.type == 'mouseover') { - $(this).addClass('sprite_ql_cross_on'); - } else { - $(this).removeClass('sprite_ql_cross_on'); - } - }); - - // Styling that is broken in IE (IE8 auto-closes select menus if defined) - if (!$.browser.msie) { - $('#queueTable tr').live('mouseover mouseout', function(event) { - if (event.type == 'mouseover') { - $(this).find('td.options select').addClass('hovering'); - } else { - $(this).find('td.options select').removeClass('hovering'); - } - }); - } - - // Sustained binding of events for elements added to DOM - // Same idea as jQuery live(), but use jQuery livequery() plugin for functions/events not supported by live() - $('#queueTable').livequery(function() { - - // Build pagination only when needed - if ( ( $.plush.queueforcerepagination && $.plush.queuenoofslots > $.plush.queuePerPage) || $.plush.queuenoofslots > $.plush.queuePerPage && - Math.ceil($.plush.queueprevslots/$.plush.queuePerPage) != - Math.ceil($.plush.queuenoofslots/$.plush.queuePerPage) ) { - - $.plush.queueforcerepagination = false; - if ( $("#queueTable tr:visible").length - 1 < 1 ) // don't leave stranded on non-page - $.plush.queuecurpage--; - $("#queue-pagination").pagination( $.plush.queuenoofslots , { - current_page: $.plush.queuecurpage, - items_per_page: $.plush.queuePerPage, - num_display_entries: 8, - num_edge_entries: 1, - prev_text: "« "+$.plush.Tprev, // translation - next_text: $.plush.Tnext+" »", // translation - callback: $.plush.RefreshQueue - }); - $('#queue-pagination span').removeClass('loading'); // hide spinner graphic - } else if ($.plush.queuenoofslots <= $.plush.queuePerPage) { - $("#queue-pagination").html(''); // remove pages if history empty - } - $.plush.queueprevslots = $.plush.queuenoofslots; // for the next refresh - - // Drag and drop sorting - $("#queueTable").tableDnD({ - onDrop: function(table, row) { - if (table.tBodies[0].rows.length < 2) - return false; - // determine which position the repositioned row is at now - var val2; - for ( var i=0; i < table.tBodies[0].rows.length; i++ ) { - if (table.tBodies[0].rows[i].id == row.id) { - val2 = (i + $.plush.queuecurpage * $.plush.queuePerPage); - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'switch', value: row.id, value2: val2, apikey: $.plush.apikey}, - success: function(result){ - // change priority of the nzb if necessary (priority is returned by API) - var newPriority = result.split(' '); - newPriority = parseInt(newPriority[1]); - if (newPriority != $('#'+row.id+' .options .proc_priority').val()) - $('#'+row.id+' .options .proc_priority').val(newPriority); // must be int, not string - } - }); - return false; - } - } - } - }); - - }); // end livequery - - }, // end $.plush.InitQueue() - - - // *************************************************************** - // $.plush.InitHistory() -- History Events - - InitHistory : function() { - - // Search - $('#historySearchForm').submit(function(){ - $.plush.histcurpage = 0; - $.plush.RefreshHistory(); - return false; - }); - - // Purge - $('#hist_purge').click(function(event) { - if (confirm( $.plush.TconfirmPurgeH )) { - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'history', name:'delete', value:'all', apikey: $.plush.apikey}, - success: $.plush.RefreshHistory - }); - } - }); - - // refresh on mouseout after deletion - $('#history').hover( // $.mouseout was triggering too often - function(){}, // over - function(){ // out - if ($.plush.pendingHistoryRefresh) { - $.plush.pendingHistoryRefresh = false; - $.plush.RefreshHistory(); - } - } - ); - - // colorbox event bindings - so history doesn't refresh when viewing modal (thereby breaking rel prev/next) - $().bind('cbox_open', function(){ $.plush.modalOpen=true; }); - $().bind('cbox_closed', function(){ $.plush.modalOpen=false; }); - $().bind('cbox_complete', function(){ - $('#cboxLoadedContent input').hide(); // hide back button - $('#cboxLoadedContent h3').append('

        '); // add spacing to header - }); - - // Set history per-page preference - $("#history-pagination-perpage").val($.plush.histPerPage); - $.plush.histcurpage = 0; // default 1st page - - // Pagination per-page selection - $("#history-pagination-perpage").change(function(event){ - $.plush.histcurpage = Math.floor($.plush.histcurpage * $.plush.histPerPage / $(event.target).val() ); - $.plush.histPerPage = $(event.target).val(); - $.cookie('histPerPage', $.plush.histPerPage, { expires: 365 }); - $.plush.histforcerepagination = true; - if ($.plush.histPerPage=="1") - $("#history-pagination").html(''); // pagination rebuild not triggered on blank history (disabled) - $.plush.RefreshHistory(); - }); - - // NZB individual removal - $('#history .sprite_ql_cross').live('click', function(event) { - if (!$.plush.confirmDeleteHistory || confirm($.plush.Tconfirmation)){ - delid = $(event.target).parent().parent().attr('id'); - $('#'+delid).fadeTo('normal',0.25); - $.plush.pendingHistoryRefresh = true; - $.ajax({ - type: "POST", - url: "tapi", - data: {mode:'history', name:'delete', value: delid, apikey: $.plush.apikey}, - success: function(){ - if ( $("#historyTable tr:visible").length - 1 < 1 ) { // don't leave stranded on non-page - $.plush.histforcerepagination = true; - $.plush.RefreshHistory($.plush.histcurpage-1); - } - } - }); - } - }); - - // Remove NZB hover states -- done here rather than in CSS:hover due to sprites - $('#historyTable tr').live('mouseover mouseout', function(event) { - if (event.type == 'mouseover') { - $(this).find('.icon_nzb_remove').addClass('sprite_ql_cross'); - } else { - $(this).find('.icon_nzb_remove').removeClass('sprite_ql_cross'); - } - }); - $('#historyTable tr td .icon_nzb_remove').live('mouseover mouseout', function(event) { - if (event.type == 'mouseover') { - $(this).addClass('sprite_ql_cross_on'); - } else { - $(this).removeClass('sprite_ql_cross_on'); - } - }); - - // Sustained binding of events for elements added to DOM - $('#historyTable').livequery(function() { - - // modal for viewing script logs - $('#historyTable .modal').colorbox({ width:"80%", height:"80%", initialWidth:"80%", initialHeight:"80%", speed:0, opacity:0.7 }); - - // Build pagination only when needed - if ($.plush.histPerPage=="1") // disabled history - $("#history-pagination").html(''); // remove pages if history empty - else if ( ( $.plush.histforcerepagination && $.plush.histnoofslots > $.plush.histPerPage) || $.plush.histnoofslots > $.plush.histPerPage && - Math.ceil($.plush.histprevslots/$.plush.histPerPage) != - Math.ceil($.plush.histnoofslots/$.plush.histPerPage) ) { - - $.plush.histforcerepagination = false; - if ( $("#historyTable tr:visible").length - 1 < 1 ) // don't leave stranded on non-page - $.plush.histcurpage--; - $("#history-pagination").pagination( $.plush.histnoofslots , { - current_page: $.plush.histcurpage, - items_per_page: $.plush.histPerPage, - num_display_entries: 8, - num_edge_entries: 1, - prev_text: "« "+$.plush.Tprev, // translation - next_text: $.plush.Tnext+" »", // translation - callback: $.plush.RefreshHistory - }); - $('#history-pagination span').removeClass('loading'); // hide spinner graphic - } else if ($.plush.histnoofslots <= $.plush.histPerPage) - $("#history-pagination").html(''); // remove pages if history empty - $.plush.histprevslots = $.plush.histnoofslots; // for the next refresh - - }); // end livequery - - }, // end $.plush.InitHistory() - - - // *************************************************************** - // $.plush.Refresh() - - Refresh : function(force) { - - clearTimeout($.plush.timeout); // prevent back-to-back refreshes - - if (force || $.plush.refreshRate > 0) { - $.plush.RefreshQueue(); - $.plush.RefreshHistory(); - $.plush.timeout = setTimeout("$.plush.Refresh()", $.plush.refreshRate*1000); // loop - } else if (!$('#history_stats').html()) { - // Initial load if refresh rate saved as "Disabled" - $.plush.RefreshQueue(); - $.plush.RefreshHistory(); - } - }, // end $.plush.Refresh() - - - // *************************************************************** - // $.plush.RefreshQueue() -- fetch HTML data from queue.tmpl (AHAH) - - RefreshQueue : function(page) { - - // Skip refresh if cursor hovers queue, to prevent UI annoyance - if ($.plush.blockRefresh && $.plush.skipRefresh) - return $('#manual_refresh_wrapper').addClass('refresh_skipped'); - - // no longer a need for a pending queue refresh (associated with nzb deletions) - $.plush.pendingQueueRefresh = false; - - // Deal with pagination for start/limit - if (typeof( page ) == 'undefined' || page == "ok\n" || page < 0 ) - page = $.plush.queuecurpage; - else if (page != $.plush.queuecurpage) - $.plush.queuecurpage = page; - - // Refresh state notification - $('#manual_refresh_wrapper').removeClass('refresh_skipped').addClass('refreshing'); - - // Fetch updated content from queue.tmpl - $.ajax({ - type: "POST", - url: "queue/", - data: {start: ( page * $.plush.queuePerPage ), limit: $.plush.queuePerPage}, - success: function(result){ - $('#queue').html(result); // Replace queue contents with queue.tmpl - $('#queue-pagination span').removeClass('loading'); // Remove spinner graphic from pagination - $('#manual_refresh_wrapper').removeClass('refreshing'); // Refresh state notification - }, - error: function() { - $('#manual_refresh_wrapper').addClass('refresh_skipped'); // Failed refresh notification - } - }); - - }, // end $.plush.RefreshQueue() - - - // *************************************************************** - // $.plush.RefreshHistory() -- fetch HTML data from history.tmpl (AHAH) - - RefreshHistory : function(page) { - - // Skip refreshing when modal is open, which destroys colorbox rel prev/next - if ($.plush.modalOpen) - return; - - // no longer a need for a pending history refresh (associated with nzb deletions) - $.plush.pendingHistoryRefresh = false; - - // Deal with pagination for start/limit - if (typeof( page ) == 'undefined') - page = $.plush.histcurpage; - else if (page != $.plush.histcurpage) - $.plush.histcurpage = page; - - if ($('#historySearchBox').val() && $.plush.histPerPage == "1") // history disabled - var data = {start: 0, limit: 0, search: $('#historySearchBox').val() }; - else if ($('#historySearchBox').val()) - var data = {start: ( page * $.plush.histPerPage ), limit: $.plush.histPerPage, search: $('#historySearchBox').val() }; - else - var data = {start: ( page * $.plush.histPerPage ), limit: $.plush.histPerPage}; - - $.ajax({ - type: "POST", - url: "history/", - data: data, - success: function(result){ - $('#history').html(result); // Replace history contents with history.tmpl - $('#history-pagination span').removeClass('loading'); // Remove spinner graphic from pagination - } - }); - - }, // end $.plush.RefreshHistory() - - - // *************************************************************** - // $.plush.SetQueueStats(str) -- called from queue.tmpl - SetQueueStats : function(str) { - $('#queue_stats').html(str); - }, - - - // *************************************************************** - // $.plush.SetQueueSpeedLimit(str) -- called from queue.tmpl - SetQueueSpeedLimit : function(str) { - if ($("#maxSpeed-option").val() != str && !$.plush.focusedOnSpeedChanger) - $("#maxSpeed-option").val(str); - }, - - - // *************************************************************** - // $.plush.SetQueueFinishAction(str) -- called from queue.tmpl - SetQueueFinishAction : function(str) { - if ($("#onQueueFinish-option").val() != str) - $("#onQueueFinish-option").val(str); - }, - - - // *************************************************************** - // $.plush.SetQueuePauseInfo(paused,str) -- called from queue.tmpl - SetQueuePauseInfo : function(paused,str) { - $.plush.paused = paused; - - // Pause/resume button state - if ( paused && !$('#pause_resume').hasClass('sprite_q_pause_on') ) - $('#pause_resume').removeClass('sprite_q_pause').addClass('sprite_q_pause_on'); - else if ( !paused && !$('#pause_resume').hasClass('sprite_q_pause') ) - $('#pause_resume').removeClass('sprite_q_pause_on').addClass('sprite_q_pause'); - - // Pause interval - (str == "0") ? $('#pause_int').html("") : $('#pause_int').html(str); - }, - - - // *************************************************************** - // $.plush.SetQueueETAStats(speed,kbpersec,timeleft,eta) -- called from queue.tmpl - SetQueueETAStats : function(speed,kbpersec,timeleft,eta) { - - // ETA/speed stats at top of queue - if ($.plush.queuenoofslots < 1) - $('#stats_speed, #stats_eta').html('—'); - else if (kbpersec < 1 && $.plush.paused) - $('#stats_speed, #stats_eta').html('—'); - else { - $('#stats_speed').html(speed+"B/s"); - $('#stats_eta').html(timeleft); - } - $('#time-left').attr('title',eta); // Tooltip on "time left" - }, - - - // *************************************************************** - // $.plush.SetWarnings(have_warnings,last_warning) -- called from queue.tmpl - SetWarnings : function(have_warnings,last_warning) { - $('#have_warnings').html('('+have_warnings+')'); // Update warnings count/latest warning text in main menu - $('#last_warning').attr('title',last_warning); - }, - - - // *************************************************************** - // $.plush.SetHistoryStats(str) -- called from history.tmpl - SetHistoryStats : function(str) { - $('#history_stats').html(str); - } - - }; // end $.plush object - -}); - - -jQuery(document).ready(function($){ - $.plush.Init(); // Initialize Plush UI - $.plush.Refresh(); // Initiate Plush refresh cycle -}); diff --git a/main/interfaces/Plush/templates/static/stylesheets/plush-default.css b/main/interfaces/Plush/templates/static/stylesheets/plush-default.css deleted file mode 100644 index 6d97fc7..0000000 --- a/main/interfaces/Plush/templates/static/stylesheets/plush-default.css +++ /dev/null @@ -1,1552 +0,0 @@ -/*------------------------------------------------------------------ -[Plush default] --------------------------------------------------------------------*/ - -/*------------------------------------------------------------------ -[reset] -------------------------------------------------------------------*/ -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-style: inherit; - font-size: 100%; - font-family: inherit; - vertical-align: baseline; -} -/* remember to define focus styles! */ -:focus { - outline: 0; -} -body { - line-height: 1; - color: #000; - background: #fff; -} -ol, ul { - list-style: none; -} -/* tables still need 'cellspacing="0"' in the markup */ -table { - border-collapse: separate; - border-spacing: 0; -} -caption, th, td { - text-align: left; - font-weight: normal; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ""; -} -blockquote, q { - quotes: "" ""; -} - -/*------------------------------------------------------------------ -[Plush typography] --------------------------------------------------------------------*/ - -body, -input, -textarea{ - font:75% 'Helvetica Neue', Arial, Helvetica, sans-serif; - color:#555550; -} -html>body{ - font-size:12px; -} -h1, -h2, -h3, -h4{ - font-family:'Century Gothic', 'AppleGothic', sans-serif; -} -h1{ - font-size:1.5em; -} -h2{ - font-size:1.25em; -} -h3{ - font-size:1em; -} -p, -ul, -ul li, -td{ - font-size:1em; -} -p,li,dt,dd,td,th{ - line-height:1.5; -} -p,dt,dd,td,th,ul,ol,dl{ - margin-bottom:10px; -} -strong { - font-weight:bold; -} -small { - font-size:0.8333em; -} -input, -textarea{ - font-size:1em; -} - -a:link,a:visited{ - color:#fff; - text-decoration:none; -} -a:hover,a:active{ - text-decoration:underline; -} - -#main_menu ul{ - color:#fff; -} -.box_fatbottom, -.queueTable .eta, -.currentDownload, -.totalDownload { - font-size:0.8333em; -} - -/*------------------------------------------------------------------ -[Plush default] --------------------------------------------------------------------*/ - -body { - background: #B1B1B1; - padding-bottom: 10px; -} - -select { - background-color: #E0E0E0; - border: 0px; - color: #000; -} - -.new_release_link { - color: #006400; -} - -.pointer { - cursor: pointer; -} - -.clear { - clear: both; -} - -.nowrap { - white-space: nowrap; -} - -#warning_message { - color: #8B0000; - font-weight: bold; -} - -#new_release { - color: green; - font-weight: bold; -} - -#livetip { - position: absolute; - background-color: #cfc; - padding: 4px; - border: 2px solid #9c9; - border-radius: 4px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; -} - - -/* for jQuery Pagination Plugin */ - -.pagination-perpage { - float: left; - margin-top: 2px; -} - -.pagination { - float: left; - margin-left:10px; -} - - .pagination a { - background: #E0E0E0; - border: solid 1px #B1B1B1; - color: #000; - cursor: pointer; - text-decoration: none; - } - - .pagination a:hover { border: solid 1px #000; } - - .pagination a, .pagination span { - display: block; - float: left; - margin-right: 5px; - padding:3px 5px; - } - - .pagination .current { - background: #FFF; - border: solid 1px #000; - color: #000; - } - - .pagination .current.prev, .pagination .current.next { - background: #E0E0E0; - border-color: #B1B1B1; - color: #B1B1B1; - } - - .pagination .loading { background: #FFF url('../images/plush-default/spinner.gif') 50% 50% no-repeat; } - -/* --------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- - - queue + history overall container - ------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- */ - - - -/* sprite-main.png */ -.main_sprite_container { background: url('../images/plush-default/sprite-main.png') no-repeat top right; } - -#main_menu ul li a span.sf-sub-indicator { background-position: 0 5px; } -#main_menu ul li ul li a span.sf-sub-indicator { background-position: 0 -16px; } -.sprite_btm_corner_left { background-position: 0 -34px; } -.sprite_btm_corner_right { background-position: 0 -68px; } -.sprite_h_purge { background-position: 0 -102px; } -.sprite_hv_download { background-position: 0 -131px; } -.sprite_hv_error { background-position: 0 -155px; } -.sprite_hv_filejoin { background-position: 0 -179px; } -.sprite_hv_repair { background-position: 0 -203px; } -.sprite_hv_report { background-position: 0 -227px; } -.sprite_hv_script { background-position: 0 -251px; } -.sprite_hv_star { background-position: 0 -275px; } -.sprite_hv_stats { background-position: 0 -299px; } -.sprite_hv_unpack { background-position: 0 -323px; } -.sprite_progress_done { background-position: 0 -347px; } /* queue.tmpl */ -.sprite_progressbar_bg { background-position: 0 -374px; } -.sprite_q_menu_pausefor { background-position: 0 -401px; } -.sprite_q_menu_pauseforsfHover { background-position: 0 -430px; } -.sprite_q_pause { background-position: 0 -459px; } -.sprite_q_pause_on { background-position: 0 -488px; } -.sprite_q_queue { background-position: 0 -517px; } -.sprite_q_queuesfHover { background-position: 0 -546px; } -.sprite_q_stats_complete { background-position: 0 -575px; } -.sprite_q_stats_incomplete { background-position: 0 -599px; } -.sprite_q_stats_needspace { background-position: 0 -623px; } -.sprite_ql_cross { background-position: 0 -647px; } -.sprite_ql_cross_on { background-position: 0 -671px; } -.sprite_ql_grip_active, .sprite_ql_grip_active_on { background-position: 0 -695px; } -.sprite_ql_grip_paused { background-position: 0 -717px; } -.sprite_ql_grip_paused_on { background-position: 0 -739px; } -.sprite_ql_grip_queued { background-position: 0 -761px; } -.sprite_ql_grip_queued_on { background-position: 0 -783px; } -.sprite_rounded_area_bg { background-position: 0 -805px; } -.sprite_sabnzbdplus_logo { background-position: 0 -835px; } -.sprite_sabnzbdplus_plush { background-position: 0 -883px; } -.sprite_tile_qh_seperator { background-position: 0 -904px; } -.sprite_topleft_queue { background-position: 0 -916px; } -.sprite_topright_queue { background-position: right -991px; } /* right */ - -/* tile-x sprite */ -.tilex_sprite_container { background: url('../images/plush-default/sprite-tilex.png') repeat-x top right; } -.sprite_tile_bottom_wrap { background-position: 0 0; } -.sprite_tile_qh { background-position: 0 -27px; } -.sprite_tile_qhistory { background-position: 0 -43px; } /* subtract 16 from above */ -.sprite_tile_qh_bottom { background-position: 0 -95px; } -.sprite_tile_znavbar { background-position: 0 -134px; } - -/* tile-y sprite */ -.tiley_sprite_container { background: url('../images/plush-default/sprite-tiley.png') repeat-y top right; } -.sprite_tile_page_wrap { background-position: 0 0; } -.sprite_tile_queue_wrap { background-position: bottom right; } - - -.box_fatbottom { - color: #606060; - height: 37px; - text-align: center; -} - -.left_stats, .right_stats { - cursor: default; - padding: 12px 16px 0 20px; -} - -#box_fatbottom_queue .left_stats { - padding-top:6px; -} - -.plush_wrapper { - display:block; - height:15px; - margin:0 auto; - padding:13px 0 0; - text-indent:-5000px; - width:58px; -} - -#history_stats { padding-top: 16px; } - -.box_fatbottom .left_stats { float: left; } - -.box_fatbottom .right_stats { float: right; } - -.box_fatbottom strong { color: #000; } - -.box_banner_menu { - display: inline; - float: right; - list-style: none; - margin: 10px 0; - padding: 0; -} - - .box_banner_menu li { float: right; } - -/* keep .h_menu_verbose and .h_menu_purge up with the above (buttons top-right of history) */ -.sprite_h_purge { - cursor: pointer; - display: none; - margin: 6px; - padding-bottom: 24px; - padding-right: 28px; -} - -#page-wrap { - clear:both; - margin: 0px auto; - width: 95%; -} - -.box_banner_hr { - background-repeat: repeat-x; - height: 4px; -} - -.box_banner_history { - clear:both; - height:51px; - overflow:hidden; -} - - .box_banner_history h1 { - color: #c7c7c7; - cursor: default; - float: left; - font-weight: normal; - padding:17px 8em 11px 21px; - } - -.box_banner_r { - float:right; - height: 52px; - margin-left: 1px; - width:350px; -} - -#historySearchBox { - color:white; - border:1px solid gray; - width:120px; - margin: 8px 8px 0 0; - padding-right:20px; - background: url('../images/plush-default/viewmag.png') no-repeat top right; - /*background-color: black;*/ - /*background: url('../images/plush-default/sprite-main.png') no-repeat top right; - background-position: 0 -671px;*/ -} - -#hdr-queue { - height: 67px; -} - - #hdr-queue .logo { - float: left; - height: 67px; - } - -#hdr-queue .logo h1 { - color: #c7c7c7; - cursor: default; - font-weight: normal; - margin: 32px 0 0 38px; - width:180px; - overflow:hidden; -} - -#queue-buttons { - float:right; - height:37px; - padding-top:34px; - padding-right:5px; - position:relative; - white-space:nowrap; -} - - #queue-buttons ul { - float:left; - margin-right:24px; - } - - #queue-buttons #pause_int { - color:#ccc; - font-size:small; - padding-right:16px; - position:absolute; - right:104px; - text-indent:0; - top:34px; - } - #queue-buttons ul li { - float: left; - cursor:pointer; - display:block; - height:21px; - position:relative; - text-indent:-5000px; - width:21px; - } - #queue-buttons ul li.sprite_q_queue { - margin-left:10px; - } - - #queue-buttons ul li ul{ /* Second Level */ - border-bottom:2px solid #403f3f; - border-right:2px solid #403f3f; - display:none; - float:left; - height:auto; - right:1px; - margin:0; - position:absolute; - top:21px; - width:200px; - z-index:100; - } - #queue-buttons.lang-nl-du ul li ul{ - width:245px; - } - #queue-buttons.lang-de-de ul li ul, - #queue-buttons.lang-fr-fr ul li ul{ - width:265px; - } - #queue-buttons ul li.sprite_q_queue ul{ - right:0; - } - #queue-buttons ul li ul li{ - background:#1d1c1c; - border-top:1px solid #474646; - clear:left; - height:auto; - margin:0; - text-indent:0; - width:100%; - } - #queue-buttons ul li ul li:first-child{ - border:0; - } - - #queue-buttons ul li ul li a{ - color:#aaa; - clear:left; - float:left; - margin:0; - padding:4px 6px; - text-align:left; - width:188px; - } - #queue-buttons ul li ul li a:hover{ - color:#eee; - } - #queue-buttons ul li.sprite_q_queue ul li a:hover { - text-decoration:none; - } - #queue-buttons ul li ul li #onQueueFinish-option{ - width:130px; - } - #queue-buttons ul li ul li ul, - #queue-buttons ul li.sprite_q_queue ul li ul{ /* Third Level */ - border:0; - position:absolute; - right:200px; - top:0; - } - #queue-buttons.lang-nl-du ul li ul li ul, - #queue-buttons.lang-nl-du ul li.sprite_q_queue ul li ul{ - right:245px; - } - #queue-buttons.lang-de-de ul li ul li ul, - #queue-buttons.lang-de-de ul li.sprite_q_queue ul li ul, - #queue-buttons.lang-fr-fr ul li ul li ul, - #queue-buttons.lang-fr-fr ul li.sprite_q_queue ul li ul{ - right:265px; - } - -#queue-wrap { - padding:0 16px; -} - -#btm-wrapper { - clear: both; - height: 26px; -} - #btm-wrapper div { - background-repeat: no-repeat; - float: left; - height:26px; - width:26px; - } - - #btm-wrapper .sprite_btm_corner_right { - float: right; - } - - -/* --------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- - - box header, above queue (sabnzbd logo & stats) - ------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- */ -.centerpiece { - margin:0 auto; - overflow:hidden; - padding-top:12px; - width:432px; -} - -.sprite_sabnzbdplus_logo { - margin: 10px 0 0; -} - -#queue_logo { - float: left; - height: 40px; - padding-left: 50px; - padding-right: 50px; -} - -#speed, #time-left { - cursor: default; - height: 12px; - margin-top: 20px; - padding: 3px 0px 7px; - text-align: center; - width: 68px; -} - -/* stats next to logo */ -#speed { - float: left; - margin-right: 36px; -} - -#time-left { - float: left; - margin-left: 36px; -} - -#speed p, #time-left p { - color: #7c7c7c; - font-size: 9px; -} - -#speed span, #time-left span { - color: #dadada; - font-size: 11px; - font-weight: bold; -} - -.show { display: inline; } - -/* queueTable shared by queue and history */ -.queueTable { - background-color: #e0e0e0; - border-bottom: 1px solid #fff; - border-collapse: separate; - border-spacing: 0px; - color: #606060; - width: 100%; -} - - .queueTable tr { - background-color: #e0e0e0; - cursor: default; - } - .queueTable tr:hover, - .queueTable tr.alt:hover { - background-color: #f9f9f9; - color: #000; - } - .queueTable tr select { - background: #e5e5e5; - border:1px solid #e0e0e0; - color:#606060; - padding:2px; - } - - .queueTable tr select.hovering { - background:#fff; - border: 1px solid #c0c0c0; - color: #000; - } - - .queueTable tr.alt { - background-color:#d0d0d0; - } - .queueTable tr.alt select { - border:1px solid #d0d0d0; - background: #d5d5d5; - } - .queueTable tr.alt select.hovering { - border:1px solid #b0b0b0; - background: #fff; - } - -#queueTable tr:hover { cursor: move; } - - - -.queueTable td { - border-bottom: 1px solid #B1B1B1; - border-top: 1px solid #FFF; - padding: 3px 0; - vertical-align: middle; -} - -tr:hover .nzb_status_grippie { - background-color: #f9f9f9; /* IE7 */ -} - -.queueTable td.download-title { - width: 50%; -} - -.nzb_status_col { - width: 28px; -} - -.nzb_status { - display: inline; - margin-right: 4px; - padding-bottom: 2px; - padding-left: 16px; -} - - .nzb_status.Loaded { background: url('../images/plush-default/spinner.gif') no-repeat; } - -#queueTable .nzb_status { - cursor: pointer; -} - -.loading { - background: url('../images/plush-default/spinner.gif') 4px 50% no-repeat; - display: inline; - padding-left: 16px; -} - -.queueTable td.historyTitle { - padding:11px 0; - width: 50%; -} - -.queueTable tr:hover td.historyTitle { - background-color: #f9f9f9; /* IE7 */ - color: #000; } - -.queueTable a { - color: #404040;; - text-decoration: none; -} - -.queueTable tr:hover a { color: #000; } - -.queueTable a:hover { - border-bottom: 1px dotted #606060; - cursor: pointer; -} - -.queueTable .eta { - padding-left: 6px; - text-align: center; -} - -.icon_nzb_remove { - display: inline; - padding-bottom: 2px; - padding-left: 16px; -} -.icon_nzb_remove:hover { - outline:none; -} - -.sprite_ql_cross_on { cursor: pointer; } - -/* --------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- - - Queue - ------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- */ -/* progress bar & MB/left stats */ -.sprite_progressbar_bg { - width: 121px; - padding-left:1px; -} - -.sprite_progress_done { - height: 19px; - width: 121px; -} - -.currentDownload, .totalDownload { - color: #000; - font-weight: bold; - margin-top: 3px; - z-index: 1; -} - -.currentDownload small, .totalDownload small { font-weight: normal; } - -.currentDownload { - float: left; - margin-left: 5px; -} - -.totalDownload { - float: right; - margin-right: 5px; -} - -.options { - padding-right: 8px; - text-align: right; -} - -/* below queue, left side, limit */ -#queue_view_preference, #history_view_preference { width: 120px; } - -#queue_view_preference { margin-top: -5px; } - -#stats_noofslots { display: none; } - -/* below queue, right side, disk space */ -.queue_footer_icon { - display: inline; - margin: 16px 4px 0px 20px; - padding: 4px; -} - -/* --------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- - - History - ------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- */ -.history_added { - cursor: default; - font-size: 75%; -} - -tr:hover .history_added { color: black; } - -.hvMessageFail { - clear: both; - color: #DE2424; - font-size: 80%; - font-weight: bold; - width: 100%; -} - -.hvMessageAction { - clear: both; - color: #00008B; - font-size: 80%; - font-weight: bold; - width: 100%; -} - -.hvMessageScript { - clear: both; - color: #006400; - font-size: 80%; - font-weight: bold; - width: 100%; -} - -.icon_history_verbose { - cursor: help; - display: inline; - float: left; - margin-right: 2px; - width: 16px; -} - -.hvFaded { - opacity: .25; - /*-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=25)"; - filter: alpha(opacity=25);*/ -} - -.pointer { cursor: pointer; } - - - -/* --------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- - - MAIN MENU -- courtesy of jquery superfish plugin - See LICENSE-MIT & LICENSE-GPL - with modifications by jbw - ------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- */ - - -#main_menu { - padding-top:10px; - text-align:center; -} - -#main_menu ul { - display:inline-block; - list-style:none; - margin:0 auto; - padding:0; - white-space:nowrap; -} -#main_menu ul li { - float:left; - position:relative; -} -#main_menu ul li a { - display:block; - float:left; - margin:0 10px; - padding:0 20px 0 5px; - cursor:pointer; - position:relative; - text-align:left; - border-bottom:1px; -} -/* refresh button below queue */ -#manual_refresh_wrapper b { font-weight:normal; } -#manual_refresh_wrapper.refreshing b { border-bottom: 1px dotted white; } -#manual_refresh_wrapper.refresh_skipped b { border-bottom: 1px solid red; } - -#main_menu ul li a span { - background: url('../images/plush-default/sprite-main.png') no-repeat center left; - display:block; - height:1.5em; - right:5px; - position:absolute; - text-indent:-5000px; - top:0; - width:10px; -} - - -#main_menu ul li ul{ /* Second Level */ - display:none; - float:left; - height:auto; - left:10px; - margin:0; - position:absolute; - top:21px; - width:200px; - z-index:100; -} - -#main_menu ul li ul li{ - background:#a2a2a2; - border-bottom:1px solid #878787; - clear:left; - float:left; - margin:0; - width:100%; -} - -#main_menu ul li ul li a{ - clear:left; - float:left; - margin:0; - padding:4px 6px; - text-align:left; - width:188px; -} -#main_menu ul li ul li a span { - background: url('../images/plush-default/sprite-main.png') no-repeat top left; - height:auto; - top:32%; -} - -#main_menu ul li ul.config_links li a{ - padding:3px 6px; -} - -#main_menu ul li ul li:hover, -#main_menu ul li ul li ul li:hover { - background:#ccc; - color:#333; -} -#main_menu ul li ul li:hover ul li a { - color:#fff; -} -#main_menu ul li ul li:hover a, -#main_menu ul li ul li ul li:hover a { - text-decoration:none; - color:#333; -} -#main_menu ul li ul li ul{ /* Third Level */ - left:200px; - position:absolute; - top:0; -} -#main_menu ul li ul li ul li{ - width:188px; -} -#main_menu.lang-nl-du ul li ul li ul li, -#main_menu.lang-fr-fr ul li ul li ul li, -#main_menu.lang-sv-se ul li ul li ul li{ - width:250px; -} -#main_menu.lang-de-de ul li ul li ul li{ - width:280px; -} -#main_menu ul li ul li#plushoptions ul li:first-child a, -#main_menu ul li ul li#processingContainer ul li{ - padding:4px 6px; -} -#main_menu ul li ul#navaddnzb{ - width:275px; -} -#main_menu ul li ul#navaddnzb li#navupload, -#main_menu ul li ul li#navfetch{ - padding:10px; - width:255px; -} -#main_menu ul li ul#navaddnzb li#processingContainer a{ - width:255px; -} -#main_menu ul li ul#navaddnzb li#processingContainer ul{ - left:275px; -} - -#main_menu ul li ul li#processingContainer ul li label{ - float:left; - text-align:left; - width:40%; -} -#main_menu ul li ul li#processingContainer ul li select{ - width:60%; -} - -#main_menu ul li ul#navqueue{ - width:230px; -} -#main_menu ul li ul#navqueue li#navqueueoption { - padding:10px; - width:210px; -} -#main_menu ul li ul#navqueue li a{ - width:210px; -} -#main_menu ul li ul#navqueue li ul{ - left:230px; - width:200px; -} - -#main_menu ul li ul#navqueue li ul li a{ - width:180px; -} -#main_menu ul li ul#last_warning_link li{ - min-width: 460px; -} -#main_menu ul li ul#last_warning_link li a{ - min-width: 440px; -} - -#main_menu.lang-fr-fr #addID_input{ - width: 110px; -} - -/* -.sf-shadow ul { if superfish shadows are enabled lets make it happen! - background: url('../images/plush-default/shadow.png') no-repeat bottom right; - padding: 0 8px 9px 0; - -moz-border-radius-bottomleft: 17px; - -moz-border-radius-topright: 17px; - -webkit-border-top-right-radius: 17px; - -webkit-border-bottom-left-radius: 17px; -} -*/ - -#uploadTip { - overflow: hidden; -} - - - -/* - ColorBox Core Style - The following rules are the styles that are consistant between all ColorBox themes -*/ -#colorbox, #cboxOverlay, #cboxWrapper { - left: 0; - overflow: hidden; - position: absolute; - top: 0; - z-index: 9999; -} - -#cboxOverlay { - height: 100%; - position: fixed; - width: 100%; -} - -#cboxMiddleLeft, #cboxBottomLeft { clear: left; } - -#cboxContent { - overflow: visible; - position: relative; -} - -#cboxLoadedContent { overflow: auto; } - - #cboxLoadedContent iframe { - border: 0; - display: block; - height: 100%; - width: 100%; - } - -#cboxTitle { margin: 0; } - -#cboxLoadingOverlay, #cboxLoadingGraphic { - left: 0; - position: absolute; - top: 0; - width: 100%; -} - -#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow { cursor: pointer; } - -/* - ColorBox example user style - These rules are ordered and tabbed in a way that represents the order/nesting of the generated HTML, - in hope that this will make the relationship easier to understand. Thanks, jack@colorpowered.com -*/ -#cboxOverlay { background: #000; } - -#colorbox { } - -#cboxContent { margin-top: 32px; } - -#cboxLoadedContent { - background: #DDD; - padding: 10px; -} - -#cboxLoadedContent a { - color: #00008B; -} - -/*#cboxLoadingGraphic{background:url(images/loading.gif) center center no-repeat;}*/ -#cboxLoadingOverlay { background: #DDD; } - -#cboxTitle { - color: #000; - left: 0; - position: absolute; - top: -22px; -} - -#cboxCurrent { - position: absolute; - right: 205px; - text-indent: -9999px; - top: -22px; -} - -#cboxSlideshow, #cboxPrevious, #cboxNext, #cboxClose { - background: url('../images/plush-default/sprite-jq-colorbox.png') 0 0 no-repeat; - height: 20px; - position: absolute; - text-indent: -9999px; - top: -20px; - width: 20px; -} - -#cboxPrevious { - background-position: 0px 0px; - right: 44px; -} - - #cboxPrevious.hover { background-position: 0px -25px; } - -#cboxNext { - background-position: -25px 0px; - right: 22px; -} - - #cboxNext.hover { background-position: -25px -25px; } - -#cboxClose { - background-position: -50px 0px; - right: 0; -} - - #cboxClose.hover { background-position: -50px -25px; } - -.cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious { right: 66px; } - -.cboxSlideshow_on #cboxSlideshow { - background-position: -75px -25px; - right: 44px; -} - - .cboxSlideshow_on #cboxSlideshow.hover { background-position: -100px -25px; } - -.cboxSlideshow_off #cboxSlideshow { - background-position: -100px 0px; - right: 44px; -} - - .cboxSlideshow_off #cboxSlideshow.hover { background-position: -75px -25px; } - -/* --------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- - - N Z O (nzb files page, linked from queue) - ------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- */ -body.nzo { - background: #ddd; -} - body.nzo .config_nav { - cursor: default; - } - body.nzo #config_content input, - body.nzo .config_nav a { - cursor: pointer; - } - -table.nzoTable { - border-collapse:collapse; - color: #131313; - margin:1px; - width:99%; -} - - table.nzoTable tr { - cursor: pointer; - } - table.nzoTable tr.even { - background-color: #cdf; - } - table.nzoTable tr.evenLine { - background-color: #eee; - } - table.nzoTable tr.odd { - background-color: #99bbff; - } - table.nzoTable tr.oddLine { - background-color: #f8f8f8; - } - table.nzoTable tr.nzo_highlight { - background-color:#FFFFE0; - } - table.nzoTable tr:hover { - background-color: #666; - color: #FFF; - } - - table.nzoTable th { - background: #b5b5b5; - color: white; - cursor: default; - font-weight: bold; - } - - table.nzoTable th, - table.nzoTable td { - border:1px solid #999; - padding:3px 5px; - } - table.nzoTable td.alignRight { - text-align:right; - } - table.nzoTable td.filename { - width:95%; - } - table.nzoTable th.check, - table.nzoTable td.check { - width:22px; - } - -.nzo_save_form { margin-left: 120px; } - - .nzo_save_form div { - display: inline; - white-space: nowrap; - } - -/* --------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------- - - C O N F I G - ------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------- */ -#config_container { - background: #bbb; - font-size: 10pt; - min-height: 435px; - padding-left: 20px; - padding: 10px; - text-align: left; -} -#config_content a { - color:#000; - text-decoration:underline; -} -#config_content { - overflow: auto; - width: 100%; -} - #config_content .center { - background:#eee; - border:1px solid #aaa; - padding:5px 7px; - } - #config_content .catheaderinfo { font-weight:bold;} - -#config_go_back { - padding: 1px; - text-align: center; -} - - #config_go_back div { - margin-bottom: -4px; - margin: auto; - padding: 25px 0 4px 20px; - width: 80px; - } - - #config_go_back a { - color: black; - font-size: 66%; - margin-left: -20px; - padding: 30px 10px 0px 40px; - text-decoration: none; - } - - #config_go_back a:hover { border-bottom: 1px dotted black; } - -div.EntryBlock form { display: inline; } -div.EntryBlock { - -} -fieldset.EntryFieldSet { - border:1px solid #333; - display: inline; - float: left; - margin: 5px; - padding: 7px 7px 10px; - vertical-align: top; -} -.add-rss fieldset.EntryFieldSet { - width:97%; -} - .add-rss fieldset.EntryFieldSet .feedname{ - font-weight:bold; - width:20%; - } - .add-rss fieldset.EntryFieldSet .feeduri{ - width:70%; - } - .add-rss fieldset.EntryFieldSet .inputsubmit{ - width:6%; - } - .update-rss fieldset.EntryFieldSet .feeduri{ - width:99%; - } -#catTable { - width:99%; -} - #catTable th, - #catTable td { - padding:3px 3px 5px; - } - #catTable th { - font-weight:bold; - } - #catTable td select { - background:#fff; - padding:3px; - width:100%; - } - #catTable td input { - width:98%; - } - #catTable td input.Add, - #catTable td input.Save{ - font-size:0.8333em; - width:75px; - } - #catTable td input.Delete { - font-size:0.8333em; - width:26px; - } - -#schedulingTable td, #switchesTable td { - padding:3px 3px 5px; -} -.alignRight { - text-align: right; - padding-right: 4px; -} - -.config_nav { - float: left; - margin-top: 20px; - text-align: left; - width: 84px; -} -.config_nav.lang-de-de { - width: 140px; -} - - .config_nav ul { - border: none; - list-style: none; - margin: 0; - padding: 0; - } - - .config_nav li { - margin: 0; - padding: 3px 0px 3px 5px; - } - - .config_nav li a { - background-color: #ddd; - color: #666; - display: block; - font-size: 9pt; - font-weight: bold; - padding: 4px 22px 4px 4px; - text-decoration: none; - width: 100%; - } - - .config_nav li a .config_sprite_container { - margin: 3px 0px 3px 0px; - padding-left: 22px; - padding-bottom: 1px; - width: 100%; - } - - .config_nav li:hover a, .config_nav li a:hover { - background-color: #ccc; - color: #000; - } - - .config_nav .nav_active { - background-color: #bbb; - color: #000; - } - - -legend .config_sprite_container { - display: inline; - padding: 0px 0px 0px 16px; -} - -#config_content legend { - background-color: #333; - color: white; - font-weight: bold; - padding: 2px 6px 2px 6px; -} - -#config_content legend.latestWarnings, -#config_content legend.serverDisabled { background-color:#8B0000; } -#config_content legend.lastEmail, -#config_content legend.serverBackup { background-color:#00008B; } -#config_content legend.serverOptional { background-color:#009090; } -#config_content legend.serverEnabled { background-color:#006400; } - - -/* sprite-config.png */ -.config_sprite_container { background: url('../images/plush-default/sprite-config.png') no-repeat top left; } - -.sprite_config_connections_disconnect { background-position: 0 0; } -.sprite_config_connections_encrypted { background-position: 0 -25px; } -.sprite_config_connections_unencrypted { background-position: 0 -44px; } -.sprite_config_connections_warnings { background-position: 0 -63px; } -.sprite_config_email_account_settings { background-position: 0 -82px; } -.sprite_config_email_options, .sprite_config_nav_email { background-position: 0 -101px; } -.sprite_config_email_test { background-position: 0 -120px; } -.sprite_config_folders_system { background-position: 0 -145px; } -.sprite_config_folders_user { background-position: 0 -164px; } -.sprite_config_general_restart { background-position: 0 -183px; } -.sprite_config_general_tuning { background-position: 0 -208px; } -.sprite_config_general_web_server { background-position: 0 -227px; } -.sprite_config_help { background-position: 0 -246px; } -.sprite_config_indexsites_account_info { background-position: 0 -271px; } -.sprite_config_indexsites_bookmarks { background-position: 0 -290px; } -.sprite_config_indexsites_processed { background-position: 0 -309px; } -.sprite_config_nav_categories { background-position: 0 -328px; } -.sprite_config_nav_connections { background-position: 0 -347px; } -.sprite_config_nav_folders { background-position: 0 -366px; } -.sprite_config_nav_general { background-position: 0 -385px; } -.sprite_config_nav_indexsites { background-position: 0 -404px; } -.sprite_config_nav_rss { background-position: 0 -423px; } -.sprite_config_nav_scheduling, .sprite_config_scheduling_current { background-position: 0 -442px; } -.sprite_config_nav_servers, .sprite_config_servers_add { background-position: 0 -461px; } -.sprite_config_nav_sorting, .sprite_config_sorting_series { background-position: 0 -480px; } -.sprite_config_nav_switches { background-position: 0 -499px; } -.sprite_config_rss_add { background-position: 0 -518px; } -.sprite_config_save { background-position: 0 -537px; } -.sprite_config_scheduling_add { background-position: 0 -562px; } -.sprite_config_sorting_date { background-position: 0 -581px; } -.sprite_config_sorting_generic { background-position: 0 -600px; } -.sprite_config_switches_other { background-position: 0 -619px; } -.sprite_config_switches_processing { background-position: 0 -638px; } -.sprite_nzo_bottom { background-position: 0 -657px; } -.sprite_nzo_delete { background-position: 0 -676px; } -.sprite_nzo_down { background-position: 0 -695px; } -.sprite_nzo_reload { background-position: 0 -714px; } -.sprite_nzo_select_all { background-position: 0 -733px; } -.sprite_nzo_select_invert { background-position: 0 -752px; } -.sprite_nzo_select_none { background-position: 0 -771px; } -.sprite_nzo_select_range { background-position: 0 -790px; } -.sprite_nzo_top { background-position: 0 -809px; } -.sprite_nzo_up { background-position: 0 -828px; } - - -.numbered_list li { list-style-type: decimal; margin-left:3em; } - -/* FF2 to rescue */ -.sucker { - font-weight: bold; - width: 120px; -} - -.tucker { - font-weight: bold; - width: 300px; -} - -.left_links .config_sprite_container, .right_links .config_sprite_container { - display: inline; - margin: 3px 0px 3px 0px; - padding: 4px 0px 4px 22px; -} - -.left_links a, .right_links a { - cursor: pointer; - margin-bottom: 40px; - margin: 10px; - padding: 36px; -} - -.left_links { - float: left; - margin: 5px 0 0 10px; - padding-left: 20px; -} - - .left_links a { - background-color: #ddd; - color: #666; - display: block; - font-size: 9pt; - font-weight: bold; - padding: 2px 5px; - text-decoration: none; - } - - .left_links a:hover { - background-color: #bbb; - color: #000; - } - -.config_margin { margin: 5px 10px 0 110px; } -.config_margin.lang-de-de { margin: 5px 10px 0 140px; } - -.right_links { - float: right; - margin: 5px 40px 0 0; -} - - .right_links a { - background-color: #ddd; - color: #666; - display: block; - font-size: 9pt; - font-weight: bold; - padding: 2px 5px; - text-decoration: none; - } - - .right_links a:hover { - background-color: #bbb; - color: #000; - } - -.center { text-align: center; } - -.xsmall { font-size: x-small; } - -.config_body { background: #ddd; } - -#configbox_latest_warnings a { color: white; } - -.dir_helper { - background-color: blue; - color: white; - padding:2px; -} - -.manual_restart { - background-color: red; - color: white; - padding:2px; -} - -.optional { - background-color: green; - color: white; -} - -.key_toggle { - background-color: #333; - color: white; - cursor: pointer; -} - -*+html { - overflow-x:visible; -} diff --git a/main/interfaces/smpl/CreativeCommons2-5.txt b/main/interfaces/smpl/CreativeCommons2-5.txt deleted file mode 100644 index cd98301..0000000 --- a/main/interfaces/smpl/CreativeCommons2-5.txt +++ /dev/null @@ -1,65 +0,0 @@ -Creative Commons Attribution 2.5 License - -CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - 1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. - 2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License. - 3. "Licensor" means the individual or entity that offers the Work under the terms of this License. - 4. "Original Author" means the individual or entity who created the Work. - 5. "Work" means the copyrightable work of authorship offered under the terms of this License. - 6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - -2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - 1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works; - 2. to create and reproduce Derivative Works; - 3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works; - 4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works. - 5. - - For the avoidance of doubt, where the work is a musical composition: - 1. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work. - 2. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions). - 6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions). - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved. - -4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - 1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(b), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by clause 4(b), as requested. - 2. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - 1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - 2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - -Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. - -Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. - -Creative Commons may be contacted at http://creativecommons.org/. diff --git a/main/interfaces/smpl/CreativeCommons3-0.txt b/main/interfaces/smpl/CreativeCommons3-0.txt deleted file mode 100644 index c5d01b9..0000000 --- a/main/interfaces/smpl/CreativeCommons3-0.txt +++ /dev/null @@ -1,76 +0,0 @@ -Creative Commons Attribution 3.0 Unported License - -CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. -DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. -CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. -CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, -AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - 1. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - 2. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - 3. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - 4. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - 5. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - 6. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - 7. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - 8. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - 9. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - 1. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - 2. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - 3. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - 4. to Distribute and Publicly Perform Adaptations. - 5. - - For the avoidance of doubt: - 1. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - 2. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, - 3. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - 1. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. - 2. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - 3. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - 1. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - 2. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - 6. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. - - Creative Commons Notice - - Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. - - Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License. - - Creative Commons may be contacted at http://creativecommons.org/. diff --git a/main/interfaces/smpl/GPL2.txt b/main/interfaces/smpl/GPL2.txt deleted file mode 100644 index f90922e..0000000 --- a/main/interfaces/smpl/GPL2.txt +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/main/interfaces/smpl/GPL3.txt b/main/interfaces/smpl/GPL3.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/main/interfaces/smpl/GPL3.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/main/interfaces/smpl/LICENCE-silk_icons.txt b/main/interfaces/smpl/LICENCE-silk_icons.txt deleted file mode 100644 index d7fc371..0000000 --- a/main/interfaces/smpl/LICENCE-silk_icons.txt +++ /dev/null @@ -1,49 +0,0 @@ -For: -interfaces\smpl\templates\static\images\control_pause.png -interfaces\smpl\templates\static\images\control_play.png -interfaces\smpl\templates\static\images\drive.png -interfaces\smpl\templates\static\images\drive_go.png -interfaces\smpl\templates\static\images\bullet_arrow_down.png - -======================================================================= - -Silk icon set 1.3 -_______________________________________ -Mark James -http://www.famfamfam.com/lab/icons/silk/ -_________________________________________ - -This work is licensed under a -Creative Commons Attribution 2.5 License. -[ http://creativecommons.org/licenses/by/2.5/ ] - -This means you may use it for any purpose, -and make any changes you like. -All I ask is that you include a link back -to this page in your credits. - -Are you using this icon set? Send me an email -(including a link or picture if available) to -mjames@gmail.com - -Any other questions about this icon set please -contact mjames@gmail.com - -======================================================================= -The website states the following: - -License - -I also love to hear of my work being used, feel encouraged to send an email with a link -or screenshot of the icons in their new home to mjames at gmail dot com. -This work is licensed under a Creative Commons Attribution 2.5 License. -This means you may use it for any purpose, and make any changes you like. -All I ask is that you include a link back to this page in your credits -(although a giant link on every page of your website really isn't needed, contact me to discuss specifics). - -The icons can also be used under Creative Commons Attribution 3.0 License (Hi Debian folks!) -with the following requirements: - - As an author, I would appreciate a reference to my authorship of the Silk icon set - contents within a readme file or equivalent documentation for the software which - includes the set or a subset of the icons contained within. diff --git a/main/interfaces/smpl/LICENSE.txt b/main/interfaces/smpl/LICENSE.txt deleted file mode 100644 index 261a33f..0000000 --- a/main/interfaces/smpl/LICENSE.txt +++ /dev/null @@ -1,17 +0,0 @@ -(c) Copyright 2007-2010 by "The SABnzbd-team" - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -See accompanying files GPL2.txt and GPL3.txt. \ No newline at end of file diff --git a/main/interfaces/smpl/License-ExCanvas.txt b/main/interfaces/smpl/License-ExCanvas.txt deleted file mode 100644 index efb618f..0000000 --- a/main/interfaces/smpl/License-ExCanvas.txt +++ /dev/null @@ -1,220 +0,0 @@ -ExplorerCanvas is developed by: - -Google Open Source: - - - -Developers: - Emil A Eklund - Erik Arvidsson - Glen Murphy - -The home of the kit is: http://excanvas.sourceforge.net - -It is covered by the following licenses: - - --------------------------------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --------------------------------------------------------------------------------------------- diff --git a/main/interfaces/smpl/License-MochiKit.txt b/main/interfaces/smpl/License-MochiKit.txt deleted file mode 100644 index ec1003d..0000000 --- a/main/interfaces/smpl/License-MochiKit.txt +++ /dev/null @@ -1,77 +0,0 @@ -The MochiKit is developed by Bob Ippolito (Mochi Media, Inc.). -Parts are written by Jonathan Gardner and Beau Hartshorne. - -The home of this kit is: http://www.mochikit.com/ - -It is covered by the following license: - ----------------------------------------------------------------------------------------- -MochiKit is dual-licensed software. It is available under the terms of the -MIT License, or the Academic Free License version 2.1. The full text of -each license is included below. - -MIT License -=========== - -Copyright (c) 2005 Bob Ippolito. All rights reserved. - -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. - - -Academic Free License v. 2.1 -============================ - -Copyright (c) 2005 Bob Ippolito. All rights reserved. - -This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work: - -Licensed under the Academic Free License version 2.1 - -1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following: - -a) to reproduce the Original Work in copies; - -b) to prepare derivative works ("Derivative Works") based upon the Original Work; - -c) to distribute copies of the Original Work and Derivative Works to the public; - -d) to perform the Original Work publicly; and - -e) to display the Original Work publicly. - -2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works. - -3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work. - -4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license. - -5) This section intentionally omitted. - -6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. - -7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer. - -8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. - -9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. - -10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. - -11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License. - -12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. - -13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. - -14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. - -This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner. - - - diff --git a/main/interfaces/smpl/License-Nuvola.txt b/main/interfaces/smpl/License-Nuvola.txt deleted file mode 100644 index 094c6fa..0000000 --- a/main/interfaces/smpl/License-Nuvola.txt +++ /dev/null @@ -1,573 +0,0 @@ -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -This copyright and license notice covers the following images in the -directory templates/static/images: - kgpg.png - messagebox_critical.png - browser.png - -Note the license notice contains an add-on. -************************************************************************ - -TITLE: NUVOLA ICON THEME for KDE 3.x -AUTHOR: David Vignoni | ICON KING -SITE: http://www.icon-king.com -MAILING LIST: http://mail.icon-king.com/mailman/listinfo/nuvola_icon-king.com - -Copyright (c) 2003-2004 David Vignoni. - -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, -version 2.1 of the License. -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 (see the the Nuvola-license.txt file); if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -#######**** NOTE THIS ADD-ON ****####### -The GNU Lesser General Public License or LGPL is written for software libraries -in the first place. The LGPL has to be considered valid for this artwork -library too. -Nuvola icon theme for KDE 3.x is a special kind of software library, it is an -artwork library, it's elements can be used in a Graphical User Interface, or -GUI. -Source code, for this library means: - - raster png image* . -The LGPL in some sections obliges you to make the files carry -notices. With images this is in some cases impossible or hardly usefull. -With this library a notice is placed at a prominent place in the directory -containing the elements. You may follow this practice. -The exception in section 6 of the GNU Lesser General Public License covers -the use of elements of this art library in a GUI. -dave [at] icon-king.com - -Date: 15 october 2004 -Version: 1.0 - -DESCRIPTION: - -Icon theme for KDE 3.x. -Icons where designed using Adobe Illustrator, and then exported to PNG format. -Icons shadows and minor corrections were done using Adobe Photoshop. -Kiconedit was used to correct some 16x16 and 22x22 icons. - -LICENSE - -Released under GNU Lesser General Public License (LGPL) -Look at the Nuvola-license.txt file. - -CONTACT - -David Vignoni -e-mail : david [at] icon-king.com -ICQ : 117761009 -http: http://www.icon-king.com - - -Nuvola-license.txt ------------------------------------------------------------------------------------------- - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - ------------------------------------------------------------------------------------------- diff --git a/main/interfaces/smpl/License-PlotKit.txt b/main/interfaces/smpl/License-PlotKit.txt deleted file mode 100644 index 7b80e4a..0000000 --- a/main/interfaces/smpl/License-PlotKit.txt +++ /dev/null @@ -1,37 +0,0 @@ -The PlotKit is developed by Alastair Tse. - -The home of the kit is: http://www.liquidx.net/plotkit - -Parts are taken from MochiKit and exCanvas. -For copyright and licenses of these parts see: -License-MochiKit.txt -License-ExCanvas.txt - -PlotKit is covered by the following license. - --------------------------------------------------------------------------------------------- -PlotKit is copyright (c) 2006 Alastair Tse. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------------------- diff --git a/main/interfaces/smpl/License-getElementPosition.txt b/main/interfaces/smpl/License-getElementPosition.txt deleted file mode 100644 index 59032e8..0000000 --- a/main/interfaces/smpl/License-getElementPosition.txt +++ /dev/null @@ -1,39 +0,0 @@ -The function getElementPosition in templates/static/MochiKit/MochiKit.js is -is adapted from YAHOO.util.Dom.getXY v0.9.0. -Copyright: Copyright (c) 2006, Yahoo! Inc. All rights reserved. - -It is covered by the following license. - --------------------------------------------------------------------------------- -License: BSD, http://developer.yahoo.net/yui/license.txt -Software License Agreement (BSD License) - -Copyright (c) 2006, Yahoo! Inc. -All rights reserved. - -Redistribution and use of this software in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of Yahoo! Inc. nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission of Yahoo! Inc. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- diff --git a/main/interfaces/smpl/README.txt b/main/interfaces/smpl/README.txt deleted file mode 100644 index 6a10c56..0000000 --- a/main/interfaces/smpl/README.txt +++ /dev/null @@ -1,66 +0,0 @@ -SMPL - Simple web-iu by switch - switch@sabnzbd.org - -SMPL is licenced under the Creative Commons Public Licence. -Please see LICENCE.txt or http://creativecommons.org/licenses/by/3.0/ for more information ------------------------- -v1.2 - -Install Instructions ------------------------- --Go to the General config page in sabnzbd eg 'http://localhost:8080/sabnzbd/config/general/' --select 'smpl' from the dropdown list under User interface: --restart sabnzbd to see the new template --If you notice any weird graphical stuff, press ctrl+f5 on your keyboard to force a refresh of the page without cache - - - -Credits ------------------------- -Javascript library - Mochikit http://www.mochikit.com/ -Javascript canvas library - Plotkit http://www.liquidx.net/plotkit/ -Canvas IE support - Excanvas http://sourceforge.net/projects/excanvas/ -Silk icons - http://www.famfamfam.com/lab/icons/silk/ - - -Changelog ------------------------- -1.0+1.1 -------------- --Added newzbin config page --Allow displaying of warnings in connection page --Added Time-left + Speed/Paused/Idle to the title of the browser tab/window. --Added: Combined queue+history views --Fixed: Various stuff - -beta4 -------------- --rewritten all javascript --added ajax form submitting --added drop down list for a changable refresh rate --fixed graph updating, now shows correct values and works in IE7 --retrieves info from the new JSON api --Upgraded to Mochikit 1.4 --removed top progressbar from queue and changed delete link to be an icon. --redesigned forms to look prettier on firefox2 as well. --lots of small fixes for various browsers. --includes links for the latest log downloading, and email testing. --added the current download below the graph. --added a simple link at the bottom of the page to function as a version checker. - -beta 3.1 -------------- --added purge history and toggle verbosity to history page - -beta3 -------------- --Added sort, verbosity and shutdown toggles --Styled verbosity view --Changed the way queue stuff submits so it should keep refreshing --Added 'age' to queue, will try to condense it to show just days --forced main page forms elements to each be on their own line --added help pages that link to the wiki like in the default template - - -TODO: ------------------------- --Make it standards compliant. diff --git a/main/interfaces/smpl/language/de-de.txt b/main/interfaces/smpl/language/de-de.txt deleted file mode 100644 index 0c7a479..0000000 --- a/main/interfaces/smpl/language/de-de.txt +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -# Deutschland # Deutsch -# Translation by Severin Heiniger - -thisWeek In dieser Woche -thisMonth In diesem Monat -size Grösse -links Links -first Anfang -previous Zurück -next Weiter -last Ende -edit Bearbeiten -editDetails Details bearbeiten -showEdit Bearbeitungs-Einstellungen anzeigen -hideEdit Bearbeitungs-Einstellungen verbergen -timeleft Verbleibend -purgeQueue Alle löschen -progress Fortschritt -delete Löschen -downloading Am herunterladen -idle Leerlauf -paused Angehalten -emailsent E-Mail gesendet! -saving Speichern... -saved Gespeichert -failed Fehlgeschlagen -speed Geschwindigkeit -toggleadd NZB hinzufügen -refresr Aktualisierungsrate -restartOK? Möchten Sie SABnzbd wirklich neu starten? -warnings Warnungen -getbookmarks Lesezeichen abrufen -purgefailhistOK? Möchten Sie alle fehlergeschlagenen Downloads aus dem Verlauf löschen? -purgehist Alle löschen -purgefailhist Fehlgeschlagene Downloads löschen -path Pfad -age Alter -speed Geschwindigkeit -numresults@3 Einträge %s bis %s von insgesamt %s werden angezeigt -oneresult Ein Eintrag wird angezeigt -noresult Keine Einträge -custom Benutzerdefiniert -dualView1 DualView 1 -dualView2 DualView 2 -eta ETA -refreshr Aktualisierungsrate -hourmin Stunde:Min diff --git a/main/interfaces/smpl/language/fr-fr.txt b/main/interfaces/smpl/language/fr-fr.txt deleted file mode 100644 index d1af553..0000000 --- a/main/interfaces/smpl/language/fr-fr.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: latin-1 -*- -# France # Français - -thisWeek Semaine -thisMonth Mois -size Taille -links Liens -first Premier -previous Préc. -next Suiv. -last Dernier -edit Editer -editDetails Editer Détails -showEdit Afficher Options Edition -hideEdit Cacher Options Edition -timeleft Temps Restant -purgeQueue Supprimer Tout -progress Progression -delete Supprimer -downloading Téléchargement en cours -idle En attente -paused En pause -emailsent Email Envoyé ! -saving Enregistrement.. -saved Enregistré -failed Echoué -speed Vitesse -toggleadd Afficher / Cacher Ajout NZB -refresr Délai Rafraîchissement -restartOK? Etes-vous sûr de vouloir redémarrer SABnzbd? -warnings Avertissements -getbookmarks Récupérer Favoris -purgefailhistOK? Supprimer tous les éléments échoués de l'historique ? -purgehist Supprimer Tous -purgefailhist Supprimer Echoués -path Chemin -age Age -speed Vitesse -numresults@3 Affiche %s de %s sur %s résultats -oneresult Affiche 1 résultat -noresult Pas de résultats -custom Personnalisé -dualView1 VueDuoV -dualView2 VueDuoH -eta TRE -refreshr Rafraîchissement -hourmin Heure:Min diff --git a/main/interfaces/smpl/language/nl-du.txt b/main/interfaces/smpl/language/nl-du.txt deleted file mode 100644 index 0dcfe5b..0000000 --- a/main/interfaces/smpl/language/nl-du.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: UTF-8 -*- -# Nederland # Nederlands - -thisWeek Deze week -thisMonth Deze maand -size Omvang -links Links -first Eerste -previous Vorige -next Volgende -last Laatste -edit Bewerk -editDetails Bewerk details -showEdit Toon Opties -hideEdit Verberg Opties -timeleft Te gaan -purgeQueue Alles wissen -progress Voortgang -delete Verwijder -downloading Downloaden -idle Rust -paused Pauze -emailsent Email verzonden! -saving Opslaan.. -saved Opgeslagen -failed Mislukt -speed Snelheid -toggleadd Wissel "NZB toevoegen" -refresr Verversingstempo -restartOK? Weet je zeker dat je SABnzbd wilt herstarten? -warnings Meldingen -getbookmarks Bookmarks ophalen -purgefailhistOK? Verwijder alle mislukte items uit de Geschiedenis? -purgehist Verwijder alles -purgefailhist Verwijder alle mislukte items -path Pad -age Leeftijd -numresults@3 Toon %s t/m %s van %s resultaten -oneresult Toon 1 resultaat -noresult Geen resultaten -custom Aangepast -dualView1 Dubbel1 -dualView2 Dubbel2 -eta ETA -refreshr Verversen -hourmin Uur:Min diff --git a/main/interfaces/smpl/language/sv-se.txt b/main/interfaces/smpl/language/sv-se.txt deleted file mode 100644 index 3fc8f2d..0000000 --- a/main/interfaces/smpl/language/sv-se.txt +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -# Sverige # Svenska -# Translation by "Kristoffer (Malmis) Malmström" - -thisWeek Denna vecka -thisMonth Denna mÃ¥nad -size Storlek -links Länkar -first Första -previous Prev -next Nästa -last Sista -edit Ändra -editDetails Ändra uppgifter -showEdit Visa Redigeringsalternativ -hideEdit Dölj Redigeringsalternativ -timeleft Ã…terstÃ¥ende tid -purgeQueue Ta bort alla -progress Arbetar -delete Ta bort -downloading Laddar ner -idle Väntar -paused Pausad -emailsent Skickat E-mail! -saving Sparar.. -saved Sparad -failed Misslyckades -speed Hastighet -toggleadd Visa/Dölj Lägg till NZB -refresr Uppdateringsfrekvens -restartOK? Är du säker pÃ¥ att du vill starta om SABnzbd? -warnings Varningar -getbookmarks Hämta bokmärken -purgefailhistOK? Ta bort alla felaktiga saker frÃ¥n historiken? -purgehist Ta bort alla -purgefailhist Ta bort felaktiga saker -path Genväg -age Ã…lder -speed Hastighet -numresults@3 Visar %s till %s av %s resultat -oneresult Visar 1 resultat -noresult Inga resultat -custom Anpassa -dualView1 Flerskärm1 -dualView2 Flerskärm2 -eta ETA -refreshr Uppdateringsfrekvens -hourmin Timme:Minut diff --git a/main/interfaces/smpl/language/us-en.txt b/main/interfaces/smpl/language/us-en.txt deleted file mode 100644 index 1f7fe4c..0000000 --- a/main/interfaces/smpl/language/us-en.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: latin-1 -*- -# United States # English - -thisWeek This week -thisMonth This month -size Size -links Links -first First -previous Prev -next Next -last Last -edit Edit -editDetails Edit Details -showEdit Show Edit Options -hideEdit Hide Edit Options -timeleft Timeleft -purgeQueue Delete All -progress Progress -delete Delete -downloading Downloading -idle Idle -paused Paused -emailsent Email Sent! -saving Saving.. -saved Saved -failed Failed -speed Speed -toggleadd Toggle Add NZB -refresr Refresh Rate -restartOK? Are you sure you want to restart SABnzbd? -warnings Warnings -getbookmarks Get Bookmarks -purgefailhistOK? Delete the all failed items from the history? -purgehist Delete All -purgefailhist Delete Failed Items -path Path -age Age -speed Speed -numresults@3 Showing %s to %s out of %s results -oneresult Showing 1 result -noresult No results -custom Custom -dualView1 DualView1 -dualView2 DualView2 -eta ETA -refreshr Refresh rate -hourmin Hour:Min diff --git a/main/interfaces/smpl/templates/config.tmpl b/main/interfaces/smpl/templates/config.tmpl deleted file mode 100644 index a1916dd..0000000 --- a/main/interfaces/smpl/templates/config.tmpl +++ /dev/null @@ -1,5 +0,0 @@ -

        Configuration

        -

        -Configfile: $configfn -

        - diff --git a/main/interfaces/smpl/templates/config_cat.tmpl b/main/interfaces/smpl/templates/config_cat.tmpl deleted file mode 100644 index 32690d4..0000000 --- a/main/interfaces/smpl/templates/config_cat.tmpl +++ /dev/null @@ -1,86 +0,0 @@ -
        Help -

        $T('configCat')

        -
        -$T('explain-configCat').
        - - $T('explain-catNewzbin').
        - -
        - $T('link-initCat')

        - - -
        -$T('explain-relFolder') $defdir
        -
        - - - - - - - - - - - - - - - - - "> - - - - - - - - - - - - - - - - - - - - - - -
        $T('category')$T('mode')$T('priority')$T('script')$T('catFolderPath')$T('catGroups')
        - - - - - - - - - -
        \ No newline at end of file diff --git a/main/interfaces/smpl/templates/config_directories.tmpl b/main/interfaces/smpl/templates/config_directories.tmpl deleted file mode 100644 index 43df34a..0000000 --- a/main/interfaces/smpl/templates/config_directories.tmpl +++ /dev/null @@ -1,86 +0,0 @@ - -Help -

        $T('folderConfig')

        - - -
        -
        - User Folders -
        -$T('explain-folderConfig') -
        -
        - - - $T('explain-download_dir') -
        - - - - $T('explain-download_free') -
        - - - - $T('explain-complete_dir') -
        - - - - - $T('explain-permissions') -
        - - - - - $T('explain-dirscan_dir') -
        - - - - $T('explain-dirscan_speed') -
        - - - - $T('explain-script_dir') -
        - - - - $T('explain-email_dir') -
        - -
        -
        -System Folders -
        -$T('systemFolders')
        -$T('in') "$my_lcldata"
        -

        - - - - $T('explain-cache_dir') -
        - - - - $T('explain-log_dir') -
        - - - - $T('explain-nzb_backup_dir') -
        - - -
        - - -

        - -
        - - diff --git a/main/interfaces/smpl/templates/config_email.tmpl b/main/interfaces/smpl/templates/config_email.tmpl deleted file mode 100644 index 5e14021..0000000 --- a/main/interfaces/smpl/templates/config_email.tmpl +++ /dev/null @@ -1,77 +0,0 @@ - -Help

        $T('configEmail')

        -
        -
        -
        -$T('emailOptions') -
        - - - $T('opt-email_endjob'): - /> $T('email-never') - /> $T('email-always') - /> $T('email-errorOnly') - $T('opt-email_endjob') -
        - - -
        - - - -
        - - - - - - $T('explain-email_dir') -
        - -
        - -
        -$T('emailAccount') -
        - - - - - - $T('explain-email_server'). -
        - - - - - $T('explain-email_to'). -
        - - - - $T('explain-email_from'). -
        - - - - $T('explain-email_account'). -
        - - - - $T('explain-email_pwd'). -
        - -
        -
        - -

        - -

        -
        -Test E-Mail -
        \ No newline at end of file diff --git a/main/interfaces/smpl/templates/config_general.tmpl b/main/interfaces/smpl/templates/config_general.tmpl deleted file mode 100644 index 45f5f00..0000000 --- a/main/interfaces/smpl/templates/config_general.tmpl +++ /dev/null @@ -1,147 +0,0 @@ - -Help

        $T('generalConfig')

        -
        - -
        -$T('webServer') ($T('restartRequired')) -
        - - - $T('explain-host') -
        - - - - $T('explain-port') -
        - - - - - $T('explain-web_dir') -
        - - - - $T('explain-web_dir2') -
        - - - - $T('explain-language') -
        - - - $T('explain-apikey') -
        - - -
        - - - 0 then "checked=1" else ""#--> /> - $T('explain-disableApikey') $T('explain-disableApikeyWarn') -
        - -
        -
        -$T('webAuth') -
        - - - $T('explain-web_username') -
        - - - - $T('explain-web_password') -
        - -
        -
        -$T('httpsSupport') ($T('restartRequired')) -
        - - -
        - - - - $T('explain-https_port') -
        - - - - $T('explain-https_cert') -
        - - - - $T('explain-https_key') -
        - -
        - -
        -$T('tuning') -
        - - - - $T('explain-refresh_rate') -
        - - - - $T('explain-rss_rate') -
        - - - - $T('explain-bandwidth_limit') -
        - - - - $T('explain-cache_limitstr') -
        - - - - $T('explain-cleanup_list') -
        - - -
        - - -

        - -

        -
        diff --git a/main/interfaces/smpl/templates/config_newzbin.tmpl b/main/interfaces/smpl/templates/config_newzbin.tmpl deleted file mode 100644 index 2c9230f..0000000 --- a/main/interfaces/smpl/templates/config_newzbin.tmpl +++ /dev/null @@ -1,92 +0,0 @@ -Help

        Newzbin

        -
        - -$T('explain-newzbin')
        -
        -
        - - -
        -$T('accountInfo') -
        - - - $T('explain-username_newzbin') -
        - - - - - $T('explain-password_newzbin') -
        -
        - - -
        -$T('newzbinBookmarks') -
        - - -
        - - -
        - - - - $T('explain-bookmark_rate'). -
        -
        - -$T('link-getBookmarks') - - $T('link-HideBM') - - $T('link-ShowBM') - - - -
        -$T('processedBM') -
        - - $msgid  - -
        -
        - - - -
        - -

        -

        NzbMatrix


        - -$T('explain-nzbmatrix')
        -
        -
        - - -
        -$T('accountInfo') -
        - - - $T('explain-username_matrix') -
        - - - - - $T('explain-apikey_matrix') -
        -
        - -

        - -

        - diff --git a/main/interfaces/smpl/templates/config_rss.tmpl b/main/interfaces/smpl/templates/config_rss.tmpl deleted file mode 100644 index f57e52b..0000000 --- a/main/interfaces/smpl/templates/config_rss.tmpl +++ /dev/null @@ -1,206 +0,0 @@ - - -Help

        $T('configRSS')

        - -
        -
        -$T('newFeedURI') - - - - -
        -
        - -

        $T('explain-RSS')

        - - -
        - >/> - $T('feed') $feed -
        -
        - - - - - -

        - - - - - - - - - - - />Scheduled --> - - -
        - -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                $T('rss-order')$T('rss-type')$T('rss-filter') $T('category') Mode $T('script')         
        - - - - - - - - - - - -
        - - - - - - - - - - - - - - - - -
        - -


        - diff --git a/main/interfaces/smpl/templates/config_scheduling.tmpl b/main/interfaces/smpl/templates/config_scheduling.tmpl deleted file mode 100644 index e317da2..0000000 --- a/main/interfaces/smpl/templates/config_scheduling.tmpl +++ /dev/null @@ -1,69 +0,0 @@ -Help -

        $T('configSchedule')

        -
        -
        -
        -$T('addSchedule') -
        -
        - <%import time -t = time.localtime() -hour = t[3] -if hour != 23: - hour += 1 -else: - hour = 0 %> - - -: - -
        - - -
        - - -
        - - -
        -

        - -

        -
        -
        -
        -

        $T('currentSchedules'):


        -
        - - -
        - -$T('sch-task') $taskinfo[$schednum][0]: $taskinfo[$schednum][1]:$taskinfo[$schednum][2] - $taskinfo[$schednum][3] - $taskinfo[$schednum][4] - - - -
        - -
        diff --git a/main/interfaces/smpl/templates/config_server.tmpl b/main/interfaces/smpl/templates/config_server.tmpl deleted file mode 100644 index 72b8555..0000000 --- a/main/interfaces/smpl/templates/config_server.tmpl +++ /dev/null @@ -1,102 +0,0 @@ - -Help -

        $T('configServer')

        -
        - - - -
        -
        -
        - $server -
        - -
        - -
        - -
        - -
        - -
        - -
        - -
        - - -
        - - -
        - - -
        - -
        $T('srv-testHint')
        - - - -

        -
        - -

        -
        -

        -
        - -
        -
        -
        - $T('addServer') -
        - - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - -

        - -

        - -
        -

        - -
        \ No newline at end of file diff --git a/main/interfaces/smpl/templates/config_sorting.tmpl b/main/interfaces/smpl/templates/config_sorting.tmpl deleted file mode 100644 index f97f098..0000000 --- a/main/interfaces/smpl/templates/config_sorting.tmpl +++ /dev/null @@ -1,279 +0,0 @@ - -Help

        $T('configSort')

        - -
        -
        -
        - -$T('seriesSorting') -
        - - -
        - - -
        - [$T('sort-legenda')] -
        -
        - $T('sort-meaning') - $T('sort-pattern') - $T('sort-result') -
        -
        - $T('show-name') - %sn - $T('show-sp-name') -
        - %s.n - $T('show-dot-name') -
        - %s_n - $T('show-us-name') -
        -
        - $T('show-seasonNum') - %s - 1 -
        - %0s - 01 -
        -
        - $T('show-epNum') - %e - 5 -
        - %0e - 05 -
        -
        - $T('ep-name') - %en - $T('ep-sp-name') -
        - %e.n - $T('ep-dot-name') -
        - %e_n - $T('ep-us-name') -
        -
        - $T('fileExt') - %ext - avi -
        -
        - $T('orgFilename') - %fn - $T('sort-File') -
        -
        - $T('lowercase') - {$T('TEXT')} - $T('text') -
        - -


        - -
        - - - - -
        - $T('example'): -

        -
        - -
        -$T('genericSort') -
        - -
        - -
        - - -
        - [$T('sort-legenda')] -
        -
        - $T('sort-meaning') - $T('sort-pattern') - $T('sort-result') -
        -
        - $T('sort-title') - %title - $T('movie-sp-name') -
        - %.title - $T('movie-dot-name') -
        - %_title - $T('movie-us-name') -
        -
        - $T('year') - %y - 2000 -
        -
        - $T('extension') - %ext - avi -
        -
        - $T('partNumber') - %1 - 1 -
        -
        - $T('decade') - %decade - 00 -
        -
        - $T('decade') - %0decade - 2000 -
        -
        - $T('orgFilename') - %fn - $T('sort-File') -
        -
        - $T('lowercase') - {$T('TEXT')} - $T('text') -
        -


        - -
        - -
        - - -
        - $T('example'): -

        -
        - -
        -
        -$T('dateSorting') -
        - -
        - - -
        - [$T('sort-legenda')] -
        -
        - $T('sort-meaning') - $T('sort-pattern') - $T('sort-result') -
        -
        - $T('show-name') - %t - $T('show-sp-name') -
        - %.t - $T('show-dot-name') -
        - %_t - $T('show-us-name') -
        -
        - $T('year') - %y - 2009 -
        -
        - $T('month') - %m - 1 -
        - %0m - 01 -
        -
        - $T('day-of-month') - %d - 2 -
        - %0d - 02 -
        -
        -
        - $T('decade') - %decade - 00 -
        -
        - $T('decade') - %0decade - 2000 -
        -
        - $T('orgFilename') - %fn - $T('sort-File') -
        -
        - $T('lowercase') - {$T('TEXT')} - $T('text') -
        -


        - -
        - - - -
        - $T('example'): - -
        - - -

        - -
        - - diff --git a/main/interfaces/smpl/templates/config_switches.tmpl b/main/interfaces/smpl/templates/config_switches.tmpl deleted file mode 100644 index 02002e1..0000000 --- a/main/interfaces/smpl/templates/config_switches.tmpl +++ /dev/null @@ -1,185 +0,0 @@ - -Help -

        $T('switchesConfig')

        -
        -
        -
        - $T('processingSwitches') -
        - - $T('explain-quick_check') -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - $T('opt-dirscan_opts'): - /> $T('none') - /> $T('pp-repair') - /> $T('pp-unpack') - /> $T('pp-delete') - $T('explain-dirscan_opts') -
        - - $T('opt-dirscan_script'): - - $T('explain-dirscan_script') -
        - - $T('opt-dirscan_priority'): - - $T('explain-dirscan_priority') -
        - - - -
        - - - $T('opt-par_option'): - - $T('explain-par_option') -
        - - - $T('opt-nice'): - - $T('explain-nice') -
        - - - - $T('opt-ionice'): - - $T('explain-ionice') -
        - - -
        -
        - $T('otherSwitches') -
        - - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - -
        - - - $T('explain-pause_on_post_processing') -
        - - $T('opt-ignore_samples'): - /> $T('igsam-off') - /> $T('igsam-del') - /> $T('igsam-not') - $T('explain-ignore_samples') -
        - - $T('opt-ssl_type'): - - $T('explain-ssl_type') -
        - -
        - - -

        - -

        -
        -
        diff --git a/main/interfaces/smpl/templates/connection_info.tmpl b/main/interfaces/smpl/templates/connection_info.tmpl deleted file mode 100644 index 8c043d0..0000000 --- a/main/interfaces/smpl/templates/connection_info.tmpl +++ /dev/null @@ -1,46 +0,0 @@ - -

        $T('connections')

        -$T('link-forceDisc') | -$T('link-testEmail') | -$T('link-showLog') | -$T('link-showWeblog') -$T('logging'): - - -
          - -
        • - $server[0]:$server[1]: $server[2] - - - ($T('server-blocked')) -   $server[6] - - -
            - -
          • Thread #$thrd[0] -> $thrd[1] -> $thrd[2] -> $thrd[3]
          • - -
          -
        • - -
        - - -

        $T('emailResult')

        - $lastmail - - -

        $T('lastWarnings') ($T('clearWarnings'))

        - - $warn
        - - diff --git a/main/interfaces/smpl/templates/history.tmpl b/main/interfaces/smpl/templates/history.tmpl deleted file mode 100644 index d90dc6c..0000000 --- a/main/interfaces/smpl/templates/history.tmpl +++ /dev/null @@ -1,147 +0,0 @@ -

        $T('menu-history') rss

        - - - - -<% import time %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        $T('name')$T('smpl-links')$T('smpl-size')$T('status')
        - - $line.name - $line.action_line - $line.fail_message - - - - - - - $line.size$T('post-'+$line.status)
        - <% -completed = time.localtime(float(line['completed'])) -t = time.strftime("%H:%M:%S on %A %d %B %Y", completed) - - %> -
        - Completed at $t -
        - - $T('stage-'+$stage.name.title.lower()):
        - - $item
        - - - - $T('category'):
        - $line.category
        - - - $T('smpl-path'):
        - $line.storage - -
        - -
        -
        - -
        - -$T('smpl-noresult') - -$T('smpl-oneresult') - - - - - - - - - - - - - - - - $numres - -
        - - diff --git a/main/interfaces/smpl/templates/main.tmpl b/main/interfaces/smpl/templates/main.tmpl deleted file mode 100644 index 631c251..0000000 --- a/main/interfaces/smpl/templates/main.tmpl +++ /dev/null @@ -1,1239 +0,0 @@ - - - - - - - SABnzbd+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        - -
        - -
        - - -
        -
        -
        - -
        - - diff --git a/main/interfaces/smpl/templates/nzo.tmpl b/main/interfaces/smpl/templates/nzo.tmpl deleted file mode 100644 index e0c7ac5..0000000 --- a/main/interfaces/smpl/templates/nzo.tmpl +++ /dev/null @@ -1,80 +0,0 @@ - -
        -

        $T('nzoDetails')

        -
        - - -
        - - - - -
        - - - - - -
        - - - - -
        - - - -
        -
        - - -

        - -
        - $T('nzo-delete') - $T('nzo-top') - $T('nzo-up') - $T('nzo-down') - $T('nzo-bottom') -
        - - $T('nzo-selection'):$T('nzo-all') - $T('nzo-none') - $T('nzo-invert') - - - - - - - - active"> - - - - - - -
        $T('nzo-filename')/$T('nzo-subject')$T('size')$T('nzo-age')
        >$file.filename$file.mb $T('MB')$file.age
        -
        - \ No newline at end of file diff --git a/main/interfaces/smpl/templates/queue.tmpl b/main/interfaces/smpl/templates/queue.tmpl deleted file mode 100644 index 859f928..0000000 --- a/main/interfaces/smpl/templates/queue.tmpl +++ /dev/null @@ -1,224 +0,0 @@ - -

        $T('menu-queue')

        - - - - - -
        $perc% - $mbleft/$mb MB - -$T('smpl-timeleft'): $timeleft $T('smpl-eta'): $eta -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - finished"> - - - - - active"> - - - - - waiting"> - - - - -
        $T('name') $T('smpl-edit')$T('smpl-progress')$T('smpl-timeleft')$T('smpl-age') $T('smpl-size')
        - - - - - $slot.filename - - - - - - - - - - - - - - - - - -
        - -
        $slot.timeleft$slot.avg_age$slot.size - - - - - - -
        Finished$line.filename$line.mbleft/$line.mb MB$line.age$line.size
        Active$line.filename$line.mbleft/$line.mb MB$line.age$line.size
        Waiting$line.filename (set: $line.set)$line.mbleft/$line.mb MB$line.age$line.size
        - - -
        $bufmsg
        - -
        - - -$T('smpl-noresult') - -$T('smpl-oneresult') - - - - - - - - - - - - - - - - - - $numres - -
        - - - diff --git a/main/interfaces/smpl/templates/static/MochiKit/MochiKit.js b/main/interfaces/smpl/templates/static/MochiKit/MochiKit.js deleted file mode 100644 index b215f6a..0000000 --- a/main/interfaces/smpl/templates/static/MochiKit/MochiKit.js +++ /dev/null @@ -1,8073 +0,0 @@ -/*** - - MochiKit.MochiKit 1.5 : PACKED VERSION - - THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please - diff against the source tree, not this file. - - See for documentation, downloads, license, etc. - - (c) 2005 Bob Ippolito. All rights Reserved. - -***/ - -if(typeof (MochiKit)=="undefined"){ -MochiKit={}; -} -if(typeof (MochiKit.__export__)=="undefined"){ -MochiKit.__export__=true; -} -if(typeof (MochiKit.Base)=="undefined"){ -MochiKit.Base={}; -} -MochiKit.Base._module=function(_1,_2,_3){ -if(!(_1 in MochiKit)){ -MochiKit[_1]={}; -} -var _4=MochiKit[_1]; -_4.NAME="MochiKit."+_1; -_4.VERSION=_2; -_4.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -_4.toString=function(){ -return this.__repr__(); -}; -for(var i=0;i<_3.length;i++){ -if(!(_3[i] in MochiKit)){ -throw "MochiKit."+_1+" depends on MochiKit."+_3[i]+"!"; -} -} -}; -MochiKit.Base._module("Base","1.5",[]); -MochiKit.Base.update=function(_6,_7){ -if(_6===null||_6===undefined){ -_6={}; -} -for(var i=1;i=0;i--){ -_1a.unshift(o[i]); -} -}else{ -res.push(o); -} -} -return res; -},extend:function(_1d,obj,_1f){ -if(!_1f){ -_1f=0; -} -if(obj){ -var l=obj.length; -if(typeof (l)!="number"){ -if(typeof (MochiKit.Iter)!="undefined"){ -obj=MochiKit.Iter.list(obj); -l=obj.length; -}else{ -throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); -} -} -if(!_1d){ -_1d=[]; -} -for(var i=_1f;i>b; -},zrshift:function(a,b){ -return a>>>b; -},eq:function(a,b){ -return a==b; -},ne:function(a,b){ -return a!=b; -},gt:function(a,b){ -return a>b; -},ge:function(a,b){ -return a>=b; -},lt:function(a,b){ -return a0&&_7b!="false"&&_7b!="null"&&_7b!="undefined"&&_7b!="0"; -}else{ -if(typeof (_7b)==="number"||_7b instanceof Number){ -return !isNaN(_7b)&&_7b!=0; -}else{ -if(_7b!=null&&typeof (_7b.length)==="number"){ -return _7b.length!==0; -}else{ -return _7b!=null; -} -} -} -} -},typeMatcher:function(){ -var _7c={}; -for(var i=0;il){ -_96=l; -} -} -_94=[]; -for(var i=0;i<_96;i++){ -var _98=[]; -for(var j=1;j=0;i--){ -_b5=[_b1[i].apply(this,_b5)]; -} -return _b5[0]; -}; -},bind:function(_b7,_b8){ -if(typeof (_b7)=="string"){ -_b7=_b8[_b7]; -} -var _b9=_b7.im_func; -var _ba=_b7.im_preargs; -var _bb=_b7.im_self; -var m=MochiKit.Base; -if(typeof (_b7)=="function"&&typeof (_b7.apply)=="undefined"){ -_b7=m._wrapDumbFunction(_b7); -} -if(typeof (_b9)!="function"){ -_b9=_b7; -} -if(typeof (_b8)!="undefined"){ -_bb=_b8; -} -if(typeof (_ba)=="undefined"){ -_ba=[]; -}else{ -_ba=_ba.slice(); -} -m.extend(_ba,arguments,2); -var _bd=function(){ -var _be=arguments; -var me=arguments.callee; -if(me.im_preargs.length>0){ -_be=m.concat(me.im_preargs,_be); -} -var _c0=me.im_self; -if(!_c0){ -_c0=this; -} -return me.im_func.apply(_c0,_be); -}; -_bd.im_self=_bb; -_bd.im_func=_b9; -_bd.im_preargs=_ba; -return _bd; -},bindLate:function(_c1,_c2){ -var m=MochiKit.Base; -var _c4=arguments; -if(typeof (_c1)==="string"){ -_c4=m.extend([m.forwardCall(_c1)],arguments,1); -return m.bind.apply(this,_c4); -} -return m.bind.apply(this,_c4); -},bindMethods:function(_c5){ -var _c6=MochiKit.Base.bind; -for(var k in _c5){ -var _c8=_c5[k]; -if(typeof (_c8)=="function"){ -_c5[k]=_c6(_c8,_c5); -} -} -},registerComparator:function(_c9,_ca,_cb,_cc){ -MochiKit.Base.comparatorRegistry.register(_c9,_ca,_cb,_cc); -},_primitives:{"boolean":true,"string":true,"number":true},compare:function(a,b){ -if(a==b){ -return 0; -} -var _cf=(typeof (a)=="undefined"||a===null); -var _d0=(typeof (b)=="undefined"||b===null); -if(_cf&&_d0){ -return 0; -}else{ -if(_cf){ -return -1; -}else{ -if(_d0){ -return 1; -} -} -} -var m=MochiKit.Base; -var _d2=m._primitives; -if(!(typeof (a) in _d2&&typeof (b) in _d2)){ -try{ -return m.comparatorRegistry.match(a,b); -} -catch(e){ -if(e!=m.NotFound){ -throw e; -} -} -} -if(ab){ -return 1; -} -} -var _d3=m.repr; -throw new TypeError(_d3(a)+" and "+_d3(b)+" can not be compared"); -},compareDateLike:function(a,b){ -return MochiKit.Base.compare(a.getTime(),b.getTime()); -},compareArrayLike:function(a,b){ -var _d8=MochiKit.Base.compare; -var _d9=a.length; -var _da=0; -if(_d9>b.length){ -_da=1; -_d9=b.length; -}else{ -if(_d9=0;i--){ -sum+=o[i]; -} -}else{ -sum+=o; -} -} -if(_120<=0){ -throw new TypeError("mean() requires at least one argument"); -} -return sum/_120; -},median:function(){ -var data=MochiKit.Base.flattenArguments(arguments); -if(data.length===0){ -throw new TypeError("median() requires at least one argument"); -} -data.sort(compare); -if(data.length%2==0){ -var _124=data.length/2; -return (data[_124]+data[_124-1])/2; -}else{ -return data[(data.length-1)/2]; -} -},findValue:function(lst,_126,_127,end){ -if(typeof (end)=="undefined"||end===null){ -end=lst.length; -} -if(typeof (_127)=="undefined"||_127===null){ -_127=0; -} -var cmp=MochiKit.Base.compare; -for(var i=_127;i0))){ -var kv=MochiKit.DOM.formContents(_134); -_134=kv[0]; -_135=kv[1]; -}else{ -if(arguments.length==1){ -if(typeof (_134.length)=="number"&&_134.length==2){ -return arguments.callee(_134[0],_134[1]); -} -var o=_134; -_134=[]; -_135=[]; -for(var k in o){ -var v=o[k]; -if(typeof (v)=="function"){ -continue; -}else{ -if(MochiKit.Base.isArrayLike(v)){ -for(var i=0;i=stop){ -throw self.StopIteration; -} -_18c+=step; -return rval; -}}; -},imap:function(fun,p,q){ -var m=MochiKit.Base; -var self=MochiKit.Iter; -var _196=m.map(self.iter,m.extend(null,arguments,1)); -var map=m.map; -var next=self.next; -return {repr:function(){ -return "imap(...)"; -},toString:m.forwardCall("repr"),next:function(){ -return fun.apply(this,map(next,_196)); -}}; -},applymap:function(fun,seq,self){ -seq=MochiKit.Iter.iter(seq); -var m=MochiKit.Base; -return {repr:function(){ -return "applymap(...)"; -},toString:m.forwardCall("repr"),next:function(){ -return fun.apply(self,seq.next()); -}}; -},chain:function(p,q){ -var self=MochiKit.Iter; -var m=MochiKit.Base; -if(arguments.length==1){ -return self.iter(arguments[0]); -} -var _1a1=m.map(self.iter,arguments); -return {repr:function(){ -return "chain(...)"; -},toString:m.forwardCall("repr"),next:function(){ -while(_1a1.length>1){ -try{ -var _1a2=_1a1[0].next(); -return _1a2; -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -_1a1.shift(); -var _1a2=_1a1[0].next(); -return _1a2; -} -} -if(_1a1.length==1){ -var arg=_1a1.shift(); -this.next=m.bind("next",arg); -return this.next(); -} -throw self.StopIteration; -}}; -},takewhile:function(pred,seq){ -var self=MochiKit.Iter; -seq=self.iter(seq); -return {repr:function(){ -return "takewhile(...)"; -},toString:MochiKit.Base.forwardCall("repr"),next:function(){ -var rval=seq.next(); -if(!pred(rval)){ -this.next=function(){ -throw self.StopIteration; -}; -this.next(); -} -return rval; -}}; -},dropwhile:function(pred,seq){ -seq=MochiKit.Iter.iter(seq); -var m=MochiKit.Base; -var bind=m.bind; -return {"repr":function(){ -return "dropwhile(...)"; -},"toString":m.forwardCall("repr"),"next":function(){ -while(true){ -var rval=seq.next(); -if(!pred(rval)){ -break; -} -} -this.next=bind("next",seq); -return rval; -}}; -},_tee:function(_1ad,sync,_1af){ -sync.pos[_1ad]=-1; -var m=MochiKit.Base; -var _1b1=m.listMin; -return {repr:function(){ -return "tee("+_1ad+", ...)"; -},toString:m.forwardCall("repr"),next:function(){ -var rval; -var i=sync.pos[_1ad]; -if(i==sync.max){ -rval=_1af.next(); -sync.deque.push(rval); -sync.max+=1; -sync.pos[_1ad]+=1; -}else{ -rval=sync.deque[i-sync.min]; -sync.pos[_1ad]+=1; -if(i==sync.min&&_1b1(sync.pos)!=sync.min){ -sync.min+=1; -sync.deque.shift(); -} -} -return rval; -}}; -},tee:function(_1b4,n){ -var rval=[]; -var sync={"pos":[],"deque":[],"max":-1,"min":-1}; -if(arguments.length==1||typeof (n)=="undefined"||n===null){ -n=2; -} -var self=MochiKit.Iter; -_1b4=self.iter(_1b4); -var _tee=self._tee; -for(var i=0;i0&&_1c6>=stop)||(step<0&&_1c6<=stop)){ -throw MochiKit.Iter.StopIteration; -} -var rval=_1c6; -_1c6+=step; -return rval; -},repr:function(){ -return "range("+[_1c6,stop,step].join(", ")+")"; -},toString:MochiKit.Base.forwardCall("repr")}; -},sum:function(_1ca,_1cb){ -if(typeof (_1cb)=="undefined"||_1cb===null){ -_1cb=0; -} -var x=_1cb; -var self=MochiKit.Iter; -_1ca=self.iter(_1ca); -try{ -while(true){ -x+=_1ca.next(); -} -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -} -return x; -},exhaust:function(_1ce){ -var self=MochiKit.Iter; -_1ce=self.iter(_1ce); -try{ -while(true){ -_1ce.next(); -} -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -} -},forEach:function(_1d0,func,obj){ -var m=MochiKit.Base; -var self=MochiKit.Iter; -if(arguments.length>2){ -func=m.bind(func,obj); -} -if(m.isArrayLike(_1d0)&&!self.isIterable(_1d0)){ -try{ -for(var i=0;i<_1d0.length;i++){ -func(_1d0[i]); -} -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -} -}else{ -self.exhaust(self.imap(func,_1d0)); -} -},every:function(_1d6,func){ -var self=MochiKit.Iter; -try{ -self.ifilterfalse(func,_1d6).next(); -return false; -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -return true; -} -},sorted:function(_1d9,cmp){ -var rval=MochiKit.Iter.list(_1d9); -if(arguments.length==1){ -cmp=MochiKit.Base.compare; -} -rval.sort(cmp); -return rval; -},reversed:function(_1dc){ -var rval=MochiKit.Iter.list(_1dc); -rval.reverse(); -return rval; -},some:function(_1de,func){ -var self=MochiKit.Iter; -try{ -self.ifilter(func,_1de).next(); -return true; -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -return false; -} -},iextend:function(lst,_1e2){ -var m=MochiKit.Base; -var self=MochiKit.Iter; -if(m.isArrayLike(_1e2)&&!self.isIterable(_1e2)){ -for(var i=0;i<_1e2.length;i++){ -lst.push(_1e2[i]); -} -}else{ -_1e2=self.iter(_1e2); -try{ -while(true){ -lst.push(_1e2.next()); -} -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -} -} -return lst; -},groupby:function(_1e6,_1e7){ -var m=MochiKit.Base; -var self=MochiKit.Iter; -if(arguments.length<2){ -_1e7=m.operator.identity; -} -_1e6=self.iter(_1e6); -var pk=undefined; -var k=undefined; -var v; -function fetch(){ -v=_1e6.next(); -k=_1e7(v); -} -function eat(){ -var ret=v; -v=undefined; -return ret; -} -var _1ee=true; -var _1ef=m.compare; -return {repr:function(){ -return "groupby(...)"; -},next:function(){ -while(_1ef(k,pk)===0){ -fetch(); -if(_1ee){ -_1ee=false; -break; -} -} -pk=k; -return [k,{next:function(){ -if(v==undefined){ -fetch(); -} -if(_1ef(k,pk)!==0){ -throw self.StopIteration; -} -return eat(); -}}]; -}}; -},groupby_as_array:function(_1f0,_1f1){ -var m=MochiKit.Base; -var self=MochiKit.Iter; -if(arguments.length<2){ -_1f1=m.operator.identity; -} -_1f0=self.iter(_1f0); -var _1f4=[]; -var _1f5=true; -var _1f6; -var _1f7=m.compare; -while(true){ -try{ -var _1f8=_1f0.next(); -var key=_1f1(_1f8); -} -catch(e){ -if(e==self.StopIteration){ -break; -} -throw e; -} -if(_1f5||_1f7(key,_1f6)!==0){ -var _1fa=[]; -_1f4.push([key,_1fa]); -} -_1fa.push(_1f8); -_1f5=false; -_1f6=key; -} -return _1f4; -},arrayLikeIter:function(_1fb){ -var i=0; -return {repr:function(){ -return "arrayLikeIter(...)"; -},toString:MochiKit.Base.forwardCall("repr"),next:function(){ -if(i>=_1fb.length){ -throw MochiKit.Iter.StopIteration; -} -return _1fb[i++]; -}}; -},hasIterateNext:function(_1fd){ -return (_1fd&&typeof (_1fd.iterateNext)=="function"); -},iterateNextIter:function(_1fe){ -return {repr:function(){ -return "iterateNextIter(...)"; -},toString:MochiKit.Base.forwardCall("repr"),next:function(){ -var rval=_1fe.iterateNext(); -if(rval===null||rval===undefined){ -throw MochiKit.Iter.StopIteration; -} -return rval; -}}; -}}); -MochiKit.Iter.__new__=function(){ -var m=MochiKit.Base; -if(typeof (StopIteration)!="undefined"){ -this.StopIteration=StopIteration; -}else{ -this.StopIteration=new m.NamedError("StopIteration"); -} -this.iteratorRegistry=new m.AdapterRegistry(); -this.registerIteratorFactory("arrayLike",m.isArrayLike,this.arrayLikeIter); -this.registerIteratorFactory("iterateNext",this.hasIterateNext,this.iterateNextIter); -m.nameFunctions(this); -}; -MochiKit.Iter.__new__(); -if(MochiKit.__export__){ -reduce=MochiKit.Iter.reduce; -} -MochiKit.Base._exportSymbols(this,MochiKit.Iter); -MochiKit.Base._module("Logging","1.5",["Base"]); -MochiKit.Logging.LogMessage=function(num,_202,info){ -this.num=num; -this.level=_202; -this.info=info; -this.timestamp=new Date(); -}; -MochiKit.Logging.LogMessage.prototype={repr:function(){ -var m=MochiKit.Base; -return "LogMessage("+m.map(m.repr,[this.num,this.level,this.info]).join(", ")+")"; -},toString:MochiKit.Base.forwardCall("repr")}; -MochiKit.Base.update(MochiKit.Logging,{logLevelAtLeast:function(_205){ -var self=MochiKit.Logging; -if(typeof (_205)=="string"){ -_205=self.LogLevel[_205]; -} -return function(msg){ -var _208=msg.level; -if(typeof (_208)=="string"){ -_208=self.LogLevel[_208]; -} -return _208>=_205; -}; -},isLogMessage:function(){ -var _209=MochiKit.Logging.LogMessage; -for(var i=0;i=MochiKit.Logging.LogLevel.FATAL){ -_218="FATAL"; -}else{ -if(_218>=MochiKit.Logging.LogLevel.ERROR){ -_218="ERROR"; -}else{ -if(_218>=MochiKit.Logging.LogLevel.WARNING){ -_218="WARNING"; -}else{ -if(_218>=MochiKit.Logging.LogLevel.INFO){ -_218="INFO"; -}else{ -_218="DEBUG"; -} -} -} -} -} -var msg=new MochiKit.Logging.LogMessage(this.counter,_218,MochiKit.Base.extend(null,arguments,1)); -this._messages.push(msg); -this.dispatchListeners(msg); -if(this.useNativeConsole){ -this.logToConsole(msg.level+": "+msg.info.join(" ")); -} -this.counter+=1; -while(this.maxSize>=0&&this._messages.length>this.maxSize){ -this._messages.shift(); -} -},getMessages:function(_21b){ -var _21c=0; -if(!(typeof (_21b)=="undefined"||_21b===null)){ -_21c=Math.max(0,this._messages.length-_21b); -} -return this._messages.slice(_21c); -},getMessageText:function(_21d){ -if(typeof (_21d)=="undefined"||_21d===null){ -_21d=30; -} -var _21e=this.getMessages(_21d); -if(_21e.length){ -var lst=map(function(m){ -return "\n ["+m.num+"] "+m.level+": "+m.info.join(" "); -},_21e); -lst.unshift("LAST "+_21e.length+" MESSAGES:"); -return lst.join(""); -} -return ""; -},debuggingBookmarklet:function(_221){ -if(typeof (MochiKit.LoggingPane)=="undefined"){ -alert(this.getMessageText()); -}else{ -MochiKit.LoggingPane.createLoggingPane(_221||false); -} -}}; -MochiKit.Logging.__new__=function(){ -this.LogLevel={ERROR:40,FATAL:50,WARNING:30,INFO:20,DEBUG:10}; -var m=MochiKit.Base; -m.registerComparator("LogMessage",this.isLogMessage,this.compareLogMessage); -var _223=m.partial; -var _224=this.Logger; -var _225=_224.prototype.baseLog; -m.update(this.Logger.prototype,{debug:_223(_225,"DEBUG"),log:_223(_225,"INFO"),error:_223(_225,"ERROR"),fatal:_223(_225,"FATAL"),warning:_223(_225,"WARNING")}); -var self=this; -var _227=function(name){ -return function(){ -self.logger[name].apply(self.logger,arguments); -}; -}; -this.log=_227("log"); -this.logError=_227("error"); -this.logDebug=_227("debug"); -this.logFatal=_227("fatal"); -this.logWarning=_227("warning"); -this.logger=new _224(); -this.logger.useNativeConsole=true; -m.nameFunctions(this); -}; -MochiKit.Logging.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.Logging); -MochiKit.Base._module("DateTime","1.5",["Base"]); -MochiKit.DateTime.isoDate=function(str){ -str=str+""; -if(typeof (str)!="string"||str.length===0){ -return null; -} -var iso=str.split("-"); -if(iso.length===0){ -return null; -} -var date=new Date(iso[0],iso[1]-1,iso[2]); -date.setFullYear(iso[0]); -date.setMonth(iso[1]-1); -date.setDate(iso[2]); -return date; -}; -MochiKit.DateTime._isoRegexp=/(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/; -MochiKit.DateTime.isoTimestamp=function(str){ -str=str+""; -if(typeof (str)!="string"||str.length===0){ -return null; -} -var res=str.match(MochiKit.DateTime._isoRegexp); -if(typeof (res)=="undefined"||res===null){ -return null; -} -var year,_22f,day,hour,min,sec,msec; -year=parseInt(res[1],10); -if(typeof (res[2])=="undefined"||res[2]===""){ -return new Date(year); -} -_22f=parseInt(res[2],10)-1; -day=parseInt(res[3],10); -if(typeof (res[4])=="undefined"||res[4]===""){ -return new Date(year,_22f,day); -} -hour=parseInt(res[4],10); -min=parseInt(res[5],10); -sec=(typeof (res[6])!="undefined"&&res[6]!=="")?parseInt(res[6],10):0; -if(typeof (res[7])!="undefined"&&res[7]!==""){ -msec=Math.round(1000*parseFloat("0."+res[7])); -}else{ -msec=0; -} -if((typeof (res[8])=="undefined"||res[8]==="")&&(typeof (res[9])=="undefined"||res[9]==="")){ -return new Date(year,_22f,day,hour,min,sec,msec); -} -var ofs; -if(typeof (res[9])!="undefined"&&res[9]!==""){ -ofs=parseInt(res[10],10)*3600000; -if(typeof (res[11])!="undefined"&&res[11]!==""){ -ofs+=parseInt(res[11],10)*60000; -} -if(res[9]=="-"){ -ofs=-ofs; -} -}else{ -ofs=0; -} -return new Date(Date.UTC(year,_22f,day,hour,min,sec,msec)-ofs); -}; -MochiKit.DateTime.toISOTime=function(date,_237){ -if(typeof (date)=="undefined"||date===null){ -return null; -} -var hh=date.getHours(); -var mm=date.getMinutes(); -var ss=date.getSeconds(); -var lst=[((_237&&(hh<10))?"0"+hh:hh),((mm<10)?"0"+mm:mm),((ss<10)?"0"+ss:ss)]; -return lst.join(":"); -}; -MochiKit.DateTime.toISOTimestamp=function(date,_23d){ -if(typeof (date)=="undefined"||date===null){ -return null; -} -var sep=_23d?"T":" "; -var foot=_23d?"Z":""; -if(_23d){ -date=new Date(date.getTime()+(date.getTimezoneOffset()*60000)); -} -return MochiKit.DateTime.toISODate(date)+sep+MochiKit.DateTime.toISOTime(date,_23d)+foot; -}; -MochiKit.DateTime.toISODate=function(date){ -if(typeof (date)=="undefined"||date===null){ -return null; -} -var _241=MochiKit.DateTime._padTwo; -var _242=MochiKit.DateTime._padFour; -return [_242(date.getFullYear()),_241(date.getMonth()+1),_241(date.getDate())].join("-"); -}; -MochiKit.DateTime.americanDate=function(d){ -d=d+""; -if(typeof (d)!="string"||d.length===0){ -return null; -} -var a=d.split("/"); -return new Date(a[2],a[0]-1,a[1]); -}; -MochiKit.DateTime._padTwo=function(n){ -return (n>9)?n:"0"+n; -}; -MochiKit.DateTime._padFour=function(n){ -switch(n.toString().length){ -case 1: -return "000"+n; -break; -case 2: -return "00"+n; -break; -case 3: -return "0"+n; -break; -case 4: -default: -return n; -} -}; -MochiKit.DateTime.toPaddedAmericanDate=function(d){ -if(typeof (d)=="undefined"||d===null){ -return null; -} -var _248=MochiKit.DateTime._padTwo; -return [_248(d.getMonth()+1),_248(d.getDate()),d.getFullYear()].join("/"); -}; -MochiKit.DateTime.toAmericanDate=function(d){ -if(typeof (d)=="undefined"||d===null){ -return null; -} -return [d.getMonth()+1,d.getDate(),d.getFullYear()].join("/"); -}; -MochiKit.DateTime.__new__=function(){ -MochiKit.Base.nameFunctions(this); -}; -MochiKit.DateTime.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.DateTime); -MochiKit.Base._module("Format","1.5",["Base"]); -MochiKit.Format._numberFormatter=function(_24a,_24b,_24c,_24d,_24e,_24f,_250,_251,_252){ -return function(num){ -num=parseFloat(num); -if(typeof (num)=="undefined"||num===null||isNaN(num)){ -return _24a; -} -var _254=_24b; -var _255=_24c; -if(num<0){ -num=-num; -}else{ -_254=_254.replace(/-/,""); -} -var me=arguments.callee; -var fmt=MochiKit.Format.formatLocale(_24d); -if(_24e){ -num=num*100; -_255=fmt.percent+_255; -} -num=MochiKit.Format.roundToFixed(num,_24f); -var _258=num.split(/\./); -var _259=_258[0]; -var frac=(_258.length==1)?"":_258[1]; -var res=""; -while(_259.length<_250){ -_259="0"+_259; -} -if(_251){ -while(_259.length>_251){ -var i=_259.length-_251; -res=fmt.separator+_259.substring(i,_259.length)+res; -_259=_259.substring(0,i); -} -} -res=_259+res; -if(_24f>0){ -while(frac.length<_252){ -frac=frac+"0"; -} -res=res+fmt.decimal+frac; -} -return _254+res+_255; -}; -}; -MochiKit.Format.numberFormatter=function(_25d,_25e,_25f){ -if(typeof (_25e)=="undefined"){ -_25e=""; -} -var _260=_25d.match(/((?:[0#]+,)?[0#]+)(?:\.([0#]+))?(%)?/); -if(!_260){ -throw TypeError("Invalid pattern"); -} -var _261=_25d.substr(0,_260.index); -var _262=_25d.substr(_260.index+_260[0].length); -if(_261.search(/-/)==-1){ -_261=_261+"-"; -} -var _263=_260[1]; -var frac=(typeof (_260[2])=="string"&&_260[2]!="")?_260[2]:""; -var _265=(typeof (_260[3])=="string"&&_260[3]!=""); -var tmp=_263.split(/,/); -var _267; -if(typeof (_25f)=="undefined"){ -_25f="default"; -} -if(tmp.length==1){ -_267=null; -}else{ -_267=tmp[1].length; -} -var _268=_263.length-_263.replace(/0/g,"").length; -var _269=frac.length-frac.replace(/0/g,"").length; -var _26a=frac.length; -var rval=MochiKit.Format._numberFormatter(_25e,_261,_262,_25f,_265,_26a,_268,_267,_269); -var m=MochiKit.Base; -if(m){ -var fn=arguments.callee; -var args=m.concat(arguments); -rval.repr=function(){ -return [self.NAME,"(",map(m.repr,args).join(", "),")"].join(""); -}; -} -return rval; -}; -MochiKit.Format.formatLocale=function(_26f){ -if(typeof (_26f)=="undefined"||_26f===null){ -_26f="default"; -} -if(typeof (_26f)=="string"){ -var rval=MochiKit.Format.LOCALE[_26f]; -if(typeof (rval)=="string"){ -rval=arguments.callee(rval); -MochiKit.Format.LOCALE[_26f]=rval; -} -return rval; -}else{ -return _26f; -} -}; -MochiKit.Format.twoDigitAverage=function(_271,_272){ -if(_272){ -var res=_271/_272; -if(!isNaN(res)){ -return MochiKit.Format.twoDigitFloat(res); -} -} -return "0"; -}; -MochiKit.Format.twoDigitFloat=function(_274){ -var res=roundToFixed(_274,2); -if(res.indexOf(".00")>0){ -return res.substring(0,res.length-3); -}else{ -if(res.charAt(res.length-1)=="0"){ -return res.substring(0,res.length-1); -}else{ -return res; -} -} -}; -MochiKit.Format.lstrip=function(str,_277){ -str=str+""; -if(typeof (str)!="string"){ -return null; -} -if(!_277){ -return str.replace(/^\s+/,""); -}else{ -return str.replace(new RegExp("^["+_277+"]+"),""); -} -}; -MochiKit.Format.rstrip=function(str,_279){ -str=str+""; -if(typeof (str)!="string"){ -return null; -} -if(!_279){ -return str.replace(/\s+$/,""); -}else{ -return str.replace(new RegExp("["+_279+"]+$"),""); -} -}; -MochiKit.Format.strip=function(str,_27b){ -var self=MochiKit.Format; -return self.rstrip(self.lstrip(str,_27b),_27b); -}; -MochiKit.Format.truncToFixed=function(_27d,_27e){ -var _27f=MochiKit.Format._numberToFixed(_27d,_27e); -var _280=_27f.indexOf("."); -if(_280>0&&_280+_27e+1<_27f.length){ -_27f=_27f.substring(0,_280+_27e+1); -_27f=MochiKit.Format._shiftNumber(_27f,0); -} -return _27f; -}; -MochiKit.Format.roundToFixed=function(_281,_282){ -var _283=MochiKit.Format._numberToFixed(_281,_282); -var _284=_283.indexOf("."); -if(_284>0&&_284+_282+1<_283.length){ -var str=MochiKit.Format._shiftNumber(_283,_282); -str=MochiKit.Format._numberToFixed(Math.round(parseFloat(str)),0); -_283=MochiKit.Format._shiftNumber(str,-_282); -} -return _283; -}; -MochiKit.Format._numberToFixed=function(_286,_287){ -var str=_286.toString(); -var _289=str.split(/[eE]/); -var exp=(_289.length===1)?0:parseInt(_289[1])||0; -var _28b=MochiKit.Format._shiftNumber(_289[0],exp); -_289=_28b.split(/\./); -var _28c=_289[0]; -var frac=(_289.length===1)?"":_289[1]; -while(frac.length<_287){ -frac+="0"; -} -if(frac.length>0){ -return _28c+"."+frac; -}else{ -return _28c; -} -}; -MochiKit.Format._shiftNumber=function(num,exp){ -var pos=num.indexOf("."); -if(pos<0){ -pos=num.length; -}else{ -num=num.substring(0,pos)+num.substring(pos+1); -} -pos+=exp; -while(pos<=0||(pos<=1&&num.charAt(0)==="-")){ -if(num.charAt(0)==="-"){ -num="-0"+num.substring(1); -}else{ -num="0"+num; -} -pos++; -} -while(pos>num.length){ -num+="0"; -} -if(pos=0; -}; -MochiKit.Text.padLeft=function(str,_29d,_29e){ -str=str||""; -_29e=_29e||" "; -while(str.length<_29d){ -str=_29e+str; -} -return str; -}; -MochiKit.Text.padRight=function(str,_2a0,_2a1){ -str=str||""; -_2a1=_2a1||" "; -while(str.length<_2a0){ -str+=_2a1; -} -return str; -}; -MochiKit.Text.truncate=function(str,_2a3,tail){ -if(str==null||str.length<=_2a3||_2a3<0){ -return str; -}else{ -if(tail!=null){ -str=str.slice(0,Math.max(0,_2a3-tail.length)); -if(typeof (str)=="string"){ -return str+tail; -}else{ -return MochiKit.Base.extend(str,tail); -} -}else{ -return str.slice(0,_2a3); -} -} -}; -MochiKit.Text.split=function(str,_2a6,max){ -if(str==null||str.length==0){ -return str; -} -_2a6=_2a6||"\n"; -var bits=str.split(_2a6); -if((typeof (max)=="undefined")||max>=bits.length-1){ -return bits; -} -bits.splice(max,bits.length,bits.slice(max,bits.length).join(_2a6)); -return bits; -}; -MochiKit.Text.rsplit=function(str,_2aa,max){ -if(str==null||str.length==0){ -return str; -} -_2aa=_2aa||"\n"; -var bits=str.split(_2aa); -if((typeof (max)=="undefined")||max>=bits.length-1){ -return bits; -} -bits.splice(0,bits.length-max,bits.slice(0,bits.length-max).join(_2aa)); -return bits; -}; -MochiKit.Text.splitJoin=function(func,str,_2af){ -if(str==null||str.length==0){ -return str; -} -_2af=_2af||"\n"; -return MochiKit.Base.map(func,str.split(_2af)).join(_2af); -}; -MochiKit.Text.formatter=function(_2b0,_2b1){ -if(typeof (_2b1)=="undefined"){ -_2b1=MochiKit.Format.formatLocale(); -}else{ -if(typeof (_2b1)=="string"){ -_2b1=MochiKit.Format.formatLocale(_2b1); -} -} -var _2b2=MochiKit.Text._parsePattern(_2b0); -return function(){ -var _2b3=MochiKit.Base.extend([],arguments); -var res=[]; -for(var i=0;i<_2b2.length;i++){ -if(typeof (_2b2[i])=="string"){ -res.push(_2b2[i]); -}else{ -res.push(MochiKit.Text.formatValue(_2b2[i],_2b3,_2b1)); -} -} -return res.join(""); -}; -}; -MochiKit.Text.format=function(_2b6){ -var func=MochiKit.Text.formatter(_2b6); -return func.apply(this,MochiKit.Base.extend([],arguments,1)); -}; -MochiKit.Text.formatValue=function(spec,_2b9,_2ba){ -var self=MochiKit.Text; -if(typeof (spec)==="string"){ -spec=self._parseFormatFlags(spec,0,spec.length-1); -} -for(var i=0;spec.path!=null&&i=0){ -str=MochiKit.Format.roundToFixed(_2b9,spec.precision); -}else{ -str=_2b9.toString(); -} -} -} -} -if(spec.padding==="0"&&spec.format==="%"){ -str=self.padLeft(str,spec.width-sign.length-1,"0"); -}else{ -if(spec.padding=="0"){ -str=self.padLeft(str,spec.width-sign.length,"0"); -} -} -str=self._localizeNumber(str,_2ba,spec.grouping); -str=sign+str; -} -} -} -if(str!==""&&spec.format==="%"){ -str=str+_2ba.percent; -} -}else{ -if(spec.format=="r"){ -str=MochiKit.Base.repr(_2b9); -}else{ -str=(_2b9==null)?"null":_2b9.toString(); -} -str=self.truncate(str,spec.precision); -} -if(spec.align=="<"){ -str=self.padRight(str,spec.width); -}else{ -str=self.padLeft(str,spec.width); -} -return str; -}; -MochiKit.Text._localizeNumber=function(num,_2c0,_2c1){ -var _2c2=num.split(/\./); -var _2c3=_2c2[0]; -var frac=(_2c2.length==1)?"":_2c2[1]; -var res=(frac.length>0)?_2c0.decimal:""; -while(_2c1&&frac.length>3){ -res=res+frac.substring(0,3)+_2c0.separator; -frac=frac.substring(3); -if(_2c3.charAt(0)=="0"){ -_2c3=_2c3.substring(1); -} -} -if(frac.length>0){ -res+=frac; -} -while(_2c1&&_2c3.length>3){ -var pos=_2c3.length-3; -res=_2c0.separator+_2c3.substring(pos)+res; -_2c3=_2c3.substring((_2c3.charAt(0)=="0")?1:0,pos); -} -return _2c3+res; -}; -MochiKit.Text._parsePattern=function(_2c7){ -var self=MochiKit.Text; -var _2c9=[]; -var _2ca=0; -var pos=0; -for(pos=0;pos<_2c7.length;pos++){ -if(_2c7.charAt(pos)=="{"){ -if(pos+1>=_2c7.length){ -var msg="unescaped { char, should be escaped as {{"; -throw new self.FormatPatternError(_2c7,pos,msg); -}else{ -if(_2c7.charAt(pos+1)=="{"){ -_2c9.push(_2c7.substring(_2ca,pos+1)); -_2ca=pos+2; -pos++; -}else{ -if(_2ca=_2c7.length||_2c7.charAt(pos+1)!="}"){ -var msg="unescaped } char, should be escaped as }}"; -throw new self.FormatPatternError(_2c7,pos,msg); -} -_2c9.push(_2c7.substring(_2ca,pos+1)); -_2ca=pos+2; -pos++; -} -} -} -if(_2ca0){ -info=self._parseFormatFlags(_2cd,_2ce+pos+1,_2cf); -info.path=text.substring(0,pos).split("."); -}else{ -info=self._parseFormatFlags(_2cd,_2cf,_2cf); -info.path=text.split("."); -} -} -var _2d4=/^\d+$/; -for(var i=0;i",sign:"-",padding:" ",grouping:false}; -var _2dd=_2d8.substring(_2d9,_2da).replace(/\s+$/,""); -while(_2dd.length>0){ -switch(_2dd.charAt(0)){ -case ">": -case "<": -info.align=_2dd.charAt(0); -_2dd=_2dd.substring(1); -break; -case "+": -case "-": -case " ": -info.sign=_2dd.charAt(0); -_2dd=_2dd.substring(1); -break; -case ",": -info.grouping=true; -_2dd=_2dd.substring(1); -break; -case ".": -var _2de=/^\d*/.exec(_2dd.substring(1))[0]; -info.precision=parseInt(_2de); -_2dd=_2dd.substring(1+_2de.length); -break; -case "0": -info.padding=_2dd.charAt(0); -_2dd=_2dd.substring(1); -break; -case "1": -case "2": -case "3": -case "4": -case "5": -case "6": -case "7": -case "8": -case "9": -var _2de=/^\d*/.exec(_2dd)[0]; -info.width=parseInt(_2de); -_2dd=_2dd.substring(_2de.length); -break; -case "s": -case "r": -info.format=_2dd.charAt(0); -_2dd=_2dd.substring(1); -break; -case "b": -case "d": -case "o": -case "x": -case "X": -case "f": -case "%": -info.numeric=true; -info.format=_2dd.charAt(0); -info.radix=10; -if(info.format==="b"){ -info.radix=2; -}else{ -if(info.format==="o"){ -info.radix=8; -}else{ -if(info.format==="x"||info.format==="X"){ -info.radix=16; -} -} -} -_2dd=_2dd.substring(1); -break; -default: -var msg="unsupported format flag: "+_2dd.charAt(0); -throw new self.FormatPatternError(_2d8,_2d9,msg); -} -} -return info; -}; -MochiKit.Text._truncToPercent=function(_2e0,_2e1){ -var str; -if(_2e1>=0){ -str=MochiKit.Format.roundToFixed(_2e0,_2e1+2); -}else{ -str=(_2e0==null)?"0":_2e0.toString(); -} -var _2e3=str.indexOf("."); -if(_2e3<0){ -str=str+"00"; -}else{ -if(_2e3+3>=str.length){ -var _2e4=str.substring(_2e3+1); -while(_2e4.length<2){ -_2e4=_2e4+"0"; -} -str=str.substring(0,_2e3)+_2e4; -}else{ -var _2e4=str.substring(_2e3+1); -str=str.substring(0,_2e3)+_2e4.substring(0,2)+"."+_2e4.substring(2); -} -} -while(str.length>1&&str.charAt(0)=="0"&&str.charAt(1)!="."){ -str=str.substring(1); -} -return str; -}; -MochiKit.Text.FormatPatternError=function(_2e5,pos,_2e7){ -this.pattern=_2e5; -this.pos=pos; -this.message=_2e7; -}; -MochiKit.Text.FormatPatternError.prototype=new MochiKit.Base.NamedError("MochiKit.Text.FormatPatternError"); -if(MochiKit.__export__){ -formatter=MochiKit.Text.formatter; -format=MochiKit.Text.format; -formatValue=MochiKit.Text.formatValue; -} -MochiKit.Base.nameFunctions(MochiKit.Text); -MochiKit.Base._exportSymbols(this,MochiKit.Text); -MochiKit.Base._module("Async","1.5",["Base"]); -MochiKit.Async.Deferred=function(_2e8){ -this.chain=[]; -this.id=this._nextId(); -this.fired=-1; -this.paused=0; -this.results=[null,null]; -this.canceller=_2e8; -this.silentlyCancelled=false; -this.chained=false; -}; -MochiKit.Async.Deferred.prototype={repr:function(){ -var _2e9; -if(this.fired==-1){ -_2e9="unfired"; -}else{ -if(this.fired===0){ -_2e9="success"; -}else{ -_2e9="error"; -} -} -return "Deferred("+this.id+", "+_2e9+")"; -},toString:MochiKit.Base.forwardCall("repr"),_nextId:MochiKit.Base.counter(),cancel:function(){ -var self=MochiKit.Async; -if(this.fired==-1){ -if(this.canceller){ -this.canceller(this); -}else{ -this.silentlyCancelled=true; -} -if(this.fired==-1){ -this.errback(new self.CancelledError(this)); -} -}else{ -if((this.fired===0)&&(this.results[0] instanceof self.Deferred)){ -this.results[0].cancel(); -} -} -},_resback:function(res){ -this.fired=((res instanceof Error)?1:0); -this.results[this.fired]=res; -this._fire(); -},_check:function(){ -if(this.fired!=-1){ -if(!this.silentlyCancelled){ -throw new MochiKit.Async.AlreadyCalledError(this); -} -this.silentlyCancelled=false; -return; -} -},callback:function(res){ -this._check(); -if(res instanceof MochiKit.Async.Deferred){ -throw new Error("Deferred instances can only be chained if they are the result of a callback"); -} -this._resback(res); -},errback:function(res){ -this._check(); -var self=MochiKit.Async; -if(res instanceof self.Deferred){ -throw new Error("Deferred instances can only be chained if they are the result of a callback"); -} -if(!(res instanceof Error)){ -res=new self.GenericError(res); -} -this._resback(res); -},addBoth:function(fn){ -if(arguments.length>1){ -fn=MochiKit.Base.partial.apply(null,arguments); -} -return this.addCallbacks(fn,fn); -},addCallback:function(fn){ -if(arguments.length>1){ -fn=MochiKit.Base.partial.apply(null,arguments); -} -return this.addCallbacks(fn,null); -},addErrback:function(fn){ -if(arguments.length>1){ -fn=MochiKit.Base.partial.apply(null,arguments); -} -return this.addCallbacks(null,fn); -},addCallbacks:function(cb,eb){ -if(this.chained){ -throw new Error("Chained Deferreds can not be re-used"); -} -this.chain.push([cb,eb]); -if(this.fired>=0){ -this._fire(); -} -return this; -},_fire:function(){ -var _2f4=this.chain; -var _2f5=this.fired; -var res=this.results[_2f5]; -var self=this; -var cb=null; -while(_2f4.length>0&&this.paused===0){ -var pair=_2f4.shift(); -var f=pair[_2f5]; -if(f===null){ -continue; -} -try{ -res=f(res); -_2f5=((res instanceof Error)?1:0); -if(res instanceof MochiKit.Async.Deferred){ -cb=function(res){ -self._resback(res); -self.paused--; -if((self.paused===0)&&(self.fired>=0)){ -self._fire(); -} -}; -this.paused++; -} -} -catch(err){ -_2f5=1; -if(!(err instanceof Error)){ -err=new MochiKit.Async.GenericError(err); -} -res=err; -} -} -this.fired=_2f5; -this.results[_2f5]=res; -if(cb&&this.paused){ -res.addBoth(cb); -res.chained=true; -} -}}; -MochiKit.Base.update(MochiKit.Async,{evalJSONRequest:function(req){ -return MochiKit.Base.evalJSON(req.responseText); -},succeed:function(_2fd){ -var d=new MochiKit.Async.Deferred(); -d.callback.apply(d,arguments); -return d; -},fail:function(_2ff){ -var d=new MochiKit.Async.Deferred(); -d.errback.apply(d,arguments); -return d; -},getXMLHttpRequest:function(){ -var self=arguments.callee; -if(!self.XMLHttpRequest){ -var _302=[function(){ -return new XMLHttpRequest(); -},function(){ -return new ActiveXObject("Msxml2.XMLHTTP"); -},function(){ -return new ActiveXObject("Microsoft.XMLHTTP"); -},function(){ -return new ActiveXObject("Msxml2.XMLHTTP.4.0"); -},function(){ -throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest"); -}]; -for(var i=0;i<_302.length;i++){ -var func=_302[i]; -try{ -self.XMLHttpRequest=func; -return func(); -} -catch(e){ -} -} -} -return self.XMLHttpRequest(); -},_xhr_onreadystatechange:function(d){ -var m=MochiKit.Base; -if(this.readyState==4){ -try{ -this.onreadystatechange=null; -} -catch(e){ -try{ -this.onreadystatechange=m.noop; -} -catch(e){ -} -} -var _307=null; -try{ -_307=this.status; -if(!_307&&m.isNotEmpty(this.responseText)){ -_307=304; -} -} -catch(e){ -} -if(_307==200||_307==201||_307==204||_307==304||_307==1223){ -d.callback(this); -}else{ -var err=new MochiKit.Async.XMLHttpRequestError(this,"Request failed"); -if(err.number){ -d.errback(err); -}else{ -d.errback(err); -} -} -} -},_xhr_canceller:function(req){ -try{ -req.onreadystatechange=null; -} -catch(e){ -try{ -req.onreadystatechange=MochiKit.Base.noop; -} -catch(e){ -} -} -req.abort(); -},sendXMLHttpRequest:function(req,_30b){ -if(typeof (_30b)=="undefined"||_30b===null){ -_30b=""; -} -var m=MochiKit.Base; -var self=MochiKit.Async; -var d=new self.Deferred(m.partial(self._xhr_canceller,req)); -try{ -req.onreadystatechange=m.bind(self._xhr_onreadystatechange,req,d); -req.send(_30b); -} -catch(e){ -try{ -req.onreadystatechange=null; -} -catch(ignore){ -} -d.errback(e); -} -return d; -},doXHR:function(url,opts){ -var self=MochiKit.Async; -return self.callLater(0,self._doXHR,url,opts); -},_doXHR:function(url,opts){ -var m=MochiKit.Base; -opts=m.update({method:"GET",sendContent:""},opts); -var self=MochiKit.Async; -var req=self.getXMLHttpRequest(); -if(opts.queryString){ -var qs=m.queryString(opts.queryString); -if(qs){ -url+="?"+qs; -} -} -if("username" in opts){ -req.open(opts.method,url,true,opts.username,opts.password); -}else{ -req.open(opts.method,url,true); -} -if(req.overrideMimeType&&opts.mimeType){ -req.overrideMimeType(opts.mimeType); -} -req.setRequestHeader("X-Requested-With","XMLHttpRequest"); -if(opts.headers){ -var _318=opts.headers; -if(!m.isArrayLike(_318)){ -_318=m.items(_318); -} -for(var i=0;i<_318.length;i++){ -var _31a=_318[i]; -var name=_31a[0]; -var _31c=_31a[1]; -req.setRequestHeader(name,_31c); -} -} -return self.sendXMLHttpRequest(req,opts.sendContent); -},_buildURL:function(url){ -if(arguments.length>1){ -var m=MochiKit.Base; -var qs=m.queryString.apply(null,m.extend(null,arguments,1)); -if(qs){ -return url+"?"+qs; -} -} -return url; -},doSimpleXMLHttpRequest:function(url){ -var self=MochiKit.Async; -url=self._buildURL.apply(self,arguments); -return self.doXHR(url); -},loadJSONDoc:function(url){ -var self=MochiKit.Async; -url=self._buildURL.apply(self,arguments); -var d=self.doXHR(url,{"mimeType":"text/plain","headers":[["Accept","application/json"]]}); -d=d.addCallback(self.evalJSONRequest); -return d; -},wait:function(_325,_326){ -var d=new MochiKit.Async.Deferred(); -var m=MochiKit.Base; -if(typeof (_326)!="undefined"){ -d.addCallback(function(){ -return _326; -}); -} -var _329=setTimeout(m.bind("callback",d),Math.floor(_325*1000)); -d.canceller=function(){ -try{ -clearTimeout(_329); -} -catch(e){ -} -}; -return d; -},callLater:function(_32a,func){ -var m=MochiKit.Base; -var _32d=m.partial.apply(m,m.extend(null,arguments,1)); -return MochiKit.Async.wait(_32a).addCallback(function(res){ -return _32d(); -}); -}}); -MochiKit.Async.DeferredLock=function(){ -this.waiting=[]; -this.locked=false; -this.id=this._nextId(); -}; -MochiKit.Async.DeferredLock.prototype={__class__:MochiKit.Async.DeferredLock,acquire:function(){ -var d=new MochiKit.Async.Deferred(); -if(this.locked){ -this.waiting.push(d); -}else{ -this.locked=true; -d.callback(this); -} -return d; -},release:function(){ -if(!this.locked){ -throw TypeError("Tried to release an unlocked DeferredLock"); -} -this.locked=false; -if(this.waiting.length>0){ -this.locked=true; -this.waiting.shift().callback(this); -} -},_nextId:MochiKit.Base.counter(),repr:function(){ -var _330; -if(this.locked){ -_330="locked, "+this.waiting.length+" waiting"; -}else{ -_330="unlocked"; -} -return "DeferredLock("+this.id+", "+_330+")"; -},toString:MochiKit.Base.forwardCall("repr")}; -MochiKit.Async.DeferredList=function(list,_332,_333,_334,_335){ -MochiKit.Async.Deferred.apply(this,[_335]); -this.list=list; -var _336=[]; -this.resultList=_336; -this.finishedCount=0; -this.fireOnOneCallback=_332; -this.fireOnOneErrback=_333; -this.consumeErrors=_334; -var cb=MochiKit.Base.bind(this._cbDeferred,this); -for(var i=0;i=0){ -var opt=elem.options[elem.selectedIndex]; -var v=opt.value; -if(!v){ -var h=opt.outerHTML; -if(h&&!h.match(/^[^>]+\svalue\s*=/i)){ -v=opt.text; -} -} -_355.push(name); -_356.push(v); -return null; -} -_355.push(name); -_356.push(""); -return null; -}else{ -var opts=elem.options; -if(!opts.length){ -_355.push(name); -_356.push(""); -return null; -} -for(var i=0;i]+\svalue\s*=/i)){ -v=opt.text; -} -} -_355.push(name); -_356.push(v); -} -return null; -} -} -if(_35b==="FORM"||_35b==="P"||_35b==="SPAN"||_35b==="DIV"){ -return elem.childNodes; -} -_355.push(name); -_356.push(elem.value||""); -return null; -} -return elem.childNodes; -}); -return [_355,_356]; -},withDocument:function(doc,func){ -var self=MochiKit.DOM; -var _364=self._document; -var rval; -try{ -self._document=doc; -rval=func(); -} -catch(e){ -self._document=_364; -throw e; -} -self._document=_364; -return rval; -},registerDOMConverter:function(name,_367,wrap,_369){ -MochiKit.DOM.domConverters.register(name,_367,wrap,_369); -},coerceToDOM:function(node,ctx){ -var m=MochiKit.Base; -var im=MochiKit.Iter; -var self=MochiKit.DOM; -if(im){ -var iter=im.iter; -var _370=im.repeat; -} -var map=m.map; -var _372=self.domConverters; -var _373=arguments.callee; -var _374=m.NotFound; -while(true){ -if(typeof (node)=="undefined"||node===null){ -return null; -} -if(typeof (node)=="function"&&typeof (node.length)=="number"&&!(node instanceof Function)){ -node=im?im.list(node):m.extend(null,node); -} -if(typeof (node.nodeType)!="undefined"&&node.nodeType>0){ -return node; -} -if(typeof (node)=="number"||typeof (node)=="boolean"){ -node=node.toString(); -} -if(typeof (node)=="string"){ -return self._document.createTextNode(node); -} -if(typeof (node.__dom__)=="function"){ -node=node.__dom__(ctx); -continue; -} -if(typeof (node.dom)=="function"){ -node=node.dom(ctx); -continue; -} -if(typeof (node)=="function"){ -node=node.apply(ctx,[ctx]); -continue; -} -if(im){ -var _375=null; -try{ -_375=iter(node); -} -catch(e){ -} -if(_375){ -return map(_373,_375,_370(ctx)); -} -}else{ -if(m.isArrayLike(node)){ -var func=function(n){ -return _373(n,ctx); -}; -return map(func,node); -} -} -try{ -node=_372.match(node,ctx); -continue; -} -catch(e){ -if(e!=_374){ -throw e; -} -} -return self._document.createTextNode(node.toString()); -} -return undefined; -},isChildNode:function(node,_379){ -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -node=self.getElement(node); -} -if(typeof (_379)=="string"){ -_379=self.getElement(_379); -} -if(typeof (node)=="undefined"||node===null){ -return false; -} -while(node!=null&&node!==self._document){ -if(node===_379){ -return true; -} -node=node.parentNode; -} -return false; -},setNodeAttribute:function(node,attr,_37d){ -var o={}; -o[attr]=_37d; -try{ -return MochiKit.DOM.updateNodeAttributes(node,o); -} -catch(e){ -} -return null; -},getNodeAttribute:function(node,attr){ -var self=MochiKit.DOM; -var _382=self.attributeArray.renames[attr]; -var _383=self.attributeArray.ignoreAttr[attr]; -node=self.getElement(node); -try{ -if(_382){ -return node[_382]; -} -var _384=node.getAttribute(attr); -if(_384!=_383){ -return _384; -} -} -catch(e){ -} -return null; -},removeNodeAttribute:function(node,attr){ -var self=MochiKit.DOM; -var _388=self.attributeArray.renames[attr]; -node=self.getElement(node); -try{ -if(_388){ -return node[_388]; -} -return node.removeAttribute(attr); -} -catch(e){ -} -return null; -},updateNodeAttributes:function(node,_38a){ -var elem=node; -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -elem=self.getElement(node); -} -if(_38a){ -var _38d=MochiKit.Base.updatetree; -if(self.attributeArray.compliant){ -for(var k in _38a){ -var v=_38a[k]; -if(typeof (v)=="object"&&typeof (elem[k])=="object"){ -if(k=="style"&&MochiKit.Style){ -MochiKit.Style.setStyle(elem,v); -}else{ -_38d(elem[k],v); -} -}else{ -if(k.substring(0,2)=="on"){ -if(typeof (v)=="string"){ -v=new Function(v); -} -elem[k]=v; -}else{ -elem.setAttribute(k,v); -} -} -if(typeof (elem[k])=="string"&&elem[k]!=v){ -elem[k]=v; -} -} -}else{ -var _390=self.attributeArray.renames; -for(var k in _38a){ -v=_38a[k]; -var _391=_390[k]; -if(k=="style"&&typeof (v)=="string"){ -elem.style.cssText=v; -}else{ -if(typeof (_391)=="string"){ -elem[_391]=v; -}else{ -if(typeof (elem[k])=="object"&&typeof (v)=="object"){ -if(k=="style"&&MochiKit.Style){ -MochiKit.Style.setStyle(elem,v); -}else{ -_38d(elem[k],v); -} -}else{ -if(k.substring(0,2)=="on"){ -if(typeof (v)=="string"){ -v=new Function(v); -} -elem[k]=v; -}else{ -elem.setAttribute(k,v); -} -} -} -} -if(typeof (elem[k])=="string"&&elem[k]!=v){ -elem[k]=v; -} -} -} -} -return elem; -},appendChildNodes:function(node){ -var elem=node; -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -elem=self.getElement(node); -} -var _395=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; -var _396=MochiKit.Base.concat; -while(_395.length){ -var n=_395.shift(); -if(typeof (n)=="undefined"||n===null){ -}else{ -if(typeof (n.nodeType)=="number"){ -elem.appendChild(n); -}else{ -_395=_396(n,_395); -} -} -} -return elem; -},insertSiblingNodesBefore:function(node){ -var elem=node; -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -elem=self.getElement(node); -} -var _39b=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; -var _39c=elem.parentNode; -var _39d=MochiKit.Base.concat; -while(_39b.length){ -var n=_39b.shift(); -if(typeof (n)=="undefined"||n===null){ -}else{ -if(typeof (n.nodeType)=="number"){ -_39c.insertBefore(n,elem); -}else{ -_39b=_39d(n,_39b); -} -} -} -return _39c; -},insertSiblingNodesAfter:function(node){ -var elem=node; -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -elem=self.getElement(node); -} -var _3a2=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; -if(elem.nextSibling){ -return self.insertSiblingNodesBefore(elem.nextSibling,_3a2); -}else{ -return self.appendChildNodes(elem.parentNode,_3a2); -} -},replaceChildNodes:function(node){ -var elem=node; -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -elem=self.getElement(node); -arguments[0]=elem; -} -var _3a6; -while((_3a6=elem.firstChild)){ -elem.removeChild(_3a6); -} -if(arguments.length<2){ -return elem; -}else{ -return self.appendChildNodes.apply(this,arguments); -} -},createDOM:function(name,_3a8){ -var elem; -var self=MochiKit.DOM; -var m=MochiKit.Base; -if(typeof (_3a8)=="string"||typeof (_3a8)=="number"){ -var args=m.extend([name,null],arguments,1); -return arguments.callee.apply(this,args); -} -if(typeof (name)=="string"){ -var _3ad=self._xhtml; -if(_3a8&&!self.attributeArray.compliant){ -var _3ae=""; -if("name" in _3a8){ -_3ae+=" name=\""+self.escapeHTML(_3a8.name)+"\""; -} -if(name=="input"&&"type" in _3a8){ -_3ae+=" type=\""+self.escapeHTML(_3a8.type)+"\""; -} -if(_3ae){ -name="<"+name+_3ae+">"; -_3ad=false; -} -} -var d=self._document; -if(_3ad&&d===document){ -elem=d.createElementNS("http://www.w3.org/1999/xhtml",name); -}else{ -elem=d.createElement(name); -} -}else{ -elem=name; -} -if(_3a8){ -self.updateNodeAttributes(elem,_3a8); -} -if(arguments.length<=2){ -return elem; -}else{ -var args=m.extend([elem],arguments,2); -return self.appendChildNodes.apply(this,args); -} -},createDOMFunc:function(){ -var m=MochiKit.Base; -return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments)); -},removeElement:function(elem){ -var self=MochiKit.DOM; -if(typeof (elem)=="string"){ -elem=self.getElement(elem); -} -var e=self.coerceToDOM(elem); -e.parentNode.removeChild(e); -return e; -},swapDOM:function(dest,src){ -var self=MochiKit.DOM; -dest=self.getElement(dest); -var _3b7=dest.parentNode; -if(src){ -if(typeof (src)=="string"){ -src=self.getElement(src); -} -src=self.coerceToDOM(src,_3b7); -_3b7.replaceChild(src,dest); -}else{ -_3b7.removeChild(dest); -} -return src; -},getElement:function(id){ -var self=MochiKit.DOM; -if(arguments.length==1){ -return ((typeof (id)=="string")?self._document.getElementById(id):id); -}else{ -return MochiKit.Base.map(self.getElement,arguments); -} -},getElementsByTagAndClassName:function(_3ba,_3bb,_3bc){ -var self=MochiKit.DOM; -if(typeof (_3ba)=="undefined"||_3ba===null){ -_3ba="*"; -} -if(typeof (_3bc)=="undefined"||_3bc===null){ -_3bc=self._document; -} -_3bc=self.getElement(_3bc); -if(_3bc==null){ -return []; -} -var _3be=(_3bc.getElementsByTagName(_3ba)||self._document.all); -if(typeof (_3bb)=="undefined"||_3bb===null){ -return MochiKit.Base.extend(null,_3be); -} -var _3bf=[]; -for(var i=0;i<_3be.length;i++){ -var _3c1=_3be[i]; -var cls=_3c1.className; -if(typeof (cls)!="string"){ -cls=_3c1.getAttribute("class"); -} -if(typeof (cls)=="string"){ -var _3c3=cls.split(" "); -for(var j=0;j<_3c3.length;j++){ -if(_3c3[j]==_3bb){ -_3bf.push(_3c1); -break; -} -} -} -} -return _3bf; -},_newCallStack:function(path,once){ -var rval=function(){ -var _3c8=arguments.callee.callStack; -for(var i=0;i<_3c8.length;i++){ -if(_3c8[i].apply(this,arguments)===false){ -break; -} -} -if(once){ -try{ -this[path]=null; -} -catch(e){ -} -} -}; -rval.callStack=[]; -return rval; -},addToCallStack:function(_3ca,path,func,once){ -var self=MochiKit.DOM; -var _3cf=_3ca[path]; -var _3d0=_3cf; -if(!(typeof (_3cf)=="function"&&typeof (_3cf.callStack)=="object"&&_3cf.callStack!==null)){ -_3d0=self._newCallStack(path,once); -if(typeof (_3cf)=="function"){ -_3d0.callStack.push(_3cf); -} -_3ca[path]=_3d0; -} -_3d0.callStack.push(func); -},addLoadEvent:function(func){ -var self=MochiKit.DOM; -self.addToCallStack(self._window,"onload",func,true); -},focusOnLoad:function(_3d3){ -var self=MochiKit.DOM; -self.addLoadEvent(function(){ -_3d3=self.getElement(_3d3); -if(_3d3){ -_3d3.focus(); -} -}); -},setElementClass:function(_3d5,_3d6){ -var self=MochiKit.DOM; -var obj=self.getElement(_3d5); -if(self.attributeArray.compliant){ -obj.setAttribute("class",_3d6); -}else{ -obj.setAttribute("className",_3d6); -} -},toggleElementClass:function(_3d9){ -var self=MochiKit.DOM; -for(var i=1;i/g,">"); -},toHTML:function(dom){ -return MochiKit.DOM.emitHTML(dom).join(""); -},emitHTML:function(dom,lst){ -if(typeof (lst)=="undefined"||lst===null){ -lst=[]; -} -var _3fc=[dom]; -var self=MochiKit.DOM; -var _3fe=self.escapeHTML; -var _3ff=self.attributeArray; -while(_3fc.length){ -dom=_3fc.pop(); -if(typeof (dom)=="string"){ -lst.push(dom); -}else{ -if(dom.nodeType==1){ -lst.push("<"+dom.tagName.toLowerCase()); -var _400=[]; -var _401=_3ff(dom); -for(var i=0;i<_401.length;i++){ -var a=_401[i]; -_400.push([" ",a.name,"=\"",_3fe(a.value),"\""]); -} -_400.sort(); -for(i=0;i<_400.length;i++){ -var _404=_400[i]; -for(var j=0;j<_404.length;j++){ -lst.push(_404[j]); -} -} -if(dom.hasChildNodes()){ -lst.push(">"); -_3fc.push(""); -var _406=dom.childNodes; -for(i=_406.length-1;i>=0;i--){ -_3fc.push(_406[i]); -} -}else{ -lst.push("/>"); -} -}else{ -if(dom.nodeType==3){ -lst.push(_3fe(dom.nodeValue)); -} -} -} -} -return lst; -},scrapeText:function(node,_408){ -var rval=[]; -(function(node){ -var cn=node.childNodes; -if(cn){ -for(var i=0;i0){ -var _425=m.filter; -_424=function(node){ -return _425(_424.ignoreAttrFilter,node.attributes); -}; -_424.ignoreAttr={}; -var _427=_423.attributes; -var _428=_424.ignoreAttr; -for(var i=0;i<_427.length;i++){ -var a=_427[i]; -_428[a.name]=a.value; -} -_424.ignoreAttrFilter=function(a){ -return (_424.ignoreAttr[a.name]!=a.value); -}; -_424.compliant=false; -_424.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor","readonly":"readOnly","colspan":"colSpan","bgcolor":"bgColor","cellspacing":"cellSpacing","cellpadding":"cellPadding"}; -}else{ -_424=function(node){ -return node.attributes; -}; -_424.compliant=true; -_424.ignoreAttr={}; -_424.renames={}; -} -_424.__export__=false; -this.attributeArray=_424; -m._deprecated(this,"computedStyle","MochiKit.Style.getStyle","1.4",true); -m._deprecated(this,"elementDimensions","MochiKit.Style.getElementDimensions","1.4"); -m._deprecated(this,"elementPosition","MochiKit.Style.getElementPosition","1.4"); -m._deprecated(this,"getViewportDimensions","MochiKit.Style.getViewportDimensions","1.4"); -m._deprecated(this,"hideElement","MochiKit.Style.hideElement","1.4"); -m._deprecated(this,"makeClipping","MochiKit.Style.makeClipping","1.4.1"); -m._deprecated(this,"makePositioned","MochiKit.Style.makePositioned","1.4.1"); -m._deprecated(this,"setElementDimensions","MochiKit.Style.setElementDimensions","1.4"); -m._deprecated(this,"setElementPosition","MochiKit.Style.setElementPosition","1.4"); -m._deprecated(this,"setDisplayForElement","MochiKit.Style.setDisplayForElement","1.4"); -m._deprecated(this,"setOpacity","MochiKit.Style.setOpacity","1.4"); -m._deprecated(this,"showElement","MochiKit.Style.showElement","1.4"); -m._deprecated(this,"undoClipping","MochiKit.Style.undoClipping","1.4.1"); -m._deprecated(this,"undoPositioned","MochiKit.Style.undoPositioned","1.4.1"); -m._deprecated(this,"Coordinates","MochiKit.Style.Coordinates","1.4"); -m._deprecated(this,"Dimensions","MochiKit.Style.Dimensions","1.4"); -var _42d=this.createDOMFunc; -this.UL=_42d("ul"); -this.OL=_42d("ol"); -this.LI=_42d("li"); -this.DL=_42d("dl"); -this.DT=_42d("dt"); -this.DD=_42d("dd"); -this.TD=_42d("td"); -this.TR=_42d("tr"); -this.TBODY=_42d("tbody"); -this.THEAD=_42d("thead"); -this.TFOOT=_42d("tfoot"); -this.TABLE=_42d("table"); -this.TH=_42d("th"); -this.INPUT=_42d("input"); -this.SPAN=_42d("span"); -this.A=_42d("a"); -this.DIV=_42d("div"); -this.IMG=_42d("img"); -this.BUTTON=_42d("button"); -this.TT=_42d("tt"); -this.PRE=_42d("pre"); -this.H1=_42d("h1"); -this.H2=_42d("h2"); -this.H3=_42d("h3"); -this.H4=_42d("h4"); -this.H5=_42d("h5"); -this.H6=_42d("h6"); -this.BR=_42d("br"); -this.HR=_42d("hr"); -this.LABEL=_42d("label"); -this.TEXTAREA=_42d("textarea"); -this.FORM=_42d("form"); -this.P=_42d("p"); -this.SELECT=_42d("select"); -this.OPTION=_42d("option"); -this.OPTGROUP=_42d("optgroup"); -this.LEGEND=_42d("legend"); -this.FIELDSET=_42d("fieldset"); -this.STRONG=_42d("strong"); -this.CANVAS=_42d("canvas"); -this.$=this.getElement; -m.nameFunctions(this); -}}); -MochiKit.DOM.__new__(((typeof (window)=="undefined")?this:window)); -if(MochiKit.__export__){ -withWindow=MochiKit.DOM.withWindow; -withDocument=MochiKit.DOM.withDocument; -} -MochiKit.Base._exportSymbols(this,MochiKit.DOM); -MochiKit.Base._module("Selector","1.5",["Base","DOM","Iter"]); -MochiKit.Selector.Selector=function(_42e){ -this.params={classNames:[],pseudoClassNames:[]}; -this.expression=_42e.toString().replace(/(^\s+|\s+$)/g,""); -this.parseExpression(); -this.compileMatcher(); -}; -MochiKit.Selector.Selector.prototype={__class__:MochiKit.Selector.Selector,parseExpression:function(){ -function abort(_42f){ -throw "Parse error in selector: "+_42f; -} -if(this.expression==""){ -abort("empty expression"); -} -var repr=MochiKit.Base.repr; -var _431=this.params; -var expr=this.expression; -var _433,_434,_435,rest; -while(_433=expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!^$*]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)){ -_431.attributes=_431.attributes||[]; -_431.attributes.push({name:_433[2],operator:_433[3],value:_433[4]||_433[5]||""}); -expr=_433[1]; -} -if(expr=="*"){ -return this.params.wildcard=true; -} -while(_433=expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+(?:\([^)]*\))?)(.*)/i)){ -_434=_433[1]; -_435=_433[2]; -rest=_433[3]; -switch(_434){ -case "#": -_431.id=_435; -break; -case ".": -_431.classNames.push(_435); -break; -case ":": -_431.pseudoClassNames.push(_435); -break; -case "": -case undefined: -_431.tagName=_435.toUpperCase(); -break; -default: -abort(repr(expr)); -} -expr=rest; -} -if(expr.length>0){ -abort(repr(expr)); -} -},buildMatchExpression:function(){ -var repr=MochiKit.Base.repr; -var _438=this.params; -var _439=[]; -var _43a,i; -function childElements(_43c){ -return "MochiKit.Base.filter(function (node) { return node.nodeType == 1; }, "+_43c+".childNodes)"; -} -if(_438.wildcard){ -_439.push("true"); -} -if(_43a=_438.id){ -_439.push("element.id == "+repr(_43a)); -} -if(_43a=_438.tagName){ -_439.push("element.tagName.toUpperCase() == "+repr(_43a)); -} -if((_43a=_438.classNames).length>0){ -for(i=0;i<_43a.length;i++){ -_439.push("MochiKit.DOM.hasElementClass(element, "+repr(_43a[i])+")"); -} -} -if((_43a=_438.pseudoClassNames).length>0){ -for(i=0;i<_43a.length;i++){ -var _43d=_43a[i].match(/^([^(]+)(?:\((.*)\))?$/); -var _43e=_43d[1]; -var _43f=_43d[2]; -switch(_43e){ -case "root": -_439.push("element.nodeType == 9 || element === element.ownerDocument.documentElement"); -break; -case "nth-child": -case "nth-last-child": -case "nth-of-type": -case "nth-last-of-type": -_43d=_43f.match(/^((?:(\d+)n\+)?(\d+)|odd|even)$/); -if(!_43d){ -throw "Invalid argument to pseudo element nth-child: "+_43f; -} -var a,b; -if(_43d[0]=="odd"){ -a=2; -b=1; -}else{ -if(_43d[0]=="even"){ -a=2; -b=0; -}else{ -a=_43d[2]&&parseInt(_43d)||null; -b=parseInt(_43d[3]); -} -} -_439.push("this.nthChild(element,"+a+","+b+","+!!_43e.match("^nth-last")+","+!!_43e.match("of-type$")+")"); -break; -case "first-child": -_439.push("this.nthChild(element, null, 1)"); -break; -case "last-child": -_439.push("this.nthChild(element, null, 1, true)"); -break; -case "first-of-type": -_439.push("this.nthChild(element, null, 1, false, true)"); -break; -case "last-of-type": -_439.push("this.nthChild(element, null, 1, true, true)"); -break; -case "only-child": -_439.push(childElements("element.parentNode")+".length == 1"); -break; -case "only-of-type": -_439.push("MochiKit.Base.filter(function (node) { return node.tagName == element.tagName; }, "+childElements("element.parentNode")+").length == 1"); -break; -case "empty": -_439.push("element.childNodes.length == 0"); -break; -case "enabled": -_439.push("(this.isUIElement(element) && element.disabled === false)"); -break; -case "disabled": -_439.push("(this.isUIElement(element) && element.disabled === true)"); -break; -case "checked": -_439.push("(this.isUIElement(element) && element.checked === true)"); -break; -case "not": -var _442=new MochiKit.Selector.Selector(_43f); -_439.push("!( "+_442.buildMatchExpression()+")"); -break; -} -} -} -if(_43a=_438.attributes){ -MochiKit.Base.map(function(_443){ -var _444="MochiKit.DOM.getNodeAttribute(element, "+repr(_443.name)+")"; -var _445=function(_446){ -return _444+".split("+repr(_446)+")"; -}; -_439.push(_444+" != null"); -switch(_443.operator){ -case "=": -_439.push(_444+" == "+repr(_443.value)); -break; -case "~=": -_439.push("MochiKit.Base.findValue("+_445(" ")+", "+repr(_443.value)+") > -1"); -break; -case "^=": -_439.push(_444+".substring(0, "+_443.value.length+") == "+repr(_443.value)); -break; -case "$=": -_439.push(_444+".substring("+_444+".length - "+_443.value.length+") == "+repr(_443.value)); -break; -case "*=": -_439.push(_444+".match("+repr(_443.value)+")"); -break; -case "|=": -_439.push(_445("-")+"[0].toUpperCase() == "+repr(_443.value.toUpperCase())); -break; -case "!=": -_439.push(_444+" != "+repr(_443.value)); -break; -case "": -case undefined: -break; -default: -throw "Unknown operator "+_443.operator+" in selector"; -} -},_43a); -} -return _439.join(" && "); -},compileMatcher:function(){ -var code="return (!element.tagName) ? false : "+this.buildMatchExpression()+";"; -this.match=new Function("element",code); -},nthChild:function(_448,a,b,_44b,_44c){ -var _44d=MochiKit.Base.filter(function(node){ -return node.nodeType==1; -},_448.parentNode.childNodes); -if(_44c){ -_44d=MochiKit.Base.filter(function(node){ -return node.tagName==_448.tagName; -},_44d); -} -if(_44b){ -_44d=MochiKit.Iter.reversed(_44d); -} -if(a){ -var _450=MochiKit.Base.findIdentical(_44d,_448); -return ((_450+1-b)/a)%1==0; -}else{ -return b==MochiKit.Base.findIdentical(_44d,_448)+1; -} -},isUIElement:function(_451){ -return MochiKit.Base.findValue(["input","button","select","option","textarea","object"],_451.tagName.toLowerCase())>-1; -},findElements:function(_452,axis){ -var _454; -if(axis==undefined){ -axis=""; -} -function inScope(_455,_456){ -if(axis==""){ -return MochiKit.DOM.isChildNode(_455,_456); -}else{ -if(axis==">"){ -return _455.parentNode===_456; -}else{ -if(axis=="+"){ -return _455===nextSiblingElement(_456); -}else{ -if(axis=="~"){ -var _457=_456; -while(_457=nextSiblingElement(_457)){ -if(_455===_457){ -return true; -} -} -return false; -}else{ -throw "Invalid axis: "+axis; -} -} -} -} -} -if(_454=MochiKit.DOM.getElement(this.params.id)){ -if(this.match(_454)){ -if(!_452||inScope(_454,_452)){ -return [_454]; -} -} -} -function nextSiblingElement(node){ -node=node.nextSibling; -while(node&&node.nodeType!=1){ -node=node.nextSibling; -} -return node; -} -if(axis==""){ -_452=(_452||MochiKit.DOM.currentDocument()).getElementsByTagName(this.params.tagName||"*"); -}else{ -if(axis==">"){ -if(!_452){ -throw "> combinator not allowed without preceeding expression"; -} -_452=MochiKit.Base.filter(function(node){ -return node.nodeType==1; -},_452.childNodes); -}else{ -if(axis=="+"){ -if(!_452){ -throw "+ combinator not allowed without preceeding expression"; -} -_452=nextSiblingElement(_452)&&[nextSiblingElement(_452)]; -}else{ -if(axis=="~"){ -if(!_452){ -throw "~ combinator not allowed without preceeding expression"; -} -var _45a=[]; -while(nextSiblingElement(_452)){ -_452=nextSiblingElement(_452); -_45a.push(_452); -} -_452=_45a; -} -} -} -} -if(!_452){ -return []; -} -var _45b=MochiKit.Base.filter(MochiKit.Base.bind(function(_45c){ -return this.match(_45c); -},this),_452); -return _45b; -},repr:function(){ -return "Selector("+this.expression+")"; -},toString:MochiKit.Base.forwardCall("repr")}; -MochiKit.Base.update(MochiKit.Selector,{findChildElements:function(_45d,_45e){ -_45d=MochiKit.DOM.getElement(_45d); -var uniq=function(arr){ -var res=[]; -for(var i=0;i+~]$/); -if(_468){ -_464=_468[0]; -return _466; -}else{ -var _469=new MochiKit.Selector.Selector(expr); -var _46a=MochiKit.Iter.reduce(function(_46b,_46c){ -return MochiKit.Base.extend(_46b,_469.findElements(_46c||_45d,_464)); -},_466,[]); -_464=""; -return _46a; -} -}; -var _46d=_463.replace(/(^\s+|\s+$)/g,"").split(/\s+/); -return uniq(MochiKit.Iter.reduce(_465,_46d,[null])); -},_45e)); -},findDocElements:function(){ -return MochiKit.Selector.findChildElements(MochiKit.DOM.currentDocument(),arguments); -},__new__:function(){ -this.$$=this.findDocElements; -MochiKit.Base.nameFunctions(this); -}}); -MochiKit.Selector.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.Selector); -MochiKit.Base._module("Style","1.5",["Base","DOM"]); -MochiKit.Style.Dimensions=function(w,h){ -if(!(this instanceof MochiKit.Style.Dimensions)){ -return new MochiKit.Style.Dimensions(w,h); -} -this.w=w; -this.h=h; -}; -MochiKit.Style.Dimensions.prototype.__repr__=function(){ -var repr=MochiKit.Base.repr; -return "{w: "+repr(this.w)+", h: "+repr(this.h)+"}"; -}; -MochiKit.Style.Dimensions.prototype.toString=function(){ -return this.__repr__(); -}; -MochiKit.Style.Coordinates=function(x,y){ -if(!(this instanceof MochiKit.Style.Coordinates)){ -return new MochiKit.Style.Coordinates(x,y); -} -this.x=x; -this.y=y; -}; -MochiKit.Style.Coordinates.prototype.__repr__=function(){ -var repr=MochiKit.Base.repr; -return "{x: "+repr(this.x)+", y: "+repr(this.y)+"}"; -}; -MochiKit.Style.Coordinates.prototype.toString=function(){ -return this.__repr__(); -}; -MochiKit.Base.update(MochiKit.Style,{getStyle:function(elem,_475){ -var dom=MochiKit.DOM; -var d=dom._document; -elem=dom.getElement(elem); -_475=MochiKit.Base.camelize(_475); -if(!elem||elem==d){ -return undefined; -} -if(_475=="opacity"&&typeof (elem.filters)!="undefined"){ -var _478=(MochiKit.Style.getStyle(elem,"filter")||"").match(/alpha\(opacity=(.*)\)/); -if(_478&&_478[1]){ -return parseFloat(_478[1])/100; -} -return 1; -} -if(_475=="float"||_475=="cssFloat"||_475=="styleFloat"){ -if(elem.style["float"]){ -return elem.style["float"]; -}else{ -if(elem.style.cssFloat){ -return elem.style.cssFloat; -}else{ -if(elem.style.styleFloat){ -return elem.style.styleFloat; -}else{ -return "none"; -} -} -} -} -var _479=elem.style?elem.style[_475]:null; -if(!_479){ -if(d.defaultView&&d.defaultView.getComputedStyle){ -var css=d.defaultView.getComputedStyle(elem,null); -_475=_475.replace(/([A-Z])/g,"-$1").toLowerCase(); -_479=css?css.getPropertyValue(_475):null; -}else{ -if(elem.currentStyle){ -_479=elem.currentStyle[_475]; -if(/^\d/.test(_479)&&!/px$/.test(_479)&&_475!="fontWeight"){ -var left=elem.style.left; -var _47c=elem.runtimeStyle.left; -elem.runtimeStyle.left=elem.currentStyle.left; -elem.style.left=_479||0; -_479=elem.style.pixelLeft+"px"; -elem.style.left=left; -elem.runtimeStyle.left=_47c; -} -} -} -} -if(_475=="opacity"){ -_479=parseFloat(_479); -} -if(/Opera/.test(navigator.userAgent)&&(MochiKit.Base.findValue(["left","top","right","bottom"],_475)!=-1)){ -if(MochiKit.Style.getStyle(elem,"position")=="static"){ -_479="auto"; -} -} -return _479=="auto"?null:_479; -},setStyle:function(elem,_47e){ -elem=MochiKit.DOM.getElement(elem); -for(var name in _47e){ -switch(name){ -case "opacity": -MochiKit.Style.setOpacity(elem,_47e[name]); -break; -case "float": -case "cssFloat": -case "styleFloat": -if(typeof (elem.style["float"])!="undefined"){ -elem.style["float"]=_47e[name]; -}else{ -if(typeof (elem.style.cssFloat)!="undefined"){ -elem.style.cssFloat=_47e[name]; -}else{ -elem.style.styleFloat=_47e[name]; -} -} -break; -default: -elem.style[MochiKit.Base.camelize(name)]=_47e[name]; -} -} -},setOpacity:function(elem,o){ -elem=MochiKit.DOM.getElement(elem); -var self=MochiKit.Style; -if(o==1){ -var _483=/Gecko/.test(navigator.userAgent)&&!(/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)); -elem.style["opacity"]=_483?0.999999:1; -if(/MSIE/.test(navigator.userAgent)){ -elem.style["filter"]=self.getStyle(elem,"filter").replace(/alpha\([^\)]*\)/gi,""); -} -}else{ -if(o<0.00001){ -o=0; -} -elem.style["opacity"]=o; -if(/MSIE/.test(navigator.userAgent)){ -elem.style["filter"]=self.getStyle(elem,"filter").replace(/alpha\([^\)]*\)/gi,"")+"alpha(opacity="+o*100+")"; -} -} -},getElementPosition:function(elem,_485){ -var self=MochiKit.Style; -var dom=MochiKit.DOM; -var _488=function(o){ -return o!=null&&o.nodeType==null&&typeof (o.x)=="number"&&typeof (o.y)=="number"; -}; -if(typeof (elem)=="string"){ -elem=dom.getElement(elem); -} -if(elem==null||(!_488(elem)&&self.getStyle(elem,"display")=="none")){ -return undefined; -} -var c=new self.Coordinates(0,0); -var box=null; -var _48c=null; -var d=MochiKit.DOM._document; -var de=d.documentElement; -var b=d.body; -if(!elem.parentNode&&elem.x&&elem.y){ -c.x+=elem.x||0; -c.y+=elem.y||0; -}else{ -if(elem.getBoundingClientRect){ -box=elem.getBoundingClientRect(); -c.x+=box.left+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||0); -c.y+=box.top+(de.scrollTop||b.scrollTop)-(de.clientTop||0); -}else{ -if(elem.offsetParent){ -c.x+=elem.offsetLeft; -c.y+=elem.offsetTop; -_48c=elem.offsetParent; -if(_48c!=elem){ -while(_48c){ -c.x+=parseInt(_48c.style.borderLeftWidth)||0; -c.y+=parseInt(_48c.style.borderTopWidth)||0; -c.x+=_48c.offsetLeft; -c.y+=_48c.offsetTop; -_48c=_48c.offsetParent; -} -} -var ua=navigator.userAgent.toLowerCase(); -if((typeof (opera)!="undefined"&&parseFloat(opera.version())<9)||(ua.indexOf("AppleWebKit")!=-1&&self.getStyle(elem,"position")=="absolute")){ -c.x-=b.offsetLeft; -c.y-=b.offsetTop; -} -if(elem.parentNode){ -_48c=elem.parentNode; -}else{ -_48c=null; -} -while(_48c){ -var _491=_48c.tagName.toUpperCase(); -if(_491==="BODY"||_491==="HTML"){ -break; -} -var disp=self.getStyle(_48c,"display"); -if(disp.search(/^inline|table-row.*$/i)){ -c.x-=_48c.scrollLeft; -c.y-=_48c.scrollTop; -} -if(_48c.parentNode){ -_48c=_48c.parentNode; -}else{ -_48c=null; -} -} -} -} -} -if(_485){ -_485=arguments.callee(_485); -if(_485){ -c.x-=(_485.x||0); -c.y-=(_485.y||0); -} -} -return c; -},setElementPosition:function(elem,_494,_495){ -elem=MochiKit.DOM.getElement(elem); -if(typeof (_495)=="undefined"){ -_495="px"; -} -var _496={}; -var _497=MochiKit.Base.isUndefinedOrNull; -if(!_497(_494.x)){ -_496["left"]=_494.x+_495; -} -if(!_497(_494.y)){ -_496["top"]=_494.y+_495; -} -MochiKit.DOM.updateNodeAttributes(elem,{"style":_496}); -},makePositioned:function(_498){ -_498=MochiKit.DOM.getElement(_498); -var pos=MochiKit.Style.getStyle(_498,"position"); -if(pos=="static"||!pos){ -_498.style.position="relative"; -if(/Opera/.test(navigator.userAgent)){ -_498.style.top=0; -_498.style.left=0; -} -} -},undoPositioned:function(_49a){ -_49a=MochiKit.DOM.getElement(_49a); -if(_49a.style.position=="relative"){ -_49a.style.position=_49a.style.top=_49a.style.left=_49a.style.bottom=_49a.style.right=""; -} -},makeClipping:function(_49b){ -_49b=MochiKit.DOM.getElement(_49b); -var s=_49b.style; -var _49d={"overflow":s.overflow,"overflow-x":s.overflowX,"overflow-y":s.overflowY}; -if((MochiKit.Style.getStyle(_49b,"overflow")||"visible")!="hidden"){ -_49b.style.overflow="hidden"; -_49b.style.overflowX="hidden"; -_49b.style.overflowY="hidden"; -} -return _49d; -},undoClipping:function(_49e,_49f){ -_49e=MochiKit.DOM.getElement(_49e); -if(typeof (_49f)=="string"){ -_49e.style.overflow=_49f; -}else{ -if(_49f!=null){ -_49e.style.overflow=_49f["overflow"]; -_49e.style.overflowX=_49f["overflow-x"]; -_49e.style.overflowY=_49f["overflow-y"]; -} -} -},getElementDimensions:function(elem,_4a1){ -var self=MochiKit.Style; -var dom=MochiKit.DOM; -if(typeof (elem.w)=="number"||typeof (elem.h)=="number"){ -return new self.Dimensions(elem.w||0,elem.h||0); -} -elem=dom.getElement(elem); -if(!elem){ -return undefined; -} -var disp=self.getStyle(elem,"display"); -if(disp=="none"||disp==""||typeof (disp)=="undefined"){ -var s=elem.style; -var _4a6=s.visibility; -var _4a7=s.position; -var _4a8=s.display; -s.visibility="hidden"; -s.position="absolute"; -s.display=self._getDefaultDisplay(elem); -var _4a9=elem.offsetWidth; -var _4aa=elem.offsetHeight; -s.display=_4a8; -s.position=_4a7; -s.visibility=_4a6; -}else{ -_4a9=elem.offsetWidth||0; -_4aa=elem.offsetHeight||0; -} -if(_4a1){ -var _4ab="colSpan" in elem&&"rowSpan" in elem; -var _4ac=(_4ab&&elem.parentNode&&self.getStyle(elem.parentNode,"borderCollapse")=="collapse"); -if(_4ac){ -if(/MSIE/.test(navigator.userAgent)){ -var _4ad=elem.previousSibling?0.5:1; -var _4ae=elem.nextSibling?0.5:1; -}else{ -var _4ad=0.5; -var _4ae=0.5; -} -}else{ -var _4ad=1; -var _4ae=1; -} -_4a9-=Math.round((parseFloat(self.getStyle(elem,"paddingLeft"))||0)+(parseFloat(self.getStyle(elem,"paddingRight"))||0)+_4ad*(parseFloat(self.getStyle(elem,"borderLeftWidth"))||0)+_4ae*(parseFloat(self.getStyle(elem,"borderRightWidth"))||0)); -if(_4ab){ -if(/Gecko|Opera/.test(navigator.userAgent)&&!/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)){ -var _4af=0; -}else{ -if(/MSIE/.test(navigator.userAgent)){ -var _4af=1; -}else{ -var _4af=_4ac?0.5:1; -} -} -}else{ -var _4af=1; -} -_4aa-=Math.round((parseFloat(self.getStyle(elem,"paddingTop"))||0)+(parseFloat(self.getStyle(elem,"paddingBottom"))||0)+_4af*((parseFloat(self.getStyle(elem,"borderTopWidth"))||0)+(parseFloat(self.getStyle(elem,"borderBottomWidth"))||0))); -} -return new self.Dimensions(_4a9,_4aa); -},setElementDimensions:function(elem,_4b1,_4b2){ -elem=MochiKit.DOM.getElement(elem); -if(typeof (_4b2)=="undefined"){ -_4b2="px"; -} -var _4b3={}; -var _4b4=MochiKit.Base.isUndefinedOrNull; -if(!_4b4(_4b1.w)){ -_4b3["width"]=_4b1.w+_4b2; -} -if(!_4b4(_4b1.h)){ -_4b3["height"]=_4b1.h+_4b2; -} -MochiKit.DOM.updateNodeAttributes(elem,{"style":_4b3}); -},_getDefaultDisplay:function(elem){ -var self=MochiKit.Style; -var dom=MochiKit.DOM; -elem=dom.getElement(elem); -if(!elem){ -return undefined; -} -var _4b8=elem.tagName.toUpperCase(); -return self._defaultDisplay[_4b8]||"block"; -},setDisplayForElement:function(_4b9,_4ba){ -var _4bb=MochiKit.Base.extend(null,arguments,1); -var _4bc=MochiKit.DOM.getElement; -for(var i=0;i<_4bb.length;i++){ -_4ba=_4bc(_4bb[i]); -if(_4ba){ -_4ba.style.display=_4b9; -} -} -},getViewportDimensions:function(){ -var d=new MochiKit.Style.Dimensions(); -var w=MochiKit.DOM._window; -var b=MochiKit.DOM._document.body; -if(w.innerWidth){ -d.w=w.innerWidth; -d.h=w.innerHeight; -}else{ -if(b&&b.parentElement&&b.parentElement.clientWidth){ -d.w=b.parentElement.clientWidth; -d.h=b.parentElement.clientHeight; -}else{ -if(b&&b.clientWidth){ -d.w=b.clientWidth; -d.h=b.clientHeight; -} -} -} -return d; -},getViewportPosition:function(){ -var c=new MochiKit.Style.Coordinates(0,0); -var d=MochiKit.DOM._document; -var de=d.documentElement; -var db=d.body; -if(de&&(de.scrollTop||de.scrollLeft)){ -c.x=de.scrollLeft; -c.y=de.scrollTop; -}else{ -if(db){ -c.x=db.scrollLeft; -c.y=db.scrollTop; -} -} -return c; -},__new__:function(){ -var m=MochiKit.Base; -var _4c6=["A","ABBR","ACRONYM","B","BASEFONT","BDO","BIG","BR","CITE","CODE","DFN","EM","FONT","I","IMG","KBD","LABEL","Q","S","SAMP","SMALL","SPAN","STRIKE","STRONG","SUB","SUP","TEXTAREA","TT","U","VAR"]; -this._defaultDisplay={"TABLE":"table","THEAD":"table-header-group","TBODY":"table-row-group","TFOOT":"table-footer-group","COLGROUP":"table-column-group","COL":"table-column","TR":"table-row","TD":"table-cell","TH":"table-cell","CAPTION":"table-caption","LI":"list-item","INPUT":"inline-block","SELECT":"inline-block"}; -if(/MSIE/.test(navigator.userAgent)){ -for(var k in this._defaultDisplay){ -var v=this._defaultDisplay[k]; -if(v.indexOf("table")==0){ -this._defaultDisplay[k]="block"; -} -} -} -for(var i=0;i<_4c6.length;i++){ -this._defaultDisplay[_4c6[i]]="inline"; -} -m._deprecated(this,"elementPosition","MochiKit.Style.getElementPosition","1.3",true); -m._deprecated(this,"elementDimensions","MochiKit.Style.getElementDimensions","1.3",true); -this.hideElement=m.partial(this.setDisplayForElement,"none"); -this.showElement=m.partial(this.setDisplayForElement,"block"); -m.nameFunctions(this); -}}); -MochiKit.Style.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.Style); -MochiKit.Base._module("LoggingPane","1.5",["Base","Logging"]); -MochiKit.LoggingPane.createLoggingPane=function(_4ca){ -var m=MochiKit.LoggingPane; -_4ca=!(!_4ca); -if(m._loggingPane&&m._loggingPane.inline!=_4ca){ -m._loggingPane.closePane(); -m._loggingPane=null; -} -if(!m._loggingPane||m._loggingPane.closed){ -m._loggingPane=new m.LoggingPane(_4ca,MochiKit.Logging.logger); -} -return m._loggingPane; -}; -MochiKit.LoggingPane.LoggingPane=function(_4cc,_4cd){ -if(typeof (_4cd)=="undefined"||_4cd===null){ -_4cd=MochiKit.Logging.logger; -} -this.logger=_4cd; -var _4ce=MochiKit.Base.update; -var _4cf=MochiKit.Base.updatetree; -var bind=MochiKit.Base.bind; -var _4d1=MochiKit.Base.clone; -var win=window; -var uid="_MochiKit_LoggingPane"; -if(typeof (MochiKit.DOM)!="undefined"){ -win=MochiKit.DOM.currentWindow(); -} -if(!_4cc){ -var url=win.location.href.split("?")[0].replace(/[#:\/.><&%-]/g,"_"); -var name=uid+"_"+url; -var nwin=win.open("",name,"dependent,resizable,height=200"); -if(!nwin){ -alert("Not able to open debugging window due to pop-up blocking."); -return undefined; -} -nwin.document.write(""+"[MochiKit.LoggingPane]"+""); -nwin.document.close(); -nwin.document.title+=" "+win.document.title; -win=nwin; -} -var doc=win.document; -this.doc=doc; -var _4d8=doc.getElementById(uid); -var _4d9=!!_4d8; -if(_4d8&&typeof (_4d8.loggingPane)!="undefined"){ -_4d8.loggingPane.logger=this.logger; -_4d8.loggingPane.buildAndApplyFilter(); -return _4d8.loggingPane; -} -if(_4d9){ -var _4da; -while((_4da=_4d8.firstChild)){ -_4d8.removeChild(_4da); -} -}else{ -_4d8=doc.createElement("div"); -_4d8.id=uid; -} -_4d8.loggingPane=this; -var _4db=doc.createElement("input"); -var _4dc=doc.createElement("input"); -var _4dd=doc.createElement("button"); -var _4de=doc.createElement("button"); -var _4df=doc.createElement("button"); -var _4e0=doc.createElement("button"); -var _4e1=doc.createElement("div"); -var _4e2=doc.createElement("div"); -var _4e3=uid+"_Listener"; -this.colorTable=_4d1(this.colorTable); -var _4e4=[]; -var _4e5=null; -var _4e6=function(msg){ -var _4e8=msg.level; -if(typeof (_4e8)=="number"){ -_4e8=MochiKit.Logging.LogLevel[_4e8]; -} -return _4e8; -}; -var _4e9=function(msg){ -return msg.info.join(" "); -}; -var _4eb=bind(function(msg){ -var _4ed=_4e6(msg); -var text=_4e9(msg); -var c=this.colorTable[_4ed]; -var p=doc.createElement("span"); -p.className="MochiKit-LogMessage MochiKit-LogLevel-"+_4ed; -p.style.cssText="margin: 0px; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; white-space: pre-line; word-wrap: break-word; wrap-option: emergency; color: "+c; -p.appendChild(doc.createTextNode(_4ed+": "+text)); -_4e2.appendChild(p); -_4e2.appendChild(doc.createElement("br")); -if(_4e1.offsetHeight>_4e1.scrollHeight){ -_4e1.scrollTop=0; -}else{ -_4e1.scrollTop=_4e1.scrollHeight; -} -},this); -var _4f1=function(msg){ -_4e4[_4e4.length]=msg; -_4eb(msg); -}; -var _4f3=function(){ -var _4f4,_4f5; -try{ -_4f4=new RegExp(_4db.value); -_4f5=new RegExp(_4dc.value); -} -catch(e){ -logDebug("Error in filter regex: "+e.message); -return null; -} -return function(msg){ -return (_4f4.test(_4e6(msg))&&_4f5.test(_4e9(msg))); -}; -}; -var _4f7=function(){ -while(_4e2.firstChild){ -_4e2.removeChild(_4e2.firstChild); -} -}; -var _4f8=function(){ -_4e4=[]; -_4f7(); -}; -var _4f9=bind(function(){ -if(this.closed){ -return; -} -this.closed=true; -if(MochiKit.LoggingPane._loggingPane==this){ -MochiKit.LoggingPane._loggingPane=null; -} -this.logger.removeListener(_4e3); -try{ -try{ -_4d8.loggingPane=null; -} -catch(e){ -logFatal("Bookmarklet was closed incorrectly."); -} -if(_4cc){ -_4d8.parentNode.removeChild(_4d8); -}else{ -this.win.close(); -} -} -catch(e){ -} -},this); -var _4fa=function(){ -_4f7(); -for(var i=0;i<_4e4.length;i++){ -var msg=_4e4[i]; -if(_4e5===null||_4e5(msg)){ -_4eb(msg); -} -} -}; -this.buildAndApplyFilter=function(){ -_4e5=_4f3(); -_4fa(); -this.logger.removeListener(_4e3); -this.logger.addListener(_4e3,_4e5,_4f1); -}; -var _4fd=bind(function(){ -_4e4=this.logger.getMessages(); -_4fa(); -},this); -var _4fe=bind(function(_4ff){ -_4ff=_4ff||window.event; -key=_4ff.which||_4ff.keyCode; -if(key==13){ -this.buildAndApplyFilter(); -} -},this); -var _500="display: block; z-index: 1000; left: 0px; bottom: 0px; position: fixed; width: 100%; background-color: white; font: "+this.logFont; -if(_4cc){ -_500+="; height: 10em; border-top: 2px solid black"; -}else{ -_500+="; height: 100%;"; -} -_4d8.style.cssText=_500; -if(!_4d9){ -doc.body.appendChild(_4d8); -} -_500={"cssText":"width: 33%; display: inline; font: "+this.logFont}; -_4cf(_4db,{"value":"FATAL|ERROR|WARNING|INFO|DEBUG","onkeypress":_4fe,"style":_500}); -_4d8.appendChild(_4db); -_4cf(_4dc,{"value":".*","onkeypress":_4fe,"style":_500}); -_4d8.appendChild(_4dc); -_500="width: 8%; display:inline; font: "+this.logFont; -_4dd.appendChild(doc.createTextNode("Filter")); -_4dd.onclick=bind("buildAndApplyFilter",this); -_4dd.style.cssText=_500; -_4d8.appendChild(_4dd); -_4de.appendChild(doc.createTextNode("Load")); -_4de.onclick=_4fd; -_4de.style.cssText=_500; -_4d8.appendChild(_4de); -_4df.appendChild(doc.createTextNode("Clear")); -_4df.onclick=_4f8; -_4df.style.cssText=_500; -_4d8.appendChild(_4df); -_4e0.appendChild(doc.createTextNode("Close")); -_4e0.onclick=_4f9; -_4e0.style.cssText=_500; -_4d8.appendChild(_4e0); -_4e1.style.cssText="overflow: auto; width: 100%"; -_4e2.style.cssText="width: 100%; height: "+(_4cc?"8em":"100%"); -_4e1.appendChild(_4e2); -_4d8.appendChild(_4e1); -this.buildAndApplyFilter(); -_4fd(); -if(_4cc){ -this.win=undefined; -}else{ -this.win=win; -} -this.inline=_4cc; -this.closePane=_4f9; -this.closed=false; -return this; -}; -MochiKit.LoggingPane.LoggingPane.prototype={"logFont":"8pt Verdana,sans-serif","colorTable":{"ERROR":"red","FATAL":"darkred","WARNING":"blue","INFO":"black","DEBUG":"green"}}; -MochiKit.LoggingPane.__new__=function(){ -MochiKit.Base.nameFunctions(this); -MochiKit.LoggingPane._loggingPane=null; -}; -MochiKit.LoggingPane.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.LoggingPane); -MochiKit.Base._module("Color","1.5",["Base","DOM","Style"]); -MochiKit.Color.Color=function(red,_502,blue,_504){ -if(typeof (_504)=="undefined"||_504===null){ -_504=1; -} -this.rgb={r:red,g:_502,b:blue,a:_504}; -}; -MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(_505){ -var rgb=this.rgb; -var m=MochiKit.Color; -return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,_505); -},colorWithHue:function(hue){ -var hsl=this.asHSL(); -hsl.h=hue; -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},colorWithSaturation:function(_50b){ -var hsl=this.asHSL(); -hsl.s=_50b; -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},colorWithLightness:function(_50e){ -var hsl=this.asHSL(); -hsl.l=_50e; -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},darkerColorWithLevel:function(_511){ -var hsl=this.asHSL(); -hsl.l=Math.max(hsl.l-_511,0); -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},lighterColorWithLevel:function(_514){ -var hsl=this.asHSL(); -hsl.l=Math.min(hsl.l+_514,1); -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},blendedColor:function(_517,_518){ -if(typeof (_518)=="undefined"||_518===null){ -_518=0.5; -} -var sf=1-_518; -var s=this.rgb; -var d=_517.rgb; -var df=_518; -return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df)); -},compareRGB:function(_51d){ -var a=this.asRGB(); -var b=_51d.asRGB(); -return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]); -},isLight:function(){ -return this.asHSL().b>0.5; -},isDark:function(){ -return (!this.isLight()); -},toHSLString:function(){ -var c=this.asHSL(); -var ccc=MochiKit.Color.clampColorComponent; -var rval=this._hslString; -if(!rval){ -var mid=(ccc(c.h,360).toFixed(0)+","+ccc(c.s,100).toPrecision(4)+"%"+","+ccc(c.l,100).toPrecision(4)+"%"); -var a=c.a; -if(a>=1){ -a=1; -rval="hsl("+mid+")"; -}else{ -if(a<=0){ -a=0; -} -rval="hsla("+mid+","+a+")"; -} -this._hslString=rval; -} -return rval; -},toRGBString:function(){ -var c=this.rgb; -var ccc=MochiKit.Color.clampColorComponent; -var rval=this._rgbString; -if(!rval){ -var mid=(ccc(c.r,255).toFixed(0)+","+ccc(c.g,255).toFixed(0)+","+ccc(c.b,255).toFixed(0)); -if(c.a!=1){ -rval="rgba("+mid+","+c.a+")"; -}else{ -rval="rgb("+mid+")"; -} -this._rgbString=rval; -} -return rval; -},asRGB:function(){ -return MochiKit.Base.clone(this.rgb); -},toHexString:function(){ -var m=MochiKit.Color; -var c=this.rgb; -var ccc=MochiKit.Color.clampColorComponent; -var rval=this._hexString; -if(!rval){ -rval=("#"+m.toColorPart(ccc(c.r,255))+m.toColorPart(ccc(c.g,255))+m.toColorPart(ccc(c.b,255))); -this._hexString=rval; -} -return rval; -},asHSV:function(){ -var hsv=this.hsv; -var c=this.rgb; -if(typeof (hsv)=="undefined"||hsv===null){ -hsv=MochiKit.Color.rgbToHSV(this.rgb); -this.hsv=hsv; -} -return MochiKit.Base.clone(hsv); -},asHSL:function(){ -var hsl=this.hsl; -var c=this.rgb; -if(typeof (hsl)=="undefined"||hsl===null){ -hsl=MochiKit.Color.rgbToHSL(this.rgb); -this.hsl=hsl; -} -return MochiKit.Base.clone(hsl); -},toString:function(){ -return this.toRGBString(); -},repr:function(){ -var c=this.rgb; -var col=[c.r,c.g,c.b,c.a]; -return this.__class__.NAME+"("+col.join(", ")+")"; -}}; -MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,_534,blue,_536){ -var _537=MochiKit.Color.Color; -if(arguments.length==1){ -var rgb=red; -red=rgb.r; -_534=rgb.g; -blue=rgb.b; -if(typeof (rgb.a)=="undefined"){ -_536=undefined; -}else{ -_536=rgb.a; -} -} -return new _537(red,_534,blue,_536); -},fromHSL:function(hue,_53a,_53b,_53c){ -var m=MochiKit.Color; -return m.Color.fromRGB(m.hslToRGB.apply(m,arguments)); -},fromHSV:function(hue,_53f,_540,_541){ -var m=MochiKit.Color; -return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments)); -},fromName:function(name){ -var _544=MochiKit.Color.Color; -if(name.charAt(0)=="\""){ -name=name.substr(1,name.length-2); -} -var _545=_544._namedColors[name.toLowerCase()]; -if(typeof (_545)=="string"){ -return _544.fromHexString(_545); -}else{ -if(name=="transparent"){ -return _544.transparentColor(); -} -} -return null; -},fromString:function(_546){ -var self=MochiKit.Color.Color; -var _548=_546.substr(0,3); -if(_548=="rgb"){ -return self.fromRGBString(_546); -}else{ -if(_548=="hsl"){ -return self.fromHSLString(_546); -}else{ -if(_546.charAt(0)=="#"){ -return self.fromHexString(_546); -} -} -} -return self.fromName(_546); -},fromHexString:function(_549){ -if(_549.charAt(0)=="#"){ -_549=_549.substring(1); -} -var _54a=[]; -var i,hex; -if(_549.length==3){ -for(i=0;i<3;i++){ -hex=_549.substr(i,1); -_54a.push(parseInt(hex+hex,16)/255); -} -}else{ -for(i=0;i<6;i+=2){ -hex=_549.substr(i,2); -_54a.push(parseInt(hex,16)/255); -} -} -var _54d=MochiKit.Color.Color; -return _54d.fromRGB.apply(_54d,_54a); -},_fromColorString:function(pre,_54f,_550,_551){ -if(_551.indexOf(pre)===0){ -_551=_551.substring(_551.indexOf("(",3)+1,_551.length-1); -} -var _552=_551.split(/\s*,\s*/); -var _553=[]; -for(var i=0;i<_552.length;i++){ -var c=_552[i]; -var val; -var _557=c.substring(c.length-3); -if(c.charAt(c.length-1)=="%"){ -val=0.01*parseFloat(c.substring(0,c.length-1)); -}else{ -if(_557=="deg"){ -val=parseFloat(c)/360; -}else{ -if(_557=="rad"){ -val=parseFloat(c)/(Math.PI*2); -}else{ -val=_550[i]*parseFloat(c); -} -} -} -_553.push(val); -} -return this[_54f].apply(this,_553); -},fromComputedStyle:function(elem,_559){ -var d=MochiKit.DOM; -var cls=MochiKit.Color.Color; -for(elem=d.getElement(elem);elem;elem=elem.parentNode){ -var _55c=MochiKit.Style.getStyle.apply(d,arguments); -if(!_55c){ -continue; -} -var _55d=cls.fromString(_55c); -if(!_55d){ -break; -} -if(_55d.asRGB().a>0){ -return _55d; -} -} -return null; -},fromBackground:function(elem){ -var cls=MochiKit.Color.Color; -return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor(); -},fromText:function(elem){ -var cls=MochiKit.Color.Color; -return cls.fromComputedStyle(elem,"color","color")||cls.blackColor(); -},namedColors:function(){ -return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); -}}); -MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,_563){ -v*=_563; -if(v<0){ -return 0; -}else{ -if(v>_563){ -return _563; -}else{ -return v; -} -} -},_hslValue:function(n1,n2,hue){ -if(hue>6){ -hue-=6; -}else{ -if(hue<0){ -hue+=6; -} -} -var val; -if(hue<1){ -val=n1+(n2-n1)*hue; -}else{ -if(hue<3){ -val=n2; -}else{ -if(hue<4){ -val=n1+(n2-n1)*(4-hue); -}else{ -val=n1; -} -} -} -return val; -},hsvToRGB:function(hue,_569,_56a,_56b){ -if(arguments.length==1){ -var hsv=hue; -hue=hsv.h; -_569=hsv.s; -_56a=hsv.v; -_56b=hsv.a; -} -var red; -var _56e; -var blue; -if(_569===0){ -red=_56a; -_56e=_56a; -blue=_56a; -}else{ -var i=Math.floor(hue*6); -var f=(hue*6)-i; -var p=_56a*(1-_569); -var q=_56a*(1-(_569*f)); -var t=_56a*(1-(_569*(1-f))); -switch(i){ -case 1: -red=q; -_56e=_56a; -blue=p; -break; -case 2: -red=p; -_56e=_56a; -blue=t; -break; -case 3: -red=p; -_56e=q; -blue=_56a; -break; -case 4: -red=t; -_56e=p; -blue=_56a; -break; -case 5: -red=_56a; -_56e=p; -blue=q; -break; -case 6: -case 0: -red=_56a; -_56e=t; -blue=p; -break; -} -} -return {r:red,g:_56e,b:blue,a:_56b}; -},hslToRGB:function(hue,_576,_577,_578){ -if(arguments.length==1){ -var hsl=hue; -hue=hsl.h; -_576=hsl.s; -_577=hsl.l; -_578=hsl.a; -} -var red; -var _57b; -var blue; -if(_576===0){ -red=_577; -_57b=_577; -blue=_577; -}else{ -var m2; -if(_577<=0.5){ -m2=_577*(1+_576); -}else{ -m2=_577+_576-(_577*_576); -} -var m1=(2*_577)-m2; -var f=MochiKit.Color._hslValue; -var h6=hue*6; -red=f(m1,m2,h6+2); -_57b=f(m1,m2,h6); -blue=f(m1,m2,h6-2); -} -return {r:red,g:_57b,b:blue,a:_578}; -},rgbToHSV:function(red,_582,blue,_584){ -if(arguments.length==1){ -var rgb=red; -red=rgb.r; -_582=rgb.g; -blue=rgb.b; -_584=rgb.a; -} -var max=Math.max(Math.max(red,_582),blue); -var min=Math.min(Math.min(red,_582),blue); -var hue; -var _589; -var _58a=max; -if(min==max){ -hue=0; -_589=0; -}else{ -var _58b=(max-min); -_589=_58b/max; -if(red==max){ -hue=(_582-blue)/_58b; -}else{ -if(_582==max){ -hue=2+((blue-red)/_58b); -}else{ -hue=4+((red-_582)/_58b); -} -} -hue/=6; -if(hue<0){ -hue+=1; -} -if(hue>1){ -hue-=1; -} -} -return {h:hue,s:_589,v:_58a,a:_584}; -},rgbToHSL:function(red,_58d,blue,_58f){ -if(arguments.length==1){ -var rgb=red; -red=rgb.r; -_58d=rgb.g; -blue=rgb.b; -_58f=rgb.a; -} -var max=Math.max(red,Math.max(_58d,blue)); -var min=Math.min(red,Math.min(_58d,blue)); -var hue; -var _594; -var _595=(max+min)/2; -var _596=max-min; -if(_596===0){ -hue=0; -_594=0; -}else{ -if(_595<=0.5){ -_594=_596/(max+min); -}else{ -_594=_596/(2-max-min); -} -if(red==max){ -hue=(_58d-blue)/_596; -}else{ -if(_58d==max){ -hue=2+((blue-red)/_596); -}else{ -hue=4+((red-_58d)/_596); -} -} -hue/=6; -if(hue<0){ -hue+=1; -} -if(hue>1){ -hue-=1; -} -} -return {h:hue,s:_594,l:_595,a:_58f}; -},toColorPart:function(num){ -num=Math.round(num); -var _598=num.toString(16); -if(num<16){ -return "0"+_598; -} -return _598; -},__new__:function(){ -var m=MochiKit.Base; -this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1/255,1/255,1/255,1]); -this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1/360,0.01,0.01,1]); -var _59a=1/3; -var _59b={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[_59a,_59a,_59a],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*_59a,2*_59a,2*_59a],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]}; -for(var k in _59b){ -var name=k+"Color"; -var _59e=this.Color.fromRGB.apply(this.Color,_59b[k]); -this.Color[name]=m.partial(m.operator.identity,_59e); -} -var _59f=function(){ -for(var i=0;i1){ -var src=arguments[0]; -if(typeof (src)=="string"){ -src=MochiKit.DOM.getElement(src); -} -var sig=arguments[1]; -var obj=arguments[2]; -var func=arguments[3]; -for(var i=_5e2.length-1;i>=0;i--){ -var o=_5e2[i]; -if(o.source===src&&o.signal===sig&&o.objOrFunc===obj&&o.funcOrStr===func){ -self._disconnect(o); -if(!self._lock){ -_5e2.splice(i,1); -}else{ -self._dirty=true; -} -return true; -} -} -}else{ -var idx=m.findIdentical(_5e2,_5e0); -if(idx>=0){ -self._disconnect(_5e0); -if(!self._lock){ -_5e2.splice(idx,1); -}else{ -self._dirty=true; -} -return true; -} -} -return false; -},disconnectAllTo:function(_5eb,_5ec){ -var self=MochiKit.Signal; -var _5ee=self._observers; -var _5ef=self._disconnect; -var _5f0=self._lock; -var _5f1=self._dirty; -if(typeof (_5ec)==="undefined"){ -_5ec=null; -} -for(var i=_5ee.length-1;i>=0;i--){ -var _5f3=_5ee[i]; -if(_5f3.objOrFunc===_5eb&&(_5ec===null||_5f3.funcOrStr===_5ec)){ -_5ef(_5f3); -if(_5f0){ -_5f1=true; -}else{ -_5ee.splice(i,1); -} -} -} -self._dirty=_5f1; -},disconnectAll:function(src,sig){ -if(typeof (src)=="string"){ -src=MochiKit.DOM.getElement(src); -} -var m=MochiKit.Base; -var _5f7=m.flattenArguments(m.extend(null,arguments,1)); -var self=MochiKit.Signal; -var _5f9=self._disconnect; -var _5fa=self._observers; -var i,_5fc; -var _5fd=self._lock; -var _5fe=self._dirty; -if(_5f7.length===0){ -for(i=_5fa.length-1;i>=0;i--){ -_5fc=_5fa[i]; -if(_5fc.source===src){ -_5f9(_5fc); -if(!_5fd){ -_5fa.splice(i,1); -}else{ -_5fe=true; -} -} -} -}else{ -var sigs={}; -for(i=0;i<_5f7.length;i++){ -sigs[_5f7[i]]=true; -} -for(i=_5fa.length-1;i>=0;i--){ -_5fc=_5fa[i]; -if(_5fc.source===src&&_5fc.signal in sigs){ -_5f9(_5fc); -if(!_5fd){ -_5fa.splice(i,1); -}else{ -_5fe=true; -} -} -} -} -self._dirty=_5fe; -},signal:function(src,sig){ -var self=MochiKit.Signal; -var _603=self._observers; -if(typeof (src)=="string"){ -src=MochiKit.DOM.getElement(src); -} -var args=MochiKit.Base.extend(null,arguments,2); -var _605=[]; -self._lock=true; -for(var i=0;i<_603.length;i++){ -var _607=_603[i]; -if(_607.source===src&&_607.signal===sig&&_607.connected){ -try{ -if(_607.isDOM&&_607.funcOrStr!=null){ -var obj=_607.objOrFunc; -obj[_607.funcOrStr].apply(obj,args); -}else{ -if(_607.isDOM){ -_607.objOrFunc.apply(src,args); -}else{ -_607.listener.apply(src,args); -} -} -} -catch(e){ -_605.push(e); -} -} -} -self._lock=false; -if(self._dirty){ -self._dirty=false; -for(var i=_603.length-1;i>=0;i--){ -if(!_603[i].connected){ -_603.splice(i,1); -} -} -} -if(_605.length==1){ -throw _605[0]; -}else{ -if(_605.length>1){ -var e=new Error("Multiple errors thrown in handling 'sig', see errors property"); -e.errors=_605; -throw e; -} -} -}}); -MochiKit.Signal.__new__=function(win){ -var m=MochiKit.Base; -this._document=document; -this._window=win; -this._lock=false; -this._dirty=false; -try{ -this.connect(window,"onunload",this._unloadCache); -} -catch(e){ -} -m.nameFunctions(this); -}; -MochiKit.Signal.__new__(this); -if(MochiKit.__export__){ -connect=MochiKit.Signal.connect; -disconnect=MochiKit.Signal.disconnect; -disconnectAll=MochiKit.Signal.disconnectAll; -signal=MochiKit.Signal.signal; -} -MochiKit.Base._exportSymbols(this,MochiKit.Signal); -MochiKit.Base._module("Position","1.5",["Base","DOM","Style"]); -MochiKit.Base.update(MochiKit.Position,{__export__:false,includeScrollOffsets:false,prepare:function(){ -var _60c=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0; -var _60d=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0; -this.windowOffset=new MochiKit.Style.Coordinates(_60c,_60d); -},cumulativeOffset:function(_60e){ -var _60f=0; -var _610=0; -do{ -_60f+=_60e.offsetTop||0; -_610+=_60e.offsetLeft||0; -_60e=_60e.offsetParent; -}while(_60e); -return new MochiKit.Style.Coordinates(_610,_60f); -},realOffset:function(_611){ -var _612=0; -var _613=0; -do{ -_612+=_611.scrollTop||0; -_613+=_611.scrollLeft||0; -_611=_611.parentNode; -}while(_611); -return new MochiKit.Style.Coordinates(_613,_612); -},within:function(_614,x,y){ -if(this.includeScrollOffsets){ -return this.withinIncludingScrolloffsets(_614,x,y); -} -this.xcomp=x; -this.ycomp=y; -this.offset=this.cumulativeOffset(_614); -if(_614.style.position=="fixed"){ -this.offset.x+=this.windowOffset.x; -this.offset.y+=this.windowOffset.y; -} -return (y>=this.offset.y&&y=this.offset.x&&x=this.offset.y&&this.ycomp=this.offset.x&&this.xcomp"+el.innerHTML+"
        "; -},_roundTopCorners:function(el,_646,_647){ -var _648=this._createCorner(_647); -for(var i=0;i=0;i--){ -_64d.appendChild(this._createCornerSlice(_64b,_64c,i,"bottom")); -} -el.style.paddingBottom=0; -el.appendChild(_64d); -},_createCorner:function(_64f){ -var dom=MochiKit.DOM; -return dom.DIV({style:{backgroundColor:_64f.toString()}}); -},_createCornerSlice:function(_651,_652,n,_654){ -var _655=MochiKit.DOM.SPAN(); -var _656=_655.style; -_656.backgroundColor=_651.toString(); -_656.display="block"; -_656.height="1px"; -_656.overflow="hidden"; -_656.fontSize="1px"; -var _657=this._borderColor(_651,_652); -if(this.options.border&&n===0){ -_656.borderTopStyle="solid"; -_656.borderTopWidth="1px"; -_656.borderLeftWidth="0px"; -_656.borderRightWidth="0px"; -_656.borderBottomWidth="0px"; -_656.height="0px"; -_656.borderColor=_657.toString(); -}else{ -if(_657){ -_656.borderColor=_657.toString(); -_656.borderStyle="solid"; -_656.borderWidth="0px 1px"; -} -} -if(!this.options.compact&&(n==(this.options.numSlices-1))){ -_656.height="2px"; -} -this._setMargin(_655,n,_654); -this._setBorder(_655,n,_654); -return _655; -},_setOptions:function(_658){ -this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false,__unstable__wrapElement:false}; -MochiKit.Base.update(this.options,_658); -this.options.numSlices=(this.options.compact?2:4); -},_whichSideTop:function(){ -var _659=this.options.corners; -if(this._hasString(_659,"all","top")){ -return ""; -} -var _65a=(_659.indexOf("tl")!=-1); -var _65b=(_659.indexOf("tr")!=-1); -if(_65a&&_65b){ -return ""; -} -if(_65a){ -return "left"; -} -if(_65b){ -return "right"; -} -return ""; -},_whichSideBottom:function(){ -var _65c=this.options.corners; -if(this._hasString(_65c,"all","bottom")){ -return ""; -} -var _65d=(_65c.indexOf("bl")!=-1); -var _65e=(_65c.indexOf("br")!=-1); -if(_65d&&_65e){ -return ""; -} -if(_65d){ -return "left"; -} -if(_65e){ -return "right"; -} -return ""; -},_borderColor:function(_65f,_660){ -if(_65f=="transparent"){ -return _660; -}else{ -if(this.options.border){ -return this.options.border; -}else{ -if(this.options.blend){ -return _660.blendedColor(_65f); -} -} -} -return ""; -},_setMargin:function(el,n,_663){ -var _664=this._marginSize(n)+"px"; -var _665=(_663=="top"?this._whichSideTop():this._whichSideBottom()); -var _666=el.style; -if(_665=="left"){ -_666.marginLeft=_664; -_666.marginRight="0px"; -}else{ -if(_665=="right"){ -_666.marginRight=_664; -_666.marginLeft="0px"; -}else{ -_666.marginLeft=_664; -_666.marginRight=_664; -} -} -},_setBorder:function(el,n,_669){ -var _66a=this._borderSize(n)+"px"; -var _66b=(_669=="top"?this._whichSideTop():this._whichSideBottom()); -var _66c=el.style; -if(_66b=="left"){ -_66c.borderLeftWidth=_66a; -_66c.borderRightWidth="0px"; -}else{ -if(_66b=="right"){ -_66c.borderRightWidth=_66a; -_66c.borderLeftWidth="0px"; -}else{ -_66c.borderLeftWidth=_66a; -_66c.borderRightWidth=_66a; -} -} -},_marginSize:function(n){ -if(this.isTransparent){ -return 0; -} -var o=this.options; -if(o.compact&&o.blend){ -var _66f=[1,0]; -return _66f[n]; -}else{ -if(o.compact){ -var _670=[2,1]; -return _670[n]; -}else{ -if(o.blend){ -var _671=[3,2,1,0]; -return _671[n]; -}else{ -var _672=[5,3,2,1]; -return _672[n]; -} -} -} -},_borderSize:function(n){ -var o=this.options; -var _675; -if(o.compact&&(o.blend||this.isTransparent)){ -return 1; -}else{ -if(o.compact){ -_675=[1,0]; -}else{ -if(o.blend){ -_675=[2,1,1,1]; -}else{ -if(o.border){ -_675=[0,2,0,0]; -}else{ -if(this.isTransparent){ -_675=[5,3,2,1]; -}else{ -return 0; -} -} -} -} -} -return _675[n]; -},_hasString:function(str){ -for(var i=1;i=(_6a3||i)){ -_6a3=i; -} -},this.effects); -_69f=_6a3||_69f; -break; -case "break": -ma(function(e){ -e.finalize(); -},this.effects); -break; -case "replace": -ma(function(e){ -e.cancel(); -},this.effects); -break; -} -_69e.startOn+=_69f; -_69e.finishOn+=_69f; -if(!_69e.options.queue.limit||this.effects.length<_69e.options.queue.limit){ -this.effects.push(_69e); -} -if(!this.interval){ -this.interval=this.startLoop(MochiKit.Base.bind(this.loop,this),40); -} -},startLoop:function(func,_6a9){ -return setInterval(func,_6a9); -},remove:function(_6aa){ -this.effects=MochiKit.Base.filter(function(e){ -return e!=_6aa; -},this.effects); -if(!this.effects.length){ -this.stopLoop(this.interval); -this.interval=null; -} -},stopLoop:function(_6ac){ -clearInterval(_6ac); -},loop:function(){ -var _6ad=new Date().getTime(); -MochiKit.Base.map(function(_6ae){ -_6ae.loop(_6ad); -},this.effects); -}}); -MochiKit.Visual.Queues={__export__:false,instances:{},get:function(_6af){ -if(typeof (_6af)!="string"){ -return _6af; -} -if(!this.instances[_6af]){ -this.instances[_6af]=new MochiKit.Visual.ScopedQueue(); -} -return this.instances[_6af]; -}}; -MochiKit.Visual.Queue=MochiKit.Visual.Queues.get("global"); -MochiKit.Visual.Queue.__export__=false; -MochiKit.Visual.DefaultOptions={__export__:false,transition:MochiKit.Visual.Transitions.sinoidal,duration:1,fps:25,sync:false,from:0,to:1,delay:0,queue:"parallel"}; -MochiKit.Visual.Base=function(){ -}; -MochiKit.Visual.Base.prototype={__class__:MochiKit.Visual.Base,start:function(_6b0){ -var v=MochiKit.Visual; -this.options=MochiKit.Base.setdefault(_6b0,v.DefaultOptions); -this.currentFrame=0; -this.state="idle"; -this.startOn=this.options.delay*1000; -this.finishOn=this.startOn+(this.options.duration*1000); -this.event("beforeStart"); -if(!this.options.sync){ -v.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).add(this); -} -},loop:function(_6b2){ -if(_6b2>=this.startOn){ -if(_6b2>=this.finishOn){ -return this.finalize(); -} -var pos=(_6b2-this.startOn)/(this.finishOn-this.startOn); -var _6b4=Math.round(pos*this.options.fps*this.options.duration); -if(_6b4>this.currentFrame){ -this.render(pos); -this.currentFrame=_6b4; -} -} -},render:function(pos){ -if(this.state=="idle"){ -this.state="running"; -this.event("beforeSetup"); -this.setup(); -this.event("afterSetup"); -} -if(this.state=="running"){ -var _6b6=this.options.transition; -if(typeof (_6b6)=="string"){ -_6b6=MochiKit.Visual.Transitions[_6b6]; -} -if(typeof (_6b6)=="function"){ -pos=_6b6(pos); -} -pos*=(this.options.to-this.options.from); -pos+=this.options.from; -this.event("beforeUpdate"); -this.update(pos); -this.event("afterUpdate"); -} -},cancel:function(){ -if(!this.options.sync){ -MochiKit.Visual.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).remove(this); -} -this.state="finished"; -},finalize:function(){ -this.render(1); -this.cancel(); -this.event("beforeFinish"); -this.finish(); -this.event("afterFinish"); -},setup:function(){ -},finish:function(){ -},update:function(_6b7){ -},event:function(_6b8){ -if(this.options[_6b8+"Internal"]){ -this.options[_6b8+"Internal"](this); -} -if(this.options[_6b8]){ -this.options[_6b8](this); -} -},repr:function(){ -return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; -}}; -MochiKit.Visual.Parallel=function(_6b9,_6ba){ -var cls=arguments.callee; -if(!(this instanceof cls)){ -return new cls(_6b9,_6ba); -} -this.__init__(_6b9,_6ba); -}; -MochiKit.Visual.Parallel.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Parallel.prototype,{__class__:MochiKit.Visual.Parallel,__init__:function(_6bc,_6bd){ -this.effects=_6bc||[]; -this.start(_6bd); -},update:function(_6be){ -MochiKit.Base.map(function(_6bf){ -_6bf.render(_6be); -},this.effects); -},finish:function(){ -MochiKit.Base.map(function(_6c0){ -_6c0.finalize(); -},this.effects); -}}); -MochiKit.Visual.Sequence=function(_6c1,_6c2){ -var cls=arguments.callee; -if(!(this instanceof cls)){ -return new cls(_6c1,_6c2); -} -this.__init__(_6c1,_6c2); -}; -MochiKit.Visual.Sequence.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Sequence.prototype,{__class__:MochiKit.Visual.Sequence,__init__:function(_6c4,_6c5){ -var defs={transition:MochiKit.Visual.Transitions.linear,duration:0}; -this.effects=_6c4||[]; -MochiKit.Base.map(function(_6c7){ -defs.duration+=_6c7.options.duration; -},this.effects); -MochiKit.Base.setdefault(_6c5,defs); -this.start(_6c5); -},update:function(_6c8){ -var time=_6c8*this.options.duration; -for(var i=0;i0){ -this.fontSize=parseFloat(_6e8); -this.fontSizeType=_6e9; -} -},this),["em","px","%"]); -this.factor=(this.options.scaleTo-this.options.scaleFrom)/100; -if(/^content/.test(this.options.scaleMode)){ -this.dims=[this.element.scrollHeight,this.element.scrollWidth]; -}else{ -if(this.options.scaleMode=="box"){ -this.dims=[this.element.offsetHeight,this.element.offsetWidth]; -}else{ -this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]; -} -} -},update:function(_6ea){ -var _6eb=(this.options.scaleFrom/100)+(this.factor*_6ea); -if(this.options.scaleContent&&this.fontSize){ -MochiKit.Style.setStyle(this.element,{fontSize:this.fontSize*_6eb+this.fontSizeType}); -} -this.setDimensions(this.dims[0]*_6eb,this.dims[1]*_6eb); -},finish:function(){ -if(this.restoreAfterFinish){ -MochiKit.Style.setStyle(this.element,this.originalStyle); -} -},setDimensions:function(_6ec,_6ed){ -var d={}; -var r=Math.round; -if(/MSIE/.test(navigator.userAgent)){ -r=Math.ceil; -} -if(this.options.scaleX){ -d.width=r(_6ed)+"px"; -} -if(this.options.scaleY){ -d.height=r(_6ec)+"px"; -} -if(this.options.scaleFromCenter){ -var topd=(_6ec-this.dims[0])/2; -var _6f1=(_6ed-this.dims[1])/2; -if(this.elementPositioning=="absolute"){ -if(this.options.scaleY){ -d.top=this.originalTop-topd+"px"; -} -if(this.options.scaleX){ -d.left=this.originalLeft-_6f1+"px"; -} -}else{ -if(this.options.scaleY){ -d.top=-topd+"px"; -} -if(this.options.scaleX){ -d.left=-_6f1+"px"; -} -} -} -MochiKit.Style.setStyle(this.element,d); -}}); -MochiKit.Visual.Highlight=function(_6f2,_6f3){ -var cls=arguments.callee; -if(!(this instanceof cls)){ -return new cls(_6f2,_6f3); -} -this.__init__(_6f2,_6f3); -}; -MochiKit.Visual.Highlight.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Highlight.prototype,{__class__:MochiKit.Visual.Highlight,__init__:function(_6f5,_6f6){ -this.element=MochiKit.DOM.getElement(_6f5); -_6f6=MochiKit.Base.update({startcolor:"#ffff99"},_6f6); -this.start(_6f6); -},setup:function(){ -var b=MochiKit.Base; -var s=MochiKit.Style; -if(s.getStyle(this.element,"display")=="none"){ -this.cancel(); -return; -} -this.oldStyle={backgroundImage:s.getStyle(this.element,"background-image")}; -s.setStyle(this.element,{backgroundImage:"none"}); -if(!this.options.endcolor){ -this.options.endcolor=MochiKit.Color.Color.fromBackground(this.element).toHexString(); -} -if(b.isUndefinedOrNull(this.options.restorecolor)){ -this.options.restorecolor=s.getStyle(this.element,"background-color"); -} -this._base=b.map(b.bind(function(i){ -return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16); -},this),[0,1,2]); -this._delta=b.map(b.bind(function(i){ -return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]; -},this),[0,1,2]); -},update:function(_6fb){ -var m="#"; -MochiKit.Base.map(MochiKit.Base.bind(function(i){ -m+=MochiKit.Color.toColorPart(Math.round(this._base[i]+this._delta[i]*_6fb)); -},this),[0,1,2]); -MochiKit.Style.setStyle(this.element,{backgroundColor:m}); -},finish:function(){ -MochiKit.Style.setStyle(this.element,MochiKit.Base.update(this.oldStyle,{backgroundColor:this.options.restorecolor})); -}}); -MochiKit.Visual.ScrollTo=function(_6fe,_6ff){ -var cls=arguments.callee; -if(!(this instanceof cls)){ -return new cls(_6fe,_6ff); -} -this.__init__(_6fe,_6ff); -}; -MochiKit.Visual.ScrollTo.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.ScrollTo.prototype,{__class__:MochiKit.Visual.ScrollTo,__init__:function(_701,_702){ -this.element=MochiKit.DOM.getElement(_701); -this.start(_702); -},setup:function(){ -var p=MochiKit.Position; -p.prepare(); -var _704=p.cumulativeOffset(this.element); -if(this.options.offset){ -_704.y+=this.options.offset; -} -var max; -if(window.innerHeight){ -max=window.innerHeight-window.height; -}else{ -if(document.documentElement&&document.documentElement.clientHeight){ -max=document.documentElement.clientHeight-document.body.scrollHeight; -}else{ -if(document.body){ -max=document.body.clientHeight-document.body.scrollHeight; -} -} -} -this.scrollStart=p.windowOffset.y; -this.delta=(_704.y>max?max:_704.y)-this.scrollStart; -},update:function(_706){ -var p=MochiKit.Position; -p.prepare(); -window.scrollTo(p.windowOffset.x,this.scrollStart+(_706*this.delta)); -}}); -MochiKit.Visual._CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; -MochiKit.Visual.Morph=function(_708,_709){ -var cls=arguments.callee; -if(!(this instanceof cls)){ -return new cls(_708,_709); -} -this.__init__(_708,_709); -}; -MochiKit.Visual.Morph.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Morph.prototype,{__class__:MochiKit.Visual.Morph,__init__:function(_70b,_70c){ -this.element=MochiKit.DOM.getElement(_70b); -this.start(_70c); -},setup:function(){ -var b=MochiKit.Base; -var _70e=this.options.style; -this.styleStart={}; -this.styleEnd={}; -this.units={}; -var _70f,unit; -for(var s in _70e){ -_70f=_70e[s]; -s=b.camelize(s); -if(MochiKit.Visual._CSS_LENGTH.test(_70f)){ -var _712=_70f.match(/^([\+\-]?[0-9\.]+)(.*)$/); -_70f=parseFloat(_712[1]); -unit=(_712.length==3)?_712[2]:null; -this.styleEnd[s]=_70f; -this.units[s]=unit; -_70f=MochiKit.Style.getStyle(this.element,s); -_712=_70f.match(/^([\+\-]?[0-9\.]+)(.*)$/); -_70f=parseFloat(_712[1]); -this.styleStart[s]=_70f; -}else{ -if(/[Cc]olor$/.test(s)){ -var c=MochiKit.Color.Color; -_70f=c.fromString(_70f); -if(_70f){ -this.units[s]="color"; -this.styleEnd[s]=_70f.toHexString(); -_70f=MochiKit.Style.getStyle(this.element,s); -this.styleStart[s]=c.fromString(_70f).toHexString(); -this.styleStart[s]=b.map(b.bind(function(i){ -return parseInt(this.styleStart[s].slice(i*2+1,i*2+3),16); -},this),[0,1,2]); -this.styleEnd[s]=b.map(b.bind(function(i){ -return parseInt(this.styleEnd[s].slice(i*2+1,i*2+3),16); -},this),[0,1,2]); -} -}else{ -this.element.style[s]=_70f; -} -} -} -},update:function(_716){ -var _717; -for(var s in this.styleStart){ -if(this.units[s]=="color"){ -var m="#"; -var _71a=this.styleStart[s]; -var end=this.styleEnd[s]; -MochiKit.Base.map(MochiKit.Base.bind(function(i){ -m+=MochiKit.Color.toColorPart(Math.round(_71a[i]+(end[i]-_71a[i])*_716)); -},this),[0,1,2]); -this.element.style[s]=m; -}else{ -_717=this.styleStart[s]+Math.round((this.styleEnd[s]-this.styleStart[s])*_716*1000)/1000+this.units[s]; -this.element.style[s]=_717; -} -} -}}); -MochiKit.Visual.fade=function(_71d,_71e){ -var s=MochiKit.Style; -var _720=s.getStyle(_71d,"opacity"); -_71e=MochiKit.Base.update({from:s.getStyle(_71d,"opacity")||1,to:0,afterFinishInternal:function(_721){ -if(_721.options.to!==0){ -return; -} -s.hideElement(_721.element); -s.setStyle(_721.element,{"opacity":_720}); -}},_71e); -return new MochiKit.Visual.Opacity(_71d,_71e); -}; -MochiKit.Visual.appear=function(_722,_723){ -var s=MochiKit.Style; -var v=MochiKit.Visual; -_723=MochiKit.Base.update({from:(s.getStyle(_722,"display")=="none"?0:s.getStyle(_722,"opacity")||0),to:1,afterFinishInternal:function(_726){ -v._forceRerendering(_726.element); -},beforeSetupInternal:function(_727){ -s.setStyle(_727.element,{"opacity":_727.options.from}); -s.showElement(_727.element); -}},_723); -return new v.Opacity(_722,_723); -}; -MochiKit.Visual.puff=function(_728,_729){ -var s=MochiKit.Style; -var v=MochiKit.Visual; -_728=MochiKit.DOM.getElement(_728); -var _72c=MochiKit.Style.getElementDimensions(_728,true); -var _72d={position:s.getStyle(_728,"position"),top:_728.style.top,left:_728.style.left,width:_728.style.width,height:_728.style.height,opacity:s.getStyle(_728,"opacity")}; -_729=MochiKit.Base.update({beforeSetupInternal:function(_72e){ -MochiKit.Position.absolutize(_72e.effects[0].element); -},afterFinishInternal:function(_72f){ -s.hideElement(_72f.effects[0].element); -s.setStyle(_72f.effects[0].element,_72d); -},scaleContent:true,scaleFromCenter:true},_729); -return new v.Parallel([new v.Scale(_728,200,{sync:true,scaleFromCenter:_729.scaleFromCenter,scaleMode:{originalHeight:_72c.h,originalWidth:_72c.w},scaleContent:_729.scaleContent,restoreAfterFinish:true}),new v.Opacity(_728,{sync:true,to:0})],_729); -}; -MochiKit.Visual.blindUp=function(_730,_731){ -var d=MochiKit.DOM; -var s=MochiKit.Style; -_730=d.getElement(_730); -var _734=s.getElementDimensions(_730,true); -var _735=s.makeClipping(_730); -_731=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_734.h,originalWidth:_734.w},restoreAfterFinish:true,afterFinishInternal:function(_736){ -s.hideElement(_736.element); -s.undoClipping(_736.element,_735); -}},_731); -return new MochiKit.Visual.Scale(_730,0,_731); -}; -MochiKit.Visual.blindDown=function(_737,_738){ -var d=MochiKit.DOM; -var s=MochiKit.Style; -_737=d.getElement(_737); -var _73b=s.getElementDimensions(_737,true); -var _73c; -_738=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_73b.h,originalWidth:_73b.w},restoreAfterFinish:true,afterSetupInternal:function(_73d){ -_73c=s.makeClipping(_73d.element); -s.setStyle(_73d.element,{height:"0px"}); -s.showElement(_73d.element); -},afterFinishInternal:function(_73e){ -s.undoClipping(_73e.element,_73c); -}},_738); -return new MochiKit.Visual.Scale(_737,100,_738); -}; -MochiKit.Visual.switchOff=function(_73f,_740){ -var d=MochiKit.DOM; -var s=MochiKit.Style; -_73f=d.getElement(_73f); -var _743=s.getElementDimensions(_73f,true); -var _744=s.getStyle(_73f,"opacity"); -var _745; -_740=MochiKit.Base.update({duration:0.7,restoreAfterFinish:true,beforeSetupInternal:function(_746){ -s.makePositioned(_73f); -_745=s.makeClipping(_73f); -},afterFinishInternal:function(_747){ -s.hideElement(_73f); -s.undoClipping(_73f,_745); -s.undoPositioned(_73f); -s.setStyle(_73f,{"opacity":_744}); -}},_740); -var v=MochiKit.Visual; -return new v.Sequence([new v.appear(_73f,{sync:true,duration:0.57*_740.duration,from:0,transition:v.Transitions.flicker}),new v.Scale(_73f,1,{sync:true,duration:0.43*_740.duration,scaleFromCenter:true,scaleX:false,scaleMode:{originalHeight:_743.h,originalWidth:_743.w},scaleContent:false,restoreAfterFinish:true})],_740); -}; -MochiKit.Visual.dropOut=function(_749,_74a){ -var d=MochiKit.DOM; -var s=MochiKit.Style; -_749=d.getElement(_749); -var _74d={top:s.getStyle(_749,"top"),left:s.getStyle(_749,"left"),opacity:s.getStyle(_749,"opacity")}; -_74a=MochiKit.Base.update({duration:0.5,distance:100,beforeSetupInternal:function(_74e){ -s.makePositioned(_74e.effects[0].element); -},afterFinishInternal:function(_74f){ -s.hideElement(_74f.effects[0].element); -s.undoPositioned(_74f.effects[0].element); -s.setStyle(_74f.effects[0].element,_74d); -}},_74a); -var v=MochiKit.Visual; -return new v.Parallel([new v.Move(_749,{x:0,y:_74a.distance,sync:true}),new v.Opacity(_749,{sync:true,to:0})],_74a); -}; -MochiKit.Visual.shake=function(_751,_752){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -var s=MochiKit.Style; -_751=d.getElement(_751); -var _756={top:s.getStyle(_751,"top"),left:s.getStyle(_751,"left")}; -_752=MochiKit.Base.update({duration:0.5,afterFinishInternal:function(_757){ -s.undoPositioned(_751); -s.setStyle(_751,_756); -}},_752); -return new v.Sequence([new v.Move(_751,{sync:true,duration:0.1*_752.duration,x:20,y:0}),new v.Move(_751,{sync:true,duration:0.2*_752.duration,x:-40,y:0}),new v.Move(_751,{sync:true,duration:0.2*_752.duration,x:40,y:0}),new v.Move(_751,{sync:true,duration:0.2*_752.duration,x:-40,y:0}),new v.Move(_751,{sync:true,duration:0.2*_752.duration,x:40,y:0}),new v.Move(_751,{sync:true,duration:0.1*_752.duration,x:-20,y:0})],_752); -}; -MochiKit.Visual.slideDown=function(_758,_759){ -var d=MochiKit.DOM; -var b=MochiKit.Base; -var s=MochiKit.Style; -_758=d.getElement(_758); -if(!_758.firstChild){ -throw new Error("MochiKit.Visual.slideDown must be used on a element with a child"); -} -d.removeEmptyTextNodes(_758); -var _75d=s.getStyle(_758.firstChild,"bottom")||0; -var _75e=s.getElementDimensions(_758,true); -var _75f; -_759=b.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_75e.h,originalWidth:_75e.w},restoreAfterFinish:true,afterSetupInternal:function(_760){ -s.makePositioned(_760.element); -s.makePositioned(_760.element.firstChild); -if(/Opera/.test(navigator.userAgent)){ -s.setStyle(_760.element,{top:""}); -} -_75f=s.makeClipping(_760.element); -s.setStyle(_760.element,{height:"0px"}); -s.showElement(_760.element); -},afterUpdateInternal:function(_761){ -var _762=s.getElementDimensions(_761.element,true); -s.setStyle(_761.element.firstChild,{bottom:(_761.dims[0]-_762.h)+"px"}); -},afterFinishInternal:function(_763){ -s.undoClipping(_763.element,_75f); -if(/MSIE/.test(navigator.userAgent)){ -s.undoPositioned(_763.element); -s.undoPositioned(_763.element.firstChild); -}else{ -s.undoPositioned(_763.element.firstChild); -s.undoPositioned(_763.element); -} -s.setStyle(_763.element.firstChild,{bottom:_75d}); -}},_759); -return new MochiKit.Visual.Scale(_758,100,_759); -}; -MochiKit.Visual.slideUp=function(_764,_765){ -var d=MochiKit.DOM; -var b=MochiKit.Base; -var s=MochiKit.Style; -_764=d.getElement(_764); -if(!_764.firstChild){ -throw new Error("MochiKit.Visual.slideUp must be used on a element with a child"); -} -d.removeEmptyTextNodes(_764); -var _769=s.getStyle(_764.firstChild,"bottom"); -var _76a=s.getElementDimensions(_764,true); -var _76b; -_765=b.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_76a.h,originalWidth:_76a.w},scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(_76c){ -s.makePositioned(_76c.element); -s.makePositioned(_76c.element.firstChild); -if(/Opera/.test(navigator.userAgent)){ -s.setStyle(_76c.element,{top:""}); -} -_76b=s.makeClipping(_76c.element); -s.showElement(_76c.element); -},afterUpdateInternal:function(_76d){ -var _76e=s.getElementDimensions(_76d.element,true); -s.setStyle(_76d.element.firstChild,{bottom:(_76d.dims[0]-_76e.h)+"px"}); -},afterFinishInternal:function(_76f){ -s.hideElement(_76f.element); -s.undoClipping(_76f.element,_76b); -s.undoPositioned(_76f.element.firstChild); -s.undoPositioned(_76f.element); -s.setStyle(_76f.element.firstChild,{bottom:_769}); -}},_765); -return new MochiKit.Visual.Scale(_764,0,_765); -}; -MochiKit.Visual.squish=function(_770,_771){ -var d=MochiKit.DOM; -var b=MochiKit.Base; -var s=MochiKit.Style; -var _775=s.getElementDimensions(_770,true); -var _776; -_771=b.update({restoreAfterFinish:true,scaleMode:{originalHeight:_775.w,originalWidth:_775.h},beforeSetupInternal:function(_777){ -_776=s.makeClipping(_777.element); -},afterFinishInternal:function(_778){ -s.hideElement(_778.element); -s.undoClipping(_778.element,_776); -}},_771); -return new MochiKit.Visual.Scale(_770,/Opera/.test(navigator.userAgent)?1:0,_771); -}; -MochiKit.Visual.grow=function(_779,_77a){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -var s=MochiKit.Style; -_779=d.getElement(_779); -_77a=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.full,scaleContent:true,scaleFromCenter:false},_77a); -var _77e={top:_779.style.top,left:_779.style.left,height:_779.style.height,width:_779.style.width,opacity:s.getStyle(_779,"opacity")}; -var dims=s.getElementDimensions(_779,true); -var _780,_781; -var _782,_783; -switch(_77a.direction){ -case "top-left": -_780=_781=_782=_783=0; -break; -case "top-right": -_780=dims.w; -_781=_783=0; -_782=-dims.w; -break; -case "bottom-left": -_780=_782=0; -_781=dims.h; -_783=-dims.h; -break; -case "bottom-right": -_780=dims.w; -_781=dims.h; -_782=-dims.w; -_783=-dims.h; -break; -case "center": -_780=dims.w/2; -_781=dims.h/2; -_782=-dims.w/2; -_783=-dims.h/2; -break; -} -var _784=MochiKit.Base.update({beforeSetupInternal:function(_785){ -s.setStyle(_785.effects[0].element,{height:"0px"}); -s.showElement(_785.effects[0].element); -},afterFinishInternal:function(_786){ -s.undoClipping(_786.effects[0].element); -s.undoPositioned(_786.effects[0].element); -s.setStyle(_786.effects[0].element,_77e); -}},_77a); -return new v.Move(_779,{x:_780,y:_781,duration:0.01,beforeSetupInternal:function(_787){ -s.hideElement(_787.element); -s.makeClipping(_787.element); -s.makePositioned(_787.element); -},afterFinishInternal:function(_788){ -new v.Parallel([new v.Opacity(_788.element,{sync:true,to:1,from:0,transition:_77a.opacityTransition}),new v.Move(_788.element,{x:_782,y:_783,sync:true,transition:_77a.moveTransition}),new v.Scale(_788.element,100,{scaleMode:{originalHeight:dims.h,originalWidth:dims.w},sync:true,scaleFrom:/Opera/.test(navigator.userAgent)?1:0,transition:_77a.scaleTransition,scaleContent:_77a.scaleContent,scaleFromCenter:_77a.scaleFromCenter,restoreAfterFinish:true})],_784); -}}); -}; -MochiKit.Visual.shrink=function(_789,_78a){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -var s=MochiKit.Style; -_789=d.getElement(_789); -_78a=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.none,scaleContent:true,scaleFromCenter:false},_78a); -var _78e={top:_789.style.top,left:_789.style.left,height:_789.style.height,width:_789.style.width,opacity:s.getStyle(_789,"opacity")}; -var dims=s.getElementDimensions(_789,true); -var _790,_791; -switch(_78a.direction){ -case "top-left": -_790=_791=0; -break; -case "top-right": -_790=dims.w; -_791=0; -break; -case "bottom-left": -_790=0; -_791=dims.h; -break; -case "bottom-right": -_790=dims.w; -_791=dims.h; -break; -case "center": -_790=dims.w/2; -_791=dims.h/2; -break; -} -var _792; -var _793=MochiKit.Base.update({beforeStartInternal:function(_794){ -s.makePositioned(_794.effects[0].element); -_792=s.makeClipping(_794.effects[0].element); -},afterFinishInternal:function(_795){ -s.hideElement(_795.effects[0].element); -s.undoClipping(_795.effects[0].element,_792); -s.undoPositioned(_795.effects[0].element); -s.setStyle(_795.effects[0].element,_78e); -}},_78a); -return new v.Parallel([new v.Opacity(_789,{sync:true,to:0,from:1,transition:_78a.opacityTransition}),new v.Scale(_789,/Opera/.test(navigator.userAgent)?1:0,{scaleMode:{originalHeight:dims.h,originalWidth:dims.w},sync:true,transition:_78a.scaleTransition,scaleContent:_78a.scaleContent,scaleFromCenter:_78a.scaleFromCenter,restoreAfterFinish:true}),new v.Move(_789,{x:_790,y:_791,sync:true,transition:_78a.moveTransition})],_793); -}; -MochiKit.Visual.pulsate=function(_796,_797){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -var b=MochiKit.Base; -var _79b=MochiKit.Style.getStyle(_796,"opacity"); -_797=b.update({duration:3,from:0,afterFinishInternal:function(_79c){ -MochiKit.Style.setStyle(_79c.element,{"opacity":_79b}); -}},_797); -var _79d=_797.transition||v.Transitions.sinoidal; -_797.transition=function(pos){ -return _79d(1-v.Transitions.pulse(pos,_797.pulses)); -}; -return new v.Opacity(_796,_797); -}; -MochiKit.Visual.fold=function(_79f,_7a0){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -var s=MochiKit.Style; -_79f=d.getElement(_79f); -var _7a4=s.getElementDimensions(_79f,true); -var _7a5={top:_79f.style.top,left:_79f.style.left,width:_79f.style.width,height:_79f.style.height}; -var _7a6=s.makeClipping(_79f); -_7a0=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleMode:{originalHeight:_7a4.h,originalWidth:_7a4.w},afterFinishInternal:function(_7a7){ -new v.Scale(_79f,1,{scaleContent:false,scaleY:false,scaleMode:{originalHeight:_7a4.h,originalWidth:_7a4.w},afterFinishInternal:function(_7a8){ -s.hideElement(_7a8.element); -s.undoClipping(_7a8.element,_7a6); -s.setStyle(_7a8.element,_7a5); -}}); -}},_7a0); -return new v.Scale(_79f,5,_7a0); -}; -MochiKit.Base.nameFunctions(MochiKit.Visual); -MochiKit.Base._exportSymbols(this,MochiKit.Visual); -MochiKit.Base._module("DragAndDrop","1.5",["Base","Iter","DOM","Signal","Visual","Position"]); -MochiKit.DragAndDrop.Droppables={drops:[],remove:function(_7a9){ -this.drops=MochiKit.Base.filter(function(d){ -return d.element!=MochiKit.DOM.getElement(_7a9); -},this.drops); -},register:function(drop){ -this.drops.push(drop); -},unregister:function(drop){ -this.drops=MochiKit.Base.filter(function(d){ -return d!=drop; -},this.drops); -},prepare:function(_7ae){ -MochiKit.Base.map(function(drop){ -if(drop.isAccepted(_7ae)){ -if(drop.options.activeclass){ -MochiKit.DOM.addElementClass(drop.element,drop.options.activeclass); -} -drop.options.onactive(drop.element,_7ae); -} -},this.drops); -},findDeepestChild:function(_7b0){ -var _7b1=_7b0[0]; -for(var i=1;i<_7b0.length;++i){ -if(MochiKit.DOM.isChildNode(_7b0[i].element,_7b1.element)){ -_7b1=_7b0[i]; -} -} -return _7b1; -},show:function(_7b3,_7b4){ -if(!this.drops.length){ -return; -} -var _7b5=[]; -if(this.last_active){ -this.last_active.deactivate(); -} -MochiKit.Iter.forEach(this.drops,function(drop){ -if(drop.isAffected(_7b3,_7b4)){ -_7b5.push(drop); -} -}); -if(_7b5.length>0){ -var drop=this.findDeepestChild(_7b5); -MochiKit.Position.within(drop.element,_7b3.page.x,_7b3.page.y); -drop.options.onhover(_7b4,drop.element,MochiKit.Position.overlap(drop.options.overlap,drop.element)); -drop.activate(); -} -},fire:function(_7b8,_7b9){ -if(!this.last_active){ -return; -} -MochiKit.Position.prepare(); -if(this.last_active.isAffected(_7b8.mouse(),_7b9)){ -this.last_active.options.ondrop(_7b9,this.last_active.element,_7b8); -} -},reset:function(_7ba){ -MochiKit.Base.map(function(drop){ -if(drop.options.activeclass){ -MochiKit.DOM.removeElementClass(drop.element,drop.options.activeclass); -} -drop.options.ondesactive(drop.element,_7ba); -},this.drops); -if(this.last_active){ -this.last_active.deactivate(); -} -}}; -MochiKit.DragAndDrop.Droppable=function(_7bc,_7bd){ -var cls=arguments.callee; -if(!(this instanceof cls)){ -return new cls(_7bc,_7bd); -} -this.__init__(_7bc,_7bd); -}; -MochiKit.DragAndDrop.Droppable.prototype={__class__:MochiKit.DragAndDrop.Droppable,__init__:function(_7bf,_7c0){ -var d=MochiKit.DOM; -var b=MochiKit.Base; -this.element=d.getElement(_7bf); -this.options=b.update({greedy:true,hoverclass:null,activeclass:null,hoverfunc:b.noop,accept:null,onactive:b.noop,ondesactive:b.noop,onhover:b.noop,ondrop:b.noop,containment:[],tree:false},_7c0); -this.options._containers=[]; -b.map(MochiKit.Base.bind(function(c){ -this.options._containers.push(d.getElement(c)); -},this),this.options.containment); -MochiKit.Style.makePositioned(this.element); -MochiKit.DragAndDrop.Droppables.register(this); -},isContained:function(_7c4){ -if(this.options._containers.length){ -var _7c5; -if(this.options.tree){ -_7c5=_7c4.treeNode; -}else{ -_7c5=_7c4.parentNode; -} -return MochiKit.Iter.some(this.options._containers,function(c){ -return _7c5==c; -}); -}else{ -return true; -} -},isAccepted:function(_7c7){ -return ((!this.options.accept)||MochiKit.Iter.some(this.options.accept,function(c){ -return MochiKit.DOM.hasElementClass(_7c7,c); -})); -},isAffected:function(_7c9,_7ca){ -return ((this.element!=_7ca)&&this.isContained(_7ca)&&this.isAccepted(_7ca)&&MochiKit.Position.within(this.element,_7c9.page.x,_7c9.page.y)); -},deactivate:function(){ -if(this.options.hoverclass){ -MochiKit.DOM.removeElementClass(this.element,this.options.hoverclass); -} -this.options.hoverfunc(this.element,false); -MochiKit.DragAndDrop.Droppables.last_active=null; -},activate:function(){ -if(this.options.hoverclass){ -MochiKit.DOM.addElementClass(this.element,this.options.hoverclass); -} -this.options.hoverfunc(this.element,true); -MochiKit.DragAndDrop.Droppables.last_active=this; -},destroy:function(){ -MochiKit.DragAndDrop.Droppables.unregister(this); -},repr:function(){ -return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; -}}; -MochiKit.DragAndDrop.Draggables={drags:[],register:function(_7cb){ -if(this.drags.length===0){ -var conn=MochiKit.Signal.connect; -this.eventMouseUp=conn(document,"onmouseup",this,this.endDrag); -this.eventMouseMove=conn(document,"onmousemove",this,this.updateDrag); -this.eventKeypress=conn(document,"onkeypress",this,this.keyPress); -} -this.drags.push(_7cb); -},unregister:function(_7cd){ -this.drags=MochiKit.Base.filter(function(d){ -return d!=_7cd; -},this.drags); -if(this.drags.length===0){ -var disc=MochiKit.Signal.disconnect; -disc(this.eventMouseUp); -disc(this.eventMouseMove); -disc(this.eventKeypress); -} -},activate:function(_7d0){ -window.focus(); -this.activeDraggable=_7d0; -},deactivate:function(){ -this.activeDraggable=null; -},updateDrag:function(_7d1){ -if(!this.activeDraggable){ -return; -} -var _7d2=_7d1.mouse(); -if(this._lastPointer&&(MochiKit.Base.repr(this._lastPointer.page)==MochiKit.Base.repr(_7d2.page))){ -return; -} -this._lastPointer=_7d2; -this.activeDraggable.updateDrag(_7d1,_7d2); -},endDrag:function(_7d3){ -if(!this.activeDraggable){ -return; -} -this._lastPointer=null; -this.activeDraggable.endDrag(_7d3); -this.activeDraggable=null; -},keyPress:function(_7d4){ -if(this.activeDraggable){ -this.activeDraggable.keyPress(_7d4); -} -},notify:function(_7d5,_7d6,_7d7){ -MochiKit.Signal.signal(this,_7d5,_7d6,_7d7); -}}; -MochiKit.DragAndDrop.Draggable=function(_7d8,_7d9){ -var cls=arguments.callee; -if(!(this instanceof cls)){ -return new cls(_7d8,_7d9); -} -this.__init__(_7d8,_7d9); -}; -MochiKit.DragAndDrop.Draggable.prototype={__class__:MochiKit.DragAndDrop.Draggable,__init__:function(_7db,_7dc){ -var v=MochiKit.Visual; -var b=MochiKit.Base; -_7dc=b.update({handle:false,starteffect:function(_7df){ -this._savedOpacity=MochiKit.Style.getStyle(_7df,"opacity")||1; -new v.Opacity(_7df,{duration:0.2,from:this._savedOpacity,to:0.7}); -},reverteffect:function(_7e0,_7e1,_7e2){ -var dur=Math.sqrt(Math.abs(_7e1^2)+Math.abs(_7e2^2))*0.02; -return new v.Move(_7e0,{x:-_7e2,y:-_7e1,duration:dur}); -},endeffect:function(_7e4){ -new v.Opacity(_7e4,{duration:0.2,from:0.7,to:this._savedOpacity}); -},onchange:b.noop,zindex:1000,revert:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,snap:false},_7dc); -var d=MochiKit.DOM; -this.element=d.getElement(_7db); -if(_7dc.handle&&(typeof (_7dc.handle)=="string")){ -this.handle=d.getFirstElementByTagAndClassName(null,_7dc.handle,this.element); -} -if(!this.handle){ -this.handle=d.getElement(_7dc.handle); -} -if(!this.handle){ -this.handle=this.element; -} -if(_7dc.scroll&&!_7dc.scroll.scrollTo&&!_7dc.scroll.outerHTML){ -_7dc.scroll=d.getElement(_7dc.scroll); -this._isScrollChild=MochiKit.DOM.isChildNode(this.element,_7dc.scroll); -} -MochiKit.Style.makePositioned(this.element); -this.delta=this.currentDelta(); -this.options=_7dc; -this.dragging=false; -this.eventMouseDown=MochiKit.Signal.connect(this.handle,"onmousedown",this,this.initDrag); -MochiKit.DragAndDrop.Draggables.register(this); -},destroy:function(){ -MochiKit.Signal.disconnect(this.eventMouseDown); -MochiKit.DragAndDrop.Draggables.unregister(this); -},currentDelta:function(){ -var s=MochiKit.Style.getStyle; -return [parseInt(s(this.element,"left")||"0"),parseInt(s(this.element,"top")||"0")]; -},initDrag:function(_7e7){ -if(!_7e7.mouse().button.left){ -return; -} -var src=_7e7.target(); -var _7e9=(src.tagName||"").toUpperCase(); -if(_7e9==="INPUT"||_7e9==="SELECT"||_7e9==="OPTION"||_7e9==="BUTTON"||_7e9==="TEXTAREA"){ -return; -} -if(this._revert){ -this._revert.cancel(); -this._revert=null; -} -var _7ea=_7e7.mouse(); -var pos=MochiKit.Position.cumulativeOffset(this.element); -this.offset=[_7ea.page.x-pos.x,_7ea.page.y-pos.y]; -MochiKit.DragAndDrop.Draggables.activate(this); -_7e7.stop(); -},startDrag:function(_7ec){ -this.dragging=true; -if(this.options.selectclass){ -MochiKit.DOM.addElementClass(this.element,this.options.selectclass); -} -if(this.options.zindex){ -this.originalZ=parseInt(MochiKit.Style.getStyle(this.element,"z-index")||"0"); -this.element.style.zIndex=this.options.zindex; -} -if(this.options.ghosting){ -this._clone=this.element.cloneNode(true); -this.ghostPosition=MochiKit.Position.absolutize(this.element); -this.element.parentNode.insertBefore(this._clone,this.element); -} -if(this.options.scroll){ -if(this.options.scroll==window){ -var _7ed=this._getWindowScroll(this.options.scroll); -this.originalScrollLeft=_7ed.left; -this.originalScrollTop=_7ed.top; -}else{ -this.originalScrollLeft=this.options.scroll.scrollLeft; -this.originalScrollTop=this.options.scroll.scrollTop; -} -} -MochiKit.DragAndDrop.Droppables.prepare(this.element); -MochiKit.DragAndDrop.Draggables.notify("start",this,_7ec); -if(this.options.starteffect){ -this.options.starteffect(this.element); -} -},updateDrag:function(_7ee,_7ef){ -if(!this.dragging){ -this.startDrag(_7ee); -} -MochiKit.Position.prepare(); -MochiKit.DragAndDrop.Droppables.show(_7ef,this.element); -MochiKit.DragAndDrop.Draggables.notify("drag",this,_7ee); -this.draw(_7ef); -this.options.onchange(this); -if(this.options.scroll){ -this.stopScrolling(); -var p,q; -if(this.options.scroll==window){ -var s=this._getWindowScroll(this.options.scroll); -p=new MochiKit.Style.Coordinates(s.left,s.top); -q=new MochiKit.Style.Coordinates(s.left+s.width,s.top+s.height); -}else{ -p=MochiKit.Position.page(this.options.scroll); -p.x+=this.options.scroll.scrollLeft; -p.y+=this.options.scroll.scrollTop; -p.x+=(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0); -p.y+=(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0); -q=new MochiKit.Style.Coordinates(p.x+this.options.scroll.offsetWidth,p.y+this.options.scroll.offsetHeight); -} -var _7f3=[0,0]; -if(_7ef.page.x>(q.x-this.options.scrollSensitivity)){ -_7f3[0]=_7ef.page.x-(q.x-this.options.scrollSensitivity); -}else{ -if(_7ef.page.x<(p.x+this.options.scrollSensitivity)){ -_7f3[0]=_7ef.page.x-(p.x+this.options.scrollSensitivity); -} -} -if(_7ef.page.y>(q.y-this.options.scrollSensitivity)){ -_7f3[1]=_7ef.page.y-(q.y-this.options.scrollSensitivity); -}else{ -if(_7ef.page.y<(p.y+this.options.scrollSensitivity)){ -_7f3[1]=_7ef.page.y-(p.y+this.options.scrollSensitivity); -} -} -this.startScrolling(_7f3); -} -if(/AppleWebKit/.test(navigator.appVersion)){ -window.scrollBy(0,0); -} -_7ee.stop(); -},finishDrag:function(_7f4,_7f5){ -var dr=MochiKit.DragAndDrop; -this.dragging=false; -if(this.options.selectclass){ -MochiKit.DOM.removeElementClass(this.element,this.options.selectclass); -} -if(this.options.ghosting){ -MochiKit.Position.relativize(this.element,this.ghostPosition); -MochiKit.DOM.removeElement(this._clone); -this._clone=null; -} -if(_7f5){ -dr.Droppables.fire(_7f4,this.element); -} -dr.Draggables.notify("end",this,_7f4); -var _7f7=this.options.revert; -if(_7f7&&typeof (_7f7)=="function"){ -_7f7=_7f7(this.element); -} -var d=this.currentDelta(); -if(_7f7&&this.options.reverteffect){ -this._revert=this.options.reverteffect(this.element,d[1]-this.delta[1],d[0]-this.delta[0]); -}else{ -this.delta=d; -} -if(this.options.zindex){ -this.element.style.zIndex=this.originalZ; -} -if(this.options.endeffect){ -this.options.endeffect(this.element); -} -dr.Draggables.deactivate(); -dr.Droppables.reset(this.element); -},keyPress:function(_7f9){ -if(_7f9.key().string!="KEY_ESCAPE"){ -return; -} -this.finishDrag(_7f9,false); -_7f9.stop(); -},endDrag:function(_7fa){ -if(!this.dragging){ -return; -} -this.stopScrolling(); -this.finishDrag(_7fa,true); -_7fa.stop(); -},draw:function(_7fb){ -var pos=MochiKit.Position.cumulativeOffset(this.element); -var d=this.currentDelta(); -pos.x-=d[0]; -pos.y-=d[1]; -if(this.options.scroll&&(this.options.scroll!=window&&this._isScrollChild)){ -pos.x-=this.options.scroll.scrollLeft-this.originalScrollLeft; -pos.y-=this.options.scroll.scrollTop-this.originalScrollTop; -} -var p=[_7fb.page.x-pos.x-this.offset[0],_7fb.page.y-pos.y-this.offset[1]]; -if(this.options.snap){ -if(typeof (this.options.snap)=="function"){ -p=this.options.snap(p[0],p[1]); -}else{ -if(this.options.snap instanceof Array){ -var i=-1; -p=MochiKit.Base.map(MochiKit.Base.bind(function(v){ -i+=1; -return Math.round(v/this.options.snap[i])*this.options.snap[i]; -},this),p); -}else{ -p=MochiKit.Base.map(MochiKit.Base.bind(function(v){ -return Math.round(v/this.options.snap)*this.options.snap; -},this),p); -} -} -} -var _802=this.element.style; -if((!this.options.constraint)||(this.options.constraint=="horizontal")){ -_802.left=p[0]+"px"; -} -if((!this.options.constraint)||(this.options.constraint=="vertical")){ -_802.top=p[1]+"px"; -} -if(_802.visibility=="hidden"){ -_802.visibility=""; -} -},stopScrolling:function(){ -if(this.scrollInterval){ -clearInterval(this.scrollInterval); -this.scrollInterval=null; -MochiKit.DragAndDrop.Draggables._lastScrollPointer=null; -} -},startScrolling:function(_803){ -if(!_803[0]&&!_803[1]){ -return; -} -this.scrollSpeed=[_803[0]*this.options.scrollSpeed,_803[1]*this.options.scrollSpeed]; -this.lastScrolled=new Date(); -this.scrollInterval=setInterval(MochiKit.Base.bind(this.scroll,this),10); -},scroll:function(){ -var _804=new Date(); -var _805=_804-this.lastScrolled; -this.lastScrolled=_804; -if(this.options.scroll==window){ -var s=this._getWindowScroll(this.options.scroll); -if(this.scrollSpeed[0]||this.scrollSpeed[1]){ -var dm=_805/1000; -this.options.scroll.scrollTo(s.left+dm*this.scrollSpeed[0],s.top+dm*this.scrollSpeed[1]); -} -}else{ -this.options.scroll.scrollLeft+=this.scrollSpeed[0]*_805/1000; -this.options.scroll.scrollTop+=this.scrollSpeed[1]*_805/1000; -} -var d=MochiKit.DragAndDrop; -MochiKit.Position.prepare(); -d.Droppables.show(d.Draggables._lastPointer,this.element); -d.Draggables.notify("drag",this); -if(this._isScrollChild){ -d.Draggables._lastScrollPointer=d.Draggables._lastScrollPointer||d.Draggables._lastPointer; -d.Draggables._lastScrollPointer.x+=this.scrollSpeed[0]*_805/1000; -d.Draggables._lastScrollPointer.y+=this.scrollSpeed[1]*_805/1000; -if(d.Draggables._lastScrollPointer.x<0){ -d.Draggables._lastScrollPointer.x=0; -} -if(d.Draggables._lastScrollPointer.y<0){ -d.Draggables._lastScrollPointer.y=0; -} -this.draw(d.Draggables._lastScrollPointer); -} -this.options.onchange(this); -},_getWindowScroll:function(win){ -var vp,w,h; -MochiKit.DOM.withWindow(win,function(){ -vp=MochiKit.Style.getViewportPosition(win.document); -}); -if(win.innerWidth){ -w=win.innerWidth; -h=win.innerHeight; -}else{ -if(win.document.documentElement&&win.document.documentElement.clientWidth){ -w=win.document.documentElement.clientWidth; -h=win.document.documentElement.clientHeight; -}else{ -w=win.document.body.offsetWidth; -h=win.document.body.offsetHeight; -} -} -return {top:vp.y,left:vp.x,width:w,height:h}; -},repr:function(){ -return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; -}}; -MochiKit.DragAndDrop.__new__=function(){ -MochiKit.Base.nameFunctions(this); -}; -MochiKit.DragAndDrop.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.DragAndDrop); -MochiKit.Base._module("Sortable","1.5",["Base","Iter","DOM","Position","DragAndDrop"]); -MochiKit.Base.update(MochiKit.Sortable,{__export__:false,sortables:{},_findRootElement:function(_80d){ -while(_80d.tagName.toUpperCase()!="BODY"){ -if(_80d.id&&MochiKit.Sortable.sortables[_80d.id]){ -return _80d; -} -_80d=_80d.parentNode; -} -},_createElementId:function(_80e){ -if(_80e.id==null||_80e.id==""){ -var d=MochiKit.DOM; -var id; -var _811=1; -while(d.getElement(id="sortable"+_811)!=null){ -_811+=1; -} -d.setNodeAttribute(_80e,"id",id); -} -},options:function(_812){ -_812=MochiKit.Sortable._findRootElement(MochiKit.DOM.getElement(_812)); -if(!_812){ -return; -} -return MochiKit.Sortable.sortables[_812.id]; -},destroy:function(_813){ -var s=MochiKit.Sortable.options(_813); -var b=MochiKit.Base; -var d=MochiKit.DragAndDrop; -if(s){ -MochiKit.Signal.disconnect(s.startHandle); -MochiKit.Signal.disconnect(s.endHandle); -b.map(function(dr){ -d.Droppables.remove(dr); -},s.droppables); -b.map(function(dr){ -dr.destroy(); -},s.draggables); -delete MochiKit.Sortable.sortables[s.element.id]; -} -},create:function(_819,_81a){ -_819=MochiKit.DOM.getElement(_819); -var self=MochiKit.Sortable; -self._createElementId(_819); -_81a=MochiKit.Base.update({element:_819,tag:"li",dropOnEmpty:false,tree:false,treeTag:"ul",overlap:"vertical",constraint:"vertical",containment:[_819],handle:false,only:false,hoverclass:null,ghosting:false,scroll:false,scrollSensitivity:20,scrollSpeed:15,format:/^[^_]*_(.*)$/,onChange:MochiKit.Base.noop,onUpdate:MochiKit.Base.noop,accept:null},_81a); -self.destroy(_819); -var _81c={revert:true,ghosting:_81a.ghosting,scroll:_81a.scroll,scrollSensitivity:_81a.scrollSensitivity,scrollSpeed:_81a.scrollSpeed,constraint:_81a.constraint,handle:_81a.handle}; -if(_81a.starteffect){ -_81c.starteffect=_81a.starteffect; -} -if(_81a.reverteffect){ -_81c.reverteffect=_81a.reverteffect; -}else{ -if(_81a.ghosting){ -_81c.reverteffect=function(_81d){ -_81d.style.top=0; -_81d.style.left=0; -}; -} -} -if(_81a.endeffect){ -_81c.endeffect=_81a.endeffect; -} -if(_81a.zindex){ -_81c.zindex=_81a.zindex; -} -var _81e={overlap:_81a.overlap,containment:_81a.containment,hoverclass:_81a.hoverclass,onhover:self.onHover,tree:_81a.tree,accept:_81a.accept}; -var _81f={onhover:self.onEmptyHover,overlap:_81a.overlap,containment:_81a.containment,hoverclass:_81a.hoverclass,accept:_81a.accept}; -MochiKit.DOM.removeEmptyTextNodes(_819); -_81a.draggables=[]; -_81a.droppables=[]; -if(_81a.dropOnEmpty||_81a.tree){ -new MochiKit.DragAndDrop.Droppable(_819,_81f); -_81a.droppables.push(_819); -} -MochiKit.Base.map(function(e){ -var _821=_81a.handle?MochiKit.DOM.getFirstElementByTagAndClassName(null,_81a.handle,e):e; -_81a.draggables.push(new MochiKit.DragAndDrop.Draggable(e,MochiKit.Base.update(_81c,{handle:_821}))); -new MochiKit.DragAndDrop.Droppable(e,_81e); -if(_81a.tree){ -e.treeNode=_819; -} -_81a.droppables.push(e); -},(self.findElements(_819,_81a)||[])); -if(_81a.tree){ -MochiKit.Base.map(function(e){ -new MochiKit.DragAndDrop.Droppable(e,_81f); -e.treeNode=_819; -_81a.droppables.push(e); -},(self.findTreeElements(_819,_81a)||[])); -} -self.sortables[_819.id]=_81a; -_81a.lastValue=self.serialize(_819); -_81a.startHandle=MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables,"start",MochiKit.Base.partial(self.onStart,_819)); -_81a.endHandle=MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables,"end",MochiKit.Base.partial(self.onEnd,_819)); -},onStart:function(_823,_824){ -var self=MochiKit.Sortable; -var _826=self.options(_823); -_826.lastValue=self.serialize(_826.element); -},onEnd:function(_827,_828){ -var self=MochiKit.Sortable; -self.unmark(); -var _82a=self.options(_827); -if(_82a.lastValue!=self.serialize(_82a.element)){ -_82a.onUpdate(_82a.element); -} -},findElements:function(_82b,_82c){ -return MochiKit.Sortable.findChildren(_82b,_82c.only,_82c.tree,_82c.tag); -},findTreeElements:function(_82d,_82e){ -return MochiKit.Sortable.findChildren(_82d,_82e.only,_82e.tree?true:false,_82e.treeTag); -},findChildren:function(_82f,only,_831,_832){ -if(!_82f.hasChildNodes()){ -return null; -} -_832=_832.toUpperCase(); -if(only){ -only=MochiKit.Base.flattenArray([only]); -} -var _833=[]; -MochiKit.Base.map(function(e){ -if(e.tagName&&e.tagName.toUpperCase()==_832&&(!only||MochiKit.Iter.some(only,function(c){ -return MochiKit.DOM.hasElementClass(e,c); -}))){ -_833.push(e); -} -if(_831){ -var _836=MochiKit.Sortable.findChildren(e,only,_831,_832); -if(_836&&_836.length>0){ -_833=_833.concat(_836); -} -} -},_82f.childNodes); -return _833; -},onHover:function(_837,_838,_839){ -if(MochiKit.DOM.isChildNode(_838,_837)){ -return; -} -var self=MochiKit.Sortable; -if(_839>0.33&&_839<0.66&&self.options(_838).tree){ -return; -}else{ -if(_839>0.5){ -self.mark(_838,"before"); -if(_838.previousSibling!=_837){ -var _83b=_837.parentNode; -_837.style.visibility="hidden"; -_838.parentNode.insertBefore(_837,_838); -if(_838.parentNode!=_83b){ -self.options(_83b).onChange(_837); -} -self.options(_838.parentNode).onChange(_837); -} -}else{ -self.mark(_838,"after"); -var _83c=_838.nextSibling||null; -if(_83c!=_837){ -var _83b=_837.parentNode; -_837.style.visibility="hidden"; -_838.parentNode.insertBefore(_837,_83c); -if(_838.parentNode!=_83b){ -self.options(_83b).onChange(_837); -} -self.options(_838.parentNode).onChange(_837); -} -} -} -},_offsetSize:function(_83d,type){ -if(type=="vertical"||type=="height"){ -return _83d.offsetHeight; -}else{ -return _83d.offsetWidth; -} -},onEmptyHover:function(_83f,_840,_841){ -var _842=_83f.parentNode; -var self=MochiKit.Sortable; -var _844=self.options(_840); -if(!MochiKit.DOM.isChildNode(_840,_83f)){ -var _845; -var _846=self.findElements(_840,{tag:_844.tag,only:_844.only}); -var _847=null; -if(_846){ -var _848=self._offsetSize(_840,_844.overlap)*(1-_841); -for(_845=0;_845<_846.length;_845+=1){ -if(_848-self._offsetSize(_846[_845],_844.overlap)>=0){ -_848-=self._offsetSize(_846[_845],_844.overlap); -}else{ -if(_848-(self._offsetSize(_846[_845],_844.overlap)/2)>=0){ -_847=_845+1<_846.length?_846[_845+1]:null; -break; -}else{ -_847=_846[_845]; -break; -} -} -} -} -_840.insertBefore(_83f,_847); -self.options(_842).onChange(_83f); -_844.onChange(_83f); -} -},unmark:function(){ -var m=MochiKit.Sortable._marker; -if(m){ -MochiKit.Style.hideElement(m); -} -},mark:function(_84a,_84b){ -var d=MochiKit.DOM; -var self=MochiKit.Sortable; -var _84e=self.options(_84a.parentNode); -if(_84e&&!_84e.ghosting){ -return; -} -if(!self._marker){ -self._marker=d.getElement("dropmarker")||document.createElement("DIV"); -MochiKit.Style.hideElement(self._marker); -d.addElementClass(self._marker,"dropmarker"); -self._marker.style.position="absolute"; -document.getElementsByTagName("body").item(0).appendChild(self._marker); -} -var _84f=MochiKit.Position.cumulativeOffset(_84a); -self._marker.style.left=_84f.x+"px"; -self._marker.style.top=_84f.y+"px"; -if(_84b=="after"){ -if(_84e.overlap=="horizontal"){ -self._marker.style.left=(_84f.x+_84a.clientWidth)+"px"; -}else{ -self._marker.style.top=(_84f.y+_84a.clientHeight)+"px"; -} -} -MochiKit.Style.showElement(self._marker); -},_tree:function(_850,_851,_852){ -var self=MochiKit.Sortable; -var _854=self.findElements(_850,_851)||[]; -for(var i=0;i<_854.length;++i){ -var _856=_854[i].id.match(_851.format); -if(!_856){ -continue; -} -var _857={id:encodeURIComponent(_856?_856[1]:null),element:_850,parent:_852,children:[],position:_852.children.length,container:self._findChildrenElement(_854[i],_851.treeTag.toUpperCase())}; -if(_857.container){ -self._tree(_857.container,_851,_857); -} -_852.children.push(_857); -} -return _852; -},_findChildrenElement:function(_858,_859){ -if(_858&&_858.hasChildNodes){ -_859=_859.toUpperCase(); -for(var i=0;i<_858.childNodes.length;++i){ -if(_858.childNodes[i].tagName.toUpperCase()==_859){ -return _858.childNodes[i]; -} -} -} -return null; -},tree:function(_85b,_85c){ -_85b=MochiKit.DOM.getElement(_85b); -var _85d=MochiKit.Sortable.options(_85b); -_85c=MochiKit.Base.update({tag:_85d.tag,treeTag:_85d.treeTag,only:_85d.only,name:_85b.id,format:_85d.format},_85c||{}); -var root={id:null,parent:null,children:new Array,container:_85b,position:0}; -return MochiKit.Sortable._tree(_85b,_85c,root); -},setSequence:function(_85f,_860,_861){ -var self=MochiKit.Sortable; -var b=MochiKit.Base; -_85f=MochiKit.DOM.getElement(_85f); -_861=b.update(self.options(_85f),_861||{}); -var _864={}; -b.map(function(n){ -var m=n.id.match(_861.format); -if(m){ -_864[m[1]]=[n,n.parentNode]; -} -n.parentNode.removeChild(n); -},self.findElements(_85f,_861)); -b.map(function(_867){ -var n=_864[_867]; -if(n){ -n[1].appendChild(n[0]); -delete _864[_867]; -} -},_860); -},_constructIndex:function(node){ -var _86a=""; -do{ -if(node.id){ -_86a="["+node.position+"]"+_86a; -} -}while((node=node.parent)!=null); -return _86a; -},sequence:function(_86b,_86c){ -_86b=MochiKit.DOM.getElement(_86b); -var self=MochiKit.Sortable; -var _86c=MochiKit.Base.update(self.options(_86b),_86c||{}); -return MochiKit.Base.map(function(item){ -return item.id.match(_86c.format)?item.id.match(_86c.format)[1]:""; -},MochiKit.DOM.getElement(self.findElements(_86b,_86c)||[])); -},serialize:function(_86f,_870){ -_86f=MochiKit.DOM.getElement(_86f); -var self=MochiKit.Sortable; -_870=MochiKit.Base.update(self.options(_86f),_870||{}); -var name=encodeURIComponent(_870.name||_86f.id); -if(_870.tree){ -return MochiKit.Base.flattenArray(MochiKit.Base.map(function(item){ -return [name+self._constructIndex(item)+"[id]="+encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); -},self.tree(_86f,_870).children)).join("&"); -}else{ -return MochiKit.Base.map(function(item){ -return name+"[]="+encodeURIComponent(item); -},self.sequence(_86f,_870)).join("&"); -} -}}); -MochiKit.Sortable.Sortable=MochiKit.Sortable; -MochiKit.Sortable.__new__=function(){ -MochiKit.Base.nameFunctions(this); -}; -MochiKit.Sortable.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.Sortable); -if(typeof (MochiKit)=="undefined"){ -MochiKit={}; -} -if(typeof (MochiKit.MochiKit)=="undefined"){ -MochiKit.MochiKit={}; -} -MochiKit.MochiKit.NAME="MochiKit.MochiKit"; -MochiKit.MochiKit.VERSION="1.5"; -MochiKit.MochiKit.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -MochiKit.MochiKit.toString=function(){ -return this.__repr__(); -}; -MochiKit.MochiKit.SUBMODULES=["Base","Iter","Logging","DateTime","Format","Text","Async","DOM","Selector","Style","LoggingPane","Color","Signal","Position","Visual","DragAndDrop","Sortable"]; -(function(){ -if(typeof (document)=="undefined"){ -return; -} -var _875=document.getElementsByTagName("script"); -var _876="http://www.w3.org/1999/xhtml"; -var _877="http://www.w3.org/2000/svg"; -var _878="http://www.w3.org/1999/xlink"; -var _879="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; -var base=null; -var _87b=null; -var _87c={}; -var i; -var src; -for(i=0;i<_875.length;i++){ -src=null; -switch(_875[i].namespaceURI){ -case _877: -src=_875[i].getAttributeNS(_878,"href"); -break; -default: -src=_875[i].getAttribute("src"); -break; -} -if(!src){ -continue; -} -_87c[src]=true; -if(src.match(/MochiKit.js(\?.*)?$/)){ -base=src.substring(0,src.lastIndexOf("MochiKit.js")); -_87b=_875[i]; -} -} -if(base===null){ -return; -} -var _87f=MochiKit.MochiKit.SUBMODULES; -for(var i=0;i<_87f.length;i++){ -if(MochiKit[_87f[i]]){ -continue; -} -var uri=base+_87f[i]+".js"; -if(uri in _87c){ -continue; -} -if(_87b.namespaceURI==_877||_87b.namespaceURI==_879){ -var s=document.createElementNS(_87b.namespaceURI,"script"); -s.setAttribute("id","MochiKit_"+base+_87f[i]); -if(_87b.namespaceURI==_877){ -s.setAttributeNS(_878,"href",uri); -}else{ -s.setAttribute("src",uri); -} -s.setAttribute("type","application/x-javascript"); -_87b.parentNode.appendChild(s); -}else{ -document.write("<"+_87b.nodeName+" src=\""+uri+"\" type=\"text/javascript\">"); -} -} -})(); - - diff --git a/main/interfaces/smpl/templates/static/MochiKit/__package__.js b/main/interfaces/smpl/templates/static/MochiKit/__package__.js deleted file mode 100644 index 6448966..0000000 --- a/main/interfaces/smpl/templates/static/MochiKit/__package__.js +++ /dev/null @@ -1,2 +0,0 @@ -dojo.hostenv.conditionalLoadModule({"common": ["MochiKit.MochiKit"]}); -dojo.hostenv.moduleLoaded("MochiKit.*"); diff --git a/main/interfaces/smpl/templates/static/PlotKit/PlotKit.js b/main/interfaces/smpl/templates/static/PlotKit/PlotKit.js deleted file mode 100644 index 363042a..0000000 --- a/main/interfaces/smpl/templates/static/PlotKit/PlotKit.js +++ /dev/null @@ -1,2177 +0,0 @@ -/*** - - PlotKit.PlotKit 0.9.1 : PACKED VERSION - - THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please - diff against the source tree, not this file. - - For more information, . - - Copyright (c) 2006. Alastair Tse. - -***/ - -try{ -if(typeof (MochiKit.Base)=="undefined"||typeof (MochiKit.DOM)=="undefined"||typeof (MochiKit.Color)=="undefined"||typeof (MochiKit.Format)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "PlotKit depends on MochiKit.{Base,Color,DOM,Format}"; -} -MochiKit.Base.update(MochiKit.Color.Color.prototype,{asFillColor:function(){ -return this.lighterColorWithLevel(0.3); -},asStrokeColor:function(){ -return this.darkerColorWithLevel(0.1); -},asPointColor:function(){ -return this.lighterColorWithLevel(0.1); -}}); -if(typeof (PlotKit)=="undefined"){ -PlotKit={}; -} -PlotKit.NAME="PlotKit"; -PlotKit.VERSION="0.8"; -PlotKit.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -PlotKit.toString=function(){ -return this.__repr__(); -}; -if(typeof (PlotKit.Base)=="undefined"){ -PlotKit.Base={}; -} -PlotKit.Base.NAME="PlotKit.Base"; -PlotKit.Base.VERSION=PlotKit.VERSION; -PlotKit.Base.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -PlotKit.Base.toString=function(){ -return this.__repr__(); -}; -PlotKit.Base.usingPrototype=function(){ -try{ -return (typeof (Object.extend)=="function"); -} -catch(e){ -return false; -} -}; -MochiKit.Base.update(PlotKit.Base,{roundInterval:function(_1,_2,_3){ -var _4=MochiKit.Format.roundToFixed; -var _5=_1/_2; -return parseFloat(_4(_5,_3)); -},collapse:function(_6){ -var m=MochiKit.Base; -var _8=new Array(); -for(var i=0;i<_6.length;i++){ -_8=m.concat(_8,_6[i]); -} -if(PlotKit.Base.usingPrototype()){ -delete _8.extend; -delete _8.from; -delete _8.inspect; -} -return _8; -},uniq:function(_10){ -var m=MochiKit.Base; -if(!m.isArrayLike(_10)||(_10.length<1)){ -return new Array(); -} -var _11=new Array(); -var _12=_10[0]; -_11.push(_10[0]); -for(var i=1;i<_10.length;i++){ -if(m.compare(_10[i],_12)!=0){ -_12=_10[i]; -_11.push(_10[i]); -} -} -return _11; -},colorScheme:function(){ -var mb=MochiKit.Base; -var mc=MochiKit.Color; -var _15=["red","orange","yellow","green","cyan","blue","purple","magenta"]; -var _16=function(_17){ -return mc.Color[_17+"Color"](); -}; -return mb.map(_16,_15); -},baseDarkPrimaryColors:function(){ -var _18=MochiKit.Color.Color.fromHexString; -return [_18("#ad3f40"),_18("#ddac2c"),_18("#dfdd0c"),_18("#5276c4"),_18("#739c5a")]; -},basePrimaryColors:function(){ -var _19=MochiKit.Color.Color.fromHexString; -return [_19("#d24c4d"),_19("#f2b32f"),_19("#ece90e"),_19("#5d83da"),_19("#78a15d")]; -},baseBlueColors:function(){ -var _20=MochiKit.Color.Color.fromHexString; -return [_20("#4b6b94"),_20("#5d81b4"),_20("#acbad2")]; -},palette:function(_21,_22,_23,_24){ -var _25=MochiKit.Base.isUndefinedOrNull; -var _26=new Array(); -if(_25(_24)){ -_24=0.1; -} -if(_25(_23)){ -_23=0.4; -} -if(_25(_22)){ -_22=-0.2; -} -var _27=_22; -while(_27<=_23){ -_26.push(_27); -_27+=_24; -} -var _28=function(_29,_30){ -return _29.lighterColorWithLevel(_30); -}; -return MochiKit.Base.map(partial(_28,_21),_26); -},excanvasSupported:function(){ -if(/MSIE/.test(navigator.userAgent)&&!window.opera){ -return true; -} -return false; -},findPosX:function(obj){ -var _32=0; -if(obj.offsetParent){ -while(obj.offsetParent){ -_32+=obj.offsetLeft; -obj=obj.offsetParent; -} -}else{ -if(obj.x){ -_32+=obj.x; -} -} -return _32; -},findPosY:function(obj){ -var _33=0; -if(obj.offsetParent){ -while(obj.offsetParent){ -_33+=obj.offsetTop; -obj=obj.offsetParent; -} -}else{ -if(obj.y){ -_33+=obj.y; -} -} -return _33; -},isFuncLike:function(obj){ -return (typeof (obj)=="function"); -}}); -PlotKit.Base.map=function(fn,lst){ -if(PlotKit.Base.usingPrototype()){ -var _36=[]; -for(var x in lst){ -if(typeof (lst[x])=="function"){ -continue; -} -_36.push(fn(lst[x])); -} -return _36; -}else{ -return MochiKit.Base.map(fn,lst); -} -}; -PlotKit.Base.items=function(lst){ -if(PlotKit.Base.usingPrototype()){ -var _38=[]; -for(var x in lst){ -if(typeof (lst[x])=="function"){ -continue; -} -_38.push([x,lst[x]]); -} -return _38; -}else{ -return MochiKit.Base.items(lst); -} -}; -PlotKit.Base.keys=function(lst){ -if(PlotKit.Base.usingPrototype()){ -var _39=[]; -for(var x in lst){ -if(typeof (lst[x])=="function"){ -continue; -} -_39.push(x); -} -return _39; -}else{ -return MochiKit.Base.keys(lst); -} -}; -PlotKit.Base.baseColors=function(){ -var _40=MochiKit.Color.Color.fromHexString; -return [_40("#476fb2"),_40("#be2c2b"),_40("#85b730"),_40("#734a99"),_40("#26a1c5"),_40("#fb8707"),_40("#000000")]; -}; -PlotKit.Base.officeBaseStyle={"axisLineWidth":2,"axisLabelColor":Color.grayColor(),"axisLineColor":Color.whiteColor(),"padding":{top:5,bottom:10,left:30,right:30}}; -MochiKit.Base.update(PlotKit.Base,{officeBlue:function(){ -var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"backgroundColor":PlotKit.Base.baseColors()[0].lighterColorWithLevel(0.45)}; -MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); -return r; -},officeRed:function(){ -var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[1]),"backgroundColor":PlotKit.Base.baseColors()[1].lighterColorWithLevel(0.5)}; -MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); -return r; -},officeGreen:function(){ -var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[2]),"backgroundColor":PlotKit.Base.baseColors()[2].lighterColorWithLevel(0.5)}; -MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); -return r; -},officePurple:function(){ -var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[3]),"backgroundColor":PlotKit.Base.baseColors()[3].lighterColorWithLevel(0.5)}; -MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); -return r; -},officeCyan:function(){ -var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[4]),"backgroundColor":PlotKit.Base.baseColors()[4].lighterColorWithLevel(0.5)}; -MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); -return r; -},officeOrange:function(){ -var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[5]),"backgroundColor":PlotKit.Base.baseColors()[5].lighterColorWithLevel(0.4)}; -MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); -return r; -},officeBlack:function(){ -var r={"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[6],0,0.6),"backgroundColor":PlotKit.Base.baseColors()[6].lighterColorWithLevel(0.9)}; -MochiKit.Base.update(r,PlotKit.Base.officeBaseStyle); -return r; -}}); -PlotKit.Base.EXPORT=["baseColors","collapse","colorScheme","findPosX","findPosY","officeBaseStyle","officeBlue","officeRed","officeGreen","officePurple","officeCyan","officeOrange","officeBlack","roundInterval","uniq","isFuncLike","excanvasSupported"]; -PlotKit.Base.EXPORT_OK=[]; -PlotKit.Base.__new__=function(){ -var m=MochiKit.Base; -m.nameFunctions(this); -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -}; -PlotKit.Base.__new__(); -MochiKit.Base._exportSymbols(this,PlotKit.Base); -try{ -if(typeof (PlotKit.Base)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "PlotKit.Layout depends on MochiKit.{Base,Color,DOM,Format} and PlotKit.Base"; -} -if(typeof (PlotKit.Layout)=="undefined"){ -PlotKit.Layout={}; -} -PlotKit.Layout.NAME="PlotKit.Layout"; -PlotKit.Layout.VERSION=PlotKit.VERSION; -PlotKit.Layout.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -PlotKit.Layout.toString=function(){ -return this.__repr__(); -}; -PlotKit.Layout.valid_styles=["bar","line","pie","point"]; -PlotKit.Layout=function(_42,_43){ -this.options={"barWidthFillFraction":0.75,"barOrientation":"vertical","xOriginIsZero":true,"yOriginIsZero":true,"xAxis":null,"yAxis":null,"xTicks":null,"yTicks":null,"xNumberOfTicks":10,"yNumberOfTicks":5,"xTickPrecision":1,"yTickPrecision":1,"pieRadius":0.4}; -this.style=_42; -MochiKit.Base.update(this.options,_43?_43:{}); -if(!MochiKit.Base.isUndefinedOrNull(this.options.xAxis)){ -this.minxval=this.options.xAxis[0]; -this.maxxval=this.options.xAxis[1]; -this.xscale=this.maxxval-this.minxval; -}else{ -this.minxval=0; -this.maxxval=null; -this.xscale=null; -} -if(!MochiKit.Base.isUndefinedOrNull(this.options.yAxis)){ -this.minyval=this.options.yAxis[0]; -this.maxyval=this.options.yAxis[1]; -this.yscale=this.maxyval-this.minyval; -}else{ -this.minyval=0; -this.maxyval=null; -this.yscale=null; -} -this.bars=new Array(); -this.points=new Array(); -this.slices=new Array(); -this.xticks=new Array(); -this.yticks=new Array(); -this.datasets=new Array(); -this.minxdelta=0; -this.xrange=1; -this.yrange=1; -this.hitTestCache={x2maxy:null}; -}; -PlotKit.Layout.prototype.addDataset=function(_44,_45){ -this.datasets[_44]=_45; -}; -PlotKit.Layout.prototype.removeDataset=function(_46,_47){ -delete this.datasets[_46]; -}; -PlotKit.Layout.prototype.addDatasetFromTable=function(_48,_49,_50,_51,_52){ -var _53=MochiKit.Base.isUndefinedOrNull; -var _54=MochiKit.DOM.scrapeText; -var _55=MochiKit.Format.strip; -if(_53(_50)){ -_50=0; -} -if(_53(_51)){ -_51=1; -} -if(_53(_52)){ -_52=-1; -} -var _56=_49.tBodies[0].rows; -var _57=new Array(); -var _58=new Array(); -if(!_53(_56)){ -for(var i=0;i<_56.length;i++){ -_57.push([parseFloat(_55(_54(_56[i].cells[_50]))),parseFloat(_55(_54(_56[i].cells[_51])))]); -if(_52>=0){ -_58.push({v:parseFloat(_55(_54(_56[i].cells[_50]))),label:_55(_54(_56[i].cells[_52]))}); -} -} -this.addDataset(_48,_57); -if(_52>=0){ -this.options.xTicks=_58; -} -return true; -} -return false; -}; -PlotKit.Layout.prototype.evaluate=function(){ -this._evaluateLimits(); -this._evaluateScales(); -if(this.style=="bar"){ -if(this.options.barOrientation=="horizontal"){ -this._evaluateHorizBarCharts(); -}else{ -this._evaluateBarCharts(); -} -this._evaluateBarTicks(); -}else{ -if(this.style=="line"){ -this._evaluateLineCharts(); -this._evaluateLineTicks(); -}else{ -if(this.style=="pie"){ -this._evaluatePieCharts(); -this._evaluatePieTicks(); -} -} -} -}; -PlotKit.Layout.prototype.hitTest=function(x,y){ -var f=MochiKit.Format.twoDigitFloat; -if((this.style=="bar")&&this.bars&&(this.bars.length>0)){ -for(var i=0;i=bar.x)&&(x<=bar.x+bar.w)&&(y>=bar.y)&&(y-bar.y<=bar.h)){ -return bar; -} -} -}else{ -if(this.style=="line"){ -if(this.hitTestCache.x2maxy==null){ -this._regenerateHitTestCache(); -} -var _62=x/this.xscale; -var _63=this.hitTestCache.xvalues; -var _64=null; -var _65=null; -for(var i=1;i<_63.length;i++){ -if(_63[i]>_62){ -_64=_63[i-1]; -_65=_63[i]; -break; -} -} -if((_64!=null)){ -var _66=this.hitTestCache.x2maxy[_64]; -var _67=this.hitTestCache.x2maxy[_65]; -var _68=(1-y)/this.yscale; -var _69=(_67-_66)/(_65-_64); -var _70=_66+_69*(_62-_64); -if(_70>=_68){ -var obj={xval:_62,yval:_68,xafter:_65,yafter:_67,xbefore:_64,ybefore:_66,yprojected:_70}; -return obj; -} -} -}else{ -if(this.style=="pie"){ -var _71=Math.sqrt((y-0.5)*(y-0.5)+(x-0.5)*(x-0.5)); -if(_71>this.options.pieRadius){ -return null; -} -var _72=Math.atan2(y-0.5,x-0.5)-Math.PI/2; -for(var i=0;i=_72){ -return _73; -} -} -} -} -} -return null; -}; -PlotKit.Layout.prototype.rectForX=function(x){ -return null; -}; -PlotKit.Layout.prototype.angleRangeForX=function(x){ -return null; -}; -PlotKit.Layout.prototype._evaluateLimits=function(){ -var map=PlotKit.Base.map; -var _75=PlotKit.Base.items; -var _76=MochiKit.Base.itemgetter; -var _77=PlotKit.Base.collapse; -var _78=MochiKit.Base.listMin; -var _79=MochiKit.Base.listMax; -var _80=MochiKit.Base.isUndefinedOrNull; -var all=_77(map(_76(1),_75(this.datasets))); -if(_80(this.options.xAxis)){ -if(this.options.xOriginIsZero){ -this.minxval=0; -}else{ -this.minxval=_78(map(parseFloat,map(_76(0),all))); -} -this.maxxval=_79(map(parseFloat,map(_76(0),all))); -}else{ -this.minxval=this.options.xAxis[0]; -this.maxxval=this.options.xAxis[1]; -this.xscale=this.maxval-this.minxval; -} -if(_80(this.options.yAxis)){ -if(this.options.yOriginIsZero){ -this.minyval=0; -}else{ -this.minyval=_78(map(parseFloat,map(_76(1),all))); -} -this.maxyval=_79(map(parseFloat,map(_76(1),all))); -}else{ -this.minyval=this.options.yAxis[0]; -this.maxyval=this.options.yAxis[1]; -this.yscale=this.maxyval-this.minyval; -} -}; -PlotKit.Layout.prototype._evaluateScales=function(){ -var _82=MochiKit.Base.isUndefinedOrNull; -this.xrange=this.maxxval-this.minxval; -if(this.xrange==0){ -this.xscale=1; -}else{ -this.xscale=1/this.xrange; -} -this.yrange=this.maxyval-this.minyval; -if(this.yrange==0){ -this.yscale=1; -}else{ -this.yscale=1/this.yrange; -} -}; -PlotKit.Layout.prototype._uniqueXValues=function(){ -var _83=PlotKit.Base.collapse; -var map=PlotKit.Base.map; -var _84=PlotKit.Base.uniq; -var _85=MochiKit.Base.itemgetter; -var _86=PlotKit.Base.items; -var _87=map(parseFloat,map(_85(0),_83(map(_85(1),_86(this.datasets))))); -_87.sort(MochiKit.Base.compare); -return _84(_87); -}; -PlotKit.Layout.prototype._evaluateBarCharts=function(){ -var _88=PlotKit.Base.items; -var _89=_88(this.datasets).length; -var _90=10000000; -var _91=this._uniqueXValues(); -for(var i=1;i<_91.length;i++){ -_90=Math.min(Math.abs(_91[i]-_91[i-1]),_90); -} -var _92=0; -var _93=0; -var _94=0; -if(_91.length==1){ -_90=1; -this.xscale=1; -this.minxval=_91[0]; -_92=1*this.options.barWidthFillFraction; -_93=_92/_89; -_94=(1-this.options.barWidthFillFraction)/2; -}else{ -if(this.xrange==1){ -this.xscale=0.5; -}else{ -if(this.xrange==2){ -this.xscale=1/3; -}else{ -this.xscale=(1-_90/this.xrange)/this.xrange; -} -} -_92=_90*this.xscale*this.options.barWidthFillFraction; -_93=_92/_89; -_94=_90*this.xscale*(1-this.options.barWidthFillFraction)/2; -} -this.minxdelta=_90; -this.bars=new Array(); -var i=0; -for(var _95 in this.datasets){ -var _96=this.datasets[_95]; -if(PlotKit.Base.isFuncLike(_96)){ -continue; -} -for(var j=0;j<_96.length;j++){ -var _98=_96[j]; -var _99={x:((parseFloat(_98[0])-this.minxval)*this.xscale)+(i*_93)+_94,y:1-((parseFloat(_98[1])-this.minyval)*this.yscale),w:_93,h:((parseFloat(_98[1])-this.minyval)*this.yscale),xval:parseFloat(_98[0]),yval:parseFloat(_98[1]),name:_95}; -if((_99.x>=0)&&(_99.x<=1)&&(_99.y>=0)&&(_99.y<=1)){ -this.bars.push(_99); -} -} -i++; -} -}; -PlotKit.Layout.prototype._evaluateHorizBarCharts=function(){ -var _100=PlotKit.Base.items; -var _101=_100(this.datasets).length; -var _102=10000000; -var _103=this._uniqueXValues(); -for(var i=1;i<_103.length;i++){ -_102=Math.min(Math.abs(_103[i]-_103[i-1]),_102); -} -var _104=0; -var _105=0; -var _106=0; -if(_103.length==1){ -_102=1; -this.xscale=1; -this.minxval=_103[0]; -_104=1*this.options.barWidthFillFraction; -_105=_104/_101; -_106=(1-this.options.barWidthFillFraction)/2; -}else{ -this.xscale=(1-_102/this.xrange)/this.xrange; -_104=_102*this.xscale*this.options.barWidthFillFraction; -_105=_104/_101; -_106=_102*this.xscale*(1-this.options.barWidthFillFraction)/2; -} -this.minxdelta=_102; -this.bars=new Array(); -var i=0; -for(var _107 in this.datasets){ -var _108=this.datasets[_107]; -if(PlotKit.Base.isFuncLike(_108)){ -continue; -} -for(var j=0;j<_108.length;j++){ -var item=_108[j]; -var rect={y:((parseFloat(item[0])-this.minxval)*this.xscale)+(i*_105)+_106,x:0,h:_105,w:((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_107}; -if(rect.y<=0){ -rect.y=0; -} -if(rect.y>=1){ -rect.y=1; -} -if((rect.x>=0)&&(rect.x<=1)){ -this.bars.push(rect); -} -} -i++; -} -}; -PlotKit.Layout.prototype._evaluateLineCharts=function(){ -var _111=PlotKit.Base.items; -var _112=_111(this.datasets).length; -this.points=new Array(); -var i=0; -for(var _113 in this.datasets){ -var _114=this.datasets[_113]; -if(PlotKit.Base.isFuncLike(_114)){ -continue; -} -_114.sort(function(a,b){ -return compare(parseFloat(a[0]),parseFloat(b[0])); -}); -for(var j=0;j<_114.length;j++){ -var item=_114[j]; -var _117={x:((parseFloat(item[0])-this.minxval)*this.xscale),y:1-((parseFloat(item[1])-this.minyval)*this.yscale),xval:parseFloat(item[0]),yval:parseFloat(item[1]),name:_113}; -if(_117.y<=0){ -_117.y=0; -} -if(_117.y>=1){ -_117.y=1; -} -if((_117.x>=0)&&(_117.x<=1)){ -this.points.push(_117); -} -} -i++; -} -}; -PlotKit.Layout.prototype._evaluatePieCharts=function(){ -var _118=PlotKit.Base.items; -var sum=MochiKit.Iter.sum; -var _120=MochiKit.Base.itemgetter; -var _121=_118(this.datasets).length; -var _122=_118(this.datasets)[0][1]; -var _123=sum(map(_120(1),_122)); -this.slices=new Array(); -var _124=0; -for(var i=0;i<_122.length;i++){ -var _125=_122[i][1]/_123; -var _126=_124*Math.PI*2; -var _127=(_124+_125)*Math.PI*2; -var _128={fraction:_125,xval:_122[i][0],yval:_122[i][1],startAngle:_126,endAngle:_127}; -if(_122[i][1]!=0){ -this.slices.push(_128); -} -_124+=_125; -} -}; -PlotKit.Layout.prototype._evaluateLineTicksForXAxis=function(){ -var _129=MochiKit.Base.isUndefinedOrNull; -if(this.options.xTicks){ -this.xticks=new Array(); -var _130=function(tick){ -var _132=tick.label; -if(_129(_132)){ -_132=tick.v.toString(); -} -var pos=this.xscale*(tick.v-this.minxval); -if((pos>=0)&&(pos<=1)){ -this.xticks.push([pos,_132]); -} -}; -MochiKit.Iter.forEach(this.options.xTicks,bind(_130,this)); -}else{ -if(this.options.xNumberOfTicks){ -var _134=this._uniqueXValues(); -var _135=this.xrange/this.options.xNumberOfTicks; -var _136=0; -this.xticks=new Array(); -for(var i=0;i<=_134.length;i++){ -if((_134[i]-this.minxval)>=(_136*_135)){ -var pos=this.xscale*(_134[i]-this.minxval); -if((pos>1)||(pos<0)){ -continue; -} -this.xticks.push([pos,_134[i]]); -_136++; -} -if(_136>this.options.xNumberOfTicks){ -break; -} -} -} -} -}; -PlotKit.Layout.prototype._evaluateLineTicksForYAxis=function(){ -var _137=MochiKit.Base.isUndefinedOrNull; -if(this.options.yTicks){ -this.yticks=new Array(); -var _138=function(tick){ -var _139=tick.label; -if(_137(_139)){ -_139=tick.v.toString(); -} -var pos=1-(this.yscale*(tick.v-this.minyval)); -if((pos>=0)&&(pos<=1)){ -this.yticks.push([pos,_139]); -} -}; -MochiKit.Iter.forEach(this.options.yTicks,bind(_138,this)); -}else{ -if(this.options.yNumberOfTicks){ -this.yticks=new Array(); -var _140=PlotKit.Base.roundInterval; -var prec=this.options.yTickPrecision; -var _142=_140(this.yrange,this.options.yNumberOfTicks,prec); -for(var i=0;i<=this.options.yNumberOfTicks;i++){ -var yval=this.minyval+(i*_142); -var pos=1-((yval-this.minyval)*this.yscale); -if((pos>1)||(pos<0)){ -continue; -} -this.yticks.push([pos,MochiKit.Format.roundToFixed(yval,prec)]); -} -} -} -}; -PlotKit.Layout.prototype._evaluateLineTicks=function(){ -this._evaluateLineTicksForXAxis(); -this._evaluateLineTicksForYAxis(); -}; -PlotKit.Layout.prototype._evaluateBarTicks=function(){ -this._evaluateLineTicks(); -var _144=function(tick){ -return [tick[0]+(this.minxdelta*this.xscale)/2,tick[1]]; -}; -this.xticks=MochiKit.Base.map(bind(_144,this),this.xticks); -if(this.options.barOrientation=="horizontal"){ -var _145=this.xticks; -this.xticks=this.yticks; -this.yticks=_145; -var _146=function(tick){ -return [1-tick[0],tick[1]]; -}; -this.xticks=MochiKit.Base.map(_146,this.xticks); -} -}; -PlotKit.Layout.prototype._evaluatePieTicks=function(){ -var _147=MochiKit.Base.isUndefinedOrNull; -var _148=MochiKit.Format.numberFormatter("#%"); -this.xticks=new Array(); -if(this.options.xTicks){ -var _149=new Array(); -for(var i=0;i0){ -this.__init__(_158,_159,_160); -} -}; -PlotKit.CanvasRenderer.prototype.__init__=function(_161,_162,_163){ -var _164=MochiKit.Base.isUndefinedOrNull; -var _165=MochiKit.Color.Color; -this.options={"drawBackground":true,"backgroundColor":_165.whiteColor(),"padding":{left:30,right:30,top:5,bottom:10},"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[0]),"strokeColor":_165.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":_165.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":_165.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"pieRadius":0.4,"enableEvents":true}; -MochiKit.Base.update(this.options,_163?_163:{}); -this.layout=_162; -this.element=MochiKit.DOM.getElement(_161); -this.container=this.element.parentNode; -this.isIE=PlotKit.Base.excanvasSupported(); -if(this.isIE&&!_164(G_vmlCanvasManager)){ -this.IEDelay=0.5; -this.maxTries=5; -this.renderDelay=null; -this.clearDelay=null; -this.element=G_vmlCanvasManager.initElement(this.element); -} -this.height=this.element.height; -this.width=this.element.width; -if(_164(this.element)){ -throw "CanvasRenderer() - passed canvas is not found"; -} -if(!this.isIE&&!(PlotKit.CanvasRenderer.isSupported(this.element))){ -throw "CanvasRenderer() - Canvas is not supported."; -} -if(_164(this.container)||(this.container.nodeName.toLowerCase()!="div")){ -throw "CanvasRenderer() - needs to be enclosed in
        "; -} -this.xlabels=new Array(); -this.ylabels=new Array(); -this.isFirstRender=true; -this.area={x:this.options.padding.left,y:this.options.padding.top,w:this.width-this.options.padding.left-this.options.padding.right,h:this.height-this.options.padding.top-this.options.padding.bottom}; -MochiKit.DOM.updateNodeAttributes(this.container,{"style":{"position":"relative","width":this.width+"px"}}); -}; -PlotKit.CanvasRenderer.prototype.render=function(){ -if(this.isIE){ -try{ -if(this.renderDelay){ -this.renderDelay.cancel(); -this.renderDelay=null; -} -var _166=this.element.getContext("2d"); -} -catch(e){ -this.isFirstRender=false; -if(this.maxTries-->0){ -this.renderDelay=MochiKit.Async.wait(this.IEDelay); -this.renderDelay.addCallback(bind(this.render,this)); -} -return; -} -} -if(this.options.drawBackground){ -this._renderBackground(); -} -if(this.layout.style=="bar"){ -this._renderBarChart(); -this._renderBarAxis(); -}else{ -if(this.layout.style=="pie"){ -this._renderPieChart(); -this._renderPieAxis(); -}else{ -if(this.layout.style=="line"){ -this._renderLineChart(); -this._renderLineAxis(); -} -} -} -}; -PlotKit.CanvasRenderer.prototype._renderBarChartWrap=function(data,_168){ -var _169=this.element.getContext("2d"); -var _170=this.options.colorScheme.length; -var _171=this.options.colorScheme; -var _172=MochiKit.Base.keys(this.layout.datasets); -var _173=_172.length; -for(var i=0;i<_173;i++){ -var _174=_172[i]; -var _175=_171[i%_170]; -_169.save(); -_169.fillStyle=_175.toRGBString(); -if(this.options.strokeColor){ -_169.strokeStyle=this.options.strokeColor.toRGBString(); -}else{ -if(this.options.strokeColorTransform){ -_169.strokeStyle=_175[this.options.strokeColorTransform]().toRGBString(); -} -} -_169.lineWidth=this.options.strokeWidth; -var _176=function(obj){ -if(obj.name==_174){ -_168(_169,obj); -} -}; -MochiKit.Iter.forEach(data,bind(_176,this)); -_169.restore(); -} -}; -PlotKit.CanvasRenderer.prototype._renderBarChart=function(){ -var bind=MochiKit.Base.bind; -var _178=function(_179,bar){ -var x=this.area.w*bar.x+this.area.x; -var y=this.area.h*bar.y+this.area.y; -var w=this.area.w*bar.w; -var h=this.area.h*bar.h; -if((w<1)||(h<1)){ -return; -} -if(this.options.shouldFill){ -_179.fillRect(x,y,w,h); -} -if(this.options.shouldStroke){ -_179.strokeRect(x,y,w,h); -} -}; -this._renderBarChartWrap(this.layout.bars,bind(_178,this)); -}; -PlotKit.CanvasRenderer.prototype._renderLineChart=function(){ -var _182=this.element.getContext("2d"); -var _183=this.options.colorScheme.length; -var _184=this.options.colorScheme; -var _185=MochiKit.Base.keys(this.layout.datasets); -var _186=_185.length; -var bind=MochiKit.Base.bind; -var _187=MochiKit.Base.partial; -for(var i=0;i<_186;i++){ -var _188=_185[i]; -var _189=_184[i%_183]; -var _190=this.options.strokeColorTransform; -_182.save(); -_182.fillStyle=_189.toRGBString(); -if(this.options.strokeColor){ -_182.strokeStyle=this.options.strokeColor.toRGBString(); -}else{ -if(this.options.strokeColorTransform){ -_182.strokeStyle=_189[_190]().toRGBString(); -} -} -_182.lineWidth=this.options.strokeWidth; -var _191=function(ctx){ -ctx.beginPath(); -ctx.moveTo(this.area.x,this.area.y+this.area.h); -var _193=function(ctx_,_195){ -if(_195.name==_188){ -ctx_.lineTo(this.area.w*_195.x+this.area.x,this.area.h*_195.y+this.area.y); -} -}; -MochiKit.Iter.forEach(this.layout.points,_187(_193,ctx),this); -ctx.lineTo(this.area.w+this.area.x,this.area.h+this.area.y); -ctx.lineTo(this.area.x,this.area.y+this.area.h); -ctx.closePath(); -}; -if(this.options.shouldFill){ -bind(_191,this)(_182); -_182.fill(); -} -if(this.options.shouldStroke){ -bind(_191,this)(_182); -_182.stroke(); -} -_182.restore(); -} -}; -PlotKit.CanvasRenderer.prototype._renderPieChart=function(){ -var _196=this.element.getContext("2d"); -var _197=this.options.colorScheme.length; -var _198=this.layout.slices; -var _199=this.area.x+this.area.w*0.5; -var _200=this.area.y+this.area.h*0.5; -var _201=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); -if(this.isIE){ -_199=parseInt(_199); -_200=parseInt(_200); -_201=parseInt(_201); -} -for(var i=0;i<_198.length;i++){ -var _202=this.options.colorScheme[i%_197]; -_196.save(); -_196.fillStyle=_202.toRGBString(); -var _203=function(){ -_196.beginPath(); -_196.moveTo(_199,_200); -_196.arc(_199,_200,_201,_198[i].startAngle-Math.PI/2,_198[i].endAngle-Math.PI/2,false); -_196.lineTo(_199,_200); -_196.closePath(); -}; -if(Math.abs(_198[i].startAngle-_198[i].endAngle)>0.001){ -if(this.options.shouldFill){ -_203(); -_196.fill(); -} -if(this.options.shouldStroke){ -_203(); -_196.lineWidth=this.options.strokeWidth; -if(this.options.strokeColor){ -_196.strokeStyle=this.options.strokeColor.toRGBString(); -}else{ -if(this.options.strokeColorTransform){ -_196.strokeStyle=_202[this.options.strokeColorTransform]().toRGBString(); -} -} -_196.stroke(); -} -} -_196.restore(); -} -}; -PlotKit.CanvasRenderer.prototype._renderBarAxis=function(){ -this._renderAxis(); -}; -PlotKit.CanvasRenderer.prototype._renderLineAxis=function(){ -this._renderAxis(); -}; -PlotKit.CanvasRenderer.prototype._renderAxis=function(){ -if(!this.options.drawXAxis&&!this.options.drawYAxis){ -return; -} -var _204=this.element.getContext("2d"); -var _205={"style":{"position":"absolute","fontSize":this.options.axisLabelFontSize+"px","zIndex":10,"color":this.options.axisLabelColor.toRGBString(),"width":this.options.axisLabelWidth+"px","overflow":"hidden"}}; -_204.save(); -_204.strokeStyle=this.options.axisLineColor.toRGBString(); -_204.lineWidth=this.options.axisLineWidth; -if(this.options.drawYAxis){ -if(this.layout.yticks){ -var _206=function(tick){ -if(typeof (tick)=="function"){ -return; -} -var x=this.area.x; -var y=this.area.y+tick[0]*this.area.h; -_204.beginPath(); -_204.moveTo(x,y); -_204.lineTo(x-this.options.axisTickSize,y); -_204.closePath(); -_204.stroke(); -var _207=DIV(_205,tick[1]); -_207.style.top=(y-this.options.axisLabelFontSize)+"px"; -_207.style.left=(x-this.options.padding.left-this.options.axisTickSize)+"px"; -_207.style.textAlign="right"; -_207.style.width=(this.options.padding.left-this.options.axisTickSize*2)+"px"; -MochiKit.DOM.appendChildNodes(this.container,_207); -this.ylabels.push(_207); -}; -MochiKit.Iter.forEach(this.layout.yticks,bind(_206,this)); -} -_204.beginPath(); -_204.moveTo(this.area.x,this.area.y); -_204.lineTo(this.area.x,this.area.y+this.area.h); -_204.closePath(); -_204.stroke(); -} -if(this.options.drawXAxis){ -if(this.layout.xticks){ -var _206=function(tick){ -if(typeof (dataset)=="function"){ -return; -} -var x=this.area.x+tick[0]*this.area.w; -var y=this.area.y+this.area.h; -_204.beginPath(); -_204.moveTo(x,y); -_204.lineTo(x,y+this.options.axisTickSize); -_204.closePath(); -_204.stroke(); -var _208=DIV(_205,tick[1]); -_208.style.top=(y+this.options.axisTickSize)+"px"; -_208.style.left=(x-this.options.axisLabelWidth/2)+"px"; -_208.style.textAlign="center"; -_208.style.width=this.options.axisLabelWidth+"px"; -MochiKit.DOM.appendChildNodes(this.container,_208); -this.xlabels.push(_208); -}; -MochiKit.Iter.forEach(this.layout.xticks,bind(_206,this)); -} -_204.beginPath(); -_204.moveTo(this.area.x,this.area.y+this.area.h); -_204.lineTo(this.area.x+this.area.w,this.area.y+this.area.h); -_204.closePath(); -_204.stroke(); -} -_204.restore(); -}; -PlotKit.CanvasRenderer.prototype._renderPieAxis=function(){ -if(!this.options.drawXAxis){ -return; -} -if(this.layout.xticks){ -var _209=new Array(); -for(var i=0;iMath.PI*2){ -_216=_216-Math.PI*2; -}else{ -if(_216<0){ -_216=_216+Math.PI*2; -} -} -var _217=_210+Math.sin(_216)*(_212+10); -var _218=_211-Math.cos(_216)*(_212+10); -var _219={"position":"absolute","zIndex":11,"width":_213+"px","fontSize":this.options.axisLabelFontSize+"px","overflow":"hidden","color":this.options.axisLabelColor.toHexString()}; -if(_216<=Math.PI*0.5){ -_219["textAlign"]="left"; -_219["verticalAlign"]="top"; -_219["left"]=_217+"px"; -_219["top"]=(_218-this.options.axisLabelFontSize)+"px"; -}else{ -if((_216>Math.PI*0.5)&&(_216<=Math.PI)){ -_219["textAlign"]="left"; -_219["verticalAlign"]="bottom"; -_219["left"]=_217+"px"; -_219["top"]=_218+"px"; -}else{ -if((_216>Math.PI)&&(_216<=Math.PI*1.5)){ -_219["textAlign"]="right"; -_219["verticalAlign"]="bottom"; -_219["left"]=(_217-_213)+"px"; -_219["top"]=_218+"px"; -}else{ -_219["textAlign"]="right"; -_219["verticalAlign"]="bottom"; -_219["left"]=(_217-_213)+"px"; -_219["top"]=(_218-this.options.axisLabelFontSize)+"px"; -} -} -} -var _220=DIV({"style":_219},this.layout.xticks[i][1]); -this.xlabels.push(_220); -MochiKit.DOM.appendChildNodes(this.container,_220); -} -} -}; -PlotKit.CanvasRenderer.prototype._renderBackground=function(){ -var _221=this.element.getContext("2d"); -_221.save(); -_221.fillStyle=this.options.backgroundColor.toRGBString(); -_221.fillRect(0,0,this.width,this.height); -_221.restore(); -}; -PlotKit.CanvasRenderer.prototype.clear=function(){ -if(this.isIE){ -try{ -if(this.clearDelay){ -this.clearDelay.cancel(); -this.clearDelay=null; -} -var _222=this.element.getContext("2d"); -} -catch(e){ -this.isFirstRender=false; -this.clearDelay=MochiKit.Async.wait(this.IEDelay); -this.clearDelay.addCallback(bind(this.clear,this)); -return; -} -} -var _222=this.element.getContext("2d"); -_222.clearRect(0,0,this.width,this.height); -MochiKit.Iter.forEach(this.xlabels,MochiKit.DOM.removeElement); -MochiKit.Iter.forEach(this.ylabels,MochiKit.DOM.removeElement); -this.xlabels=new Array(); -this.ylabels=new Array(); -}; -PlotKit.CanvasRenderer.prototype._initialiseEvents=function(){ -var _223=MochiKit.Signal.connect; -var bind=MochiKit.Base.bind; -_223(this.element,"onclick",bind(this.onclick,this)); -}; -PlotKit.CanvasRenderer.prototype._resolveObject=function(e){ -var x=(e.mouse().page.x-PlotKit.Base.findPosX(this.element)-this.area.x)/this.area.w; -var y=(e.mouse().page.y-PlotKit.Base.findPosY(this.element)-this.area.y)/this.area.h; -var _225=this.layout.hitTest(x,y); -if(_225){ -return _225; -} -return null; -}; -PlotKit.CanvasRenderer.prototype._createEventObject=function(_226,e){ -if(_226==null){ -return null; -} -e.chart=_226; -return e; -}; -PlotKit.CanvasRenderer.prototype.onclick=function(e){ -var _227=this._resolveObject(e); -var _228=this._createEventObject(_227,e); -if(_228!=null){ -MochiKit.Signal.signal(this,"onclick",_228); -} -}; -PlotKit.CanvasRenderer.prototype.onmouseover=function(e){ -var _229=this._resolveObject(e); -var _230=this._createEventObject(_229,e); -if(_230!=null){ -signal(this,"onmouseover",_230); -} -}; -PlotKit.CanvasRenderer.prototype.onmouseout=function(e){ -var _231=this._resolveObject(e); -var _232=this._createEventObject(_231,e); -if(_232==null){ -signal(this,"onmouseout",e); -}else{ -signal(this,"onmouseout",_232); -} -}; -PlotKit.CanvasRenderer.prototype.onmousemove=function(e){ -var _233=this._resolveObject(e); -var _234=this._createEventObject(_233,e); -if((_233==null)&&(this.event_isinside==null)){ -return; -} -if((_233!=null)&&(this.event_isinside==null)){ -signal(this,"onmouseover",_234); -} -if((_233==null)&&(this.event_isinside!=null)){ -signal(this,"onmouseout",_234); -} -if((_233!=null)&&(this.event_isinside!=null)){ -signal(this,"onmousemove",_234); -} -this.event_isinside=_233; -}; -PlotKit.CanvasRenderer.isSupported=function(_235){ -var _236=null; -try{ -if(MochiKit.Base.isUndefinedOrNull(_235)){ -_236=MochiKit.DOM.CANVAS({}); -}else{ -_236=MochiKit.DOM.getElement(_235); -} -var _237=_236.getContext("2d"); -} -catch(e){ -var ie=navigator.appVersion.match(/MSIE (\d\.\d)/); -var _239=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1); -if((!ie)||(ie[1]<6)||(_239)){ -return false; -} -return true; -} -return true; -}; -PlotKit.Canvas={}; -PlotKit.Canvas.CanvasRenderer=PlotKit.CanvasRenderer; -PlotKit.Canvas.EXPORT=["CanvasRenderer"]; -PlotKit.Canvas.EXPORT_OK=["CanvasRenderer"]; -PlotKit.Canvas.__new__=function(){ -var m=MochiKit.Base; -m.nameFunctions(this); -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -}; -PlotKit.Canvas.__new__(); -MochiKit.Base._exportSymbols(this,PlotKit.Canvas); -try{ -if(typeof (PlotKit.Layout)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "PlotKit depends on MochiKit.{Base,Color,DOM,Format} and PlotKit.Layout"; -} -PlotKit.SVGRenderer=function(_240,_241,_242){ -if(arguments.length>0){ -this.__init__(_240,_241,_242); -} -}; -PlotKit.SVGRenderer.NAME="PlotKit.SVGRenderer"; -PlotKit.SVGRenderer.VERSION=PlotKit.VERSION; -PlotKit.SVGRenderer.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -PlotKit.SVGRenderer.toString=function(){ -return this.__repr__(); -}; -PlotKit.SVGRenderer.SVGNS="http://www.w3.org/2000/svg"; -PlotKit.SVGRenderer.prototype.__init__=function(_243,_244,_245){ -var _246=MochiKit.Base.isUndefinedOrNull; -this.options={"drawBackground":true,"backgroundColor":Color.whiteColor(),"padding":{left:30,right:30,top:5,bottom:10},"colorScheme":PlotKit.Base.palette(PlotKit.Base.baseColors()[1]),"strokeColor":Color.whiteColor(),"strokeColorTransform":"asStrokeColor","strokeWidth":0.5,"shouldFill":true,"shouldStroke":true,"drawXAxis":true,"drawYAxis":true,"axisLineColor":Color.blackColor(),"axisLineWidth":0.5,"axisTickSize":3,"axisLabelColor":Color.blackColor(),"axisLabelFont":"Arial","axisLabelFontSize":9,"axisLabelWidth":50,"axisLabelUseDiv":true,"pieRadius":0.4,"enableEvents":true}; -MochiKit.Base.update(this.options,_245?_245:{}); -this.layout=_244; -this.element=MochiKit.DOM.getElement(_243); -this.container=this.element.parentNode; -this.height=parseInt(this.element.getAttribute("height")); -this.width=parseInt(this.element.getAttribute("width")); -this.document=document; -this.root=this.element; -try{ -this.document=this.element.getSVGDocument(); -this.root=_246(this.document.documentElement)?this.element:this.document.documentElement; -} -catch(e){ -} -this.element.style.zIndex=1; -if(_246(this.element)){ -throw "SVGRenderer() - passed SVG object is not found"; -} -if(_246(this.container)||this.container.nodeName.toLowerCase()!="div"){ -throw "SVGRenderer() - No DIV's around the SVG."; -} -this.xlabels=new Array(); -this.ylabels=new Array(); -this.defs=this.createSVGElement("defs"); -this.area={x:this.options.padding.left,y:this.options.padding.top,w:this.width-this.options.padding.left-this.options.padding.right,h:this.height-this.options.padding.top-this.options.padding.bottom}; -MochiKit.DOM.updateNodeAttributes(this.container,{"style":{"position":"relative","width":this.width+"px"}}); -}; -PlotKit.SVGRenderer.prototype.render=function(){ -if(this.options.drawBackground){ -this._renderBackground(); -} -if(this.layout.style=="bar"){ -this._renderBarChart(); -this._renderBarAxis(); -}else{ -if(this.layout.style=="pie"){ -this._renderPieChart(); -this._renderPieAxis(); -}else{ -if(this.layout.style=="line"){ -this._renderLineChart(); -this._renderLineAxis(); -} -} -} -}; -PlotKit.SVGRenderer.prototype._renderBarOrLine=function(data,_247,_248,_249){ -var _250=this.options.colorScheme.length; -var _251=this.options.colorScheme; -var _252=MochiKit.Base.keys(this.layout.datasets); -var _253=_252.length; -for(var i=0;i<_253;i++){ -var _254=_252[i]; -var _255=new Array(); -var _256=_251[i%_250]; -if(this.options.shouldFill){ -_255["fill"]=_256.toRGBString(); -}else{ -_255["fill"]="none"; -} -if(this.options.shouldStroke&&(this.options.strokeColor||this.options.strokeColorTransform)){ -if(this.options.strokeColor){ -_255["stroke"]=this.options.strokeColor.toRGBString(); -}else{ -if(this.options.strokeColorTransform){ -_255["stroke"]=_256[this.options.strokeColorTransform]().toRGBString(); -} -} -_255["strokeWidth"]=this.options.strokeWidth; -} -if(_248){ -_248(_255); -} -var _257=function(obj){ -if(obj.name==_254){ -_247(_255,obj); -} -}; -MochiKit.Iter.forEach(data,bind(_257,this)); -if(_249){ -_249(_255); -} -} -}; -PlotKit.SVGRenderer.prototype._renderBarChart=function(){ -var bind=MochiKit.Base.bind; -var _258=function(_259,bar){ -var x=this.area.w*bar.x+this.area.x; -var y=this.area.h*bar.y+this.area.y; -var w=this.area.w*bar.w; -var h=this.area.h*bar.h; -this._drawRect(x,y,w,h,_259); -}; -this._renderBarOrLine(this.layout.bars,bind(_258,this)); -}; -PlotKit.SVGRenderer.prototype._renderLineChart=function(){ -var bind=MochiKit.Base.bind; -var _260=function(_261,_262){ -this._tempPointsBuffer+=(this.area.w*_262.x+this.area.x)+","+(this.area.h*_262.y+this.area.y)+" "; -}; -var _263=function(_264){ -this._tempPointsBuffer=""; -this._tempPointsBuffer+=(this.area.x)+","+(this.area.y+this.area.h)+" "; -}; -var _265=function(_266){ -this._tempPointsBuffer+=(this.area.w+this.area.x)+","+(this.area.h+this.area.y); -_266["points"]=this._tempPointsBuffer; -var elem=this.createSVGElement("polygon",_266); -this.root.appendChild(elem); -}; -this._renderBarOrLine(this.layout.points,bind(_260,this),bind(_263,this),bind(_265,this)); -}; -PlotKit.SVGRenderer.prototype._renderPieChart=function(){ -var _268=this.options.colorScheme.length; -var _269=this.layout.slices; -var _270=this.area.x+this.area.w*0.5; -var _271=this.area.y+this.area.h*0.5; -var _272=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); -if(_269.length==1&&(Math.abs(_269[0].startAngle)-Math.abs(_269[0].endAngle)<0.1)){ -var _273={"cx":_270,"cy":_271,"r":_272}; -var _274=this.options.colorScheme[0]; -if(this.options.shouldFill){ -_273["fill"]=_274.toRGBString(); -}else{ -_273["fill"]="none"; -} -if(this.options.shouldStroke&&(this.options.strokeColor||this.options.strokeColorTransform)){ -if(this.options.strokeColor){ -_273["stroke"]=this.options.strokeColor.toRGBString(); -}else{ -if(this.options.strokeColorTransform){ -_273["stroke"]=_274[this.options.strokeColorTransform]().toRGBString(); -} -} -_273["style"]="stroke-width: "+this.options.strokeWidth; -} -this.root.appendChild(this.createSVGElement("circle",_273)); -return; -} -for(var i=0;i<_269.length;i++){ -var _273=new Array(); -var _274=this.options.colorScheme[i%_268]; -if(this.options.shouldFill){ -_273["fill"]=_274.toRGBString(); -}else{ -_273["fill"]="none"; -} -if(this.options.shouldStroke&&(this.options.strokeColor||this.options.strokeColorTransform)){ -if(this.options.strokeColor){ -_273["stroke"]=this.options.strokeColor.toRGBString(); -}else{ -if(this.options.strokeColorTransform){ -_273["stroke"]=_274[this.options.strokeColorTransform]().toRGBString(); -} -} -_273["style"]="stroke-width:"+this.options.strokeWidth; -} -var _275=0; -if(Math.abs(_269[i].endAngle-_269[i].startAngle)>Math.PI){ -_275=1; -} -var x1=Math.cos(_269[i].startAngle-Math.PI/2)*_272; -var y1=Math.sin(_269[i].startAngle-Math.PI/2)*_272; -var x2=Math.cos(_269[i].endAngle-Math.PI/2)*_272; -var y2=Math.sin(_269[i].endAngle-Math.PI/2)*_272; -var rx=x2-x1; -var ry=y2-y1; -var _282="M"+_270+","+_271+" "; -_282+="l"+x1+","+y1+" "; -_282+="a"+_272+","+_272+" 0 "+_275+",1 "+rx+","+ry+" z"; -_273["d"]=_282; -var elem=this.createSVGElement("path",_273); -this.root.appendChild(elem); -} -}; -PlotKit.SVGRenderer.prototype._renderBarAxis=function(){ -this._renderAxis(); -}; -PlotKit.SVGRenderer.prototype._renderLineAxis=function(){ -this._renderAxis(); -}; -PlotKit.SVGRenderer.prototype._renderAxis=function(){ -if(!this.options.drawXAxis&&!this.options.drawYAxis){ -return; -} -var _283={"style":{"position":"absolute","textAlign":"center","fontSize":this.options.axisLabelFontSize+"px","zIndex":10,"color":this.options.axisLabelColor.toRGBString(),"width":this.options.axisLabelWidth+"px","overflow":"hidden"}}; -var _284={"stroke":this.options.axisLineColor.toRGBString(),"strokeWidth":this.options.axisLineWidth}; -if(this.options.drawYAxis){ -if(this.layout.yticks){ -var _285=function(tick){ -var x=this.area.x; -var y=this.area.y+tick[0]*this.area.h; -this._drawLine(x,y,x-3,y,_284); -if(this.options.axisLabelUseDiv){ -var _286=DIV(_283,tick[1]); -_286.style.top=(y-this.options.axisLabelFontSize)+"px"; -_286.style.left=(x-this.options.padding.left+this.options.axisTickSize)+"px"; -_286.style.textAlign="left"; -_286.style.width=(this.options.padding.left-3)+"px"; -MochiKit.DOM.appendChildNodes(this.container,_286); -this.ylabels.push(_286); -}else{ -var _287={y:y+3,x:(x-this.options.padding.left+3),width:(this.options.padding.left-this.options.axisTickSize)+"px",height:(this.options.axisLabelFontSize+3)+"px",fontFamily:"Arial",fontSize:this.options.axisLabelFontSize+"px",fill:this.options.axisLabelColor.toRGBString()}; -var _286=this.createSVGElement("text",_287); -_286.appendChild(this.document.createTextNode(tick[1])); -this.root.appendChild(_286); -} -}; -MochiKit.Iter.forEach(this.layout.yticks,bind(_285,this)); -} -this._drawLine(this.area.x,this.area.y,this.area.x,this.area.y+this.area.h,_284); -} -if(this.options.drawXAxis){ -if(this.layout.xticks){ -var _285=function(tick){ -var x=this.area.x+tick[0]*this.area.w; -var y=this.area.y+this.area.h; -this._drawLine(x,y,x,y+this.options.axisTickSize,_284); -if(this.options.axisLabelUseDiv){ -var _288=DIV(_283,tick[1]); -_288.style.top=(y+this.options.axisTickSize)+"px"; -_288.style.left=(x-this.options.axisLabelWidth/2)+"px"; -_288.style.textAlign="center"; -_288.style.width=this.options.axisLabelWidth+"px"; -MochiKit.DOM.appendChildNodes(this.container,_288); -this.xlabels.push(_288); -}else{ -var _289={y:(y+this.options.axisTickSize+this.options.axisLabelFontSize),x:x-3,width:this.options.axisLabelWidth+"px",height:(this.options.axisLabelFontSize+3)+"px",fontFamily:"Arial",fontSize:this.options.axisLabelFontSize+"px",fill:this.options.axisLabelColor.toRGBString(),textAnchor:"middle"}; -var _288=this.createSVGElement("text",_289); -_288.appendChild(this.document.createTextNode(tick[1])); -this.root.appendChild(_288); -} -}; -MochiKit.Iter.forEach(this.layout.xticks,bind(_285,this)); -} -this._drawLine(this.area.x,this.area.y+this.area.h,this.area.x+this.area.w,this.area.y+this.area.h,_284); -} -}; -PlotKit.SVGRenderer.prototype._renderPieAxis=function(){ -if(this.layout.xticks){ -var _290=new Array(); -for(var i=0;iMath.PI*2){ -_297=_297-Math.PI*2; -}else{ -if(_297<0){ -_297=_297+Math.PI*2; -} -} -var _298=_291+Math.sin(_297)*(_293+10); -var _299=_292-Math.cos(_297)*(_293+10); -var _300={"position":"absolute","zIndex":11,"width":_294+"px","fontSize":this.options.axisLabelFontSize+"px","overflow":"hidden","color":this.options.axisLabelColor.toHexString()}; -var _301={"width":_294+"px","fontSize":this.options.axisLabelFontSize+"px","height":(this.options.axisLabelFontSize+3)+"px","fill":this.options.axisLabelColor.toRGBString()}; -if(_297<=Math.PI*0.5){ -MochiKit.Base.update(_300,{"textAlign":"left","verticalAlign":"top","left":_298+"px","top":(_299-this.options.axisLabelFontSize)+"px"}); -MochiKit.Base.update(_301,{"x":_298,"y":(_299-this.options.axisLabelFontSize),"textAnchor":"left"}); -}else{ -if((_297>Math.PI*0.5)&&(_297<=Math.PI)){ -MochiKit.Base.update(_300,{"textAlign":"left","verticalAlign":"bottom","left":_298+"px","top":_299+"px"}); -MochiKit.Base.update(_301,{"textAnchor":"left","x":_298,"y":_299}); -}else{ -if((_297>Math.PI)&&(_297<=Math.PI*1.5)){ -MochiKit.Base.update(_300,{"textAlign":"right","verticalAlign":"bottom","left":_298+"px","top":_299+"px"}); -MochiKit.Base.update(_301,{"textAnchor":"right","x":_298-_294,"y":_299}); -}else{ -MochiKit.Base.update(_300,{"textAlign":"left","verticalAlign":"bottom","left":_298+"px","top":_299+"px"}); -MochiKit.Base.update(_301,{"textAnchor":"left","x":_298-_294,"y":_299-this.options.axisLabelFontSize}); -} -} -} -if(this.options.axisLabelUseDiv){ -var _302=DIV({"style":_300},this.layout.xticks[i][1]); -this.xlabels.push(_302); -MochiKit.DOM.appendChildNodes(this.container,_302); -}else{ -var _302=this.createSVGElement("text",_301); -_302.appendChild(this.document.createTextNode(this.layout.xticks[i][1])); -this.root.appendChild(_302); -} -} -} -}; -PlotKit.SVGRenderer.prototype._renderBackground=function(){ -var opts={"stroke":"none","fill":this.options.backgroundColor.toRGBString()}; -this._drawRect(0,0,this.width,this.height,opts); -}; -PlotKit.SVGRenderer.prototype._drawRect=function(x,y,w,h,_304){ -var _305={x:x+"px",y:y+"px",width:w+"px",height:h+"px"}; -if(_304){ -MochiKit.Base.update(_305,_304); -} -var elem=this.createSVGElement("rect",_305); -this.root.appendChild(elem); -}; -PlotKit.SVGRenderer.prototype._drawLine=function(x1,y1,x2,y2,_306){ -var _307={x1:x1+"px",y1:y1+"px",x2:x2+"px",y2:y2+"px"}; -if(_306){ -MochiKit.Base.update(_307,_306); -} -var elem=this.createSVGElement("line",_307); -this.root.appendChild(elem); -}; -PlotKit.SVGRenderer.prototype.clear=function(){ -while(this.element.firstChild){ -this.element.removeChild(this.element.firstChild); -} -if(this.options.axisLabelUseDiv){ -for(var i=0;i=6)&&(!_313)){ -var _314=_312["width"]?_312["width"]:"100"; -var _315=_312["height"]?_312["height"]:"100"; -var eid=_312["id"]?_312["id"]:"notunique"; -var html=""; -var _318=document.createElement(html); -var _319=_318.getSVGDocument().createElementNS(PlotKit.SVGRenderer.SVGNS,"svg"); -_319.setAttribute("width",_314); -_319.setAttribute("height",_315); -_318.getSVGDocument().appendChild(_319); -return _318; -}else{ -return PlotKit.SVGRenderer.prototype.createSVGElement("svg",_312); -} -}; -PlotKit.SVGRenderer.isSupported=function(){ -var _320=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1); -var _321=navigator.appVersion.match(/MSIE (\d\.\d)/); -var _322=navigator.userAgent.match(/AppleWebKit\/(\d+)/); -var _323=navigator.userAgent.match(/Opera\/(\d*\.\d*)/); -var _324=navigator.userAgent.match(/rv:(\d*\.\d*).*Gecko/); -var _325="http://www.w3.org/TR/SVG11/feature#SVG"; -if(_321&&(_321[1]>=6)&&!_320){ -return document.implementation.hasFeature(_325,"1.1"); -} -if(_323&&(_323[1]>8.9)){ -return true; -} -if(_324&&(_324>1.7)){ -return true; -} -return false; -}; -PlotKit.SVG={}; -PlotKit.SVG.SVGRenderer=PlotKit.SVGRenderer; -PlotKit.SVG.EXPORT=["SVGRenderer"]; -PlotKit.SVG.EXPORT_OK=["SVGRenderer"]; -PlotKit.SVG.__new__=function(){ -var m=MochiKit.Base; -m.nameFunctions(this); -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -}; -PlotKit.SVG.__new__(); -MochiKit.Base._exportSymbols(this,PlotKit.SVG); -try{ -if(typeof (PlotKit.CanvasRenderer)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "SweetCanvas depends on MochiKit.{Base,Color,DOM,Format} and PlotKit.{Layout, Canvas}"; -} -if(typeof (PlotKit.SweetCanvasRenderer)=="undefined"){ -PlotKit.SweetCanvasRenderer={}; -} -PlotKit.SweetCanvasRenderer=function(_326,_327,_328){ -if(arguments.length>0){ -this.__init__(_326,_327,_328); -} -}; -PlotKit.SweetCanvasRenderer.NAME="PlotKit.SweetCanvasRenderer"; -PlotKit.SweetCanvasRenderer.VERSION=PlotKit.VERSION; -PlotKit.SweetCanvasRenderer.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -PlotKit.SweetCanvasRenderer.toString=function(){ -return this.__repr__(); -}; -PlotKit.SweetCanvasRenderer.prototype=new PlotKit.CanvasRenderer(); -PlotKit.SweetCanvasRenderer.prototype.constructor=PlotKit.SweetCanvasRenderer; -PlotKit.SweetCanvasRenderer.__super__=PlotKit.CanvasRenderer.prototype; -PlotKit.SweetCanvasRenderer.prototype.__init__=function(el,_330,opts){ -var _331=PlotKit.Base.officeBlue(); -MochiKit.Base.update(_331,opts); -PlotKit.SweetCanvasRenderer.__super__.__init__.call(this,el,_330,_331); -}; -PlotKit.SweetCanvasRenderer.prototype._renderBarChart=function(){ -var bind=MochiKit.Base.bind; -var _332=Color.blackColor().colorWithAlpha(0.1).toRGBString(); -var _333=function(_334,x,y,w,h){ -_334.fillStyle=_332; -_334.fillRect(x-2,y-2,w+4,h+2); -_334.fillStyle=_332; -_334.fillRect(x-1,y-1,w+2,h+1); -}; -var _335=this.options.colorScheme.length; -var _336=this.options.colorScheme; -var _337=PlotKit.Base.keys(this.layout.datasets); -var _338=_337.length; -var _339=function(name){ -for(var i=0;i<_338;i++){ -if(name==_337[i]){ -return _336[i%_335]; -} -} -return _336[0]; -}; -var _340=function(_341,bar){ -var x=this.area.w*bar.x+this.area.x; -var y=this.area.h*bar.y+this.area.y; -var w=this.area.w*bar.w; -var h=this.area.h*bar.h; -if((w<1)||(h<1)){ -return; -} -_341.save(); -_341.shadowBlur=5; -_341.shadowColor=Color.fromHexString("#888888").toRGBString(); -if(this.isIE){ -_341.save(); -_341.fillStyle="#cccccc"; -_341.fillRect(x-2,y-2,w+4,h+2); -_341.restore(); -}else{ -_333(_341,x,y,w,h); -} -if(this.options.shouldFill){ -_341.fillStyle=_339(bar.name).toRGBString(); -_341.fillRect(x,y,w,h); -} -_341.shadowBlur=0; -_341.strokeStyle=Color.whiteColor().toRGBString(); -_341.lineWidth=2; -if(this.options.shouldStroke){ -_341.strokeRect(x,y,w,h); -} -_341.restore(); -}; -this._renderBarChartWrap(this.layout.bars,bind(_340,this)); -}; -PlotKit.SweetCanvasRenderer.prototype._renderLineChart=function(){ -var _342=this.element.getContext("2d"); -var _343=this.options.colorScheme.length; -var _344=this.options.colorScheme; -var _345=PlotKit.Base.keys(this.layout.datasets); -var _346=_345.length; -var bind=MochiKit.Base.bind; -for(var i=0;i<_346;i++){ -var _347=_345[i]; -var _348=_344[i%_343]; -var _349=this.options.strokeColorTransform; -_342.save(); -var _350=function(ctx){ -ctx.beginPath(); -ctx.moveTo(this.area.x,this.area.y+this.area.h); -var _351=function(ctx_,_352){ -if(_352.name==_347){ -ctx_.lineTo(this.area.w*_352.x+this.area.x,this.area.h*_352.y+this.area.y); -} -}; -MochiKit.Iter.forEach(this.layout.points,partial(_351,ctx),this); -ctx.lineTo(this.area.w+this.area.x,this.area.h+this.area.y); -ctx.lineTo(this.area.x,this.area.y+this.area.h); -ctx.closePath(); -}; -if(this.options.shouldFill){ -_342.save(); -if(this.isIE){ -_342.fillStyle="#cccccc"; -}else{ -_342.fillStyle=Color.blackColor().colorWithAlpha(0.2).toRGBString(); -} -_342.translate(-1,-2); -bind(_350,this)(_342); -if(this.options.shouldFill){ -_342.fill(); -} -_342.restore(); -} -_342.shadowBlur=5; -_342.shadowColor=Color.fromHexString("#888888").toRGBString(); -_342.fillStyle=_348.toRGBString(); -_342.lineWidth=2; -_342.strokeStyle=Color.whiteColor().toRGBString(); -if(this.options.shouldFill){ -bind(_350,this)(_342); -_342.fill(); -} -if(this.options.shouldStroke){ -bind(_350,this)(_342); -_342.stroke(); -} -_342.restore(); -} -}; -PlotKit.SweetCanvasRenderer.prototype._renderPieChart=function(){ -var _353=this.element.getContext("2d"); -var _354=this.options.colorScheme.length; -var _355=this.layout.slices; -var _356=this.area.x+this.area.w*0.5; -var _357=this.area.y+this.area.h*0.5; -var _358=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); -if(this.isIE){ -_356=parseInt(_356); -_357=parseInt(_357); -_358=parseInt(_358); -} -if(!this.isIE){ -_353.save(); -var _359=Color.blackColor().colorWithAlpha(0.2); -_353.fillStyle=_359.toRGBString(); -_353.shadowBlur=5; -_353.shadowColor=Color.fromHexString("#888888").toRGBString(); -_353.translate(1,1); -_353.beginPath(); -_353.moveTo(_356,_357); -_353.arc(_356,_357,_358+2,0,Math.PI*2,false); -_353.closePath(); -_353.fill(); -_353.restore(); -} -_353.save(); -_353.strokeStyle=Color.whiteColor().toRGBString(); -_353.lineWidth=2; -for(var i=0;i<_355.length;i++){ -var _360=this.options.colorScheme[i%_354]; -_353.fillStyle=_360.toRGBString(); -var _361=function(){ -_353.beginPath(); -_353.moveTo(_356,_357); -_353.arc(_356,_357,_358,_355[i].startAngle-Math.PI/2,_355[i].endAngle-Math.PI/2,false); -_353.lineTo(_356,_357); -_353.closePath(); -}; -if(Math.abs(_355[i].startAngle-_355[i].endAngle)>0.0001){ -if(this.options.shouldFill){ -_361(); -_353.fill(); -} -if(this.options.shouldStroke){ -_361(); -_353.stroke(); -} -} -} -_353.restore(); -}; -PlotKit.SweetCanvasRenderer.prototype._renderBackground=function(){ -var _362=this.element.getContext("2d"); -if(this.layout.style=="bar"||this.layout.style=="line"){ -_362.save(); -_362.fillStyle=this.options.backgroundColor.toRGBString(); -_362.fillRect(this.area.x,this.area.y,this.area.w,this.area.h); -_362.strokeStyle=this.options.axisLineColor.toRGBString(); -_362.lineWidth=1; -var _363=this.layout.yticks; -var _364=false; -if(this.layout.style=="bar"&&this.layout.options.barOrientation=="horizontal"){ -_363=this.layout.xticks; -_364=true; -} -for(var i=0;i<_363.length;i++){ -var x1=0; -var y1=0; -var x2=0; -var y2=0; -if(_364){ -x1=_363[i][0]*this.area.w+this.area.x; -y1=this.area.y; -x2=x1; -y2=y1+this.area.h; -}else{ -x1=this.area.x; -y1=_363[i][0]*this.area.h+this.area.y; -x2=x1+this.area.w; -y2=y1; -} -_362.beginPath(); -_362.moveTo(x1,y1); -_362.lineTo(x2,y2); -_362.closePath(); -_362.stroke(); -} -_362.restore(); -}else{ -PlotKit.SweetCanvasRenderer.__super__._renderBackground.call(this); -} -}; -PlotKit.SweetCanvas={}; -PlotKit.SweetCanvas.SweetCanvasRenderer=PlotKit.SweetCanvasRenderer; -PlotKit.SweetCanvas.EXPORT=["SweetCanvasRenderer"]; -PlotKit.SweetCanvas.EXPORT_OK=["SweetCanvasRenderer"]; -PlotKit.SweetCanvas.__new__=function(){ -var m=MochiKit.Base; -m.nameFunctions(this); -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -}; -PlotKit.SweetCanvas.__new__(); -MochiKit.Base._exportSymbols(this,PlotKit.SweetCanvas); -try{ -if(typeof (PlotKit.SVGRenderer)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "SweetSVG depends on MochiKit.{Base,Color,DOM,Format} and PlotKit.{Layout, SVG}"; -} -if(typeof (PlotKit.SweetSVGRenderer)=="undefined"){ -PlotKit.SweetSVGRenderer={}; -} -PlotKit.SweetSVGRenderer=function(_365,_366,_367){ -if(arguments.length>0){ -this.__init__(_365,_366,_367); -} -}; -PlotKit.SweetSVGRenderer.NAME="PlotKit.SweetSVGRenderer"; -PlotKit.SweetSVGRenderer.VERSION=PlotKit.VERSION; -PlotKit.SweetSVGRenderer.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -PlotKit.SweetSVGRenderer.toString=function(){ -return this.__repr__(); -}; -PlotKit.SweetSVGRenderer.prototype=new PlotKit.SVGRenderer(); -PlotKit.SweetSVGRenderer.prototype.constructor=PlotKit.SweetSVGRenderer; -PlotKit.SweetSVGRenderer.__super__=PlotKit.SVGRenderer.prototype; -PlotKit.SweetSVGRenderer.prototype.__init__=function(_368,_369,_370){ -var _371=PlotKit.Base.officeBlue(); -MochiKit.Base.update(_371,_370); -PlotKit.SweetSVGRenderer.__super__.__init__.call(this,_368,_369,_371); -}; -PlotKit.SweetSVGRenderer.prototype._addDropShadowFilter=function(){ -var _372=this.createSVGElement("filter",{x:0,y:0,"id":"dropShadow"}); -var _373=this.createSVGElement("feOffset",{"in":"SourceGraphic","dx":0,"dy":0,"result":"topCopy"}); -var blur=this.createSVGElement("feGaussianBlur",{"in":"SourceAlpha","StdDeviation":2,"result":"shadow"}); -var _375=this.createSVGElement("feOffset",{"in":"shadow","dx":-1,"dy":-2,"result":"movedShadow"}); -var _376=this.createSVGElement("feMerge"); -var _377=this.createSVGElement("feMergeNode",{"in":"topCopy"}); -var _378=this.createSVGElement("feMergeNode",{"in":"movedShadow"}); -_376.appendChild(_377); -_376.appendChild(_378); -_372.appendChild(_373); -_372.appendChild(blur); -_372.appendChild(_375); -_372.appendChild(_376); -this.defs.appendChild(_372); -}; -PlotKit.SweetSVGRenderer.prototype._renderBarChart=function(){ -var bind=MochiKit.Base.bind; -var _379=Color.blackColor().toRGBString(); -var _380="fill:"+_379+";fill-opacity:0.15"; -var _381="stroke-width: 2.0; stroke:"+Color.whiteColor().toRGBString(); -var _382=function(_383,bar){ -var x=this.area.w*bar.x+this.area.x; -var y=this.area.h*bar.y+this.area.y; -var w=this.area.w*bar.w; -var h=this.area.h*bar.h; -if((w<1)||(h<1)){ -return; -} -_383["style"]=_381; -this._drawRect(x-2,y-1,w+4,h+2,{"style":_380}); -this._drawRect(x,y,w,h,_383); -}; -this._renderBarOrLine(this.layout.bars,bind(_382,this)); -}; -PlotKit.SweetSVGRenderer.prototype._renderLineChart=function(){ -var bind=MochiKit.Base.bind; -var _384=Color.blackColor().toRGBString(); -var _385="fill:"+_384+";fill-opacity:0.15"; -var _386="stroke-width: 2.0; stroke:"+Color.whiteColor().toRGBString(); -var _387=function(_388,_389){ -this._tempPointsBuffer+=(this.area.w*_389.x+this.area.x)+","+(this.area.h*_389.y+this.area.y)+" "; -}; -var _390=function(_391){ -this._tempPointsBuffer=""; -this._tempPointsBuffer+=(this.area.x)+","+(this.area.y+this.area.h)+" "; -}; -var _392=function(_393){ -this._tempPointsBuffer+=(this.area.w+this.area.x)+","+(this.area.h+this.area.y); -_393["points"]=this._tempPointsBuffer; -_393["stroke"]="none"; -_393["transform"]="translate(-2, -1)"; -_393["style"]=_385; -var _394=this.createSVGElement("polygon",_393); -this.root.appendChild(_394); -_393["transform"]=""; -_393["style"]=_386; -var elem=this.createSVGElement("polygon",_393); -this.root.appendChild(elem); -}; -this._renderBarOrLine(this.layout.points,bind(_387,this),bind(_390,this),bind(_392,this)); -}; -PlotKit.SweetSVGRenderer.prototype._renderPieChart=function(){ -var _395=this.area.x+this.area.w*0.5; -var _396=this.area.y+this.area.h*0.5; -var _397=Color.blackColor().toRGBString(); -var _398=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius); -var _399="fill:"+_397+";fill-opacity:0.15"; -var _400=this.createSVGElement("circle",{"style":_399,"cx":_395+1,"cy":_396+1,"r":_398+1}); -this.root.appendChild(_400); -PlotKit.SweetSVGRenderer.__super__._renderPieChart.call(this); -}; -PlotKit.SweetSVGRenderer.prototype._renderBackground=function(){ -var _401={"fill":this.options.backgroundColor.toRGBString(),"stroke":"none"}; -if(this.layout.style=="bar"||this.layout.style=="line"){ -this._drawRect(this.area.x,this.area.y,this.area.w,this.area.h,_401); -var _402=this.layout.yticks; -var _403=false; -if(this.layout.style=="bar"&&this.layout.options.barOrientation=="horizontal"){ -_402=this.layout.xticks; -_403=true; -} -for(var i=0;i<_402.length;i++){ -var x=0; -var y=0; -var w=0; -var h=0; -if(_403){ -x=_402[i][0]*this.area.w+this.area.x; -y=this.area.y; -w=1; -h=this.area.w; -}else{ -x=this.area.x; -y=_402[i][0]*this.area.h+this.area.y; -w=this.area.w; -h=1; -} -this._drawRect(x,y,w,h,{"fill":this.options.axisLineColor.toRGBString()}); -} -}else{ -PlotKit.SweetSVGRenderer.__super__._renderBackground.call(this); -} -}; -PlotKit.SweetSVG={}; -PlotKit.SweetSVG.SweetSVGRenderer=PlotKit.SweetSVGRenderer; -PlotKit.SweetSVG.EXPORT=["SweetSVGRenderer"]; -PlotKit.SweetSVG.EXPORT_OK=["SweetSVGRenderer"]; -PlotKit.SweetSVG.__new__=function(){ -var m=MochiKit.Base; -m.nameFunctions(this); -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -}; -PlotKit.SweetSVG.__new__(); -MochiKit.Base._exportSymbols(this,PlotKit.SweetSVG); -try{ -if(typeof (PlotKit.CanvasRenderer)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "PlotKit.EasyPlot depends on all of PlotKit's components"; -} -if(typeof (PlotKit.EasyPlot)=="undefined"){ -PlotKit.EasyPlot={}; -} -PlotKit.EasyPlot.NAME="PlotKit.EasyPlot"; -PlotKit.EasyPlot.VERSION=PlotKit.VERSION; -PlotKit.EasyPlot.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -PlotKit.EasyPlot.toString=function(){ -return this.__repr__(); -}; -PlotKit.EasyPlot=function(_404,_405,_406,_407){ -this.layout=new Layout(_404,_405); -this.divElem=_406; -this.width=parseInt(_406.getAttribute("width")); -this.height=parseInt(_406.getAttribute("height")); -this.deferredCount=0; -if(this.width<1){ -this.width=this.divElem.width?this.divElem.width:300; -} -if(this.height<1){ -this.height=this.divElem.height?this.divElem.height:300; -} -if(isArrayLike(_407)){ -for(var i=0;i<_407.length;i++){ -if(typeof (_407[i])=="string"){ -this.deferredCount++; -var d=MochiKit.Async.doSimpleXMLHttpRequest(_407[i]); -d.addCallback(MochiKit.Base.bind(PlotKit.EasyPlot.onDataLoaded,this)); -}else{ -if(isArrayLike(_407[i])){ -this.layout.addDataset("data-"+i,_407[i]); -} -} -} -}else{ -if(!isUndefinedOrNull(_407)){ -throw "Passed datasources are not Array like"; -} -} -if(CanvasRenderer.isSupported()){ -this.element=CANVAS({"id":this.divElem.getAttribute("id")+"-canvas","width":this.width,"height":this.height},""); -this.divElem.appendChild(this.element); -this.renderer=new SweetCanvasRenderer(this.element,this.layout,_405); -}else{ -if(SVGRenderer.isSupported()){ -this.element=SVGRenderer.SVG({"id":this.divElem.getAttribute("id")+"-svg","width":this.width,"height":this.height,"version":"1.1","baseProfile":"full"},""); -this.divElem.appendChild(this.element); -this.renderer=new SweetSVGRenderer(this.element,this.layout,_405); -} -} -if((this.deferredCount==0)&&(PlotKit.Base.keys(this.layout.datasets).length>0)){ -this.layout.evaluate(); -this.renderer.clear(); -this.renderer.render(); -} -}; -PlotKit.EasyPlot.onDataLoaded=function(_409){ -var _410=new Array(); -var _411=_409.responseText.split("\n"); -for(var i=0;i<_411.length;i++){ -var _412=MochiKit.Format.strip(_411[i]); -if((_412.length>1)&&(_412.charAt(0)!="#")){ -_410.push(_412.split(",")); -} -} -this.layout.addDataset("data-ajax-"+this.deferredCount,_410); -this.deferredCount--; -if((this.deferredCount==0)&&(PlotKit.Base.keys(this.layout.datasets).length>0)){ -this.layout.evaluate(); -this.renderer.clear(); -this.renderer.render(); -} -}; -PlotKit.EasyPlot.prototype.reload=function(){ -this.layout.evaluate(); -this.renderer.clear(); -this.renderer.render(); -}; -PlotKit.EasyPlotModule={}; -PlotKit.EasyPlotModule.EasyPlot=PlotKit.EasyPlot; -PlotKit.EasyPlotModule.EXPORT=["EasyPlot"]; -PlotKit.EasyPlotModule.EXPORT_OK=[]; -PlotKit.EasyPlotModule.__new__=function(){ -var m=MochiKit.Base; -m.nameFunctions(this); -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -}; -PlotKit.EasyPlotModule.__new__(); -MochiKit.Base._exportSymbols(this,PlotKit.EasyPlotModule); - - diff --git a/main/interfaces/smpl/templates/static/excanvas/excanvas.js b/main/interfaces/smpl/templates/static/excanvas/excanvas.js deleted file mode 100644 index 3e1aedf..0000000 --- a/main/interfaces/smpl/templates/static/excanvas/excanvas.js +++ /dev/null @@ -1,785 +0,0 @@ -// Copyright 2006 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - -// Known Issues: -// -// * Patterns are not implemented. -// * Radial gradient are not implemented. The VML version of these look very -// different from the canvas one. -// * Clipping paths are not implemented. -// * Coordsize. The width and height attribute have higher priority than the -// width and height style values which isn't correct. -// * Painting mode isn't implemented. -// * Canvas width/height should is using content-box by default. IE in -// Quirks mode will draw the canvas using border-box. Either change your -// doctype to HTML5 -// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype) -// or use Box Sizing Behavior from WebFX -// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html) -// * Optimize. There is always room for speed improvements. - -// only add this code if we do not already have a canvas implementation -if (!window.CanvasRenderingContext2D) { - -(function () { - - // alias some functions to make (compiled) code shorter - var m = Math; - var mr = m.round; - var ms = m.sin; - var mc = m.cos; - - // this is used for sub pixel precision - var Z = 10; - var Z2 = Z / 2; - - var G_vmlCanvasManager_ = { - init: function (opt_doc) { - var doc = opt_doc || document; - if (/MSIE/.test(navigator.userAgent) && !window.opera) { - var self = this; - doc.attachEvent("onreadystatechange", function () { - self.init_(doc); - }); - } - }, - - init_: function (doc) { - if (doc.readyState == "complete") { - // create xmlns - if (!doc.namespaces["g_vml_"]) { - doc.namespaces.add("g_vml_", "urn:schemas-microsoft-com:vml"); - } - - // setup default css - var ss = doc.createStyleSheet(); - ss.cssText = "canvas{display:inline-block;overflow:hidden;" + - // default size is 300x150 in Gecko and Opera - "text-align:left;width:300px;height:150px}" + - "g_vml_\\:*{behavior:url(#default#VML)}"; - - // find all canvas elements - var els = doc.getElementsByTagName("canvas"); - for (var i = 0; i < els.length; i++) { - if (!els[i].getContext) { - this.initElement(els[i]); - } - } - } - }, - - fixElement_: function (el) { - // in IE before version 5.5 we would need to add HTML: to the tag name - // but we do not care about IE before version 6 - var outerHTML = el.outerHTML; - - var newEl = el.ownerDocument.createElement(outerHTML); - // if the tag is still open IE has created the children as siblings and - // it has also created a tag with the name "/FOO" - if (outerHTML.slice(-2) != "/>") { - var tagName = "/" + el.tagName; - var ns; - // remove content - while ((ns = el.nextSibling) && ns.tagName != tagName) { - ns.removeNode(); - } - // remove the incorrect closing tag - if (ns) { - ns.removeNode(); - } - } - el.parentNode.replaceChild(newEl, el); - return newEl; - }, - - /** - * Public initializes a canvas element so that it can be used as canvas - * element from now on. This is called automatically before the page is - * loaded but if you are creating elements using createElement you need to - * make sure this is called on the element. - * @param {HTMLElement} el The canvas element to initialize. - * @return {HTMLElement} the element that was created. - */ - initElement: function (el) { - el = this.fixElement_(el); - el.getContext = function () { - if (this.context_) { - return this.context_; - } - return this.context_ = new CanvasRenderingContext2D_(this); - }; - - // do not use inline function because that will leak memory - el.attachEvent('onpropertychange', onPropertyChange); - el.attachEvent('onresize', onResize); - - var attrs = el.attributes; - if (attrs.width && attrs.width.specified) { - // TODO: use runtimeStyle and coordsize - // el.getContext().setWidth_(attrs.width.nodeValue); - el.style.width = attrs.width.nodeValue + "px"; - } else { - el.width = el.clientWidth; - } - if (attrs.height && attrs.height.specified) { - // TODO: use runtimeStyle and coordsize - // el.getContext().setHeight_(attrs.height.nodeValue); - el.style.height = attrs.height.nodeValue + "px"; - } else { - el.height = el.clientHeight; - } - //el.getContext().setCoordsize_() - return el; - } - }; - - function onPropertyChange(e) { - var el = e.srcElement; - - switch (e.propertyName) { - case 'width': - el.style.width = el.attributes.width.nodeValue + "px"; - el.getContext().clearRect(); - break; - case 'height': - el.style.height = el.attributes.height.nodeValue + "px"; - el.getContext().clearRect(); - break; - } - } - - function onResize(e) { - var el = e.srcElement; - if (el.firstChild) { - el.firstChild.style.width = el.clientWidth + 'px'; - el.firstChild.style.height = el.clientHeight + 'px'; - } - } - - G_vmlCanvasManager_.init(); - - // precompute "00" to "FF" - var dec2hex = []; - for (var i = 0; i < 16; i++) { - for (var j = 0; j < 16; j++) { - dec2hex[i * 16 + j] = i.toString(16) + j.toString(16); - } - } - - function createMatrixIdentity() { - return [ - [1, 0, 0], - [0, 1, 0], - [0, 0, 1] - ]; - } - - function matrixMultiply(m1, m2) { - var result = createMatrixIdentity(); - - for (var x = 0; x < 3; x++) { - for (var y = 0; y < 3; y++) { - var sum = 0; - - for (var z = 0; z < 3; z++) { - sum += m1[x][z] * m2[z][y]; - } - - result[x][y] = sum; - } - } - return result; - } - - function copyState(o1, o2) { - o2.fillStyle = o1.fillStyle; - o2.lineCap = o1.lineCap; - o2.lineJoin = o1.lineJoin; - o2.lineWidth = o1.lineWidth; - o2.miterLimit = o1.miterLimit; - o2.shadowBlur = o1.shadowBlur; - o2.shadowColor = o1.shadowColor; - o2.shadowOffsetX = o1.shadowOffsetX; - o2.shadowOffsetY = o1.shadowOffsetY; - o2.strokeStyle = o1.strokeStyle; - o2.arcScaleX_ = o1.arcScaleX_; - o2.arcScaleY_ = o1.arcScaleY_; - } - - function processStyle(styleString) { - var str, alpha = 1; - - styleString = String(styleString); - if (styleString.substring(0, 3) == "rgb") { - var start = styleString.indexOf("(", 3); - var end = styleString.indexOf(")", start + 1); - var guts = styleString.substring(start + 1, end).split(","); - - str = "#"; - for (var i = 0; i < 3; i++) { - str += dec2hex[Number(guts[i])]; - } - - if ((guts.length == 4) && (styleString.substr(3, 1) == "a")) { - alpha = guts[3]; - } - } else { - str = styleString; - } - - return [str, alpha]; - } - - function processLineCap(lineCap) { - switch (lineCap) { - case "butt": - return "flat"; - case "round": - return "round"; - case "square": - default: - return "square"; - } - } - - /** - * This class implements CanvasRenderingContext2D interface as described by - * the WHATWG. - * @param {HTMLElement} surfaceElement The element that the 2D context should - * be associated with - */ - function CanvasRenderingContext2D_(surfaceElement) { - this.m_ = createMatrixIdentity(); - - this.mStack_ = []; - this.aStack_ = []; - this.currentPath_ = []; - - // Canvas context properties - this.strokeStyle = "#000"; - this.fillStyle = "#000"; - - this.lineWidth = 1; - this.lineJoin = "miter"; - this.lineCap = "butt"; - this.miterLimit = Z * 1; - this.globalAlpha = 1; - this.canvas = surfaceElement; - - var el = surfaceElement.ownerDocument.createElement('div'); - el.style.width = surfaceElement.clientWidth + 'px'; - el.style.height = surfaceElement.clientHeight + 'px'; - el.style.overflow = 'hidden'; - el.style.position = 'absolute'; - surfaceElement.appendChild(el); - - this.element_ = el; - this.arcScaleX_ = 1; - this.arcScaleY_ = 1; - }; - - var contextPrototype = CanvasRenderingContext2D_.prototype; - contextPrototype.clearRect = function() { - this.element_.innerHTML = ""; - this.currentPath_ = []; - }; - - contextPrototype.beginPath = function() { - // TODO: Branch current matrix so that save/restore has no effect - // as per safari docs. - - this.currentPath_ = []; - }; - - contextPrototype.moveTo = function(aX, aY) { - this.currentPath_.push({type: "moveTo", x: aX, y: aY}); - this.currentX_ = aX; - this.currentY_ = aY; - }; - - contextPrototype.lineTo = function(aX, aY) { - this.currentPath_.push({type: "lineTo", x: aX, y: aY}); - this.currentX_ = aX; - this.currentY_ = aY; - }; - - contextPrototype.bezierCurveTo = function(aCP1x, aCP1y, - aCP2x, aCP2y, - aX, aY) { - this.currentPath_.push({type: "bezierCurveTo", - cp1x: aCP1x, - cp1y: aCP1y, - cp2x: aCP2x, - cp2y: aCP2y, - x: aX, - y: aY}); - this.currentX_ = aX; - this.currentY_ = aY; - }; - - contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) { - // the following is lifted almost directly from - // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes - var cp1x = this.currentX_ + 2.0 / 3.0 * (aCPx - this.currentX_); - var cp1y = this.currentY_ + 2.0 / 3.0 * (aCPy - this.currentY_); - var cp2x = cp1x + (aX - this.currentX_) / 3.0; - var cp2y = cp1y + (aY - this.currentY_) / 3.0; - this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, aX, aY); - }; - - contextPrototype.arc = function(aX, aY, aRadius, - aStartAngle, aEndAngle, aClockwise) { - aRadius *= Z; - var arcType = aClockwise ? "at" : "wa"; - - var xStart = aX + (mc(aStartAngle) * aRadius) - Z2; - var yStart = aY + (ms(aStartAngle) * aRadius) - Z2; - - var xEnd = aX + (mc(aEndAngle) * aRadius) - Z2; - var yEnd = aY + (ms(aEndAngle) * aRadius) - Z2; - - // IE won't render arches drawn counter clockwise if xStart == xEnd. - if (xStart == xEnd && !aClockwise) { - xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something - // that can be represented in binary - } - - this.currentPath_.push({type: arcType, - x: aX, - y: aY, - radius: aRadius, - xStart: xStart, - yStart: yStart, - xEnd: xEnd, - yEnd: yEnd}); - - }; - - contextPrototype.rect = function(aX, aY, aWidth, aHeight) { - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - }; - - contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) { - // Will destroy any existing path (same as FF behaviour) - this.beginPath(); - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - this.stroke(); - }; - - contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) { - // Will destroy any existing path (same as FF behaviour) - this.beginPath(); - this.moveTo(aX, aY); - this.lineTo(aX + aWidth, aY); - this.lineTo(aX + aWidth, aY + aHeight); - this.lineTo(aX, aY + aHeight); - this.closePath(); - this.fill(); - }; - - contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) { - var gradient = new CanvasGradient_("gradient"); - return gradient; - }; - - contextPrototype.createRadialGradient = function(aX0, aY0, - aR0, aX1, - aY1, aR1) { - var gradient = new CanvasGradient_("gradientradial"); - gradient.radius1_ = aR0; - gradient.radius2_ = aR1; - gradient.focus_.x = aX0; - gradient.focus_.y = aY0; - return gradient; - }; - - contextPrototype.drawImage = function (image, var_args) { - var dx, dy, dw, dh, sx, sy, sw, sh; - - // to find the original width we overide the width and height - var oldRuntimeWidth = image.runtimeStyle.width; - var oldRuntimeHeight = image.runtimeStyle.height; - image.runtimeStyle.width = 'auto'; - image.runtimeStyle.height = 'auto'; - - // get the original size - var w = image.width; - var h = image.height; - - // and remove overides - image.runtimeStyle.width = oldRuntimeWidth; - image.runtimeStyle.height = oldRuntimeHeight; - - if (arguments.length == 3) { - dx = arguments[1]; - dy = arguments[2]; - sx = sy = 0; - sw = dw = w; - sh = dh = h; - } else if (arguments.length == 5) { - dx = arguments[1]; - dy = arguments[2]; - dw = arguments[3]; - dh = arguments[4]; - sx = sy = 0; - sw = w; - sh = h; - } else if (arguments.length == 9) { - sx = arguments[1]; - sy = arguments[2]; - sw = arguments[3]; - sh = arguments[4]; - dx = arguments[5]; - dy = arguments[6]; - dw = arguments[7]; - dh = arguments[8]; - } else { - throw "Invalid number of arguments"; - } - - var d = this.getCoords_(dx, dy); - - var w2 = sw / 2; - var h2 = sh / 2; - - var vmlStr = []; - - var W = 10; - var H = 10; - - // For some reason that I've now forgotten, using divs didn't work - vmlStr.push(' ' , - '', - ''); - - this.element_.insertAdjacentHTML("BeforeEnd", - vmlStr.join("")); - }; - - contextPrototype.stroke = function(aFill) { - var lineStr = []; - var lineOpen = false; - var a = processStyle(aFill ? this.fillStyle : this.strokeStyle); - var color = a[0]; - var opacity = a[1] * this.globalAlpha; - - var W = 10; - var H = 10; - - lineStr.push(' max.x) { - max.x = c.x; - } - if (min.y == null || c.y < min.y) { - min.y = c.y; - } - if (max.y == null || c.y > max.y) { - max.y = c.y; - } - } - } - lineStr.push(' ">'); - - if (typeof this.fillStyle == "object") { - var focus = {x: "50%", y: "50%"}; - var width = (max.x - min.x); - var height = (max.y - min.y); - var dimension = (width > height) ? width : height; - - focus.x = mr((this.fillStyle.focus_.x / width) * 100 + 50) + "%"; - focus.y = mr((this.fillStyle.focus_.y / height) * 100 + 50) + "%"; - - var colors = []; - - // inside radius (%) - if (this.fillStyle.type_ == "gradientradial") { - var inside = (this.fillStyle.radius1_ / dimension * 100); - - // percentage that outside radius exceeds inside radius - var expansion = (this.fillStyle.radius2_ / dimension * 100) - inside; - } else { - var inside = 0; - var expansion = 100; - } - - var insidecolor = {offset: null, color: null}; - var outsidecolor = {offset: null, color: null}; - - // We need to sort 'colors' by percentage, from 0 > 100 otherwise ie - // won't interpret it correctly - this.fillStyle.colors_.sort(function (cs1, cs2) { - return cs1.offset - cs2.offset; - }); - - for (var i = 0; i < this.fillStyle.colors_.length; i++) { - var fs = this.fillStyle.colors_[i]; - - colors.push( (fs.offset * expansion) + inside, "% ", fs.color, ","); - - if (fs.offset > insidecolor.offset || insidecolor.offset == null) { - insidecolor.offset = fs.offset; - insidecolor.color = fs.color; - } - - if (fs.offset < outsidecolor.offset || outsidecolor.offset == null) { - outsidecolor.offset = fs.offset; - outsidecolor.color = fs.color; - } - } - colors.pop(); - - lineStr.push(''); - } else if (aFill) { - lineStr.push(''); - } else { - lineStr.push( - '' - ); - } - - lineStr.push(""); - - this.element_.insertAdjacentHTML("beforeEnd", lineStr.join("")); - - this.currentPath_ = []; - }; - - contextPrototype.fill = function() { - this.stroke(true); - } - - contextPrototype.closePath = function() { - this.currentPath_.push({type: "close"}); - }; - - /** - * @private - */ - contextPrototype.getCoords_ = function(aX, aY) { - return { - x: Z * (aX * this.m_[0][0] + aY * this.m_[1][0] + this.m_[2][0]) - Z2, - y: Z * (aX * this.m_[0][1] + aY * this.m_[1][1] + this.m_[2][1]) - Z2 - } - }; - - contextPrototype.save = function() { - var o = {}; - copyState(this, o); - this.aStack_.push(o); - this.mStack_.push(this.m_); - this.m_ = matrixMultiply(createMatrixIdentity(), this.m_); - }; - - contextPrototype.restore = function() { - copyState(this.aStack_.pop(), this); - this.m_ = this.mStack_.pop(); - }; - - contextPrototype.translate = function(aX, aY) { - var m1 = [ - [1, 0, 0], - [0, 1, 0], - [aX, aY, 1] - ]; - - this.m_ = matrixMultiply(m1, this.m_); - }; - - contextPrototype.rotate = function(aRot) { - var c = mc(aRot); - var s = ms(aRot); - - var m1 = [ - [c, s, 0], - [-s, c, 0], - [0, 0, 1] - ]; - - this.m_ = matrixMultiply(m1, this.m_); - }; - - contextPrototype.scale = function(aX, aY) { - this.arcScaleX_ *= aX; - this.arcScaleY_ *= aY; - var m1 = [ - [aX, 0, 0], - [0, aY, 0], - [0, 0, 1] - ]; - - this.m_ = matrixMultiply(m1, this.m_); - }; - - /******** STUBS ********/ - contextPrototype.clip = function() { - // TODO: Implement - }; - - contextPrototype.arcTo = function() { - // TODO: Implement - }; - - contextPrototype.createPattern = function() { - return new CanvasPattern_; - }; - - // Gradient / Pattern Stubs - function CanvasGradient_(aType) { - this.type_ = aType; - this.radius1_ = 0; - this.radius2_ = 0; - this.colors_ = []; - this.focus_ = {x: 0, y: 0}; - } - - CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) { - aColor = processStyle(aColor); - this.colors_.push({offset: 1-aOffset, color: aColor}); - }; - - function CanvasPattern_() {} - - // set up externs - G_vmlCanvasManager = G_vmlCanvasManager_; - CanvasRenderingContext2D = CanvasRenderingContext2D_; - CanvasGradient = CanvasGradient_; - CanvasPattern = CanvasPattern_; - -})(); - -} // if diff --git a/main/interfaces/smpl/templates/static/feed-icon-14x14.png b/main/interfaces/smpl/templates/static/feed-icon-14x14.png deleted file mode 100644 index b3c949d2244f2c0c81d65e74719af2a1b56d06a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 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 diff --git a/main/interfaces/smpl/templates/static/images/drive.png b/main/interfaces/smpl/templates/static/images/drive.png deleted file mode 100644 index 37b7c9b27d39acaaecf06951b024ac08afbfd4d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmV-g0j2(lP)`6pHR4C7- zkv&QTK@f$%UVGNSAB4p~7X&kJu`rW(3s2w)1kd9QoMeZ&fx$)tn+OJimk zjCT$JD?{UrQ?3~v=-g&C?-zWP;E3TkpyGrhTDFaQSzpwKU?tq9Uh&CO=Y?-R7%>t` z!bl_(!*h(_r3OLS;FuM!k+?!xBDEihL=?r53TBrP2>202N!*Y~*dL6MvS5Ku!P&n9 sT@vv>?encL=G!4ixo5^&>-PTUFAyGx1U4B=kpKVy07*qoM6N<$g0$g{=l}o! diff --git a/main/interfaces/smpl/templates/static/images/drive_go.png b/main/interfaces/smpl/templates/static/images/drive_go.png deleted file mode 100644 index fc53379efcda49dc4b2fc0eb7bc12bf908425a53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 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 T$v;-27zEJOGP+x$=@|KcRm7|R diff --git a/main/interfaces/smpl/templates/static/images/key_enter.png b/main/interfaces/smpl/templates/static/images/key_enter.png deleted file mode 100644 index 19e00c95f0946fe060498a7ecef774e823ebc570..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3511 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 diff --git a/main/interfaces/smpl/templates/static/images/nuvola/kgpg.png b/main/interfaces/smpl/templates/static/images/nuvola/kgpg.png deleted file mode 100644 index ef9517a00778ce176bd5f649479c483c4dab3822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 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 FV1iH=H8TJJ diff --git a/main/interfaces/smpl/templates/static/stylesheets/colorschemes/black.css b/main/interfaces/smpl/templates/static/stylesheets/colorschemes/black.css deleted file mode 100644 index 0b0894a..0000000 --- a/main/interfaces/smpl/templates/static/stylesheets/colorschemes/black.css +++ /dev/null @@ -1,113 +0,0 @@ -body { - background-color: #111; - color: #777; -} -#Container { -color:white; -} - -#Content{ - border-top: 1px dotted #222; - - -} - -.left-border { -border-left: 1px dotted #222; -} -.right-border { -border-right: 1px dotted #222; -} - -#Footer{ -border-top: 1px dotted #222; -} - -#progressBar { - background-color: #fff; - border: 1px solid #000; -} -#progressBartop { - background-color: #fff; - border: 1px solid #ccc; -} -#percentageBar { - background-color: #4B4545; -} - - -h1{ -background-color:#4B4545; -color:#fff; -} - -#title{ -color:#fff; -} - - -a, a:visited { -color:#888; -} -a.config{ -color:#666; -} -a:hover{ -color:blue; -} - -.paused{background-color:red;padding:2px;color:black;} -.downloading{background-color:#00FF00;padding:2px;color:black;} -.idle{background-color:yellow;padding:2px;color:black;} -.spacer{color:white;margin-top:100px;margin-bottom:100px;} - -#feed{color:white;} - - - -hr -{ -color:#222; -background-color:#222; -} - -th{background-color:#000;color:white;} -tr{background-color:#222;} - -td{border:1px solid #333 !important;} -table{border-spacing:0;} - -.finished{background-color:#ff5151; color:black;} -.active{background-color:#4aff5f; color:black;} -.waiting{background-color:#fff44a; color:black;} - - - -input, select { -background-color:#232323; -border-color:#3a3a3a; -color:white; -} - -tr.High {background-color:#111;} -tr.Normal {background-color:#222;} -tr.Low {background-color:#333;} - -legend{color:white} -.job_progress{background-color: #444;} - -.pattern, .result{background-color:#111;} - -a.unselected { - border: 1px solid #C4C4C4; - color:#C4C4C4; -} -span.unselected { - border: 1px solid #555; - color:#555; -} -.selected, a.unselected:hover { - color: white; - background-color:#333; - border: 1px solid #555; -} \ No newline at end of file diff --git a/main/interfaces/smpl/templates/static/stylesheets/colorschemes/white.css b/main/interfaces/smpl/templates/static/stylesheets/colorschemes/white.css deleted file mode 100644 index b33594e..0000000 --- a/main/interfaces/smpl/templates/static/stylesheets/colorschemes/white.css +++ /dev/null @@ -1,108 +0,0 @@ -body { - background-color: #fff; - color: #000; -} -#Container { -color:black; -} - -#Content{ - border-top: 1px dotted #ccc; - - -} - -.left-border { -border-left: 1px dotted #ccc; -} -.right-border { -border-right: 1px dotted #ccc; -} - -#Footer{ -border-top: 1px dotted #ccc; -} - -#progressBar { - background-color: #fff; - border: 1px solid #000; -} -#progressBartop { - background-color: #fff; - border: 1px solid #ccc; -} -#percentageBar { - background-color: #4B4545; -} - - -h1{ -background-color:#4B4545; -color:#fff; -} - -#title{ -color:#fff; -} - -a:visited{ -color:#000; - -} -a { -color:black; -} -a.config{ -color:#4B4545; -} -a:hover{ -color:red; -} - -.paused{background-color:red;padding:2px;} -.downloading{background-color:#00FF00;padding:2px;} -.idle{background-color:yellow;padding:2px;} -.spacer{color:white;margin-top:100px;margin-bottom:100px;} - -#feed{color:white;} - - - -hr -{ -color:#ccc; -background-color:#ccc; -} - -th{background-color:#4B4545;color:white;} -tr{background-color:#f5f5f5;} - -td{border:1px solid #eeeeee !important;} -table{border-spacing:0;} - -.finished{background-color:#ffd9d9;} -.active{background-color:#deffd9;} -.waiting{background-color:#ffffd9;} - - -tr.High {background-color:#ececec;} -tr.Normal {background-color:#f5f5f5;} -tr.Low {background-color:#fafafa;} - -a.unselected { - padding:1px 5px 1px 5px; - border: 1px solid #555; - color:#555; - text-decoration:none; -} -span.unselected { - padding:1px 5px 1px 5px; - border: 1px solid #C4C4C4; - color:#C4C4C4; -} -.selected, a.unselected:hover { - padding:1px 5px 1px 5px; - color: white; - background-color:#333; - border: 1px solid #555; -} \ No newline at end of file diff --git a/main/interfaces/smpl/templates/static/stylesheets/smpl.css b/main/interfaces/smpl/templates/static/stylesheets/smpl.css deleted file mode 100644 index ac510dc..0000000 --- a/main/interfaces/smpl/templates/static/stylesheets/smpl.css +++ /dev/null @@ -1,369 +0,0 @@ -body { - background-color: #fff; - color: #000; - font:normal 13px arial; - line-height: 18px; - padding: 0px; - margin: 0px; - text-align: center; - - -} -#hide{ display:none;} -#Container { -margin: 0 auto; -text-align: left; -width:90%; -color:black; -min-width:700px; -margin-top:3px; - -} - -#testing{ -display:inline; -} -#Content{ - border-top: 1px dotted #ccc; - - -} -#Left { -width:100px; -height:100%; -float:left; -padding:0px; -margin:0px; -} -#Content{width:100%;margin:0;padding:0;} - -#RightContainer { -/*height:600px;*/ -margin-left: 100px; -padding:10px 0 10px 10px; -/*overflow:auto;*/ - -} -#Right{ - width:100%; -} -#Right_bottom{ - width:100%; -} -#Content{ -clear:both; - -} - -#Footer{ -clear:both; -border-top: 1px dotted #ccc; -padding:15px; -text-align: center; -/*line-height:30px;*/ -} - -#menu{ -list-style-type: none; -padding:10px; -margin:0px; -position:relative; -} - -.progressBar { - background-color: #fff; - border: 1px solid #000; - height: 6px; - width: 99%; - margin: 0px; - margin-left: auto; - margin-right: auto; - padding: 0px; - text-align: left; -} -.progressBartop { - background-color: #fff; - border: 1px solid #ccc; - height: 14px; - width: 99%; - margin: 0px; - margin-left: auto; - margin-right: auto; - padding: 0px; - text-align: left; -} -.percentageBar { - position: relative; - background-color: #4B4545; - height: 100%; -} - - -h1{ -background-color:#4B4545; -color:#fff; -padding:8px; -width:100px; -font-size:20px; -display:inline; -} -h2{ -font-size:12px; -margin:0 0 0 8px; -} -h3{ -display:inline; -line-height: 20px; -} -#title{ -border:none; -color:#fff; -display:inline; - -} -#rss{border:none;} - -a:visited{ -color:#000; -display:inline; -margin-top:-5px; -} -a { -color:black; -cursor:pointer; -text-decoration:underline; -} -a.config{ -color:#4B4545; -} -a:hover{ -color:red; -} - -fieldset.EntryFieldSet { - vertical-align: top; - display: inline; - padding: 7px; - margin: 5px; -} -.secondul{ -padding-left:10px; -margin:0px; -list-style-type: none; -} -.kbs{padding-left:2px;} - -#divchart,#divpie{ -margin: 0 auto; -} -.status{float:right;padding:0px;line-height: 22px;margin:0px 0px 10px 0px;} - -.paused{background-color:red;padding:2px;} -.downloading{background-color:#00FF00;padding:2px;} -.idle{background-color:yellow;padding:2px;} -.spacer{color:white;margin-top:100px;margin-bottom:100px;} - -#divpie2,#divpie3{display:inline;clear:none;} -#feed{display:inline;text-decoration: none;color:white;} -.bold{font-weight: bold; } - - -fieldset { - margin-bottom: 10px; - width:100%; - border:none; -} -form.cmxform .label,form.cmxform input { - display: block; - width: 150px; - float: left; - margin-bottom: 15px; -} -input.schedulesubmit { - display: inline; - width: 30px; - float: none; - margin: 0; - margin-left: 3px;; -} -.addnewselect{ - display: block; - width: 90px; - height:22px; - float: left; - margin-bottom: 15px; -} -.scriptselect{ - display: block; - width: 100px; - height:22px; - float: left; - margin-bottom: 15px; -} -form.cmxform .label { - text-align: left; - width: 150px; - padding-right: 20px; - padding-left:10px; -} - -.clear{ - clear: left; -} -form.cmxform input.radio{ - width:15px;float:none;display:inline;margin-bottom: 0px; -} - -.submitindent{ - margin-left: 183px;/*margin-bottom:-5px;*/} - -.submitindent2{ - display: inline; - float: none; - height:22px; - width:80px; -} - -.select{width:154px} -.tips { - margin-left:30px; -} - -hr -{ -margin-top:-6px; -margin-bottom:20px; -color:#ccc; -background-color:#ccc; -border:none; -height:1px; -/*width:500px;*/ -} -#queueTable,#catTable, #rssTable, #historyTable{width:100%;} -th{background-color:#4B4545;color:white;} -tr{background-color:#f5f5f5;} -#versions{font-size:8pt;} -#downloadinfo{font-size:8pt;} -#help{float:right;} -.finished{background-color:#ffd9d9;} -.active{background-color:#deffd9;} -.waiting{background-color:#ffffd9;} - -.delicon, .pauseicon, .resumeicon{ -border:none; -color:#fff; -display:inline; -margin:0px; -padding:0px; -margin-bottom:-3px; -} -.imglink{ -border:none; -} -#sortable_table{ -width:99%; -} -.submitstatus{ -display:inline; -padding-left:10px; -} -.centerLinks{ -/*display:inline; -margin-left:20px;*/ -text-align:center; -} - - -.server{ -float:left; -width:360px; -padding-right:50px; -} -.float{float:left;} -#logo{float:left;} -/*#divchart{float:left;margin-left:50px;}*/ - -#warnings{ -height:200px; -width:100%; -overflow:auto;} - -.job_progress{position: relative; background-color: #9bf; height: 6px;} - -.normalheight, .doubleheight, .tripleheight, .pattern, .result, .heading1, .heading2, .heading3 {float:left;} -.normalheight, .doubleheight, .tripleheight, .heading1 {width:125px;} -.normalheight {} -.doubleheight {height:30px;} -.tripleheight {height:60px;} -.row{clear:left;} -.pattern, .heading2 {width:70px; background-color:#f5f5f5;} -.result, .heading3 {width:125px;background-color:#f4f4f4;} -#Keytable {text-align:center; } -.heading1, .heading2, .heading3{font-weight:bold; background-color:black; color:white;} -.feedEnabled{color:green;} -.feedDisabled{color:red;} -#speedbox{width:36px;display:inline;} -.small{font-size:10px;} -#Keytable,#Keytable2,#Keytable3,.hidden{display:none;} -.actionTD{min-width:113px;} -.left-margin{padding-left:20px;} -.line-height{line-height:22px;} -td {padding:4px !important;} -.center{text-align:center;} -.expander { - text-decoration:none; - margin:0px 2px 0px 2px; - padding:0px 2px 0px 2px; -} -a.expander:hover { - color:white; - background-color:black; -} -.expander-minus { - margin:0px 2px 0px 2px; - padding:0px 4px 1px 4px; -} - -.fail_message{color:red;} -.right_align{text-align:right;} -.row_hidden{visibility:collapse;} -a.columnLinks{color:white} -.expandColumn, .orderColumn{width:10px;} -.timeleftColumn, .sizeColumn{width:80px;} -.ageColumn, .editColumn, .actionsColumn, .linksColumn{width:50px;} -.statusColumn{width:100px;} -.searchBox{float:right; display:inline;} -.header-margin{padding-top:34px;} -.light-grey a{color:#999;} -.action_message{color:green;} -.fill-td{width:97%;} -a.unselected { - padding:1px 5px 1px 5px; - text-decoration:none; -} -span.unselected { - padding:1px 5px 1px 5px; -} -.selected, a.unselected:hover { - padding:1px 5px 1px 5px; -} - -#hiddenNav { - /*display:none;*/ -} - -.underline{text-decoration:underline;} -#hiddenTimedPause{display:none;} - -.server-test { - border: 1px dotted #ccc; - padding:5px; -} - -.success { - color: green; -} - -.failure { - color: red; -} \ No newline at end of file diff --git a/main/interfaces/wizard/README.TXT b/main/interfaces/wizard/README.TXT deleted file mode 100644 index 7ca7878..0000000 --- a/main/interfaces/wizard/README.TXT +++ /dev/null @@ -1,21 +0,0 @@ -# -# Copyright 2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# -# This is the quick setup wizard for SABnzbd -# It is used when first starting up sabnzbd -# diff --git a/main/interfaces/wizard/five.html b/main/interfaces/wizard/five.html deleted file mode 100644 index 1cb0285..0000000 --- a/main/interfaces/wizard/five.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -

        -

        $T('wizard-restarting')

        - -
        -
        -
        -
        -

        -
        - - - - -
        -
        - - \ No newline at end of file diff --git a/main/interfaces/wizard/four.html b/main/interfaces/wizard/four.html deleted file mode 100644 index b0feee8..0000000 --- a/main/interfaces/wizard/four.html +++ /dev/null @@ -1,39 +0,0 @@ - - -
        -

        $T('wizard-index-explain')

        -
        -

        Newzbin.com ($T('wizard-optional'))

        - -
        - -
        - >
        - - -

        NZBMatrix.com ($T('wizard-optional'))

        - -
        - -
        - -

        -
        - - - - - - -
        -
        - - - $step - -
        -
        -
        - - - \ No newline at end of file diff --git a/main/interfaces/wizard/inc_bottom.tmpl b/main/interfaces/wizard/inc_bottom.tmpl deleted file mode 100644 index 6792708..0000000 --- a/main/interfaces/wizard/inc_bottom.tmpl +++ /dev/null @@ -1,4 +0,0 @@ -
        -
        - - \ No newline at end of file diff --git a/main/interfaces/wizard/inc_top.tmpl b/main/interfaces/wizard/inc_top.tmpl deleted file mode 100644 index 2d14a5e..0000000 --- a/main/interfaces/wizard/inc_top.tmpl +++ /dev/null @@ -1,15 +0,0 @@ - - - $T('wizard-quickstart') - - - - - -
        -
        -
        -
        $T('wizard-version') $version
        -

        $T('wizard-quickstart')

        $num


        -
        - \ No newline at end of file diff --git a/main/interfaces/wizard/index.html b/main/interfaces/wizard/index.html deleted file mode 100644 index 563744f..0000000 --- a/main/interfaces/wizard/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - -
        -
        -

        Language

        -Please choose your prefered language

        -
        - - - - - - - - - - - -
        -
        - -
        -

        >
        -
        -
        -
        -
        -
        -
        - - - - -
        -
        - - - \ No newline at end of file diff --git a/main/interfaces/wizard/language/de-de.txt b/main/interfaces/wizard/language/de-de.txt deleted file mode 100644 index affa528..0000000 --- a/main/interfaces/wizard/language/de-de.txt +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# Deutschland # Deutsch -# Translation by Severin Heiniger - -quickstart SABnzbd-Einrichtungsassistent -version SABnzbd-Version - -previous Zurück -next Weiter -zoom Vergrössern - -skin Oberfläche -explain-skin Welche Oberfläche möchten Sie verwenden? - -access Zugriff -access-anypc Alle Rechner in meinem Netzwerk sollen auf SABnzbd zugreifen können. -access-mypc Nur mein Rechner soll auch SABnzbd zugreifen können. -access-pass Passwortgeschützter Zugriff auf SABnzbd (empfohlen) -access-https Zugriff auf SABnzbd über HTTPS ermöglichen - -misc Verschiedenes -misc-browser SABnzbd in meinem Webbrowser öffnen, wenn es gestartet wird. - -server Server-Details -explain-server Geben Sie bitte die Informationen zu Ihrem Usenet-Provider an. -server-help Hilfe -server-help1 Um aus dem Usenet herunterladen zu können, benötigen Sie Zugriff auf einen Usenet-Provider.\ - Ihr ISP bieten dies möglicherweise an, jedoch werden kostenpflichtige Provider empfohlen. -server-help2@1 Wenn Sie noch keinen Usenet-Provider haben, empfehlen wir Ihnen %s. -server-con-explain Die Anzahl der Verbindungen, die der Provider erlaubt. -server-ssl-explain Nur auswählen, wenn der Provider SSL-Verbindungen erlaubt. -server-text Klicken um die eingegebenen Informationen zu überprüfen. -server-required Dieses Feld wird benötigt. -server-number Bitte geben Sie eine ganze Zahl ein. - -index-explain Wenn Sie Mitglied von Newzbin oder NZBMatrix sind,\ - können Sie hier den jeweiligen Benutzernamen und das\ - Passwort angeben, so dass NZB-Dateien von diesen Seiten\ - abgerufen werden können. Wenn Sie keinen dieser beiden\ - Dienste verwenden, können Sie diesen Schritt überspringen. -index-bookmark Mit Lesezeichen versehene Beiträge automatisch herunterladen. -optional Optional -example Z. B. -button-testServer Server überprüfen - -restarting SABnzbd wird neu gestartet... -complete Die Einrichtung ist nun abgeschlossen. -tip1 SABnzbd läuft nun im Hintergrund. -tip2 Das Schliessen des Browser-Fensters oder -Tabs beendet SABnzbd NICHT. -tip3@1 Nachdem SABnzbd neu gestartet wurde, haben Sie Zugriff darauf von folgenden Orten%s -tip4 Es ist empfehlenswert, diese Seite\ - mit einem Lesezeichen zu versehen und dieses verwenden,\ - um SABnzbd aufzurufen, wenn es im Hintergrund läuft. -tip-wiki Weiterführende Informationen finden Sie in unserem -goto SABnzbd anzeigen - -step-one Schritt 1 -step-two Schritt 2 -step-three Schritt 3 -step-four Schritt 4 -step-five Schritt 5 diff --git a/main/interfaces/wizard/language/fr-fr.txt b/main/interfaces/wizard/language/fr-fr.txt deleted file mode 100644 index b45cfa7..0000000 --- a/main/interfaces/wizard/language/fr-fr.txt +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: latin-1 -*- -# France # Français - -quickstart SABnzbd Assistant Configuration -version SABnzbd Version - -previous Précédent -next Suivant -zoom Zoom - -skin Thème -explain-skin Quel thème voulez-vous utiliser pour SABnzbd? - -access Accès -access-anypc Je veux que SABnzbd soit accessible de tous les ordinateurs de mon réseau. -access-mypc Je veux que SABnzbd ne soit accessible que depuis mon ordinateur. -access-pass Protection de l'interface de SABnzbd par un mot de passe (recommendé) -access-https Activer l'accès via HTTPS à SABnzbd. - -misc Autres -misc-browser Lancer mon navigateur internet avec l'adresse de SABnzbd au démarrage de l'application. - -server Serveurs -explain-server Entrez les informations sur votre principal fournisseur usenet. -server-help Aide -server-help1 Pour pouvoir télécharger sur les newsgroups, il est nécessaire d'avoir un fournisseur usenet. Votre FAI peut vous en fournir un, un fournisseur usenet premium est tout de même recommandé. -server-help2@1 Vous n'avez pas de fournisseur usenet ? Nous vous recommendons d'essayer %s. -server-con-explain Le nombre de connexions autorisées par votre fournisseur usenet -server-ssl-explain Cochez uniquement si votre fournisseur usenet permet les connexions SSL. -server-text Cliquez pour tester les informations entrées. -server-required Ce champs est obligatoire. -server-number Entrez un numéro. - -index-explain Si vous être membres de newzbin ou nzbmatrix, vous pouvez entrer vos identifiants et mot de passe pour pouvoir utiliser ces services. Si vous n'utilisez pas ces services, vous pouvez passer à l'étape suivante. -index-bookmark Télécharger automatiquement les marque-pages. -optional Optionnel -example Par ex. : -button-testServer Tester le serveur - -restarting Redémarrage de SABnzbd en cours... -complete La configuration est terminée ! -tip1 SABnzbd s'exécute en arrière plan. -tip2 Fermer la fenêtre/onglet de votre navigateur NE QUITTERA PAS SABnzbd. -tip3@1 Une fois le rédemarrage de SABnzbd effectué, vous pourrez y accéder via l'adresse%s -tip4 Il est recommandé de mettre un marque-page sur cette adresse pour la retrouver facilement ultérieurement. -tip-wiki De l'aide peut être trouvée sur le -goto Aller à SABnzbd - -step-one Etape 1 -step-two Etape 2 -step-three Etape 3 -step-four Etape 4 -step-five Etape 5 \ No newline at end of file diff --git a/main/interfaces/wizard/language/nl-du.txt b/main/interfaces/wizard/language/nl-du.txt deleted file mode 100644 index e3c686c..0000000 --- a/main/interfaces/wizard/language/nl-du.txt +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: UTF-8 -*- -# Nederland # Nederlands - -quickstart SABnzbd Snelstart Hulp - -previous Vorige -next Volgende -zoom Inzoomen - -skin Uiterlijk -explain-skin Welk uiterlijk moet SABnzbd gebruiken? - -access Toegang -access-anypc Ik wil SABnzbd kunnen gebruiken vanaf iedere PC in mijn thuisnetwerk. -access-mypc Ik wil SABnzbd alleen vanaf deze PC kunnen gebruiken. -access-pass Wachtwoord beveiliging voor SABnzbd (aanbevolen) -access-https Maak HTTPS (beveiligd) verkeer mogelijk. - -misc Diversen -misc-browser Start de web browser wanneer SABnzbd opstart. - -server Server instellingen -explain-server Vul hier de gegevens van je primaire Usenet server in. -server-help Hulp -server-help1 Om te kunnen downloaded van Usenet, heb je een provider nodig.\ - Je Internet bedrijf heeft misschien een server,\ - maar we bevelen een betaalde server aan. -server-help2@1 Heb je nog geen Usenet provider? Wij bevelen %s aan. -server-con-explain Het aantal verbindingen dat je provider toestaat. -server-ssl-explain Vink dit alleen aan als je provider SSL verbindingen toestaat. -server-text Klik om de verbinding te testen. -server-required Verplicht veld -server-number Vul hier een geheel getal in. - -index-explain Wanneer je een Newzbin of een nzbmatrix abonnement hebt, kun je hier je gegevens invullen,\ - zodat SABnzbd de NZB bestanden kan ophalen.\ - Je kunt dit overslaan als je deze diensten niet gebruikt. -index-bookmark Automatisch ophalen van newzbin bookmarks. -optional Niet verplicht -example Voorbeeld -button-testServer Test Server - -restarting SABnzbd herstart nu... -complete Het instellen is klaar! -tip1 SABnzbd werkt op de achtergrond. -tip2 Afsluiten van de browser vensters zal SABnzbd niet stoppen. -tip3@1 Nadat SABnzbd de herstart heeft uitgevoerd, kun je naar lokatie %s gaan voor de bediening. -tip4 Tip: maak een "Bladwijzer" of "Favoriet" voor deze lokatie, zodat je SABnzbd gemakkelijk terug kunt vinden. -tip-wiki Voor meer informatie: zie onze -goto Ga naar SABnzbd - -step-one Stap Een -step-two Stap Twee -step-three Stap Drie -step-four Stap Vier -step-five Stap Vijf diff --git a/main/interfaces/wizard/language/sv-se.txt b/main/interfaces/wizard/language/sv-se.txt deleted file mode 100644 index 00a26ef..0000000 --- a/main/interfaces/wizard/language/sv-se.txt +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -# Sverige # Svenska -# Translation by "Kristoffer (Malmis) Malmström" - -quickstart SABnzbd Snabbstart Guide -version SABnzbd Version - -previous FöregÃ¥ende -next Nästa -zoom Zooma - -skin Skin -explain-skin Vilket skin vill du använda till SABnzbd? - -access Ã…tkomst -access-anypc Jag vill att SABnzbd ska bli nÃ¥bart frÃ¥n vilken dator som helst i mitt nätverk. -access-mypc Jag vill att SABnzbd ska bli nÃ¥bart enbart frÃ¥n min dator. -access-pass Lösenordsskydda Ã¥tkomst till SABnzbd (rekommenderas) -access-https Aktivera HTTPS Ã¥tkomst till SABnzbd. - -misc Diverse -misc-browser Starta webbläsaren med SABnzbd's sida när programet startas. - -server Serveruppgifter -explain-server Fyll i uppgifter om din primära usenet leverantör. -server-help Hjälp -server-help1 För att ladda ner frÃ¥n usenet du behöver tillgÃ¥ng till en leverantör. Din internetleverantör kan ge dig tillgÃ¥ng, men en premie leverantör rekommenderas. -server-help2@1 Har du inte nÃ¥gon usenet leverantör? Vi rekommenderar att prova %s. -server-con-explain Antalet anslutningar som tillÃ¥ts av din leverantör -server-ssl-explain Välj bara om din leverantör tillÃ¥ter SSL-anslutningar. -server-text Klicka här för att testa dina angivna serveruppgifter. -server-required Detta fält krävs. -server-number Ange ett heltal. - -index-explain Om du är medlem pÃ¥ newzbin eller nzbmatrix kan du ange ditt användarnamn och lösenord här sÃ¥ kan vi hämta deras nzb filer. Detta stadium kan hoppas över om du inte använder deras tjänster. -index-bookmark Ladda automatiskt ned bokmärkta poster. -optional Valfritt -example Ex. -button-testServer Test Server - -restarting Startar om SABnzbd... -complete Installationen är nu utförd! -tip1 SABnzbd kommer nu att köras i bakgrunden. -tip2 SABnzbd kommer inte att stängas av om du stänger ett fönster eller en tab i webbläsaren. -tip3@1 Efter att SABnzbd har startat om kommer du att ha kunna komma Ã¥t SABnzbd pÃ¥ denna plats: %s -tip4 Det är rekommenderat att du sparar denna plats som ett bokmärke för att komma Ã¥t SABnzbd när det körs i bakgrunden. -tip-wiki Övrig hjälp kan du hitta pÃ¥ vÃ¥ran -goto GÃ¥ till SABnzbd - -step-one Steg ett -step-two Steg tvÃ¥ -step-three Steg tre -step-four Steg fyra -step-five Steg fem \ No newline at end of file diff --git a/main/interfaces/wizard/language/us-en.txt b/main/interfaces/wizard/language/us-en.txt deleted file mode 100644 index eb5416f..0000000 --- a/main/interfaces/wizard/language/us-en.txt +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: latin-1 -*- -# United States # English - -quickstart SABnzbd Quick-Start Wizard -version SABnzbd Version - -previous Previous -next Next -zoom Zoom - -skin Skin -explain-skin Which skin would you like to use for SABnzbd? - -access Access -access-anypc I want SABnzbd to be viewable by any pc on my network. -access-mypc I want SABnzbd to be viewable from my pc only. -access-pass Password protect access to SABnzbd (recommended) -access-https Enable HTTPS access to SABnzbd. - -misc Misc -misc-browser Launch my internet browser with the SABnzbd page when the program starts. - -server Server Details -explain-server Please enter in the details of your primary usenet provider. -server-help Help -server-help1 In order to download from usenet you will require access to a provider. Your ISP may provide you with access, however a premium provider is recommended. -server-help2@1 Don't have a usenet provider? We recommend trying %s. -server-con-explain The number of connections allowed by your provider -server-ssl-explain Select only if your provider allows SSL connections. -server-text Click to test the entered details. -server-required This field is required. -server-number Please enter a whole number. - -index-explain If you are a member of newzbin or nzbmatrix, you may enter your username and password here so we can fetch their nzb's. This stage can be skipped if you don't use either services. -index-bookmark Automatically download bookmarked posts. -optional Optional -example E.g. -button-testServer Test Server - -restarting Restarting SABnzbd... -complete Setup is now complete! -tip1 SABnzbd will now be running in the background. -tip2 Closing any browser windows/tabs will NOT close SABnzbd. -tip3@1 After SABnzbd has finished restarting you will be able to access it at the following location%s -tip4 It is recommended you right click and bookmark this location and use this bookmark to access SABnzbd when it is running in the background. -tip-wiki Further help can be found on our -goto Go to SABnzbd - -step-one Step One -step-two Step Two -step-three Step Three -step-four Step Four -step-five Step Five \ No newline at end of file diff --git a/main/interfaces/wizard/one.html b/main/interfaces/wizard/one.html deleted file mode 100644 index 1df9c03..0000000 --- a/main/interfaces/wizard/one.html +++ /dev/null @@ -1,76 +0,0 @@ - - - -
        -
        -

        $T('wizard-skin')

        -$T('wizard-explain-skin')

        -
        - - - - - - - - - - - -
        -
        - -
        -
        - +$T('wizard-zoom') -
        -
        - -
        -
        - +$T('wizard-zoom') -
        -
        - -
        -
        - +$T('wizard-zoom') -

        >

        >

        >
        -
        -
        -
        -
        -
        -
        - - - - - - -
        - - -
        - - - $step - -
        -
        -
        - - - \ No newline at end of file diff --git a/main/interfaces/wizard/static/images/classic-th.png b/main/interfaces/wizard/static/images/classic-th.png deleted file mode 100644 index f01386fa0c16f10140dca77b3821c7e621861ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18667 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

        *q- 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 diff --git a/main/interfaces/wizard/static/images/favicon.ico b/main/interfaces/wizard/static/images/favicon.ico deleted file mode 100644 index 47fe4207752f7d5f67a5e073ecbd00bfe0ae990f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45452 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 T$v;-27zEJOGP+x$=@|KcRm7|R diff --git a/main/interfaces/wizard/static/images/flags/de-de.png b/main/interfaces/wizard/static/images/flags/de-de.png deleted file mode 100644 index 31dbefb7862c7da6b1e410fab190c9f6d12b8c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 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 Qb&>r61l-Jk0CRcp9~fV;#sB~S diff --git a/main/interfaces/wizard/static/images/flags/sv-se.png b/main/interfaces/wizard/static/images/flags/sv-se.png deleted file mode 100644 index 97d23bb5de64d92f4b67b6f158eaa54a21f30b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5854 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 B&-wrW diff --git a/main/interfaces/wizard/static/images/plush-th.png b/main/interfaces/wizard/static/images/plush-th.png deleted file mode 100644 index 8647f9ed06e0809877db5921533b6443b14f56c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27290 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

        )}_7J;pn3)&o?1ch5^FnjJ2p90~op#D- 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 diff --git a/main/interfaces/wizard/static/images/smpl-th.png b/main/interfaces/wizard/static/images/smpl-th.png deleted file mode 100644 index 6eafda97202bd550f12e8b6eb90d5067481aadc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23708 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 diff --git a/main/interfaces/wizard/static/images/smpl.png b/main/interfaces/wizard/static/images/smpl.png deleted file mode 100644 index d7297cd53edcd0ddb1fb02824e82a71bb77df3f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62655 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 Hm3#jKW0q@O diff --git a/main/interfaces/wizard/static/javascript/checkserver.js b/main/interfaces/wizard/static/javascript/checkserver.js deleted file mode 100644 index 5d0bdb0..0000000 --- a/main/interfaces/wizard/static/javascript/checkserver.js +++ /dev/null @@ -1,109 +0,0 @@ -function checkRequired() -{ - if ($("#host").val() && $("#connections").val()) - { - $("#next-button").removeAttr("disabled"); - } else { - $("#next-button").attr("disabled","disabled"); - } -} - -$(document).ready(function() { - checkRequired() - $("#serverTest").click(function(){ - $('#serverResponse').html(txtChecking); - $.getJSON( - "/tapi?mode=config&name=test_server&output=json", - $("form").serialize(), - function(result) { - if (result.value.result){ - cls = "success" - } else { - cls = "failed" - } - r = '' + result.value.message + ''; - $('#serverResponse').html(r); - } - ); - }); - $(".validate-text").blur(function(){ - if (this.value || this.checked){ - $(this).removeClass("incorrect"); - $(this).addClass("correct"); - } else { - $(this).removeClass("correct"); - } - }); - $(".validate-text-required").blur(function(){ - if (this.value || this.checked){ - $(this).removeClass("incorrect"); - $(this).addClass("correct"); - } else { - $(this).removeClass("correct"); - $(this).addClass("incorrect"); - } - }); - $(".validate-numeric").blur(function(){ - if (this.value && isFinite(this.value)){ - $(this).removeClass("incorrect"); - $(this).addClass("correct"); - } else { - $(this).removeClass("correct"); - } - }); - $(".validate-numeric-required").blur(function(){ - if (this.value && isFinite(this.value)){ - $(this).removeClass("incorrect"); - $(this).addClass("correct"); - } else { - $(this).removeClass("correct"); - $(this).addClass("incorrect"); - } - }); - - $("#connections").bind('keyup blur',function(){ - if (this.value && isFinite(this.value)){ - $(this).removeClass("incorrect"); - $(this).addClass("correct"); - $("#connections-tip").removeClass("hidden"); - $("#connections-error").addClass("hidden"); - checkRequired(); - } else { - $(this).removeClass("correct"); - $(this).addClass("incorrect"); - $("#connections-tip").addClass("hidden"); - $("#connections-error").removeClass("hidden"); - checkRequired(); - } - }); - - $("#port").bind('keyup blur',function(){ - if (!this.value || isFinite(this.value)){ - $(this).removeClass("incorrect"); - $(this).addClass("correct"); - $("#port-tip").removeClass("hidden"); - $("#port-error").addClass("hidden"); - } else { - $(this).removeClass("correct"); - $(this).addClass("incorrect"); - $("#port-tip").addClass("hidden"); - $("#port-error").removeClass("hidden"); - } - }); - - $("#host").bind('keyup blur',function(){ - if (this.value){ - $(this).removeClass("incorrect"); - $(this).addClass("correct"); - $("#host-tip").removeClass("hidden"); - $("#host-error").addClass("hidden"); - checkRequired(); - } else { - $(this).removeClass("correct"); - $(this).addClass("incorrect"); - $("#host-tip").addClass("hidden"); - $("#host-error").removeClass("hidden"); - checkRequired(); - } - }); -}); \ No newline at end of file diff --git a/main/interfaces/wizard/static/javascript/jquery.js b/main/interfaces/wizard/static/javascript/jquery.js deleted file mode 100644 index 396646c..0000000 --- a/main/interfaces/wizard/static/javascript/jquery.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * jQuery JavaScript Library v1.3 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-01-13 12:50:31 -0500 (Tue, 13 Jan 2009) - * Revision: 6104 - */ -(function(){var l=this,g,x=l.jQuery,o=l.$,n=l.jQuery=l.$=function(D,E){return new n.fn.init(D,E)},C=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;n.fn=n.prototype={init:function(D,G){D=D||document;if(D.nodeType){this[0]=D;this.length=1;this.context=D;return this}if(typeof D==="string"){var F=C.exec(D);if(F&&(F[1]||!G)){if(F[1]){D=n.clean([F[1]],G)}else{var H=document.getElementById(F[3]);if(H){if(H.id!=F[3]){return n().find(D)}var E=n(H);E.context=document;E.selector=D;return E}D=[]}}else{return n(G).find(D)}}else{if(n.isFunction(D)){return n(document).ready(D)}}if(D.selector&&D.context){this.selector=D.selector;this.context=D.context}return this.setArray(n.makeArray(D))},selector:"",jquery:"1.3",size:function(){return this.length},get:function(D){return D===g?n.makeArray(this):this[D]},pushStack:function(E,G,D){var F=n(E);F.prevObject=this;F.context=this.context;if(G==="find"){F.selector=this.selector+(this.selector?" ":"")+D}else{if(G){F.selector=this.selector+"."+G+"("+D+")"}}return F},setArray:function(D){this.length=0;Array.prototype.push.apply(this,D);return this},each:function(E,D){return n.each(this,E,D)},index:function(D){return n.inArray(D&&D.jquery?D[0]:D,this)},attr:function(E,G,F){var D=E;if(typeof E==="string"){if(G===g){return this[0]&&n[F||"attr"](this[0],E)}else{D={};D[E]=G}}return this.each(function(H){for(E in D){n.attr(F?this.style:this,E,n.prop(this,D[E],F,H,E))}})},css:function(D,E){if((D=="width"||D=="height")&&parseFloat(E)<0){E=g}return this.attr(D,E,"curCSS")},text:function(E){if(typeof E!=="object"&&E!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(E))}var D="";n.each(E||this,function(){n.each(this.childNodes,function(){if(this.nodeType!=8){D+=this.nodeType!=1?this.nodeValue:n.fn.text([this])}})});return D},wrapAll:function(D){if(this[0]){var E=n(D,this[0].ownerDocument).clone();if(this[0].parentNode){E.insertBefore(this[0])}E.map(function(){var F=this;while(F.firstChild){F=F.firstChild}return F}).append(this)}return this},wrapInner:function(D){return this.each(function(){n(this).contents().wrapAll(D)})},wrap:function(D){return this.each(function(){n(this).wrapAll(D)})},append:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.appendChild(D)}})},prepend:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.insertBefore(D,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this)})},after:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this.nextSibling)})},end:function(){return this.prevObject||n([])},push:[].push,find:function(D){if(this.length===1&&!/,/.test(D)){var F=this.pushStack([],"find",D);F.length=0;n.find(D,this[0],F);return F}else{var E=n.map(this,function(G){return n.find(D,G)});return this.pushStack(/[^+>] [^+>]/.test(D)?n.unique(E):E,"find",D)}},clone:function(E){var D=this.map(function(){if(!n.support.noCloneEvent&&!n.isXMLDoc(this)){var H=this.cloneNode(true),G=document.createElement("div");G.appendChild(H);return n.clean([G.innerHTML])[0]}else{return this.cloneNode(true)}});var F=D.find("*").andSelf().each(function(){if(this[h]!==g){this[h]=null}});if(E===true){this.find("*").andSelf().each(function(H){if(this.nodeType==3){return}var G=n.data(this,"events");for(var J in G){for(var I in G[J]){n.event.add(F[H],J,G[J][I],G[J][I].data)}}})}return D},filter:function(D){return this.pushStack(n.isFunction(D)&&n.grep(this,function(F,E){return D.call(F,E)})||n.multiFilter(D,n.grep(this,function(E){return E.nodeType===1})),"filter",D)},closest:function(D){var E=n.expr.match.POS.test(D)?n(D):null;return this.map(function(){var F=this;while(F&&F.ownerDocument){if(E?E.index(F)>-1:n(F).is(D)){return F}F=F.parentNode}})},not:function(D){if(typeof D==="string"){if(f.test(D)){return this.pushStack(n.multiFilter(D,this,true),"not",D)}else{D=n.multiFilter(D,this)}}var E=D.length&&D[D.length-1]!==g&&!D.nodeType;return this.filter(function(){return E?n.inArray(this,D)<0:this!=D})},add:function(D){return this.pushStack(n.unique(n.merge(this.get(),typeof D==="string"?n(D):n.makeArray(D))))},is:function(D){return !!D&&n.multiFilter(D,this).length>0},hasClass:function(D){return !!D&&this.is("."+D)},val:function(J){if(J===g){var D=this[0];if(D){if(n.nodeName(D,"option")){return(D.attributes.value||{}).specified?D.value:D.text}if(n.nodeName(D,"select")){var H=D.selectedIndex,K=[],L=D.options,G=D.type=="select-one";if(H<0){return null}for(var E=G?H:0,I=G?H+1:L.length;E=0||n.inArray(this.name,J)>=0)}else{if(n.nodeName(this,"select")){var M=n.makeArray(J);n("option",this).each(function(){this.selected=(n.inArray(this.value,M)>=0||n.inArray(this.text,M)>=0)});if(!M.length){this.selectedIndex=-1}}else{this.value=J}}})},html:function(D){return D===g?(this[0]?this[0].innerHTML:null):this.empty().append(D)},replaceWith:function(D){return this.after(D).remove()},eq:function(D){return this.slice(D,+D+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(D){return this.pushStack(n.map(this,function(F,E){return D.call(F,E,F)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=n.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild,D=this.length>1?I.cloneNode(true):I;if(H){for(var G=0,E=this.length;G0?D.cloneNode(true):I)}}if(F){n.each(F,y)}}return this;function K(N,O){return M&&n.nodeName(N,"table")&&n.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};n.fn.init.prototype=n.fn;function y(D,E){if(E.src){n.ajax({url:E.src,async:false,dataType:"script"})}else{n.globalEval(E.text||E.textContent||E.innerHTML||"")}if(E.parentNode){E.parentNode.removeChild(E)}}function e(){return +new Date}n.extend=n.fn.extend=function(){var I=arguments[0]||{},G=1,H=arguments.length,D=false,F;if(typeof I==="boolean"){D=I;I=arguments[1]||{};G=2}if(typeof I!=="object"&&!n.isFunction(I)){I={}}if(H==G){I=this;--G}for(;G-1}},swap:function(G,F,H){var D={};for(var E in F){D[E]=G.style[E];G.style[E]=F[E]}H.call(G);for(var E in F){G.style[E]=D[E]}},css:function(F,D,H){if(D=="width"||D=="height"){var J,E={position:"absolute",visibility:"hidden",display:"block"},I=D=="width"?["Left","Right"]:["Top","Bottom"];function G(){J=D=="width"?F.offsetWidth:F.offsetHeight;var L=0,K=0;n.each(I,function(){L+=parseFloat(n.curCSS(F,"padding"+this,true))||0;K+=parseFloat(n.curCSS(F,"border"+this+"Width",true))||0});J-=Math.round(L+K)}if(n(F).is(":visible")){G()}else{n.swap(F,E,G)}return Math.max(0,J)}return n.curCSS(F,D,H)},curCSS:function(H,E,F){var K,D=H.style;if(E=="opacity"&&!n.support.opacity){K=n.attr(D,"opacity");return K==""?"1":K}if(E.match(/float/i)){E=v}if(!F&&D&&D[E]){K=D[E]}else{if(p.getComputedStyle){if(E.match(/float/i)){E="float"}E=E.replace(/([A-Z])/g,"-$1").toLowerCase();var L=p.getComputedStyle(H,null);if(L){K=L.getPropertyValue(E)}if(E=="opacity"&&K==""){K="1"}}else{if(H.currentStyle){var I=E.replace(/\-(\w)/g,function(M,N){return N.toUpperCase()});K=H.currentStyle[E]||H.currentStyle[I];if(!/^\d+(px)?$/i.test(K)&&/^\d/.test(K)){var G=D.left,J=H.runtimeStyle.left;H.runtimeStyle.left=H.currentStyle.left;D.left=K||0;K=D.pixelLeft+"px";D.left=G;H.runtimeStyle.left=J}}}}return K},clean:function(E,J,H){J=J||document;if(typeof J.createElement==="undefined"){J=J.ownerDocument||J[0]&&J[0].ownerDocument||document}if(!H&&E.length===1&&typeof E[0]==="string"){var G=/^<(\w+)\s*\/?>$/.exec(E[0]);if(G){return[J.createElement(G[1])]}}var F=[],D=[],K=J.createElement("div");n.each(E,function(O,Q){if(typeof Q==="number"){Q+=""}if(!Q){return}if(typeof Q==="string"){Q=Q.replace(/(<(\w+)[^>]*?)\/>/g,function(S,T,R){return R.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?S:T+">"});var N=n.trim(Q).toLowerCase();var P=!N.indexOf("",""]||!N.indexOf("",""]||N.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
        "]||!N.indexOf("",""]||(!N.indexOf("",""]||!N.indexOf("",""]||!n.support.htmlSerialize&&[1,"div

        "]||[0,"",""];K.innerHTML=P[1]+Q+P[2];while(P[0]--){K=K.lastChild}if(!n.support.tbody){var M=!N.indexOf(""&&N.indexOf("=0;--L){if(n.nodeName(M[L],"tbody")&&!M[L].childNodes.length){M[L].parentNode.removeChild(M[L])}}}if(!n.support.leadingWhitespace&&/^\s/.test(Q)){K.insertBefore(J.createTextNode(Q.match(/^\s*/)[0]),K.firstChild)}Q=n.makeArray(K.childNodes)}if(Q.nodeType){F.push(Q)}else{F=n.merge(F,Q)}});if(H){for(var I=0;F[I];I++){if(n.nodeName(F[I],"script")&&(!F[I].type||F[I].type.toLowerCase()==="text/javascript")){D.push(F[I].parentNode?F[I].parentNode.removeChild(F[I]):F[I])}else{if(F[I].nodeType===1){F.splice.apply(F,[I+1,0].concat(n.makeArray(F[I].getElementsByTagName("script"))))}H.appendChild(F[I])}}return D}return F},attr:function(I,F,J){if(!I||I.nodeType==3||I.nodeType==8){return g}var G=!n.isXMLDoc(I),K=J!==g;F=G&&n.props[F]||F;if(I.tagName){var E=/href|src|style/.test(F);if(F=="selected"&&I.parentNode){I.parentNode.selectedIndex}if(F in I&&G&&!E){if(K){if(F=="type"&&n.nodeName(I,"input")&&I.parentNode){throw"type property can't be changed"}I[F]=J}if(n.nodeName(I,"form")&&I.getAttributeNode(F)){return I.getAttributeNode(F).nodeValue}if(F=="tabIndex"){var H=I.getAttributeNode("tabIndex");return H&&H.specified?H.value:I.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)?0:g}return I[F]}if(!n.support.style&&G&&F=="style"){return n.attr(I.style,"cssText",J)}if(K){I.setAttribute(F,""+J)}var D=!n.support.hrefNormalized&&G&&E?I.getAttribute(F,2):I.getAttribute(F);return D===null?g:D}if(!n.support.opacity&&F=="opacity"){if(K){I.zoom=1;I.filter=(I.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(J)+""=="NaN"?"":"alpha(opacity="+J*100+")")}return I.filter&&I.filter.indexOf("opacity=")>=0?(parseFloat(I.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}F=F.replace(/-([a-z])/ig,function(L,M){return M.toUpperCase()});if(K){I[F]=J}return I[F]},trim:function(D){return(D||"").replace(/^\s+|\s+$/g,"")},makeArray:function(F){var D=[];if(F!=null){var E=F.length;if(E==null||typeof F==="string"||n.isFunction(F)||F.setInterval){D[0]=F}else{while(E){D[--E]=F[E]}}}return D},inArray:function(F,G){for(var D=0,E=G.length;D*",this).remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(D,E){n.fn[D]=function(){return this.each(E,arguments)}});function j(D,E){return D[0]&&parseInt(n.curCSS(D[0],E,true),10)||0}var h="jQuery"+e(),u=0,z={};n.extend({cache:{},data:function(E,D,F){E=E==l?z:E;var G=E[h];if(!G){G=E[h]=++u}if(D&&!n.cache[G]){n.cache[G]={}}if(F!==g){n.cache[G][D]=F}return D?n.cache[G][D]:G},removeData:function(E,D){E=E==l?z:E;var G=E[h];if(D){if(n.cache[G]){delete n.cache[G][D];D="";for(D in n.cache[G]){break}if(!D){n.removeData(E)}}}else{try{delete E[h]}catch(F){if(E.removeAttribute){E.removeAttribute(h)}}delete n.cache[G]}},queue:function(E,D,G){if(E){D=(D||"fx")+"queue";var F=n.data(E,D);if(!F||n.isArray(G)){F=n.data(E,D,n.makeArray(G))}else{if(G){F.push(G)}}}return F},dequeue:function(G,F){var D=n.queue(G,F),E=D.shift();if(!F||F==="fx"){E=D[0]}if(E!==g){E.call(G)}}});n.fn.extend({data:function(D,F){var G=D.split(".");G[1]=G[1]?"."+G[1]:"";if(F===g){var E=this.triggerHandler("getData"+G[1]+"!",[G[0]]);if(E===g&&this.length){E=n.data(this[0],D)}return E===g&&G[1]?this.data(G[0]):E}else{return this.trigger("setData"+G[1]+"!",[G[0],F]).each(function(){n.data(this,D,F)})}},removeData:function(D){return this.each(function(){n.removeData(this,D)})},queue:function(D,E){if(typeof D!=="string"){E=D;D="fx"}if(E===g){return n.queue(this[0],D)}return this.each(function(){var F=n.queue(this,D,E);if(D=="fx"&&F.length==1){F[0].call(this)}})},dequeue:function(D){return this.each(function(){n.dequeue(this,D)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.1 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var N=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,I=0,F=Object.prototype.toString;var E=function(ae,S,aa,V){aa=aa||[];S=S||document;if(S.nodeType!==1&&S.nodeType!==9){return[]}if(!ae||typeof ae!=="string"){return aa}var ab=[],ac,Y,ah,ag,Z,R,Q=true;N.lastIndex=0;while((ac=N.exec(ae))!==null){ab.push(ac[1]);if(ac[2]){R=RegExp.rightContext;break}}if(ab.length>1&&G.match.POS.exec(ae)){if(ab.length===2&&G.relative[ab[0]]){var U="",X;while((X=G.match.POS.exec(ae))){U+=X[0];ae=ae.replace(G.match.POS,"")}Y=E.filter(U,E(/\s$/.test(ae)?ae+"*":ae,S))}else{Y=G.relative[ab[0]]?[S]:E(ab.shift(),S);while(ab.length){var P=[];ae=ab.shift();if(G.relative[ae]){ae+=ab.shift()}for(var af=0,ad=Y.length;af0){ah=D(Y)}else{Q=false}while(ab.length){var T=ab.pop(),W=T;if(!G.relative[T]){T=""}else{W=ab.pop()}if(W==null){W=S}G.relative[T](ah,W,M(S))}}if(!ah){ah=Y}if(!ah){throw"Syntax error, unrecognized expression: "+(T||ae)}if(F.call(ah)==="[object Array]"){if(!Q){aa.push.apply(aa,ah)}else{if(S.nodeType===1){for(var af=0;ah[af]!=null;af++){if(ah[af]&&(ah[af]===true||ah[af].nodeType===1&&H(S,ah[af]))){aa.push(Y[af])}}}else{for(var af=0;ah[af]!=null;af++){if(ah[af]&&ah[af].nodeType===1){aa.push(Y[af])}}}}}else{D(ah,aa)}if(R){E(R,S,aa,V)}return aa};E.matches=function(P,Q){return E(P,null,null,Q)};E.find=function(V,S){var W,Q;if(!V){return[]}for(var R=0,P=G.order.length;R":function(U,Q,V){if(typeof Q==="string"&&!/\W/.test(Q)){Q=V?Q:Q.toUpperCase();for(var R=0,P=U.length;R=0){if(!R){P.push(Q[T])}}else{if(R){Q[T]=false}}}return false},ID:function(P){return P[1].replace(/\\/g,"")},TAG:function(Q,P){for(var R=0;!P[R];R++){}return M(P[R])?Q[1]:Q[1].toUpperCase()},CHILD:function(P){if(P[1]=="nth"){var Q=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(P[2]=="even"&&"2n"||P[2]=="odd"&&"2n+1"||!/\D/.test(P[2])&&"0n+"+P[2]||P[2]);P[2]=(Q[1]+(Q[2]||1))-0;P[3]=Q[3]-0}P[0]="done"+(I++);return P},ATTR:function(Q){var P=Q[1];if(G.attrMap[P]){Q[1]=G.attrMap[P]}if(Q[2]==="~="){Q[4]=" "+Q[4]+" "}return Q},PSEUDO:function(T,Q,R,P,U){if(T[1]==="not"){if(T[3].match(N).length>1){T[3]=E(T[3],null,null,Q)}else{var S=E.filter(T[3],Q,R,true^U);if(!R){P.push.apply(P,S)}return false}}else{if(G.match.POS.test(T[0])){return true}}return T},POS:function(P){P.unshift(true);return P}},filters:{enabled:function(P){return P.disabled===false&&P.type!=="hidden"},disabled:function(P){return P.disabled===true},checked:function(P){return P.checked===true},selected:function(P){P.parentNode.selectedIndex;return P.selected===true},parent:function(P){return !!P.firstChild},empty:function(P){return !P.firstChild},has:function(R,Q,P){return !!E(P[3],R).length},header:function(P){return/h\d/i.test(P.nodeName)},text:function(P){return"text"===P.type},radio:function(P){return"radio"===P.type},checkbox:function(P){return"checkbox"===P.type},file:function(P){return"file"===P.type},password:function(P){return"password"===P.type},submit:function(P){return"submit"===P.type},image:function(P){return"image"===P.type},reset:function(P){return"reset"===P.type},button:function(P){return"button"===P.type||P.nodeName.toUpperCase()==="BUTTON"},input:function(P){return/input|select|textarea|button/i.test(P.nodeName)}},setFilters:{first:function(Q,P){return P===0},last:function(R,Q,P,S){return Q===S.length-1},even:function(Q,P){return P%2===0},odd:function(Q,P){return P%2===1},lt:function(R,Q,P){return QP[3]-0},nth:function(R,Q,P){return P[3]-0==Q},eq:function(R,Q,P){return P[3]-0==Q}},filter:{CHILD:function(P,S){var V=S[1],W=P.parentNode;var U="child"+W.childNodes.length;if(W&&(!W[U]||!P.nodeIndex)){var T=1;for(var Q=W.firstChild;Q;Q=Q.nextSibling){if(Q.nodeType==1){Q.nodeIndex=T++}}W[U]=T-1}if(V=="first"){return P.nodeIndex==1}else{if(V=="last"){return P.nodeIndex==W[U]}else{if(V=="only"){return W[U]==1}else{if(V=="nth"){var Y=false,R=S[2],X=S[3];if(R==1&&X==0){return true}if(R==0){if(P.nodeIndex==X){Y=true}}else{if((P.nodeIndex-X)%R==0&&(P.nodeIndex-X)/R>=0){Y=true}}return Y}}}}},PSEUDO:function(V,R,S,W){var Q=R[1],T=G.filters[Q];if(T){return T(V,S,R,W)}else{if(Q==="contains"){return(V.textContent||V.innerText||"").indexOf(R[3])>=0}else{if(Q==="not"){var U=R[3];for(var S=0,P=U.length;S=0:S==="~="?(" "+U+" ").indexOf(Q)>=0:!R[4]?P:S==="!="?U!=Q:S==="^="?U.indexOf(Q)===0:S==="$="?U.substr(U.length-Q.length)===Q:S==="|="?U===Q||U.substr(0,Q.length+1)===Q+"-":false},POS:function(T,Q,R,U){var P=Q[2],S=G.setFilters[P];if(S){return S(T,R,Q,U)}}}};for(var K in G.match){G.match[K]=RegExp(G.match[K].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var D=function(Q,P){Q=Array.prototype.slice.call(Q);if(P){P.push.apply(P,Q);return P}return Q};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(J){D=function(T,S){var Q=S||[];if(F.call(T)==="[object Array]"){Array.prototype.push.apply(Q,T)}else{if(typeof T.length==="number"){for(var R=0,P=T.length;R";var P=document.documentElement;P.insertBefore(Q,P.firstChild);if(!!document.getElementById(R)){G.find.ID=function(T,U){if(U.getElementById){var S=U.getElementById(T[1]);return S?S.id===T[1]||S.getAttributeNode&&S.getAttributeNode("id").nodeValue===T[1]?[S]:g:[]}};G.filter.ID=function(U,S){var T=U.getAttributeNode&&U.getAttributeNode("id");return U.nodeType===1&&T&&T.nodeValue===S}}P.removeChild(Q)})();(function(){var P=document.createElement("div");P.appendChild(document.createComment(""));if(P.getElementsByTagName("*").length>0){G.find.TAG=function(Q,U){var T=U.getElementsByTagName(Q[1]);if(Q[1]==="*"){var S=[];for(var R=0;T[R];R++){if(T[R].nodeType===1){S.push(T[R])}}T=S}return T}}P.innerHTML="";if(P.firstChild.getAttribute("href")!=="#"){G.attrHandle.href=function(Q){return Q.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var P=E;E=function(T,S,Q,R){S=S||document;if(!R&&S.nodeType===9){try{return D(S.querySelectorAll(T),Q)}catch(U){}}return P(T,S,Q,R)};E.find=P.find;E.filter=P.filter;E.selectors=P.selectors;E.matches=P.matches})()}if(document.documentElement.getElementsByClassName){G.order.splice(1,0,"CLASS");G.find.CLASS=function(P,Q){return Q.getElementsByClassName(P[1])}}function L(Q,W,V,Z,X,Y){for(var T=0,R=Z.length;T0){T=P;break}}}P=P[Q]}Y[S]=T}}}var H=document.compareDocumentPosition?function(Q,P){return Q.compareDocumentPosition(P)&16}:function(Q,P){return Q!==P&&(Q.contains?Q.contains(P):true)};var M=function(P){return P.documentElement&&!P.body||P.tagName&&P.ownerDocument&&!P.ownerDocument.body};n.find=E;n.filter=E.filter;n.expr=E.selectors;n.expr[":"]=n.expr.filters;E.selectors.filters.hidden=function(P){return"hidden"===P.type||n.css(P,"display")==="none"||n.css(P,"visibility")==="hidden"};E.selectors.filters.visible=function(P){return"hidden"!==P.type&&n.css(P,"display")!=="none"&&n.css(P,"visibility")!=="hidden"};E.selectors.filters.animated=function(P){return n.grep(n.timers,function(Q){return P===Q.elem}).length};n.multiFilter=function(R,P,Q){if(Q){R=":not("+R+")"}return E.matches(R,P)};n.dir=function(R,Q){var P=[],S=R[Q];while(S&&S!=document){if(S.nodeType==1){P.push(S)}S=S[Q]}return P};n.nth=function(T,P,R,S){P=P||1;var Q=0;for(;T;T=T[R]){if(T.nodeType==1&&++Q==P){break}}return T};n.sibling=function(R,Q){var P=[];for(;R;R=R.nextSibling){if(R.nodeType==1&&R!=Q){P.push(R)}}return P};return;l.Sizzle=E})();n.event={add:function(H,E,G,J){if(H.nodeType==3||H.nodeType==8){return}if(H.setInterval&&H!=l){H=l}if(!G.guid){G.guid=this.guid++}if(J!==g){var F=G;G=this.proxy(F);G.data=J}var D=n.data(H,"events")||n.data(H,"events",{}),I=n.data(H,"handle")||n.data(H,"handle",function(){return typeof n!=="undefined"&&!n.event.triggered?n.event.handle.apply(arguments.callee.elem,arguments):g});I.elem=H;n.each(E.split(/\s+/),function(L,M){var N=M.split(".");M=N.shift();G.type=N.slice().sort().join(".");var K=D[M];if(n.event.specialAll[M]){n.event.specialAll[M].setup.call(H,J,N)}if(!K){K=D[M]={};if(!n.event.special[M]||n.event.special[M].setup.call(H,J,N)===false){if(H.addEventListener){H.addEventListener(M,I,false)}else{if(H.attachEvent){H.attachEvent("on"+M,I)}}}}K[G.guid]=G;n.event.global[M]=true});H=null},guid:1,global:{},remove:function(J,G,I){if(J.nodeType==3||J.nodeType==8){return}var F=n.data(J,"events"),E,D;if(F){if(G===g||(typeof G==="string"&&G.charAt(0)==".")){for(var H in F){this.remove(J,H+(G||""))}}else{if(G.type){I=G.handler;G=G.type}n.each(G.split(/\s+/),function(L,N){var P=N.split(".");N=P.shift();var M=RegExp("(^|\\.)"+P.slice().sort().join(".*\\.")+"(\\.|$)");if(F[N]){if(I){delete F[N][I.guid]}else{for(var O in F[N]){if(M.test(F[N][O].type)){delete F[N][O]}}}if(n.event.specialAll[N]){n.event.specialAll[N].teardown.call(J,P)}for(E in F[N]){break}if(!E){if(!n.event.special[N]||n.event.special[N].teardown.call(J,P)===false){if(J.removeEventListener){J.removeEventListener(N,n.data(J,"handle"),false)}else{if(J.detachEvent){J.detachEvent("on"+N,n.data(J,"handle"))}}}E=null;delete F[N]}}})}for(E in F){break}if(!E){var K=n.data(J,"handle");if(K){K.elem=null}n.removeData(J,"events");n.removeData(J,"handle")}}},trigger:function(H,J,G,D){var F=H.type||H;if(!D){H=typeof H==="object"?H[h]?H:n.extend(n.Event(F),H):n.Event(F);if(F.indexOf("!")>=0){H.type=F=F.slice(0,-1);H.exclusive=true}if(!G){H.stopPropagation();if(this.global[F]){n.each(n.cache,function(){if(this.events&&this.events[F]){n.event.trigger(H,J,this.handle.elem)}})}}if(!G||G.nodeType==3||G.nodeType==8){return g}H.result=g;H.target=G;J=n.makeArray(J);J.unshift(H)}H.currentTarget=G;var I=n.data(G,"handle");if(I){I.apply(G,J)}if((!G[F]||(n.nodeName(G,"a")&&F=="click"))&&G["on"+F]&&G["on"+F].apply(G,J)===false){H.result=false}if(!D&&G[F]&&!H.isDefaultPrevented()&&!(n.nodeName(G,"a")&&F=="click")){this.triggered=true;try{G[F]()}catch(K){}}this.triggered=false;if(!H.isPropagationStopped()){var E=G.parentNode||G.ownerDocument;if(E){n.event.trigger(H,J,E,true)}}},handle:function(J){var I,D;J=arguments[0]=n.event.fix(J||l.event);var K=J.type.split(".");J.type=K.shift();I=!K.length&&!J.exclusive;var H=RegExp("(^|\\.)"+K.slice().sort().join(".*\\.")+"(\\.|$)");D=(n.data(this,"events")||{})[J.type];for(var F in D){var G=D[F];if(I||H.test(G.type)){J.handler=G;J.data=G.data;var E=G.apply(this,arguments);if(E!==g){J.result=E;if(E===false){J.preventDefault();J.stopPropagation()}}if(J.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(G){if(G[h]){return G}var E=G;G=n.Event(E);for(var F=this.props.length,I;F;){I=this.props[--F];G[I]=E[I]}if(!G.target){G.target=G.srcElement||document}if(G.target.nodeType==3){G.target=G.target.parentNode}if(!G.relatedTarget&&G.fromElement){G.relatedTarget=G.fromElement==G.target?G.toElement:G.fromElement}if(G.pageX==null&&G.clientX!=null){var H=document.documentElement,D=document.body;G.pageX=G.clientX+(H&&H.scrollLeft||D&&D.scrollLeft||0)-(H.clientLeft||0);G.pageY=G.clientY+(H&&H.scrollTop||D&&D.scrollTop||0)-(H.clientTop||0)}if(!G.which&&((G.charCode||G.charCode===0)?G.charCode:G.keyCode)){G.which=G.charCode||G.keyCode}if(!G.metaKey&&G.ctrlKey){G.metaKey=G.ctrlKey}if(!G.which&&G.button){G.which=(G.button&1?1:(G.button&2?3:(G.button&4?2:0)))}return G},proxy:function(E,D){D=D||function(){return E.apply(this,arguments)};D.guid=E.guid=E.guid||D.guid||this.guid++;return D},special:{ready:{setup:A,teardown:function(){}}},specialAll:{live:{setup:function(D,E){n.event.add(this,E[0],c)},teardown:function(F){if(F.length){var D=0,E=RegExp("(^|\\.)"+F[0]+"(\\.|$)");n.each((n.data(this,"events").live||{}),function(){if(E.test(this.type)){D++}});if(D<1){n.event.remove(this,F[0],c)}}}}}};n.Event=function(D){if(!this.preventDefault){return new n.Event(D)}if(D&&D.type){this.originalEvent=D;this.type=D.type;this.timeStamp=D.timeStamp}else{this.type=D}if(!this.timeStamp){this.timeStamp=e()}this[h]=true};function k(){return false}function t(){return true}n.Event.prototype={preventDefault:function(){this.isDefaultPrevented=t;var D=this.originalEvent;if(!D){return}if(D.preventDefault){D.preventDefault()}D.returnValue=false},stopPropagation:function(){this.isPropagationStopped=t;var D=this.originalEvent;if(!D){return}if(D.stopPropagation){D.stopPropagation()}D.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=t;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(E){var D=E.relatedTarget;while(D&&D!=this){try{D=D.parentNode}catch(F){D=this}}if(D!=this){E.type=E.data;n.event.handle.apply(this,arguments)}};n.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(E,D){n.event.special[D]={setup:function(){n.event.add(this,E,a,D)},teardown:function(){n.event.remove(this,E,a)}}});n.fn.extend({bind:function(E,F,D){return E=="unload"?this.one(E,F,D):this.each(function(){n.event.add(this,E,D||F,D&&F)})},one:function(F,G,E){var D=n.event.proxy(E||G,function(H){n(this).unbind(H,D);return(E||G).apply(this,arguments)});return this.each(function(){n.event.add(this,F,D,E&&G)})},unbind:function(E,D){return this.each(function(){n.event.remove(this,E,D)})},trigger:function(D,E){return this.each(function(){n.event.trigger(D,E,this)})},triggerHandler:function(D,F){if(this[0]){var E=n.Event(D);E.preventDefault();E.stopPropagation();n.event.trigger(E,F,this[0]);return E.result}},toggle:function(F){var D=arguments,E=1;while(E=0){var D=F.slice(H,F.length);F=F.slice(0,H)}var G="GET";if(I){if(n.isFunction(I)){J=I;I=null}else{if(typeof I==="object"){I=n.param(I);G="POST"}}}var E=this;n.ajax({url:F,type:G,dataType:"html",data:I,complete:function(L,K){if(K=="success"||K=="notmodified"){E.html(D?n("
        ").append(L.responseText.replace(//g,"")).find(D):L.responseText)}if(J){E.each(J,[L.responseText,K,L])}}});return this},serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?n.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(D,E){var F=n(this).val();return F==null?null:n.isArray(F)?n.map(F,function(H,G){return{name:E.name,value:H}}):{name:E.name,value:F}}).get()}});n.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(D,E){n.fn[E]=function(F){return this.bind(E,F)}});var q=e();n.extend({get:function(D,F,G,E){if(n.isFunction(F)){G=F;F=null}return n.ajax({type:"GET",url:D,data:F,success:G,dataType:E})},getScript:function(D,E){return n.get(D,null,E,"script")},getJSON:function(D,E,F){return n.get(D,E,F,"json")},post:function(D,F,G,E){if(n.isFunction(F)){G=F;F={}}return n.ajax({type:"POST",url:D,data:F,success:G,dataType:E})},ajaxSetup:function(D){n.extend(n.ajaxSettings,D)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(L){L=n.extend(true,L,n.extend(true,{},n.ajaxSettings,L));var V,E=/=\?(&|$)/g,Q,U,F=L.type.toUpperCase();if(L.data&&L.processData&&typeof L.data!=="string"){L.data=n.param(L.data)}if(L.dataType=="jsonp"){if(F=="GET"){if(!L.url.match(E)){L.url+=(L.url.match(/\?/)?"&":"?")+(L.jsonp||"callback")+"=?"}}else{if(!L.data||!L.data.match(E)){L.data=(L.data?L.data+"&":"")+(L.jsonp||"callback")+"=?"}}L.dataType="json"}if(L.dataType=="json"&&(L.data&&L.data.match(E)||L.url.match(E))){V="jsonp"+q++;if(L.data){L.data=(L.data+"").replace(E,"="+V+"$1")}L.url=L.url.replace(E,"="+V+"$1");L.dataType="script";l[V]=function(W){U=W;H();K();l[V]=g;try{delete l[V]}catch(X){}if(G){G.removeChild(S)}}}if(L.dataType=="script"&&L.cache==null){L.cache=false}if(L.cache===false&&F=="GET"){var D=e();var T=L.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+D+"$2");L.url=T+((T==L.url)?(L.url.match(/\?/)?"&":"?")+"_="+D:"")}if(L.data&&F=="GET"){L.url+=(L.url.match(/\?/)?"&":"?")+L.data;L.data=null}if(L.global&&!n.active++){n.event.trigger("ajaxStart")}var P=/^(\w+:)?\/\/([^\/?#]+)/.exec(L.url);if(L.dataType=="script"&&F=="GET"&&P&&(P[1]&&P[1]!=location.protocol||P[2]!=location.host)){var G=document.getElementsByTagName("head")[0];var S=document.createElement("script");S.src=L.url;if(L.scriptCharset){S.charset=L.scriptCharset}if(!V){var N=false;S.onload=S.onreadystatechange=function(){if(!N&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){N=true;H();K();G.removeChild(S)}}}G.appendChild(S);return g}var J=false;var I=L.xhr();if(L.username){I.open(F,L.url,L.async,L.username,L.password)}else{I.open(F,L.url,L.async)}try{if(L.data){I.setRequestHeader("Content-Type",L.contentType)}if(L.ifModified){I.setRequestHeader("If-Modified-Since",n.lastModified[L.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}I.setRequestHeader("X-Requested-With","XMLHttpRequest");I.setRequestHeader("Accept",L.dataType&&L.accepts[L.dataType]?L.accepts[L.dataType]+", */*":L.accepts._default)}catch(R){}if(L.beforeSend&&L.beforeSend(I,L)===false){if(L.global&&!--n.active){n.event.trigger("ajaxStop")}I.abort();return false}if(L.global){n.event.trigger("ajaxSend",[I,L])}var M=function(W){if(I.readyState==0){if(O){clearInterval(O);O=null;if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}}else{if(!J&&I&&(I.readyState==4||W=="timeout")){J=true;if(O){clearInterval(O);O=null}Q=W=="timeout"?"timeout":!n.httpSuccess(I)?"error":L.ifModified&&n.httpNotModified(I,L.url)?"notmodified":"success";if(Q=="success"){try{U=n.httpData(I,L.dataType,L)}catch(Y){Q="parsererror"}}if(Q=="success"){var X;try{X=I.getResponseHeader("Last-Modified")}catch(Y){}if(L.ifModified&&X){n.lastModified[L.url]=X}if(!V){H()}}else{n.handleError(L,I,Q)}K();if(L.async){I=null}}}};if(L.async){var O=setInterval(M,13);if(L.timeout>0){setTimeout(function(){if(I){if(!J){M("timeout")}if(I){I.abort()}}},L.timeout)}}try{I.send(L.data)}catch(R){n.handleError(L,I,null,R)}if(!L.async){M()}function H(){if(L.success){L.success(U,Q)}if(L.global){n.event.trigger("ajaxSuccess",[I,L])}}function K(){if(L.complete){L.complete(I,Q)}if(L.global){n.event.trigger("ajaxComplete",[I,L])}if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}return I},handleError:function(E,G,D,F){if(E.error){E.error(G,D,F)}if(E.global){n.event.trigger("ajaxError",[G,E,F])}},active:0,httpSuccess:function(E){try{return !E.status&&location.protocol=="file:"||(E.status>=200&&E.status<300)||E.status==304||E.status==1223}catch(D){}return false},httpNotModified:function(F,D){try{var G=F.getResponseHeader("Last-Modified");return F.status==304||G==n.lastModified[D]}catch(E){}return false},httpData:function(I,G,F){var E=I.getResponseHeader("content-type"),D=G=="xml"||!G&&E&&E.indexOf("xml")>=0,H=D?I.responseXML:I.responseText;if(D&&H.documentElement.tagName=="parsererror"){throw"parsererror"}if(F&&F.dataFilter){H=F.dataFilter(H,G)}if(typeof H==="string"){if(G=="script"){n.globalEval(H)}if(G=="json"){H=l["eval"]("("+H+")")}}return H},param:function(D){var F=[];function G(H,I){F[F.length]=encodeURIComponent(H)+"="+encodeURIComponent(I)}if(n.isArray(D)||D.jquery){n.each(D,function(){G(this.name,this.value)})}else{for(var E in D){if(n.isArray(D[E])){n.each(D[E],function(){G(E,this)})}else{G(E,n.isFunction(D[E])?D[E]():D[E])}}}return F.join("&").replace(/%20/g,"+")}});var m={},d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function s(E,D){var F={};n.each(d.concat.apply([],d.slice(0,D)),function(){F[this]=E});return F}n.fn.extend({show:function(I,K){if(I){return this.animate(s("show",3),I,K)}else{for(var G=0,E=this.length;G").appendTo("body");J=H.css("display");if(J==="none"){J="block"}H.remove();m[F]=J}this[G].style.display=n.data(this[G],"olddisplay",J)}}return this}},hide:function(G,H){if(G){return this.animate(s("hide",3),G,H)}else{for(var F=0,E=this.length;F=0;G--){if(F[G].elem==this){if(D){F[G](true)}F.splice(G,1)}}});if(!D){this.dequeue()}return this}});n.each({slideDown:s("show",1),slideUp:s("hide",1),slideToggle:s("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(D,E){n.fn[D]=function(F,G){return this.animate(E,F,G)}});n.extend({speed:function(F,G,E){var D=typeof F==="object"?F:{complete:E||!E&&G||n.isFunction(F)&&F,duration:F,easing:E&&G||G&&!n.isFunction(G)&&G};D.duration=n.fx.off?0:typeof D.duration==="number"?D.duration:n.fx.speeds[D.duration]||n.fx.speeds._default;D.old=D.complete;D.complete=function(){if(D.queue!==false){n(this).dequeue()}if(n.isFunction(D.old)){D.old.call(this)}};return D},easing:{linear:function(F,G,D,E){return D+E*F},swing:function(F,G,D,E){return((-Math.cos(F*Math.PI)/2)+0.5)*E+D}},timers:[],timerId:null,fx:function(E,D,F){this.options=D;this.elem=E;this.prop=F;if(!D.orig){D.orig={}}}});n.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(n.fx.step[this.prop]||n.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(E){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var D=parseFloat(n.css(this.elem,this.prop,E));return D&&D>-10000?D:parseFloat(n.curCSS(this.elem,this.prop))||0},custom:function(H,G,F){this.startTime=e();this.start=H;this.end=G;this.unit=F||this.unit||"px";this.now=this.start;this.pos=this.state=0;var D=this;function E(I){return D.step(I)}E.elem=this.elem;n.timers.push(E);if(E()&&n.timerId==null){n.timerId=setInterval(function(){var J=n.timers;for(var I=0;I=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var D=true;for(var E in this.options.curAnim){if(this.options.curAnim[E]!==true){D=false}}if(D){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(n.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){n(this.elem).hide()}if(this.options.hide||this.options.show){for(var H in this.options.curAnim){n.attr(this.elem.style,H,this.options.orig[H])}}}if(D){this.options.complete.call(this.elem)}return false}else{var I=F-this.startTime;this.state=I/this.options.duration;this.pos=n.easing[this.options.easing||(n.easing.swing?"swing":"linear")](this.state,I,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};n.extend(n.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(D){n.attr(D.elem.style,"opacity",D.now)},_default:function(D){if(D.elem.style&&D.elem.style[D.prop]!=null){D.elem.style[D.prop]=D.now+D.unit}else{D.elem[D.prop]=D.now}}}});if(document.documentElement.getBoundingClientRect){n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}var F=this[0].getBoundingClientRect(),I=this[0].ownerDocument,E=I.body,D=I.documentElement,K=D.clientTop||E.clientTop||0,J=D.clientLeft||E.clientLeft||0,H=F.top+(self.pageYOffset||n.boxModel&&D.scrollTop||E.scrollTop)-K,G=F.left+(self.pageXOffset||n.boxModel&&D.scrollLeft||E.scrollLeft)-J;return{top:H,left:G}}}else{n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}n.offset.initialized||n.offset.initialize();var I=this[0],F=I.offsetParent,E=I,N=I.ownerDocument,L,G=N.documentElement,J=N.body,K=N.defaultView,D=K.getComputedStyle(I,null),M=I.offsetTop,H=I.offsetLeft;while((I=I.parentNode)&&I!==J&&I!==G){L=K.getComputedStyle(I,null);M-=I.scrollTop,H-=I.scrollLeft;if(I===F){M+=I.offsetTop,H+=I.offsetLeft;if(n.offset.doesNotAddBorder&&!(n.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(I.tagName))){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}E=F,F=I.offsetParent}if(n.offset.subtractsBorderForOverflowNotVisible&&L.overflow!=="visible"){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}D=L}if(D.position==="relative"||D.position==="static"){M+=J.offsetTop,H+=J.offsetLeft}if(D.position==="fixed"){M+=Math.max(G.scrollTop,J.scrollTop),H+=Math.max(G.scrollLeft,J.scrollLeft)}return{top:M,left:H}}}n.offset={initialize:function(){if(this.initialized){return}var K=document.body,E=document.createElement("div"),G,F,M,H,L,D,I=K.style.marginTop,J='
        ';L={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(D in L){E.style[D]=L[D]}E.innerHTML=J;K.insertBefore(E,K.firstChild);G=E.firstChild,F=G.firstChild,H=G.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(F.offsetTop!==5);this.doesAddBorderForTableAndCells=(H.offsetTop===5);G.style.overflow="hidden",G.style.position="relative";this.subtractsBorderForOverflowNotVisible=(F.offsetTop===-5);K.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(K.offsetTop===0);K.style.marginTop=I;K.removeChild(E);this.initialized=true},bodyOffset:function(D){n.offset.initialized||n.offset.initialize();var F=D.offsetTop,E=D.offsetLeft;if(n.offset.doesNotIncludeMarginInBodyOffset){F+=parseInt(n.curCSS(D,"marginTop",true),10)||0,E+=parseInt(n.curCSS(D,"marginLeft",true),10)||0}return{top:F,left:E}}};n.fn.extend({position:function(){var H=0,G=0,E;if(this[0]){var F=this.offsetParent(),I=this.offset(),D=/^body|html$/i.test(F[0].tagName)?{top:0,left:0}:F.offset();I.top-=j(this,"marginTop");I.left-=j(this,"marginLeft");D.top+=j(F,"borderTopWidth");D.left+=j(F,"borderLeftWidth");E={top:I.top-D.top,left:I.left-D.left}}return E},offsetParent:function(){var D=this[0].offsetParent||document.body;while(D&&(!/^body|html$/i.test(D.tagName)&&n.css(D,"position")=="static")){D=D.offsetParent}return n(D)}});n.each(["Left","Top"],function(E,D){var F="scroll"+D;n.fn[F]=function(G){if(!this[0]){return null}return G!==g?this.each(function(){this==l||this==document?l.scrollTo(!E?G:n(l).scrollLeft(),E?G:n(l).scrollTop()):this[F]=G}):this[0]==l||this[0]==document?self[E?"pageYOffset":"pageXOffset"]||n.boxModel&&document.documentElement[F]||document.body[F]:this[0][F]}});n.each(["Height","Width"],function(G,E){var D=G?"Left":"Top",F=G?"Right":"Bottom";n.fn["inner"+E]=function(){return this[E.toLowerCase()]()+j(this,"padding"+D)+j(this,"padding"+F)};n.fn["outer"+E]=function(I){return this["inner"+E]()+j(this,"border"+D+"Width")+j(this,"border"+F+"Width")+(I?j(this,"margin"+D)+j(this,"margin"+F):0)};var H=E.toLowerCase();n.fn[H]=function(I){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+E]||document.body["client"+E]:this[0]==document?Math.max(document.documentElement["client"+E],document.body["scroll"+E],document.documentElement["scroll"+E],document.body["offset"+E],document.documentElement["offset"+E]):I===g?(this.length?n.css(this[0],H):null):this.css(H,typeof I==="string"?I:I+"px")}})})(); \ No newline at end of file diff --git a/main/interfaces/wizard/static/javascript/pagetwo.js b/main/interfaces/wizard/static/javascript/pagetwo.js deleted file mode 100644 index 0939a7a..0000000 --- a/main/interfaces/wizard/static/javascript/pagetwo.js +++ /dev/null @@ -1,23 +0,0 @@ -function toggleWebPass() -{ - var web - web = $('#enable_webpass').attr('checked') - if ($('#enable_webpass').attr('checked') == 1) - { - $('#web_user').attr("disabled",""); - $('#web_pass').attr("disabled",""); - - } else { - $('#web_user').attr("disabled","disabled"); - $('#web_pass').attr("value",""); - $('#web_pass').attr("disabled","disabled"); - $('#web_user').attr("value",""); - } -}; - -$(document).ready(function() { - toggleWebPass(); - $('#enable_webpass').bind('change click focus', function() { - toggleWebPass(); - }); -}); \ No newline at end of file diff --git a/main/interfaces/wizard/static/javascript/restart.js b/main/interfaces/wizard/static/javascript/restart.js deleted file mode 100644 index df43f72..0000000 --- a/main/interfaces/wizard/static/javascript/restart.js +++ /dev/null @@ -1,17 +0,0 @@ -function complete(){ - $(".hidden").fadeIn("slow"); - $(".disabled").removeAttr('disabled'); - $('#restarting').addClass("hidden"); - $('#complete').removeClass("hidden"); - $('#tips').removeClass("hidden"); -} -$(document).ready(function() { - $.ajax({ - type: "POST", - url: "../tapi", - data: "mode=restart&apikey="+$('#apikey').val() , - complete: function(result){ - setTimeout(complete,7000); - } - }); -}); \ No newline at end of file diff --git a/main/interfaces/wizard/static/style.css b/main/interfaces/wizard/static/style.css deleted file mode 100644 index a6f22e3..0000000 --- a/main/interfaces/wizard/static/style.css +++ /dev/null @@ -1,232 +0,0 @@ -body { - font-size:13px; - font-family: sans-serif; - background:#DEDEAF; - padding-left:5%; - padding-right:5%; - padding-bottom:10px; - text-align:center; -} - -#page { - /*background-color: #ccc;*/ - /*margin:30px;*/ - border: 1px solid #000; - text-align:left; - padding:8px; - background-color: #fff; -} - -#inner { - background-color: #fff; - padding:4px 32px 20px 32px; - /*margin:5px;*/ - border: 1px dotted #999966; -} -#content { - min-height:520px; -} - -#logo { - float:center; - /*margin-top:30px;*/ - z-index:40; - margin-bottom:-40px; -} - -hr { - color:#fff; - background-color:#fff; - border: 1px dotted #ccc; - border-style:none none dotted; -} - -.float { - float:left; -} - -.clear { - clear: left; -} - -.inline{display:inline;} - - -.quoteBlock { - padding:5px; - border: 1px dotted #000; - background-color:#f5f5f5; -} - -.success { - color:green; -} - -.failed { - color:red; -} - -#serverBlock { - width:300px; - float:right; -} - -#rightGreyText { - color:#ccc; - width:100%; - text-align:right; - padding-top:3px; - font-style:italic; -} - -.indented { - padding-left:10px; -} - - -.label { - text-align: left; - width: 100px; - padding-right: 20px; - padding-left:10px; -} - -#serverDetails .label{ - display: block; - width: 100px; - float: left; - margin-bottom: 15px; -} -#serverDetails input { - /*width: 150px;*/ -} - -.sup { - vertical-align: sup !important; - -} - -h2 { - /*display:inline;*/ -} - -h1,h2 { - display:inline; -} - -.align-right { - text-align:right; -} - -.align-center { - text-align:center; -} -.float-center { - float:center; -} - -.unselected { - padding:1px 5px 1px 5px; - border: 1px solid red; - margin-left:8px; - margin-right:8px; - color:red; -} - -.selected { - padding:1px 5px 1px 5px; - color: white; - background-color:red; - border: 1px solid red; - margin-left:8px; - margin-right:8px; -} - -.bigger { - font-size:14px; -} - -.padded { - padding:12px; -} - -.bigger input { - font-size:16px; -} - -.required-star { - color:red; -} - -.full-width { - width:100%; -} - -.bigbutton { - font-size:18px !important; -} - -.bold { - font-weight:bold; -} - -.correct { - border: 2px solid #00cc22; -} - -.incorrect { - border: 2px solid red; -} - -.hidden { - display:none !important; -} - -.text-input{ - width:130px; -} -.text-input-wide{ - width:230px; -} -.text-input-thin{ - width:50px; -} -/*Fix for inputs messing up when adding a class in chrome */ -.clearinput -{ - margin-bottom:6px; -} - -.disabled-text { - text-decoration: line-through; - color:#ccc; -} - -#serverQuote{ - width:100%; - height:16px; - display:inline; -} - -.skin-select { - height:190px; -} - -.skin-select img{ - cursor: pointer; -} - -.skin-select-plush img{ - margin-top:30px; -} - -.tips { - display:inline; - font-style:italic; - color:#888; -} - -.error-text { - display:inline; - color:red; -} \ No newline at end of file diff --git a/main/interfaces/wizard/three.html b/main/interfaces/wizard/three.html deleted file mode 100644 index 07e5bd4..0000000 --- a/main/interfaces/wizard/three.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - -

        $T('wizard-server')

        -$T('wizard-explain-server') -
        $T('wizard-server-help')
        - $T('wizard-server-help1')

        - - $msg

        - -
        -

        -
        -
        - -
        $T('wizard-example') news.giganews.com
        - -
        - -
        E.g. 119 or 563 for SSL
        - -

        - -
        - -

        - -
        $T('wizard-server-con-explain') E.g. 8 or 20
        - -
        - -
        $T('wizard-server-ssl-explain')
        -
        -
        -
        - -
        $T('wizard-server-text')
        -
        -

        -
        - - - - - - -
        -
        - - - $step - -
        -
        -
        - - \ No newline at end of file diff --git a/main/interfaces/wizard/two.html b/main/interfaces/wizard/two.html deleted file mode 100644 index 8415ff9..0000000 --- a/main/interfaces/wizard/two.html +++ /dev/null @@ -1,50 +0,0 @@ - - - -
        -
        -

        $T('wizard-access')

        - - >
        - >
        -
        - -
        -
        -
        - -
        - -
        -
        - - >
        -
        -

        $T('wizard-misc')

        - >
        - -
        - - - -
        -

        -
        - - - - - - -
        -
        - - - $step - -
        -
        -
        - - - \ No newline at end of file diff --git a/main/language/de-de.txt b/main/language/de-de.txt deleted file mode 100644 index 501ce80..0000000 --- a/main/language/de-de.txt +++ /dev/null @@ -1,887 +0,0 @@ -# -*- coding: utf-8 -*- -# Deutsch -# Translation by Severin Heiniger - -special-decimal . -special-1000 , - -# General texts -yes Ja -no Nein -default Standard -none Nichts -KBs KB/s -MB MB -GB GB -hour Stunde -hours Stunden -minute Minuten -minutes Minuten -second Sekunde -seconds Sekunden -month Monat -year Jahr -day Tag -days Tage -daily Täglich -monday Montag -tuesday Dienstag -wednesday Mittwoch -thursday Donnerstag -friday Freitag -saturday Samstag -sunday Sonntag -day-of-month Tag im Monat -filename Dateiname - -# General template elements -signOn Automatisiertes Programm für Usenet-Downloads -button-save Speichern -queued In der Warteschlange -button-back Zurück -button-x X - -# Header -menu-home Startseite -menu-queue Warteschlange -menu-history Verlauf -menu-config Einstellungen -menu-cons Verbindungen -menu-help Hilfe -menu-wiki Wiki -menu-forums Forum -menu-irc IRC -cmenu-general Allgemein -cmenu-folders Ordner -cmenu-switches Schalter -cmenu-servers Server -cmenu-scheduling Planung -cmenu-rss RSS -cmenu-email E-Mail -cmenu-newzbin Index-Seiten -cmenu-cat Kategorien -cmenu-sorting Sortierung - -# Footer -ft-download Downloads -ft-complete Fertige Downloads -ft-speed Geschwindigkeit -ft-queued Warteschlange -ft-paused ANGEHALTEN -ft-buffer@2 %s Artikel im Cache (%s) -ft-sysload Systemlast -ft-warning WARNUNGEN -ft-newRelease@1 Neue Version %s verfügbar unter - -# Main page -addNewJobs Neue Downloads hinzufügen -shutdownOK? Möchten Sie SABnzbd wirklich beenden? -link-shutdown Beenden -link-pause Anhalten -link-resume Fortsetzen -button-add Hinzufügen -add Hinzufügen einer -reportId ID -addFile Datei hinzufügen -category Kategorie -pp Verarbeiten -script Skript -priority Priorität -pp-none Download -pp-repair +Reparieren -pp-unpack +Entpacken -pp-delete +Löschen -pp-n -pp-r R -pp-u E -pp-d L -pr-force Erzwingen -pr-normal Normal -pr-high Hoch -pr-low Gering -enterURL URL -enterID  oder Report-ID - -# Queue page -link-sortByName Nach Name sortieren -link-sortByAge Nach Alter sortieren -link-sortBySize Nach Grösse sortieren -link-hideFiles Dateien verbergen -link-showFiles Dateien anzeigen -onQueueFinish Wenn fertig -shutdownPc Rechner ausschalten -standbyPc Rechner in Bereitschaft versetzen -hibernatePc Rechner in den Ruhezustand versetzen -shutdownSab SABnzbd beenden -speedLimit Geschwindigkeitsbegrenzung -pauseFor Anhalten für -mode Verarbeiten -order Reihenfolge -name Name -remainTotal Verbleibend/Insgesamt -eta ETA -age Alter -button-del Löschen -button-resume Fortsetzen -button-pause Anhalten -unknown unbekannt -fetchingNewzbin@1 Abrufen der Download-ID %s von newzbin.com -error-fetchNewzbin@1 Fehler beim Abrufen der Download-ID %s von newzbin.com -\ - Überprüfen Sie, ob der Benutzername und das Passwort korrekt\ - eingegeben wurden. -fetchNZB@1 Versuche NZB-Datei von %s abzurufen -eoq-actions Aktionen -eoq-scripts Skripts -purgeQueue Warteschlange leeren -purgeQueueConf Alle Elemente in der Warteschlange löschen? - -# History page -purgeHist Verlauf leeren -purgeHistConf Alle Elemente im Verlauf löschen? -hideDetails Details verbergen -showDetails Details anzeigen -sizeHist Grösse des Verlaufs -completed Fertiggestellt -size Grösse -status Status -msg-reAdded@1 Auftrag "%s" wurde wieder zur Warteschlange hinzugefügt - -# Connections page -link-forceDisc Verbindung trennen -askTestEmail Sendet eine Test-E-Mail an Ihr Konto. -link-showLog Protokoll anzeigen -link-showWeblog Web-Protokoll anzeigen -link-testEmail E-Mail testen -logging Protokoll -log-errWarn Fehler/Warnungen -log-info + Info -log-debug + Fehlersuche -connections Verbindungen -thread Thread -emailResult Resultat des E-Mail-Tests -lastWarnings Neuste Warnungen -clearWarnings Leeren -server-blocked Freigeben -warning WARNUNG: -error FEHLER: -server-resolving  Adresse wird aufgelöst... - -# Configuration -configuration Einstellungen -confgFile Konfigurationsdatei -explain-Restart Der Knopf unten startet SABnzbd neu.\n\ - Benutzen Sie ihn, falls ein Stabilitätsproblem vorliegt.\n\ - Die Downloads werden vor dem Neustart angehalten und danach\ - fortgesetzt. -button-restart Neu starten -version Version -uptime Zeit seit Start -error Fehler -badParm Fehlerhafter Parameter -error-badValue@2 Fehlerhafter Wert für %s: %s -error-noFolder@1 Ordner "%s" existiert nicht -error-QnotEmpty Fehler: Ordner kann nicht geändert werden, da die\ - Warteschlange nicht leer ist. -error-noUNC@1 UNC-Pfad "%s" ist hier nicht erlaubt -error-notOctal@1 %s ist kein gültiger Oktal-Wert - -# Config->General -generalConfig Allgemeine Einstellungen -restartRequired Änderungen benötigen einen Neustart von SABnzbd! -webServer SABnzbd-Webserver -opt-host SABnzbd-Host -explain-host Host, auf dem SABnzbd auf Anfragen warten soll. -opt-port SABnzbd-Port -explain-port Port, auf dem SABnzbd auf Anfragen warten soll. -opt-web_dir Web-Oberfläche -explain-web_dir Gestaltung der Web-Oberfläche verändern. -opt-web_dir2 Sekundäre Weboberfläche -explain-web_dir2 Gestaltung der sekundären Web-Oberfläche verändern. -webAuth Authentifizierung für Web-Server -opt-web_username SABnzbd-Benutzername -explain-web_username Optionaler Benutzername für Authentifizierung. -opt-web_password SABnzbd-Passwort -explain-web_password Optionales Passwort für Authentifizierung. -httpsSupport HTTPS-Unterstützung -opt-enable_https HTTPS aktivieren -opt-notInstalled nicht installiert -explain-enable_https Zugriff auf die Oberfläche über HTTPS-Adressen erlauben -opt-https_port HTTPS-Port -explain-https_port Port, auf dem SABnzbd auf HTTPS-Anfragen warten soll. -opt-https_cert HTTPS-Zertifikat -explain-https_cert Dateiname oder Pfad des HTTPS-Zertifikats. -opt-https_key HTTPS-Schlüssel -explain-https_key Dateiname oder Pfad des HTTPS-Schlüssels. -tuning Feinabstimmung -opt-refresh_rate Warteschlange automatisch neu laden -explain-refresh_rate Zeitintervall zwischen dem erneuten Laden der\ - Warteschlange (in Sekunden). 0 schaltet die Funktion ab. -opt-rss_rate RSS-Überprüfung -explain-rss_rate Zeitinterval zwischen dem Auffrischen der RSS-Feeds\ - (in Minuten, Minimalwert ist 15). -opt-bandwidth_limit Begrenzung der Downloadgeschwindigkeit -explain-bandwidth_limit In KB/s, Kilobytes pro Sekunde. -opt-cache_limitstr Begrenzung des Artikel-Caches -explain-cache_limitstr Artikel werden zwischengespeichert, um die Anzahl der\ - Zugriffe auf die Festplatte zu reduzieren.\n\ - In Bytes, gefolgt von einem optionalen K, M oder G.\ - Zum Beispiel: "64M" oder "128M" -opt-cleanup_list Unerwünschte Dateien -explain-cleanup_list Liste der Dateiendungen, die nach dem Herunterladen\ - gelöscht werden sollen.\n\ - Zum Beispiel: .nfo or .nfo, .sfv -button-saveChanges Änderungen speichern -opt-language Sprache -explain-language Wählen Sie die Sprache der Weboberfläche. -opt-apikey API-Schlüssel -explain-apikey Dieser Schlüssel wird verwendet, um anderen Anwendungen\ - Zugriff auf SABnzbd zu gewähren. -button-apikey Neuen Schlüssel generieren -opt-disableApikey API-Key deaktivieren -explain-disableApikey Keinen API-Schlüssel verwenden. -explain-disableApikeyWarn AUF EIGENE GEFAHR VERWENDEN! -restart1 Neustart wird durchgeführt...\n -restart2  \n\ - SABnzbd wurde beendet.\n\ - Warten Sie 5 Sekunden und klicken Sie danach auf\ - folgenden Knopf.\n\n\ - Aktualisieren\n - -# Config->Folders -folderConfig Ordner-Einstellungen -explain-folderConfig HINWEIS: Ordner werden beim Speichern\ - automatisch erstellt.\ - Sie können absolute Pfade angeben, um Ordner ausserhalb\ - der standardmässigen Ordner zu verwenden. -userFolders Benutzer-Ordner -in In -opt-download_dir Temporärer Download-Ordner -explain-download_dir Hier werden noch nicht verarbeitete Downloads abgelegt.\n\ - Kann nur geändert werden wenn die Warteschlange leer ist. -opt-download_free Minimaler freier Speicherplatz im temporären Ordner -explain-download_free SABnzbd hält automatisch an, wenn der freie Speicherplatz\ - unter diesen Wert fällt.\n\ - In Bytes, gefolgt von einem optionalen K, M oder G.\ - Zum Beispiel: "800M" or "8G" -opt-complete_dir Ordner für fertige Downloads -explain-complete_dir Hier werden fertige, verarbeitete Downloads abgelegt.\n\ - Kann von benutzerdefinierten Kategorien ausser Kraft\ - gesetzt werden. -opt-permissions Rechte für fertige Downloads -explain-permissions Rechte für Dateien und Ordner festlegen.\n\ - In oktaler Notation. Zum Beispiel: "755" oder "777" -opt-dirscan_dir Überwachte Ordner -explain-dirscan_dir Ordner, die auf neue NZB-Dateien überwacht werden sollen.\n\ - Erkennt auch ZIP-, RAR- und TAR.GZ-Archive mit NZB-Dateien. -opt-dirscan_speed Geschwindigkeit der Ordner-Überwachung -explain-dirscan_speed Anzahl der Sekunden zwischen zwei Überprüfungen. -opt-script_dir Ordner mit Nachbearbeitungs-Skripts -explain-script_dir Ordner, der benutzerdefinierte Skripts für die\ - Nachbearbeitung von Downloads enthält. -opt-email_dir Ordner mit E-Mail-Vorlagen -explain-email_dir Ordner, der benutzerdefinierte E-Mail-Vorlagen enthält. -systemFolders System-Ordner -opt-cache_dir Cache-Ordner -explain-cache_dir Wird als temporärer Speicherplatz verwendet.\n\ - Kann nur geändert werden, wenn die Warteschlange leer ist.\n\ - Benötigt einen Neustart von SABnzbd! -opt-log_dir Protokoll-Ordner -explain-log_dir Hier werden Protokoll-Dateien von SABnzbd abgelegt.\n\ - Benötigt einen Neustart von SABnzbd! -opt-nzb_backup_dir NZB-Backup-Ordner -explain-nzb_backup_dir Hier werden NZB-Dateien abgelegt. - -# Config->Switches -switchesConfig Verschiedene Schalter -processingSwitches Verarbeitungs-Schalter -opt-quick_check Schnelle Überprüfung aktivieren -explain-quick_check PAR2-Überprüfung überspringen, wenn die Dateien 100%\ - korrekt sind. -opt-enable_unrar unrar aktivieren -explain-enable_unrar Eingebaute Entpack-Funktion für RAR-Archive aktivieren. -opt-enable_unzip unzip aktivieren -explain-enable_unzip Eingebaute Entpack-Funktion für ZIP-Archive aktivieren. -opt-enable_filejoin Zusammenfügen von Dateien aktivieren -explain-enable_filejoin Dateien, die mit .001, .002 usw. enden, zu einer Datei\ - zusammenfügen. -opt-enable_tsjoin Zusammenfügen von TS-Dateien aktivieren -explain-ts_join Dateien, die mit .001.ts, .002.ts usw. enden, zu einer\ - Datei zusammenfügen. -opt-enable_par_cleanup PAR-Dateien aufräumen -explain-enable_par_cleanup PAR-Dateien entfernen, wenn die Überprüfung und\ - Reparatur erfolgreich war. -opt-fail_on_crc yEnc-CRC-Fehler nicht ignorieren -explain-fail_on_crc Bei yEnc-CRC-Fehlern Ersatz-Server verwenden. -opt-top_only Nur Artikel für obersten Warteschlangen-Eintrag herunterladen -explain-top_only Für geringere Speicher-Verwendung aktivieren.\n\ - Deaktivieren, um zu verhindern, dass langsame Aufträge\n\ - die anderen Einträge in der Warteschlange blockieren. -opt-safe_postproc Nur überprüfte Aufträge nachbearbeiten -explain-safe_postproc Die Nachbearbeitung nur für Aufträge durchführen,\n\ - die alle PAR2-Überprüfungen bestanden haben. -opt-no_dupes Herunterladen von Duplikaten verhindern -explain-no_dupes Überspringt einen Auftrag, wenn bereits eine NZB-Datei\n\ - mit dem gleichen Namen existiert. -opt-dirscan_opts Standardmässige Nachbearbeitung -explain-dirscan_opts Wird verwendet, wenn die Kategorie keine\ - Nachbearbeitung vorschreibt. -opt-dirscan_script Standardmässiges Benutzer-Skript -explain-dirscan_script Wird verwendet, wenn die Kategorie kein\ - Benutzer-Skript vorschreibt. -opt-dirscan_priority Standardmässige Priorität -explain-dirscan_priority Wird verwendet, wenn die Kategorie keine Priorität\ - vorschreibt. -opt-par_option Zusätzliche PAR2-Parameter -explain-par_option Lesen Sie dazu die Hilfe im Wiki! -opt-par2_multicore MultiCore Par2 aktivieren -explain-par2_multicore Lesen Sie dazu die Hilfe im Wiki! -opt-nice Nice-Parameter -explain-nice Lesen Sie dazu die Hilfe im Wiki! -opt-ionice IONice-Parameter -explain-ionice Lesen Sie dazu die Hilfe im Wiki! -otherSwitches Andere Schalter -opt-auto_disconnect Bei leerer Warteschlange Verbindung trennen -explain-auto_disconnect Verbindung zu Usenet-Servern trennen,\n\ - wenn die Warteschlange leer ist oder SABnzbd angehalten wurde. -opt-send_group Gruppe senden -explain-send_group Gruppen-Befehl senden, bevor Artikeln angefordert werden. -opt-auto_sort Nach Alter sortieren -explain-auto_sort Einträge automatisch nach ihrem (durchschnittlichen)\ - Alter sortieren. -opt-check_new_rel Auf neue Version prüfen -explain-check_new_rel Wöchentlich überprüfen, ob eine neue SABnzbd-Version\ - verfügbar ist. -opt-replace_spaces Leerzeichen in Ordnernamen ersetzen -explain-replace_spaces Leerzeichen in Ordnernamen durch Unterstriche ersetzen. -opt-replace_illegal Ungültige Zeichen in Ordnernamen ersetzen -explain-replace_illegal Ungültige Zeichen in Ordnernamen durch äquivalente\ - Zeichen ersetzen\n\ - (oder ansonsten entfernen). -opt-auto_browser Browser beim Start öffnen -explain-auto_browser Den Standard-Browser öffnen, wenn SABnzbd gestartet wird. -opt-pause_on_post_processing Downloads während der Nachbearbeitung anhalten -explain-pause_on_post_processing Hält die Downloads zu Beginn der\ - Nachbearbeitung an\n\ - und setzt sie danach fort. -opt-ignore_samples Beispieldateien ignorieren -explain-ignore_samples Beispieldateien herausfiltern (z.B. Videoausschnitte) -igsam-off Nein -igsam-del Nach dem Download löschen -igsam-not Nicht herunterladen -opt-ssl_type SSL-Typ -explain-ssl_type V23 verwenden, ausser wenn der Provider etwas anderes\ - benötigt. - - -# Config->Server -configServer Server-Einstellungen -addServer Server hinzufügen -srv-host Adresse -srv-port Port -srv-username Benutzername -srv-password Passwort -srv-timeout Zeitüberschreitung -srv-connections Verbindungen -srv-ssl SSL -srv-fillserver Ersatz-Server -srv-optional Optional -srv-enable Aktivieren -button-addServer Server hinzufügen -button-delServer Server entfernen -error-needServer Server-Adresse wird benötigt -button-testServer Server überprüfen -srv-testing Server-Angaben werden überprüft... -srv-testHint Unten Klicken zum Überprüfen. -srv-success Verbindung erfolgreich hergestellt! -srv-noHost Der Hostname wurde nicht angegeben -srv-noConnections Keine Verbindungen angegeben.\ - Bitte geben Sie mindestens eine Verbindung ein. -srv-starredPass Passwort ist als ****** maskiert. Bitte erneut eingeben. -srv-invalidDetails Ungültige Server-Angaben -srv-timedoutSSL Zeitüberschreitung: Versuchen Sie, SSL oder einen\ - anderen Port zu verwenden. -srv-timedout Zeitüberschreitung -srv-failedAuth Authentifizierung fehlgeschlagen. Überprüfen Sie\ - Benutzername und Passwort. -srv-noAuth Server benötigt ein Benutzername und ein Passwort. -srv-tooManyConnections Zu viele Verbindungen. Bitte halten Sie die Downloads an oder versuchen Sie es später erneut. -srv-generalFail@1 Die Verbindung konnte nicht überprüft werden. (%s) - -# Config->Scheduling -configSchedule Planung - -addSchedule Regel hinzufügen -sch-frequency Häufigkeit -sch-action Aktion -sch-arguments Argumente -button-addSchedule Regel hinzufügen -button-delSchedule Entfernen -currentSchedules Aktuelle Regeln -sch-task Aufgabe -sch-disable_server Server deaktivieren -sch-enable_server Server aktivieren -sch-resume Fortsetzen -sch-pause Anhalten -sch-shutdown Beenden -sch-restart Neu starten -sch-speedlimit Geschwindigkeitsbegrenzung -sch-pause_all Alle anhalten -sch-pause_post Nachbearbeiten anhalten -sch-resume_post Nachbearbeiten fortsetzen - -# Config->RSS -configRSS RSS-Einstellungen -newFeedURI Neue Feed-URL -explain-RSS Aktivieren Sie das Feld neben dem Feed-Namen,\ - wenn automatisch auf neue Einträge geprüft werden soll.\n\ - Die Häufigkeit der Überprüfungen kann in den allgemeinen\ - Einstellungen gewählt werden.\n\ - Wenn ein Feed hinzugefügt wird, werden nur neue Einträge\ - verarbeitet und nicht diejenigen, die bereits im RSS-Feed\ - enthalten waren, ausser Sie klicken "Download erzwingen". -feedDefinition Feed-Definition -feed Feed -button-delFeed Feed löschen -button-preFeed Vorschau -button-forceFeed Download erzwingen -rss-order Reihenfolge -rss-type Typ -rss-filter Filter -rss-accept Akzeptieren -rss-reject Verwerfen -rss-must Benötigt -rss-mustcat BenötigtKat -rss-delFilter X -rss-matched Entspricht -rss-notMatched Entspricht nicht -rss-done Heruntergeladen -rss-downloaded Bis jetzt heruntergeladen -link-download Herunterladen -explain-rssStar Aufträge, die mit '*' markiert sind, werden nicht\ - automatisch heruntergeladen. - -# Config->Email -configEmail Email-Benachrichtigung -emailOptions Email-Optionen -opt-email_endjob Email-Benachrichtigung beim Fertigstellen von Aufträgen -email-never Nie -email-always Immer -email-errorOnly Nur bei Fehlern -opt-email_full Benachrichtigung bei voller Festplatte -explain-email_full E-Mail senden, wenn die Festplatte voll ist und SABnzbd\ - angehalten wird. -opt-email_dir Ordner mit E-Mail-Vorlagen -explain-email_dir Ordner, der die benutzerdefinierten E-Mail-Vorlagen enthält.\n\ - Relativ zu -emailAccount E-Mail-Kontoeinstellungen -opt-email_server SMTP-Server -explain-email_server ISP-Server für ausgehende E-Mails angeben. -opt-email_to E-Mail-Empfänger -explain-email_to E-Mail-Adresse, an die die E-Mails gesendet werden. -opt-email_from E-Mail-Absender -explain-email_from Wer soll die E-Mail versandt haben? -opt-email_account Optionaler Konto-Benutzername -explain-email_account Für authentifizierte E-Mails wird der Kontoname benötigt. -opt-email_pwd Optionales Konto-Passwort -explain-email_pwd Für authentifizierte E-Mails wird das Passwort benötigt. -error-badEmailAd@1 %s ist keine gültige E-Mail-Adresse -opt-email_rss RSS-Benachrichtigungen senden -explain-email_rss E-Mail senden, wenn ein RSS-Feed einen Auftrag zur\ - Warteschlange hinzufügt. - -# Config->Newzbin -explain-newzbin Wenn Sie ein Konto bei www.newzbin.com haben,\ - können Sie die entsprechenden Informationen hier eintragen.\n\ - Dies gibt weitere Funktionen frei. -accountInfo Konto-Informationen -opt-username_newzbin Newzbin-Benutzername -explain-username_newzbin Hier den Konto-Benutzernamen eingeben. -opt-password_newzbin Newzbin-Passwort -explain-password_newzbin Hier das Konto-Passwort eingeben. -newzbinBookmarks Verarbeiten von Lesezeichen -opt-newzbin_bookmarks Lesezeichen automatisch abrufen -explain-newzbin_bookmarks Automatisch Aufträge basierend Ihren Lesezeichen erzeugen. -link-getBookmarks Jetzt Lesezeichen abrufen -link-HideBM Verarbeitete Lesezeichen verbergen -link-ShowBM Verarbeitete Lesezeichen anzeigen -opt-newzbin_unbookmark Lesezeichen entfernen, wenn der Download fertig ist -explain-newzbin_unbookmark Lesezeichen aus der Lesezeichenliste entfernen, wenn der Download fertig ist. -opt-bookmark_rate Überprüfungs-Interval -explain-bookmark_rate In Minuten (mindestens 15 Minuten). -processedBM Verarbeitete Lesezeichen -explain-nzbmatrix Wenn Sie ein Konto bei www.nzbmatrix.com haben,\ - können Sie die entsprechenden Informationen hier eintragen.\n\ - Dies wird benötigt, wenn Sie RSS-Feeds von dieser Seite verwenden möchten. -opt-username_matrix NzbMatrix-Benutzername -explain-username_matrix Hier den Konto-Benutzernamen eingeben. -opt-password_matrix NzbMatrix-Passwort -explain-password_matrix Hier das Konto-Passwort eingeben. -opt-apikey_matrix NzbMatrix-API-Schlüssel -explain-apikey_matrix Hier den API-Schlüssel eingeben. - -# Config->Cat -configCat Benutzerdefinierte Kategorien -explain-configCat Beeinflusst die Nachbearbeitung und Speicherung von Downloads. -explain-catNewzbin Die Newzbin-Spalte verknüpft Newzbin-Kategorien mit Ihren eigenen. -link-initCat Klicken Sie hier, um die Newzbin-Kategorien einzurichten. -explain-relFolder Relative Ordner basieren auf -catFolderPath Ordner/Pfad -catNewzbin NewzBin -catGroups Gruppen -button-delCat X - -# Config->Sorting -configSort Sortier-Einstellungen -seriesSorting Sortieren von TV-Serien -sort-show Sendung -sort-name Name -opt-tvsort TV-Sortierung aktivieren -explain-tvsort Sortieren und Umbenennen von Episoden aktivieren. -sort-legenda Muster-Schlüssel -button-clear Löschen -presetSort Voreinstellungen -example Beispiel -genericSort Allgemeines Sortieren -opt-movieSort Film-Sortierung aktivieren -explain-movieSort Allgemeines Sortieren und Umbenennen von Dateien aktivieren. -opt-movieExtra Unbestimmte Downloads in einem zusätzlichen Ordner speichern. -explain-movieExtra Aktivieren, wenn Downloads nicht in ihre eigenen Ordner abgelegt werden. -affectedCat Betroffene Kategorien -sort-meaning Bedeutung -sort-pattern Muster -sort-result Resultat -button-Season1x05 1x05 Staffel-Ordner -button-SeasonS01E05 S01E05 Staffel-Ordner -button-Ep1x05 1x05 Episoden-Ordner -button-EpS01E05 S01E05 Episoden-Ordner -sort-title Titel -movie-sp-name Film Name -movie-dot-name Film.Name -movie-us-name Film_Name -show-name Sendungs-Name -show-sp-name Sendungs Name -show-dot-name Sendungs.Name -show-us-name Sendungs_Name -show-seasonNum Staffel-Nummer -show-epNum Episoden-Nummer -ep-name Episoden-Name -ep-sp-name Episoden Name -ep-dot-name Episoden.Name -ep-us-name Episoden_Name -fileExt Dateiendung -extension Endung -partNumber Teilnummer -decade Jahrzehnt -orgFilename Ursprünglicher Dateiname -lowercase Kleinschreibung -TEXT TEXT -text text -sort-File datei -sortString Sortieranweisung -multiPartLabel Markierung für mehrere Teile -button-inFolders In Ordnern -button-noFolders Keine Ordner -dateSorting Sortieren nach Datum -opt-dateSort Sortieren nach Datum aktivieren -explain-dateSort Sortieren und Umbenennen von Dateien mit Daten im Dateinamen aktivieren. -button-ShowNameF Ordner mit Name der Sendung -button-YMF Jahr-Monat-Ordner -button-DailyF Tägliche Ordner - -# NZO -nzoDetails NZB-Details bearbeiten -nzoName Name -nzo-delete Löschen -nzo-top Ganz nach oben -nzo-up Nach oben -nzo-down Nach unten -nzo-bottom Ganz nach unten -nzo-all Alle -nzo-none Keine -nzo-invert Invertieren -nzo-filename Dateiname -nzo-subject Betreff -nzo-age Alter -nzo-selection Auswahl - -# Internal texts -msg-warning-ambiLocalhost Warnung: localhost ist mehrdeutig. Verwenden Sie eine numerische IP-Adresse. -msg-invalidServer@2 Server-Adresse "%s:%s" ist ungültig. - -warn-missingKey Sitzungs-Schlüssel fehlt -error-missingKey Fehler: Sitzungs-Schlüssel wird benötigt -warn-badSession Sitzungs-Schlüssel ungültig -error-badKey Fehler: Sitzungs-Schlüssel ungültig -warn-authMissing Authentifizierung fehlt. Bitte Benutzernamen und\ - Passwort aus Einstellungen->Allgemein in die externe\ - Anwendung eingeben: -error-authMissing Fehler: Authentifizierung fehlt -warn-apikeyNone API-Schlüssel fehlt. Bitte API-Schlüssel aus\ - Einstellungen->Allgemein in die externe Anwendung\ - eingeben: -warn-apikeyBad API-Schlüssel ungültig. Bitte API-Schlüssel aus\ - Einstellungen->Allgemein in die externe Anwendung\ - eingeben: -error-noSecUI Fehler: Keine sekundäre Oberfläche angegeben. - -his-badArchive Fehlgeschlagen. Unültige Archiv-Datei. -his-cannotGetReport Abrufen des Newzbin-Berichts fehlgeschlagen -his-failedURL Hinzufügen der URL fehlgeschlagen -his-retryURL1@1 Abrufen der URL fehlgeschlagen; %s -his-retryURL2 Erneut versuchen - -# Errors and Warnings -error-noPar2 par2-Programmdatei nicht gefunden! -error-noWebUi Fehler beim Starten der Weboberfläche. -error-noYEnc _yenc-Modul nicht gefunden! -error-sameHTTP-HTTPS HTTP- und HTTPS-Ports dürfen nicht gleich sein. -warn-0000 Bitte beachten Sie, dass der 0.0.0.0-Hostname eine\ - IPv6-Adresse benötigen wird für den externen Zugriff. -warn-noCertKey HTTPS wegen fehlenden Zertifikats- und\ - Schlüsseldateien deaktiviert. -warn-noSkin@1 Konnte Web-Vorlage nicht finden: %s Versuche die\ - Standard-Vorlage zu verwenden. -warn-noUnrar unrar-Programmdatei nicht gefunden! -warn-noUnzip unzip-Programmdatei nicht gefunden! -error-failMkstemp Fehler in tempfile.mkstemp -error-fetchReport@1 Fehler beim Abrufen von %s von newzbin.com - -error-hibernate Fehler beim Wechsel in den Ruhezustand -error-loading@1 Fehler beim Laden von %s -error-saveX@1 Fehler beim Speichern von %s -error-saveXtoY@2 Fehler beim Speichern von %s nach %s -error-standby Fehler beim Wechsel in den Bereitschaftsmodus -error-tempFile@1 Temporäre Datei für %s konnte nicht angelegt werden -warn-noServer@1 Versuche Status für nicht existierenden Server %s zu setzen -warn-noSpace Angehalten wegen zu wenig freiem Speicherplatz -warn-signal@1 Signal %s erkannt. Speichern und beenden... -warn-flushFailed@1 Flushing von %s fehlgeschlagen. Keine Artikel-ID. -error-diskError@1 Festplatten-Fehler beim Anlegen der Datei %s -error-diskFull Festplatte voll! Downloads werden angehalten. -warn-artMissing@1 %s fehlt -error-badIni@1 Ungültige Konfigurationsdatei %s -error-createIni@1 Konfigurationsdatei %s kann nicht angelegt werden -error-encPw@1 Ungültig kodiertes Passwort %s -error-version@2 Ungültige Version %s in %s -error-badHisNewline@1 Ungültiges Stufen-Protokoll im Verlauf für %s (\\r\\n) -error-badHisSemic@1 Ungültiges Stufen-Protokoll im Verlauf für %s (;) -error-sqlClose Fehler beim Schliessen der Datenbank. Beachten Sie das\ - Nachrichtenprotokoll. -error-sqlCmd SQL-Befehl fehlgeschlagen. Beachten Sie das\ - Nachrichtenprotokoll. -error-sqlCommit SQL-Commit fehlgeschlagen. Beachten Sie das\ - Nachrichtenprotokoll. -error-decode@1 Fehler beim Dekodieren von %s. -error-decodeUnknown@1 Unbekannter Fehler %s beim Dekodieren -warn-artAllMissing@1 %s wurde auf keinem Server gefunden und daher übersprungen -warn-badYEnc@1 Ungültiger yEnc-Artikel in %s -warn-crcError@3 CRC-Fehler in %s (%s -> %s) -error-readWatched@1 Überwachter Ordner %s kann nicht gelesen werden -error-remove@1 Fehler beim Entfernen von %s -warn-noRead@1 %s kann nicht gelesen werden -error-except Ausnahme? -error-noInit@3 Initialisierung fehlgeschlagen %s@%s:%s -error-serverFailed@4 Verbindung zu %s@%s:%s konnte nicht hergestellt werden. %s -error-serverLogin@1 Anmelden beim Server fehlgeschlagen. %s -error-serverNoConn@2 Verbindung zum Server %s kann nicht hergestellt werden. %s -error-serverTooMany@2 Zu viele Verbindungen zum server %s:%s -warn-ignoreServer@2 Server %s wird für %s Minuten ignoriert -warn-noConnectServer@2 Verbindung zum Server %s kann nicht hergestellt werden. %s -error-accountSharing Möglicherweise wird das Konto geteilt -error-serverCred@1 Server %s benötigt ein Benutzername und ein Passwort -warn-thread@3 Thread %s@%s:%s: -error-mailAuth Authentifizierung beim Mail-Server fehlgeschlagen -error-mailNoConn Verbindung zum Mail-Server konnte nicht hergestellt werden -error-mailSend Senden des E-Mails fehlgeschlagen -error-mailTempl@1 In %s konnten keine E-Mail-Vorlagen gefunden werden -error-mailTLS Aufbau der TLS-Verbindung fehlgeschlagen -warn-noEmailClose Schliessen der Mail-Verbindung fehlgeschlagen -msg-emailOK E-Mail erfolgreich versendet -error-regex@1 Kompilieren des regulären Ausdrucks für den Suchbegriff %s fehlgeschlagen. -error-accessDir@2 Zugriff auf das Verzeichnis %s fehlgeschlagen: %s -error-createDir@1 Verzeichnis %s konnte nicht angelegt werden -error-makeFile@1 Erstellen von %s fehlgeschlagen -error-moveFile@2 Verschieben von %s nach %s fehlgeschlagen -error-portNoAccess@1 Sie haben nicht die Berechtigung, Port %s zu verwenden -error-regConnect Verbindung zu Registry-Umgebung HKEY_CURRENT_USER konnte nicht hergestellt werden. -error-regOpen@1 Registry-Schlüssel %s konnte nicht geöffnet werden. -error-regSpecial Lesen der Registry-Schlüssel für spezielle Ordner fehlgeschlagen. -error-sslFiles Fehler beim Anlegen des SSL-Schlüssels und -Zertifikats. -error-urlGet@2 Fehler beim Abrufen der URL %s (Fehler = %s) -warn-noBrowser Der Standard-Browser konnte nicht gestartet werden, da er wahrscheinlich nicht gefunden wurde. -warn-pyopenssl pyopenssl-Modul fehlt. Bitte installieren für SSL-Unterstützung. -error-fileJoin@2 Fehler "%s" beim Ausführen von file_join auf %s -error-filePar2@2 Fehler "%s" beim Ausführen von par2_repair auf %s -error-fileRead@1 notrar(): Lesen von %s fehlgeschlagen -error-fileUnrar@2 Fehler "%s" beim Ausführen von rar_unpack auf %s -error-fileUnzip@2 Fehler "%s" beim Ausführen von unzip auf %s -warn-cannotFind@1 %s konnte nicht gefunden werden. -warn-crcFailed@1 CRC-Fehler in %s. -warn-delFailed@1 Löschen von %s fehlgeschlagen! -warn-encrypted Fehler: Verschlüsselte Datei: -warn-error@1 Fehler: %s -warn-MissExpectedFile@1 Erwartete Datei %s nicht gefunden. Unrar-Fehler? -warn-writeError@1 Fehler beim Schreiben: %s -error-connect@1 Verbindung konnte nicht hergestellt werden: %s -error-newsSSL Dieser Server erlaubt auf diesem Port keine SSL-Verschlüsselung. -error-noSSL Fehler beim Importieren des OpenSSL-Moduls. Stelle Verbindung ohne SSL her. -error-nbInfo@1 Newzbin-Server konnte keine Informationen zu %s bereitstellen -error-nbProtocol Das Protokoll des Newzbin-Servers wurde geändert -error-nbReport@1 Newzbin-Bericht %s nicht gefunden -error-nbUnkownError@1 Newzbin gibt einen undokumentierten Fehler-Code zurück: (%s) -error-nbUnkownError@2 Newzbin gibt einen undokumentierten Fehler-Code zurück: (%s, %s) -error-nbUpdate@1 Aktualisieren des Newzbin-Auftrages %s fehlgeschlagen. -warn-nbCredit Ihr Newzbin-Konto verfügt über keine Credits. -warn-nbNoAuth Zugriff verweigert. Überprüfen Sie den Newzbin-Benutzernamen und -Passwort -warn-nbNoDelBM@1 Newzbin-Lesezeichen %s konnte nicht gelöscht werden. -error-qAdd@1 Fehler beim Hinzufügen von %s. Entferne. -error-qBad Inkompatible Warteschlangen-Datei gefunden. Fortsetzen nicht möglich. -error-qCorruptFile@1 Fehler beim Laden von %s. Beschädigte Datei gefunden. -warn-unknownEncoding@1 %s -> Unbekannte Kodierung -error-qDupPart@3 Doppelt vorhandener Teil %s mit unterschiedlichen IDs (%s // %s) -error-qImport@1 Fehler beim Importieren von %s -warn-badImport@2 Importieren von %s Dateien von %s fehlgeschlagen -warn-badNZB@3 Ungültige NZB-Datei %s wird übersprungen: %s auf Zeile %s -warn-emptyFile@1 Die Datei %s ist leer und wird daher übersprungen -warn-skipDup@1 Überspringe doppelt vorhandene NZB-Datei %s. -error-ppCleanup@1 Aufräumen von %s fehlgeschlagen -error-ppDelFailed@1 Entfernen von %s fehlgeschlagen -error-ppDelNzo Fehler beim Entfernen der NZB-Datei von der\ - Nachbearbeitungs-Warteschlange (id) -error-ppDelWorkdir@1 Fehler beim Entfernen des Arbeitsverzeichnisses %s. -error-ppFailed@1 Nachbearbeitung von %s fehlgeschlagen -error-ppLogFile@1 Protokolldatei %s konnte nicht angelegt werden -error-ppPermissions@1 Rechte von %s konnten nicht geändert werden -error-ppRename@2 Fehler beim Umbenennen von "%s" nach "%s" -warn-badPPQueue@2 Laden der Nachbearbeitungs-Warteschlange fehlgeschlagen: Falsche Version (benötige %s anstatt %s) -error-rssBadFeed@1 Ungültige RSS-Feed-Beschreibung "%s" -error-rssRegex@1 Regulärer Ausdruck konnte nicht kompiliert werden: %s -warn-emptyRSS@1 Leerer RSS-Feed gefunden: %s -warn-failRSS@1 Abrufen des RSS-Feeds von %s fehlgeschlagen. -warn-failRSS@2 Abrufen des RSS-Feeds von %s fehlgeschlagen: %s -warn-badSched@3 Ungültige Regel %s um %s:%s -warn-badSchedAction@1 Unbekannte Aktion: %s -warn-schedNoServer@1 Regel für nicht existierenden Server %s. -error-tvInfo@1 Fehler beim Abrufen der TV-Informationen: %s -error-tvRename@2 Umbenennen von %s nach %s fehlgeschlagen. -error-tvSimRename@2 Umbenennen der gleichen Datei von %s nach %s fehlgeschlagen. -error-tvTemp@1 Temporäre Datei für %s konnte nicht angelegt werden. -warn-matrixBadRep@1 Ungültige nzbmatrix.com-Bericht-ID %s. -warn-matrixFail@1 Problem beim Zugriff auf den nzbmatrix.com-Server (%s) -warn-noRepair Kein PAR2-Programm gefunden. Eine Reparatur ist nicht möglich\n -warn-noUnpack Kein UNRAR-Programm gefunden. Das Entpacken von RAR-Dateien ist nicht möglich\n -warn-badUnrar Das verwendete UNRAR-Programm wird nicht empfohlen.\ - Laden Sie UNRAR stattdessen herunter von\ - http://www.rarlab.com/rar_add.htm\n -warn-missingFiles \nWarnung: Nicht alle Dateien wurden entpackt. Beachten Sie das Protokoll. -error-joinMismatch Die tatsächliche Grösse entsprach nicht der erwarteten Grösse. -error-joinFail@1 Fehler beim Zusammenfügen von %s -error-joinFail@2 [%s] Fehler "%s" beim Zusammenfügen der Dateien -msg-joinOK@2 [%s] %s Dateien zusammengefügt -error-unpackFail@1 Entpacken fehlgeschlagen. %s -error-unpackFail@2 [%s] Fehler "%s" beim Entpacken der RAR-Dateien -error-badArchive Öffnen des Hauptarchivs fehlgeschlagen. Es ist verschlüsselt oder beschädigt. -error-unpackFailed@1 Entpacken fehlgeschlagen. Konnte %s nicht finden. -error-unpackCRC Entpacken fehlgeschlagen. CRC-Fehler -error-unpackFull Entpacken fehlgeschlagen. Fehler beim Schreiben oder volle Festplatte? -error-unpackFailLog Entpacken fehlgeschlagen. Beachten Sie das Protokoll. -error-unpackPassword Entpacken fehlgeschlagen. Archiv benötigt ein Passwort. -error-unpackMissing Entpacken fehlgeschlagen. Eine erwartete Datei wurde nicht entpackt. -msg-unpackDone@2 %s Datei(en)/Ordner entpackt in %s -msg-unzipDone@2 %s Dateien in %s -msg-QuickCheck Ausführen der schnellen Überprüfung... -msg-QuickChecking Schnelle Überprüfung -msg-QuickOK@1 [%s] Schnelle Überprüfung erfolgreich -msg-startRepair Beginn der Reparatur -error-repairFailed@1 Reparatur fehlgeschlagen. %s -error-repairBad@2 Fehler "%s" beim Ausführen von par2_repair auf dem Satz %s -msg-verify Überprüfen... -msg-verifyOK@2 [%s] Überprüft in %s. Alle Dateien fehlerfrei. -msg-repairNeeded Reparatur wird benötigt -msg-repairNeeded@2 [%s] Überprüft in %s. Reparatur wird benötigt. -error-noMainPacket Hauptpaket nicht gefunden... -error-repairBlocks@1 Reparatur fehlgeschlagen. Nicht genug Reparatur-Blöcke vorhanden (%s zu wenig) -msg-fetchBlocks@1 %s Blöcke werden abgerufen... -msg-repairing Reparieren -msg-repairDone@2 [%s] Repariert in %s -msg-verifying Überprüfen -msg-DownloadedIn@2 Heruntergeladen in %s mit einer Durchschnittsgeschwindigkeit von %sB/s -msg-noParSets@1 [%s] Keine PAR2-Sätze -msg-noPostProc Keine Nachbearbeitung wegen fehlgeschlagener Überprüfung -msg-sentToQ@1 %s wurde an die Warteschlange gesendet -msg-runScript@1 Ausführen des Benutzer-Skripts %s -msg-ranScript@1 %s ausgeführt -link-more Mehr -link-viewSc Skript-Ausgabe anzeigen -warn-OutRetention Fehler beim Herunterladen. Ist die Datei zu alt? -warn-PostCrash Nachbearbeitung ist abgestürzt. Beachten Sie das Nachrichtenprotokoll. -msg-moving Verschieben -msg-running Ausführen des Skripts -msg-joining Zusammenfügen -msg-unpacking Entpacken -msg-repair Reparieren -msg-fetching Abrufen -msg-path Pfad - -stage-download Herunterladen -stage-repair Reparieren -stage-filejoin Dateien zusammenfügen -stage-unpack Entpacken -stage-script Skript - -post-Completed Fertig -post-Failed Fehler -post-Queued In der Warteschlange -post-Repairing Reparieren... -post-Extracting Entpacken... -post-Moving Verschieben... -post-Running Ausführen des Skripts... -post-Fetching Abrufen von zusätzlichen Blöcken... -post-QuickCheck Schnelle Überprüfung... -post-Verifying Überprüfen... - -#Growl Messages -grwl-notif-startup Start/Beenden -grwl-notif-dl NZB hinzugefügt -grwl-notif-pp Nachbearbeitung -grwl-notif-other Andere Meldung -grwl-shutdown-begin-msg Beenden... -grwl-shutdown-end-msg SABnzbd wurde beendet -grwl-paused-msg Angehalten -grwl-nzbadd-title NZB zur Warteschlange hinzugefügt -grwl-newversion-msg Neue Version verfügbar - -#OSX Menu -osx-menu-warnings Warnungen -osx-menu-status-idle Leerlauf -osx-menu-status-paused Angehalten -osx-menu-pause Anhalten -osx-menu-min min. -osx-menu-resume Fortsetzen -osx-menu-queue Warteschlange -osx-menu-queuelimit Warteschlange mit den 10 obersten Einträgen -osx-menu-history Verlauf -osx-menu-historylimit Verlauf mit den letzten 10 Einträgen -osx-menu-speedlimit Geschwindigkeit begrenzen -osx-menu-none Nichts -osx-menu-getnewzbinbm Newzbin-Lesezeichen abrufen -osx-menu-complete Fertige Downloads\t\t\t -osx-menu-incomplete Unfertige Download\t\t -osx-menu-restart Neu starten -osx-menu-quit Beenden -osx-menu-config Einstellungen -osx-menu-purgequeue Warteschlange leeren -osx-menu-purgehistory Verlauf leeren -osx-menu-wizard Assistent öffnen -osx-menu-empty Leer -osx-menu-shutdowning Beenden... - -email-full@2 \ -to: %s\r\ -from: %s\r\ -subject: SABnzbd meldet eine volle Festplatte\r\ -\r\ -Hallo,\r\ -\r\ -SABnzbd hat mit dem Herunterladen aufgehört, da die Festplatte fast voll ist.\r\ -Bitte geben Sie manuell Speicherplatz frei und setzen Sie die Downloads danach fort.\r\ -\r diff --git a/main/language/email-de-de.tmpl b/main/language/email-de-de.tmpl deleted file mode 100644 index 35b69ac..0000000 --- a/main/language/email-de-de.tmpl +++ /dev/null @@ -1,43 +0,0 @@ -#encoding UTF-8 -## Translation by Severin Heiniger -## -## Default Email template for SABnzbd -## This a Cheetah template -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Newlines and whitespace are significant! -## -## These are the email headers -to: $to -from: $from -date: $date -subject: SABnzbd Auftrag $name -X-priority: 5 -X-MS-priority: 5 -## After this comes the body, the empty line is required! - -Hi, - -SABnzbd hat "$name" heruntergeladen - -SABnzbd konnte "$name" nicht herunterladen - -Fertiggestellt: $end_time -Heruntergeladen: $size - -Ergebnis des Auftrages: - -Stufe $stage - - $result - - - -Ausgabe des Benutzerskripts "$script" (beendet mit Code $script_ret): -$script_output - - -Viel Spass! - -Entschuldigung! - diff --git a/main/language/email-fr-fr.tmpl b/main/language/email-fr-fr.tmpl deleted file mode 100644 index d0e14aa..0000000 --- a/main/language/email-fr-fr.tmpl +++ /dev/null @@ -1,41 +0,0 @@ -## -## Template Email pour SABnzbd -## Ceci est un template Cheetah -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Les retours à la ligne et les espaces sont importants ! -## -## Entêtes de l'email -to: $to -from: $from -date: $date -subject: SABnzbd du téléchargement $name -X-priority: 5 -X-MS-priority: 5 -## Le contenu du message, la ligne vide est obligatoire ! - -Bonjour, - -SABnzbd a téléchargé avec succès "$name" - -SABnzbd a téléchargé sans succès "$name" - -Terminé à $end_time -Téléchargé $size - -Résultat du téléchargement : - -Etape $stage - - $result - - - -Sortie du script utilisateur "$script" (Code Retour = $script_ret): -$script_output - - -A bientôt ! - -Désolé ! - diff --git a/main/language/email-nl-du.tmpl b/main/language/email-nl-du.tmpl deleted file mode 100644 index b458a7c..0000000 --- a/main/language/email-nl-du.tmpl +++ /dev/null @@ -1,41 +0,0 @@ -## -## Standaard Email sjabloon voor SABnzbd -## Dit is een Cheetah sjabloon -## Documentatie: http://sabnzbd.wikidot.com/email-templates -## -## Lege regels en witruimte zijn belangrijk! -## -## Dit zijn de email koppen -to: $to -from: $from -date: $date -subject: SABnzbd: opdracht $name is -X-priority: 5 -X-MS-priority: 5 -## Hier onder volgt de hoofdtekst, de lege regel is noodzakelijk! - -Hallo, - -SABnzbd heeft "$name" gedownload - -SABnzbd is niet geslaagd in het downloaden van "$name" - -Klaar om $end_time -Hoeveelheid gedownload $size - -Resultaat van de opdracht: - -Fase $stage - - $result - - - -Bericht van het script "$script" (Exit code = $script_ret): -$script_output - - -Veel plezier! - -Sorry! - diff --git a/main/language/email-sv-se.tmpl b/main/language/email-sv-se.tmpl deleted file mode 100644 index 613bf13..0000000 --- a/main/language/email-sv-se.tmpl +++ /dev/null @@ -1,43 +0,0 @@ -#encoding UTF-8 -## Translation by "Kristoffer (Malmis) Malmström" -## -## Default Email template for SABnzbd -## This a Cheetah template -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Newlines and whitespace are significant! -## -## These are the email headers -to: $to -from: $from -date: $date -subject: SABnzbd har jobb $name -X-priority: 5 -X-MS-priority: 5 -## After this comes the body, the empty line is required! - -Hej, - -SABnzbd har laddat ner "$name" - -SABnzbd misslyckades att ladda ner "$name" - -Slutade $end_time -Nedladdat $size - -Resulttat av jobbet: - -Steg $stage - - $result - - - -Utmatning frÃ¥n användarskript "$script" (Exit code = $script_ret): -$script_output - - -Lycka till! - -Tyvärr! - diff --git a/main/language/email-us-en.tmpl b/main/language/email-us-en.tmpl deleted file mode 100644 index ff8137f..0000000 --- a/main/language/email-us-en.tmpl +++ /dev/null @@ -1,41 +0,0 @@ -## -## Default Email template for SABnzbd -## This a Cheetah template -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Newlines and whitespace are significant! -## -## These are the email headers -to: $to -from: $from -date: $date -subject: SABnzbd has job $name -X-priority: 5 -X-MS-priority: 5 -## After this comes the body, the empty line is required! - -Hi, - -SABnzbd has downloaded "$name" - -SABnzbd has failed to download "$name" - -Finished at $end_time -Downloaded $size - -Results of the job: - -Stage $stage - - $result - - - -Output from user script "$script" (Exit code = $script_ret): -$script_output - - -Enjoy! - -Sorry! - diff --git a/main/language/fr-fr.txt b/main/language/fr-fr.txt deleted file mode 100644 index 3f9bf0a..0000000 --- a/main/language/fr-fr.txt +++ /dev/null @@ -1,833 +0,0 @@ -# -*- coding: latin-1 -*- -# Français - -special-decimal . -special-1000 . - -# General texts -yes Oui -no Non -default Défaut -none Aucun -KBs KB/s -MB MB -GB GB -hour heure -hours heures -minute min -minutes mins -second sec -seconds secondes -month Mois -year Année -day Jour -days Jours -daily Quotidien -monday Lundi -tuesday Mardi -wednesday Mercredi -thursday Jeudi -friday Vendredi -saturday Samedi -sunday Dimanche -day-of-month Jour du mois -filename Nom de fichier - - -# General template elements -signOn Le téléchargement usenet tout inclus -button-save Enregistrer -queued En attente -button-back Retour -button-x X - -# Header -menu-home Accueil -menu-queue File D'Attente -menu-history Historique -menu-config Config -menu-cons Connexions -menu-help Aide -menu-wiki Wiki -menu-forums Forum -menu-irc IRC -cmenu-general Général -cmenu-folders Dossiers -cmenu-switches Options -cmenu-servers Serveurs -cmenu-scheduling Planification -cmenu-rss RSS -cmenu-email Email -cmenu-newzbin Sites Index -cmenu-cat Catégories -cmenu-sorting Classement - -# Footer -ft-download Dossier incomplets -ft-complete Dossier complets -ft-speed Débit de téléchargement -ft-queued En attente -ft-paused EN PAUSE -ft-buffer@2 %s articles dans %s -ft-sysload Sysload -ft-warning AVERTISSEMENTS -ft-newRelease@1 Une nouvelle version %s est disponible - -# Main page -addNewJobs Ajouter de nouveaux téléchargements -shutdownOK? Etes-vous sûrs de vouloir quitter SABnzbd ? -link-shutdown Eteindre -link-pause Pause -link-resume Reprendre -button-add Ajouter -add Ajouter -reportId Report-id -addFile Ajouter un fichier -category Catégorie -pp Traitement -script Script -priority Priorité -pp-none Télécharger -pp-repair +Réparer -pp-unpack +Décompresser -pp-delete +Supprimer -pp-n -pp-r R -pp-u D -pp-d S -pr-force Forcer -pr-normal Normale -pr-high Haute -pr-low Basse -enterURL URL -enterID  ou Report ID - -# Queue page -link-sortByName Trier par nom -link-sortByAge Trier par âge -link-sortBySize Trier par taille -link-hideFiles Masquer fichiers -link-showFiles Afficher fichiers -onQueueFinish En fin de file d'attente -shutdownPc Eteindre PC -standbyPc Mettre en veille PC -hibernatePc Mettre en hibernation PC -shutdownSab Quitter SABnzbd -speedLimit Limite de vitesse -pauseFor Pause pour -mode Mode -order Ordre -name Nom -remainTotal Restant/Total -eta TRE -age AGE -button-del Supprimer -button-resume Reprendre -button-pause Pause -unknown inconnu -fetchingNewzbin@1 récupération msgid %s depuis www.newzbin.com -error-fetchNewzbin@1 Erreur Récupération msgid %s depuis www.newzbin.com -\ - Vérifiez que vos identifiant / mot de passe soient bien renseignés -fetchNZB@1 Essai de récupération du NZB depuis %s -eoq-actions Actions -eoq-scripts Scripts -purgeQueue Vider file d'attente -purgeQueueConf Supprimer tous les éléments de la file d'attente ? - - -# History page -purgeHist Effacer l'historique -purgeHistConf Supprimer tous les éléments de l'historique ? -hideDetails Masquer détails -showDetails Afficher détails -sizeHist Taille Historique -completed Terminés -size Taille -status Statut -msg-reAdded@1 %s a été remis en file d'attente - -# Connections page -link-forceDisc Forcer Déconnexion -askTestEmail Envoyer un mail de test à votre adresse. -link-showLog Afficher les logs -link-showWeblog Afficher les weblogs -link-testEmail Test Email -logging Logging -log-errWarn Erreurs/Avertissements -log-info + Info -log-debug + Debug -connections Connexions -thread Thread -emailResult Résultat du test Email -lastWarnings Avertissements Récents -clearWarnings effacer -server-blocked Débloquer -warning AVERTISSEMENT: -error ERREUR: -server-resolving  Résoudre l'adresse - - -# Configuration -configuration Configuration -confgFile Fichier de Configuration -explain-Restart Le bouton ci-dessous redémarrera SABnzbd.\n\ - Utilisez le si vous pensez avoir un problème de stabilité.\n\ - Les téléchargements en cours seront mis en pause puis repris. -button-restart Redémarrer -version Version -uptime Démarré Depuis -error Erreur -badParm Paramètre incorrect -error-badValue@2 Valeur incorrecte pour %s: %s -error-noFolder@1 Le dossier "%s" n'existe pas -error-QnotEmpty Erreur : La file d'attente n'est pas vide, impossible de changer le dossier. -error-noUNC@1 Les chemins UNC "%s" ne sont pas permis ici -error-notOctal@1 %s n'est pas une valeur octale correcte - -# Config->General -generalConfig Configuration Générale -restartRequired Les modifications nécessiteront un redémarrage de SABnzbd ! -webServer SABnzbd Serveur Web -opt-host Hôte SABnzbd -explain-host Hôte sur lequel SABnzbd doit attendre les connexions. -opt-port Port SABnzbd -explain-port Port sur lequel SABnzbd doit attendre les connexions. -opt-web_dir Interface Web -explain-web_dir Choisissez un thème. -opt-web_dir2 Seconde Interface Web -explain-web_dir2 Choisissez un thème pour la 2nde interface web. -webAuth Autentification Serveur Web -opt-web_username Identifiant SABnzbd -explain-web_username Nom d'utilisateur pour l'autentification (optionnel). -opt-web_password Mot de passe SABnzbd -explain-web_password Mot de passe pour l'autentification (optionnel). -httpsSupport Support HTTPS -opt-enable_https Active HTTPS -opt-notInstalled non installé -explain-enable_https Active l'accès à l'interface via une adresse HTTPS. -opt-https_port Port HTTPS -explain-https_port Port sur lequel SABnzbd doit attendre les connexions HTTPS. -opt-https_cert Certificat HTTPS -explain-https_cert Fichier ou chemin du certificat HTTPS. -opt-https_key Clé HTTPS -explain-https_key Fichier ou chemin de la clé HTTPS. -tuning Tuning -opt-refresh_rate Intervalle de rafraîchissement de la file d'attente : -explain-refresh_rate Intervalle de rafraichissement dans l'interface web (en sec, 0=aucun). -opt-rss_rate Invervalle de vérification RSS -explain-rss_rate Intervalle de vérification (en minutes, minimum 15). -opt-bandwidth_limit Limite de vitesse de téléchargement -explain-bandwidth_limit Limite de vitesse de téléchargement en kilobytes par seconde (kB/s) -opt-cache_limitstr Limite d'Article en cache -explain-cache_limitstr Permet de mettre en cache en RAM les articles pour réduire les accès disques.\n\ - En bytes, peut être suivi de K,M,G. Par exemple : "64M" ou "128M" -opt-cleanup_list Liste de nettoyage -explain-cleanup_list Liste des extensions de fichiers qui doivent être supprimés après téléchargement\n\ - Par exemple: .nfo ou .nfo, .sfv -button-saveChanges Enregistrer les modifications -opt-language Langage -explain-language Séléction la langue de l'interface web. -opt-apikey Clé API -explain-apikey Cette clé doit être spécifiée par les programmes tiers pour l'interaction avec SABnzbd. -button-apikey Générer nouvelle clé -opt-disableApikey Désactiver la clé API -explain-disableApikey La clé API n'est plus nécessaire pour l'interaction avec SABnzbd. -explain-disableApikeyAttention AUX RISQUES ! -restart1 Initialisation du redémarrage...\n -restart2  \n\ - Extinction de SABnzbd terminée.\n\ - Veuillez attendre plus de 5 secondes et cliquer cliquer sur le bouton suivant.\n\n\ - Rafraîchir\n - -# Config->Folders -folderConfig Configuration des dossiers -explain-folderConfig NOTE: Les dossiers seront créés automatiquement lors de l'Enregistrement. Il est possible d'utiliser des chemins absolus. -userFolders Dossiers Utilisateur -in Dans -opt-download_dir Dossier Incomplets -explain-download_dir Pour le sotckage des téléchargements en cours, non post-traités.\n\ - Ne peut être modifié que lorsque la file d'attente est vide. -opt-download_free Espace disque minimum pour le Dossier Téléchargement Temporaire -explain-download_free Met en pause automatiquement les téléchargements si l'espace passe en dessous de ce montant.\n\ - En bytes, peut être suivi de K,M,G,T. Par exemple : "800M" ou "8G" -opt-complete_dir Dossier Complets -explain-complete_dir Pour le stockage des téléchargements terminés et post-traités.\n\ - peut être adapté par les catégories utilisateur. -opt-permissions Permissions pour le dossier de téléchargement terminés -explain-permissions Affecter les permissions pour les dossiers/fichiers des téléchargements terminés.\n\ - En notation octale. Par exemple : "755" ou "777" -opt-dirscan_dir Dossier NZB -explain-dirscan_dir Dossier à surveiller pour les fichiers .nzb.\n\ - Prends en compte également les nzb contenus dans les fichiers .zip, .rar et .tar.gz. -opt-dirscan_speed Intervalle de scan -explain-dirscan_speed Nombre de secondes entre les scans de fichiers .nzb. -opt-script_dir Dossier Scripts de Post-traitement -explain-script_dir Dossier contenant les scripts utilisés lors du post-traitement. -opt-email_dir Dossier Modèles d'email -explain-email_dir Dossier contenant les modèles d'email définis par l'utilisateur. -systemFolders Dossiers Systèmes -opt-cache_dir Dossier du Cache -explain-cache_dir pour le stockage temporaire.\n\ - Ne peut être modifié que lorsque la file d'attente est vide.\n\ - Redémarrage requis ! -opt-log_dir Dossier de Log -explain-log_dir pour le stockage des fichiers de log de SABnzbd.\n\ - Redémarrage requis ! -opt-nzb_backup_dir Dossier Sauvegarde NZB -explain-nzb_backup_dir pour la sauvegarde des fichier .nzb. - -# Config->Switches -switchesConfig Configuration des options -processingSwitches Options de traitement -opt-quick_check Activer Quick Check -explain-quick_check Ne pas vérifier avec par2 si tous les fichiers sont 100% valides. -opt-enable_unrar Activer Unrar -explain-enable_unrar Activer la fonctionnalité unrar intégrée. -opt-enable_unzip Activer Unzip -explain-enable_unzip Activer la fonctionnalité unzip intégrée. -opt-enable_filejoin Activer Concaténation -explain-enable_filejoin Concatène les fichiers en .001, .002, etc. en un fichier. -opt-enable_tsjoin Activer Concaténation TS -explain-ts_join Concatène les fichiers en .001.ts, .002.ts, etc. en un fichier. -opt-enable_par_cleanup Activer Nettoyage Par2 -explain-enable_par_cleanup Supprimer les fichiers Par2 (uniquement si la vérification/réparation a réussi). -opt-fail_on_crc Echec lors d'erreurs crc yEnc -explain-fail_on_crc Utilise les serveurs de soutient si il y a des erreurs crc yEnc. -opt-top_only Ne télécharge uniquement que les articles en tête de file d'attente -explain-top_only Activer pour dimininuer l'utilisation de la RAM. Désactiver pour éviter les téléchargement lents bloquant la file d'attente. -opt-safe_postproc Post-traiter uniquement les téléchargements vérifiés -explain-safe_postproc Limite le post-traitement aux téléchargements qui ont passés avec succès les vérifications par2. -opt-no_dupes Eviter les duplications de téléchargement -explain-no_dupes Si un .nzb sauvegargé du même nom existe, le téléchargement ne sera pas effectué. -opt-dirscan_opts Post-traitement par défaut -explain-dirscan_opts Utilisé quand la catégorie de précise pas de choix. -opt-dirscan_script Script utilisateur par défaut -explain-dirscan_script Utilisé quand la catégorie de précise pas de choix. -opt-dirscan_priority Priorité par défaut -explain-dirscan_priority Utilisé quand la catégorie de précise pas de choix. -opt-par2_multicore Utilisé MultiCore Par2 -explain-par2_multicore Consultez le Wiki pour plus d'info à ce sujet (en anglais) ! -opt-par_option Paramètres PAR2 supplémentaires -explain-par_option Consultez le Wiki pour plus d'info à ce sujet (en anglais) ! -opt-nice Paramètres Nice -explain-nice Consultez le Wiki pour plus d'info à ce sujet (en anglais) ! -opt-ionice Paramètres IONice -explain-ionice Consultez le Wiki pour plus d'info à ce sujet (en anglais) ! -otherSwitches Autres options -opt-auto_disconnect Déconnexion lorsque la file d'attente est vide -explain-auto_disconnect Déconnexion du serveur(s) Usenet lorsque la file d'attente est vide ou en pause. -opt-send_group Envoyer Group -explain-send_group Envoyer la commande group avant la demande des articles. -opt-auto_sort Trier par âge -explain-auto_sort Trie automatiquement les fichiers par âge (moyen). -opt-check_new_rel Vérifier la présence d'une nouvelle version -explain-check_new_rel Vérfie hebdomadairement la sortie d'une nouvelle version de SABnzbd. -opt-replace_spaces Remplacer les espaces dans les noms de dossier -explain-replace_spaces Remplace les espaces par des underscores dans les noms de dossiers. -opt-replace_illegal Remplacer les caractères illégaux dans les noms de dossier -explain-replace_illegal Remplace les caractères illégaux dans les noms de dossier par des équivalents (ou les supprime). -opt-auto_browser Lancer le navigateur web au démarrage -explain-auto_browser Lance le navigateur web au démarrage de SABnzbd. -opt-pause_on_post_processing Mettre en pause les téléchargement lors du post-traitement -explain-pause_on_post_processing Met en pause les téléchargements lors des post-traitement et les reprend ensuite. -opt-ignore_samples Ignorer les Samples -explain-ignore_samples Filtre les fichiers sample de la file d'attente. -igsam-off Non -igsam-del Supprimer après téléchargement -igsam-not Ne pas télécharger -opt-ssl_type SSL type -explain-ssl_type Utiliser V23 à moins que votre fournisseur exige autrement ! - -# Config->Server -configServer Configuration Serveur -addServer Ajouter un serveur -srv-host Hôte -srv-port Port -srv-username Identifiant -srv-password Mot de passe -srv-timeout Timeout -srv-connections Connexions -srv-ssl SSL -srv-fillserver Serveur de soutient -srv-optional Optionnel -srv-enable Actif -button-addServer Ajouter Serveur -button-delServer Supprimer Serveur -error-needServer Le nom d'hôte du serveur est obligatoire -button-testServer Tester Serveur -srv-testing Test des détails du serveur en cours... -srv-testHint Cliquer ci-dessous pour tester. -srv-success Connexion réussie ! -srv-noHost Le nom d'hôte n'est pas renseigné. -srv-noConnections Pas de connexions configurées. Veuillez en spécifier au moins une. -srv-starredPass Mot de passe masqué par ******, veuillez le re-saisir -srv-invalidDetails Informations de serveur invalides -srv-timedoutSSL Délai dépassé : Essayer d'activer SSL ou un port différent. -srv-timedout Délai dépassé -srv-failedAuth Echec d'autentification, vérifiez les identifiant/mot de passe. -srv-noAuth Le serveur requiert un identifiant et un mot de passe. -srv-tooManyConnections Trop de connexions, mettez en pause les téléchargements ou essayez plus tard -srv-generalFail@1 Impossible de déterminer le résultat de la connexion (%s) - -# Config->Scheduling -configSchedule Configuration de la plannification -addSchedule Ajouter plannification -sch-frequency Fréquence -sch-action Action -sch-arguments Arguments -button-addSchedule Ajouter plannification -button-delSchedule Supprimer -currentSchedules Plannifications actuelles -sch-task Tâches -sch-disable_server désactiver serveur -sch-enable_server activer serveur -sch-resume Reprendre -sch-pause Pause -sch-shutdown Eteindre -sch-restart Rédemarrer -sch-speedlimit Limite de vitesse -sch-pause_all Pause tout -sch-pause_post Pause post-traitement -sch-resume_post Reprendre post-traitement - -# Config->RSS -configRSS Configuration RSS -newFeedURI URI Nouveau Flux -explain-RSS La case à cocher à coté du nom du flux devrait être cochée pour que le flux soit activé et qu'il soit pris en compte dans la vérification pour de nouveaux téléchargements.\n\ - La fréquence de vérification est réglable dans la page de configuration générale.\n\ - Quant un flux est ajouté, seuls les nouveaux téléchargements seront pris en compte à moins de cliquer sur "Forcer téléchargements". -feedDefinition Définition du flux -feed Flux -button-delFeed Supprimer le flux -button-preFeed Prévisualiser -button-forceFeed Forcer téléchargements -rss-order Trier -rss-type Type -rss-filter Filtre -rss-accept Accepter -rss-reject Rejeter -rss-must Obligatoire -rss-mustcat ObligatoireCat -rss-delFilter X -rss-matched Correspond -rss-notMatched Ne correspond pas -rss-done Téléchargés -rss-downloaded Téléchargés jusqu'ici -link-download Télécharger -explain-rssStar Les éléments marqués avec '*' ne seront pas automatiquement téléchargés. - -# Config->Email -configEmail Notification par Email -emailOptions Options Email -opt-email_endjob Notification par Email lors de téléchargements terminés -email-never Jamais -email-always Toujours -email-errorOnly Erreurs-uniquement -opt-email_full Notifications de disque dur plein -explain-email_full Envoie un email lorsque le disque dur est plein et que SABnzbd a été mis en pause. -opt-email_dir Dossier contenant les modèles d'email -explain-email_dir Dossier contenant les modèles d'email définis par l'utilisateur.\n\ - Relatif à -emailAccount Paramètres du compte Email -opt-email_server Serveur SMTP -explain-email_server Entrez le serveur de courrier sortant de votre FAI. -opt-email_to Adresse Email de réception -explain-email_to Adresse Email à laquelle seront envoyés les notifications. -opt-email_from Adresse Email d'envoi -explain-email_from Adresse Email de provenance des notifications. -opt-email_account OPTIONNEL: Identifiant -explain-email_account Si une autentification pour l'envoi est requise, l'identifiant. -opt-email_pwd OPTIONAL: Mot de passe -explain-email_pwd Si une autentification pour l'envoi est requise, le mot de passe. -error-badEmailAd@1 %s n'est pas une adresse email valide -opt-email_rss Send RSS notifications -explain-email_rss Send email when an RSS feed adds jobs to the queue. - -# Config->Newzbin -explain-newzbin Si vous avez un compte sur www.newzbin.com,\ - vous pouvez entrer vos informations de compte ici.\n\ - Vous accéderez à d'avantage de possibilités. -accountInfo Paramètres de compte -opt-username_newzbin Identifiant Newzbin -explain-username_newzbin Entrez votre identifiant ici. -opt-password_newzbin Mot de passe Newzbin -explain-password_newzbin Entrez votre mot de passe ici. -newzbinBookmarks Traitement des favoris -opt-newzbin_bookmarks Téléchargement automatique des favoris -explain-newzbin_bookmarks Télécharge automatiquement les favoris -link-getBookmarks Récupérer Favoris Maintenant -link-HideBM Masquer les favoris traités -link-ShowBM Afficher les favoris traités -opt-newzbin_unbookmark Retirer le favori si il a été téléchargé -explain-newzbin_unbookmark Retire de la liste des favoris lorque le téléchargement est terminé. -opt-bookmark_rate Fréquence de vérification -explain-bookmark_rate En minutes (minimum 15 min). -processedBM Favoris traités -explain-nzbmatrix Si vous avez un compte sur www.nzbmatrix.com,\ - vous pouvez entrer vos informations de compte ici.\n\ - Obligatoire si vous désirez utilisez les flux RSS de ce site. -opt-username_matrix Identifiant NzbMatrix -explain-username_matrix Entrez votre identifiant ici. -opt-password_matrix Mot de passe NzbMatrix -explain-password_matrix Entrez votre mot de passe ici. -opt-apikey_matrix NzbMatrix clé API -explain-apikey_matrix Entrez votre NzbMatrix clé API ici. - -# Config->Cat -configCat Catégories utilisateur -explain-configCat Définit le post-traitement et le stockage. -explain-catNewzbin La colonne Newzbin associera la catégorie Newzbin à la votre. -link-initCat Cliquer ici pour mettre en place les catégories newzbin. -explain-relFolder Dossiers relatifs à -catFolderPath Dossier/Chemin -catNewzbin NewzBin -catGroups Groupes -button-delCat X - -# Config->Sorting -configSort Configuration des classements -seriesSorting Classement Series -sort-show Série -sort-name Nom -opt-tvsort Activer Classement TV -explain-tvsort Active le classement et le renommage des épisodes. -sort-legenda Toggle key -button-clear Effacer -presetSort Prédéfinitions -example Exemple -genericSort Classement Générique -opt-movieSort Activer Classement Films -explain-movieSort Active le classement et le renommage générique des fichiers. -opt-movieExtra Garder les téléchargements dans des dossiers -explain-movieExtra Activer si les téléchargement ne sont pas dans leur propre dossier. -affectedCat Catégories affectées -sort-meaning Signification -sort-pattern Modèle -sort-result Résultat -button-Season1x05 1x05 Dossier Saison -button-SeasonS01E05 S01E05 Dossier Saison -button-Ep1x05 1x05 Dossier Episode -button-EpS01E05 S01E05 Dossier Episode -sort-title Titre -movie-sp-name Nom Film -movie-dot-name Nom.Film -movie-us-name Nom_Film -show-name Nom Série -show-sp-name Nom Série -show-dot-name Nom.Série -show-us-name Nom_Série -show-seasonNum Numéro Saison -show-epNum Numéro Episode -ep-name Nom Episode -ep-sp-name Nom Episode -ep-dot-name Nom.Episode -ep-us-name Nom_Episode -fileExt Extension Fichier -extension Extension -partNumber Numéro Partie -decade Décade -orgFilename Nom De Fichier Original -lowercase Minuscule -TEXT TEXTE -text texte -sort-File fichier -sortString Chaîne de Classement -multiPartLabel Etiquette Multi-partie -button-inFolders Dans Dossiers -button-noFolders Pas De Dossiers -dateSorting Classement Par Date -opt-dateSort Activer Classement Par Date -explain-dateSort Active le classement et le renommage des fichiers par date. -button-ShowNameF Dossier Nom Série -button-YMF Dossiers Année-Mois -button-DailyF Dossiers Quotidiens - - -# NZO -nzoDetails Editer les détails du NZB -nzoName Nom -nzo-delete Supprimer -nzo-top Premier -nzo-up Monter -nzo-down Descendre -nzo-bottom Dernier -nzo-all Tous -nzo-none Auncun -nzo-invert inverser -nzo-filename Nom de fichier -nzo-subject Sujets -nzo-age Age -nzo-selection Sélection - -# Internal texts -msg-warning-ambiLocalhost Avertissement: LOCALHOST est ambigü, utilisez une adresse IP numérique. -msg-invalidServer@2 Adresse Serveur "%s:%s" non valide. - -warn-missingKey Clé de session manquante -error-missingKey Erreur : Clé de session requise -warn-badSession Clé de session incorrecte -error-badKey Erreur : Clé de session incorrecte -warn-authMissing Autentification manquante, entrez votre idenifiant/mot de passe de la configuration générale\ - dans votre application tierce : -error-authMissing Erreur : Autentification manquante -warn-apikeyNone Clé API manquante, entrez la clé API de la configuration générale\ - dans votre application tierce : -error-apikeyNone Clé API Requise -warn-apikeyBad Clé API incorrecte, utilisez la clé API de la configuration générale\ - dans votre application tierce : -error-apikeyBad Erreur : Clé API incorrecte -error-noSecUI Erreur : Pas d'interface secondaire définie. - -his-badArchive Echec, Fichier d'archive inutilisable -his-cannotGetReport Echec de récupération du rapport newzbin -his-failedURL Echec de l'ajout de l'URL -his-retryURL1@1 Echec de récupération de l'URL; %s -his-retryURL2 Essayer de nouveau - -# Errors and Warnings -error-noPar2 binaire par2... NON trouvé ! -error-noWebUi Echec du lancement de l'interface web -error-noYEnc module _yenc... NON trouvé! -error-sameHTTP-HTTPS Les ports HTTP et HTTPS ne peuvent être identiques -warn-0000 Attention le nom d'hôte 0.0.0.0 nécessite une addresse IPv6 pour les accès externes -warn-noCertKey HTTPS désactivé car le certificat et la clé n'ont pas été trouvés -warn-noSkin@1 Ne peut trouver le modèle pour l'interface web : %s, essai avec le modèle standard -warn-noUnrar binaire unrar... NON trouvé ! -warn-noUnzip binaire unzip... NON trouvé ! -error-failMkstemp Echec dans tempfile.mkstemp -error-fetchReport@1 Erreur de récupération du msgid %s depuis www.newzbin.com - -error-hibernate Echec de la mise en hibernatation -error-loading@1 Chargement %s echoué -error-saveX@1 Enregistrement %s echoué -error-saveXtoY@2 Enregistrement de %s vers %s echoué -error-standby Echec de la mise en veille -error-tempFile@1 Ne peut créer le fichier temporaire pour %s -warn-noServer@1 Essai de mise à jour de statut du serveur inexistant %s -warn-noSpace Espace disque faible PAUSE forcée -warn-signal@1 Signal %s intercepté, enregistrement et fermeture en cours... -warn-flushFailed@1 Ecriture %s echouée -> pas d'art_id -error-diskError@1 Erreur disque lors de la création du fichier %s -error-diskFull Disque plein ! Pause Forcée -warn-artMissing@1 %s manquant -error-badIni@1 Fichier de configuration invalide %s -error-createIni@1 Ne peut créer le fichier de configuration %s -error-encPw@1 Cryptage du mot de passe incorrect %s -error-version@2 Le numéro de version est incorrect %s dans %s" -error-badHisNewline@1 Etape de log incorrect dans l'historique pour %s (\\r\\n) -error-badHisSemic@1 Etape de log incorrect dans l'historique pour %s (;) -error-sqlClose Echec de fermeture de base de données, voir log -error-sqlCmd Echec de la commande SQL, voir log -error-sqlCommit Echec de du commit SQL, voir log -error-decode@1 Echec du décodage de %s -error-decodeUnknown@1 Erreur inconnue lors du décodage de %s -warn-artAllMissing@1 %s => non présent de tous les serveurs, rejeté -warn-badYEnc@1 Article yEnc malformé dans %s -warn-crcError@3 Erreur CRC dans %s (%s -> %s) -error-readWatched@1 Ne peut lire le Dossier à scanner %s -error-remove@1 Erreur lors de la suppression de %s -warn-noRead@1 Ne peut lire %s -error-except Exception ? -error-noInit@3 Echec de l'initialisation %s@%s:%s -error-serverFailed@4 Echec de la connexion à %s@%s:%s, message=%s -error-serverLogin@1 Echec de la connexion au serveur %s -error-serverNoConn@2 Ne peut se connecter au serveur %s [%s] -error-serverTooMany@2 Trop de connexions au serveur %s:%s -warn-ignoreServer@2 Le serveur %s sera ignoré pendant %s minutes -warn-noConnectServer@2 Impossible de se connecter au serveur %s [%s] -error-accountSharing Partage de compte probable -error-serverCred@1 Le serveur %s requiert des identifiant/mot de passe -warn-thread@3 Thread %s@%s:%s: -error-mailAuth Echec de l'autentification au serveur de mail -error-mailNoConn Echec de la connexion au serveur de mail -error-mailSend Echec de l'envoi du mail -error-mailTempl@1 Impossible de trouver les modèles de mail dans %s -error-mailTLS Echec de l'initiation de la connexion TLS -warn-noEmailClose Echec de la fermeture de la connexion mail -msg-emailOK Succès de l'envoi du mail -error-regex@1 Echec de la compilation de regex pour la recherche du terme : %s -error-accessDir@2 %s dossier : %s Erreur d'accès -error-createDir@1 Impossible de créer le dossier %s -error-makeFile@1 Echec lors de la création de (%s) -error-moveFile@2 Echec lors du déplacement de %s vers %s -error-portNoAccess@1 Le port %s n'est pas accessible -error-regConnect Impossible de se connecter au registre HKEY_CURRENT_USER. -error-regOpen@1 Impossible d'ouvrir la clé de registre "%s". -error-regSpecial Echec de la lecture des clés de registre pour les dossiers spéciaux -error-sslFiles Erreur lors de la création de la clé et du certificat SSL -error-urlGet@2 Erreur lors de la récupération de l'url %s (erreur = "%s") -warn-noBrowser Impossible de lancer le navigateur web, potentiellement non trouvé -warn-pyopenssl module pyopenssl manquant, nécessaire pour l'accès HTTPS -error-fileJoin@2 Erreur "%s" lors de l'exécution de file_join sur %s -error-filePar2@2 Erreur %s lors de l'exécutiion de par2_repair sur %s -error-fileRead@1 notrar(): echec de lecture de %s -error-fileUnrar@2 Erreur "%s" lors de l'exécution de rar_unpack sur %s -error-fileUnzip@2 Erreur "%s" lors de l'exécution de unzip sur %s -warn-cannotFind@1 ERREUR : impossoble de trouver "%s" -warn-crcFailed@1 ERREUR : echec CRC pour "%s" -warn-delFailed@1 Echec de la suppression de %s ! -warn-encrypted ERREUR : Fichier encryptés : -warn-error@1 ERREUR : %s -warn-MissExpectedFile@1 Le fichier attendu est manquant : %s => erreur unrar ? -warn-writeError@1 ERREUR : erreur d'écriture (%s) -error-connect@1 Impossible de se connecter : %s -error-newsSSL Ce serveur d'accèpte pas de SSL sur ce port -error-noSSL Erreur lors de l'importation du module OpenSSL. Connection sans SSL -error-nbInfo@1 Impossible d'obtenir les informations pour %s du serveur Newzbin -error-nbProtocol Le serveur Newzbin a changé son protocole -error-nbReport@1 Rapport Newzbin %s non trouvé -error-nbUnkownError@1 Erreur Newzbin non documentée (%s) -error-nbUnkownError@2 Erreur Newzbin non documentée (%s, %s) -error-nbUpdate@1 Echec de la mise à jour du rapport newzbin %s -warn-nbCredit Pas de crédits sur votre compte Newzbin -warn-nbNoAuth Non autorisé, vérifiez vos identifiant / mot de passe newzbin -warn-nbNoDelBM@1 Impossible de retirer le marque-page newzbin %s -error-qAdd@1 Erreur lors de l'ajout de %s, supprimé -error-qBad Fichier de file d'attente incompatible, impossible à traiter -error-qCorruptFile@1 Erreur lors du chargement de loading %s, fichier corrompu détécté -warn-unknownEncoding@1 %s -> Encodage inconnu -error-qDupPart@3 Partie dupliquée %s, mais ID-s différents (%s // %s) -error-qImport@1 Erreur lors de l'importation de %s -warn-badImport@2 Echec lors de l'importation des fichiers %s depuis %s -warn-badNZB@3 Fichier NZB invalide %s, rejeté (raison=%s, ligne=%s) -warn-emptyFile@1 Fichier %s vide, rejeté -warn-skipDup@1 Rejet du NZB dupliqué "%s" -error-ppCleanup@1 Echec du nettoyage de %s. -error-ppDelFailed@1 Echec de la suppression de %s -error-ppDelNzo Echec de la suppression du nzo de la qeueu de post-traitement (id) -error-ppDelWorkdir@1 Erreur lors de la suppression du dossier de travail (%s) -error-ppFailed@1 Echec du post-traitement pour %s -error-ppLogFile@1 Impossible de créer le fichier de log %s -error-ppPermissions@1 Impossible de changer les permissions pour %s -error-ppRename@2 Erreur lors du renommage de "%s" en "%s" -warn-badPPQueue@2 Echec lors du chargement de la file d'attente de post-traitement : Mauvaise version (nécessaire:%s, trouvée:%s) -error-rssBadFeed@1 Description du flux RSS incorrecte "%s" -error-rssRegex@1 Impossible de compiler la regex : %s -warn-emptyRSS@1 Entrée vide de flux RSS trouvée (%s) -warn-failRSS@1 Echec de la récupération RSS pour %s -warn-failRSS@2 Echec de la récupération RSS pour %s: %s -warn-badSched@3 Mauvaise plannification le %s à %s:%s -warn-badSchedAction@1 Action inconnue : %s -warn-schedNoServer@1 Plannification pour un serveur non existant %s -error-tvInfo@1 Erreur lors de l'obtention des information TV (%s) -error-tvRename@2 Echec du renommage : %s en %s -error-tvSimRename@2 Echec du renommange des fichiers similaires : %s en %s -error-tvTemp@1 Impossible de créer le fichier temporaire %s -warn-matrixBadRep@1 Numéro de rapport nzbmatrix invalide %s -warn-matrixFail@1 Problème d'accès au serveur nzbmatrix (%s) -warn-noRepair Le binaire PAR2 n'a pas été trouvé, les réparations ne sont pas possibles\n -warn-noUnpack Le binaire UNRAR n'a pas été trouvé, la décompression des fichiers RAR n'est pas possible\n -warn-badUnrar La version de votre binaire UNRAR n'est pas recommandée,\ - Vous pouvez l'obtenir ici http://www.rarlab.com/rar_add.htm\n -warn-missingFiles \nAttention : tous les fichiers n'ont pas été décompressés, voir le log -error-joinMismatch La taille ne correspond pas à la taille attendue -error-joinFail@1 La concaténation du fichiers %s a echoué -error-joinFail@2 [%s] Erreur "%s" lors de la concaténation des fichiers -msg-joinOK@2 [%s] Concaténation %s fichiers -error-unpackFail@1 Echec de la décompression, %s -error-unpackFail@2 [%s] Erreur "%s" lors de la décompression des fichiers RAR -error-badArchive Impossible d'ouvrir l'archive principale (encryptée ou corrompue) -error-unpackFailed@1 Echec de la décompression, %s n'a pas été trouvé -error-unpackCRC Echec de la décompression, erreur CRC -error-unpackFull Echec de la décompression, erreur d'écriture ou espace disque insuffisant ? -error-unpackFailLog Echec de la décompression, voir log -error-unpackPassword Echec de la décompression, l'archive nécessite un mot de passe -error-unpackMissing Echec de la décompression, un fichier attendu n'a pas été décompressé -msg-unpackDone@2 %s fichier(s)/dossier(s) décompressés en %s -msg-unzipDone@2 %s fichiers en %s -msg-QuickCheck Contrôle Rapide... -msg-QuickChecking Contrôle Rapide en cours -msg-QuickOK@1 [%s] Contrôle Rapide OK -msg-startRepair Réparation en cours -error-repairFailed@1 Echec de la réparation, %s -error-repairBad@2 Erreur "%s" lors la réparation de %s -msg-verify Vérification... -msg-verifyOK@2 [%s] Vérifié en %s, tous les fichiers sont corrects -msg-repairNeeded Réparation requise -msg-repairNeeded@2 [%s] Vérifié en %s, réparation requise -error-noMainPacket Le paquet principal n'a pas été trouvé... -error-repairBlocks@1 Echec de la réparation, blocs de réparation insuffisants (manque %s) -msg-fetchBlocks@1 Téléchargement de %s blocs... -msg-repairing Réparation en cours -msg-repairDone@2 [%s] Réparé en %s -msg-verifying Vérification en cours -msg-DownloadedIn@2 Téléchargé en %s à %sB/s en moyenne -msg-noParSets@1 [%s] Pas de fichiers par2 -msg-noPostProc Pas de post-traitement car la vérification a echoué -msg-sentToQ@1 %s mis en file d'attente -msg-runScript@1 Exécution du script utilisateur %s en cours -msg-ranScript@1 %s exécuté -link-more Plus -link-viewSc Voir le résultat du script -warn-OutRetention Echec de téléchargement - Rétention du serveur dépassée ? -warn-PostCrash Le post-traitement a planté, voir log -msg-moving Déplacement -msg-running Exécution de script -msg-joining Concaténation -msg-unpacking Décompression -msg-repair Réparation -msg-fetching Récupération -msg-path Chemin - -stage-download Téléchargement -stage-repair Réparation -stage-filejoin Concaténation -stage-unpack Décompression -stage-script Script - -post-Completed Terminé -post-Failed Echoué -post-Queued En file d'attente -post-Repairing Réparation en cours... -post-Extracting Décompression en cours... -post-Moving Déplacement en cours... -post-Running Exécution de script en cours... -post-Fetching Téléchargement des extra blocs... -post-QuickCheck Contrôle rapide... -post-Verifying Vérification... - -#Growl Messages -grwl-notif-startup Démarrage/Arrêt -grwl-notif-dl Ajout NZB -grwl-notif-pp Post-traitement -grwl-notif-other Autres Messages -grwl-shutdown-begin-msg Arrêt en cours... -grwl-shutdown-end-msg SABnzbd arrêt terminé -grwl-paused-msg En Pause -grwl-nzbadd-title NZB ajouté à la file d'attente -grwl-newversion-msg Nouvelle version disponible - -#OSX Menu -osx-menu-warnings Avertissements -osx-menu-status-idle En Attente -osx-menu-status-paused En Pause -osx-menu-pause Pause -osx-menu-min min. -osx-menu-resume Reprendre -osx-menu-queue File d'attente -osx-menu-queuelimit File d'attente - 10 premiers éléments -osx-menu-history Historique -osx-menu-historylimit Historique - 10 derniers éléments -osx-menu-speedlimit Limite Vitesse -osx-menu-none Aucune -osx-menu-getnewzbinbm Récupérer Favoris Newzbin -osx-menu-complete Dossier Complets\t\t -osx-menu-incomplete Dossier Incomplets\t\t -osx-menu-restart Redémarrer SABnzbd -osx-menu-quit Quitter SABnzbd -osx-menu-config Configuration -osx-menu-purgequeue Vider File d'attente -osx-menu-purgehistory Vider Historique -osx-menu-wizard Ouvrir l'assistant -osx-menu-empty Vide -osx-menu-shutdowning Arrêt en cours... - -email-full@2 \ -to: %s\r\ -from: %s\r\ -subject: SABnzbd : Espace disque insuffisant\r\ -\r\ -Hi,\r\ -\r\ -SABnzbd a mis en pause les téléchargements car le disque est presque plein.\r\ -Veuillez libérer de l'espace et reprendre les téléchargements manuellement.\r\ -\r diff --git a/main/language/nl-du.txt b/main/language/nl-du.txt deleted file mode 100644 index 01411bc..0000000 --- a/main/language/nl-du.txt +++ /dev/null @@ -1,814 +0,0 @@ -# -*- coding: UTF-8 -*- -# Nederlands - -special-decimal . -special-1000 , - -# General texts -yes Ja -no Nee -default Standaard -none Geen -KBs KB/s -MB MB -hour uur -hours uren -minute min -minutes min -second sec -seconds seconden -month maand -year jaar -day dag -days dagen -daily dagelijks -monday maandag -tuesday dinsdag -wednesday woensdag -thursday donderdag -friday vrijdag -saturday zaterdag -sunday zondag -day-of-month dagnummer -filename Bestandsnaam - -# General template elements -signOn De automatische Usenet downloader -button-save Opslaan -queued Rij -button-back Terug -button-x X - -# Header -menu-home Opdrachten -menu-queue Wachtrij -menu-history Geschiedenis -menu-config Instellen -menu-cons Verbindingen -menu-help Hulp -menu-wiki Wiki -menu-forums Forum -menu-irc IRC -cmenu-general Algemeen -cmenu-folders Mappen -cmenu-switches Opties -cmenu-servers Servers -cmenu-scheduling Taakplanner -cmenu-rss RSS -cmenu-email Email -cmenu-newzbin Index sites -cmenu-cat Categorieën -cmenu-sorting Sorteren - -# Footer -ft-download Map download -ft-complete Map voltooid -ft-speed Snelheid -ft-queued Wachtend -ft-paused PAUZE -ft-buffer@2 %s artikelen (%s) gebuffered -ft-sysload Sysload -ft-warning MELDINGEN -ft-newRelease@1 Nieuwe versie %s beschikbaar op - -# Main page -addNewJobs Opdrachten toevoegen -shutdownOK? Weet je zeker dat je SABnzbd wilt afsluiten? -link-shutdown Afsluiten -link-pause Pauze -link-resume Doorgaan -button-add Toevoegen -add -reportId Newzbin rapport -addFile Bestand -category Categorie -pp Nabewerking -priority Prioriteit -pp-none Geen -pp-repair +Repareren -pp-unpack +Uitpakken -pp-delete +Opschonen -pp-n -pp-r R -pp-u U -pp-d O -pr-force Forceren -pr-normal Normaal -pr-high Hoog -pr-low Laag -enterURL URL -enterID  of Report ID - -# Queue page -link-sortByName Op naam -link-sortByAge Op leeftijd -link-sortBySize Op grootte -link-hideFiles Verberg bestanden -link-showFiles Toon bestanden -onQueueFinish Bij lege rij -shutdownPc PC afsluiten -standbyPc PC standby -hibernatePc PC slapen -shutdownSab SABnzbd afsluiten -speedLimit Max. snelheid -pauseFor Pauzeer -name Naam -mode Modus -order -remainTotal Te doen/Totaal -eta Klaar om -age Leeftijd -button-del Wis -button-resume Doorgaan -button-pause Pauzeer -unknown onbekend -fetchingNewzbin@1 Ophalen rapport %s van www.newzbin.com -error-fetchNewzbin@1 Fout bij ophalen van rapport %s van www.newzbin.com -\ - Zorg dat je gebruikersnaam en wachtwoord goed ingevuld zijn -fetchNZB@1 Probeer NZB op te halen van %s -eoq-actions Akties -eoq-scripts Scripts -purgeQueue Wis wachtrij -purgeQueueConf Verwijder alle opdrachten uit de wachtrij? - -# History page -purgeHist Alles wissen -purgeHistConf Verwijder alle items uit de Geschiedenis? -hideDetails Verberg details -showDetails Toon details -sizeHist Totaal -completed Voltooid -size Grootte -status Status -msg-reAdded@1 Opdracht "%s" terug naar de wachtrij - -# Connections page -link-forceDisc Verbreek verbindingen -askTestEmail Hiermee stuur je een test email. -link-showLog Toon log info -link-showWeblog Toon weblog info -link-testEmail Test Email -logging Loggen -log-errWarn Fouten/Waarschuwingen -log-info + Info -log-debug + Debug -connections Verbindingen -thread Verbinding -emailResult Test resultaat email -lastWarnings Recentste meldingen -clearWarnings Wissen -server-blocked Deblokkeren -warning WAARSCHUWING: -error FOUT: -server-resolving  Adres opzoeken - -# Configuration -configuration Instellingen -confgFile Instellingen bestand -explain-Restart De knop hier onder zal SABnzbd herstarten.\n\ - Dit kan nuttig zijn wanneer je vermoedt dat het programma niet stabiel is.\n\ - Het downloaden zal vóór de herstart gestopt worden en daarna weer doorgaan. -button-restart Herstarten -version Versie -uptime Aktief -error Fout -badParm Foute instelling -error-badValue@2 Foute waarde voor %s: %s -error-noFolder@1 Map "%s" bestaat niet. -error-QnotEmpty Fout: Wachtrij is niet leeg, kan geen andere map kiezen. -error-noUNC@1 Het UNC pad "%s" mag hier niet. -error-notOctal@1 %s is geen correct octaal getal - -# Config->General -generalConfig Algemene instellingen -restartRequired Wijzigingen worden pas aktief na herstart! -webServer Web server -opt-host Host -explain-host Host adres waar op SABnzbd luistert. -opt-port Poort -explain-port Poort waar op SABnzbd luistert. -opt-web_dir Gebruikersinterface -explain-web_dir Kies een skin (herstart nodig). -opt-web_dir2 Secundair Gebruikersinterface -explain-web_dir2 Aktiveer secundaire skin (herstart nodig). -webAuth Web server authenticatie -opt-web_username Gebruikersnaam -explain-web_username Gebruikersnaam voor web login. -opt-web_password Wachtwoord -explain-web_password Wachtwoord voor web login. -httpsSupport HTTPS ondersteuning -opt-enable_https Maak HTTPS mogelijk -opt-notInstalled niet geinstalleerd -explain-enable_https Sta gebruik van HTTPS toe. -opt-https_port HTTPS Poort -explain-https_port Poort die SABnzbd gebruikt voor HTTPS communicatie -opt-https_cert HTTPS Certificaat -explain-https_cert Naam of pad van het HTTPS Certificaat bestand. -opt-https_key HTTPS Sleutelbestand -explain-https_key Naam of pad van het HTTPS Sleutel bestand. -tuning Afstelling -opt-refresh_rate Verversingsinterval van de Wachtrij -explain-refresh_rate Verversingsinterval van het de Wachtrij pagina (sec, 0= geen). -opt-rss_rate RSS uitlees interval -explain-rss_rate Aantal minuten tussen de RSS uitlezingen (minimaal 15). -opt-bandwidth_limit Download snelheidsbeperking -explain-bandwidth_limit Download snelheidsbeperking kilobytes per seconde (kB/s). -opt-cache_limitstr Artikel buffer beperking -explain-cache_limitstr Bewaar de artikelen in het werkgeheugen (verminderd schijf gebruik). -opt-cleanup_list Opschoon lijst -explain-cleanup_list Lijst van bestand extensies die verwijderd worden\n\ - Voorbeeld: .nfo or .nfo, .sfv -button-saveChanges Opslaan -opt-language Taal -explain-language Kies andere taal -opt-apikey API Sleutel -explain-apikey Deze sleutel is nodig om hulp programma's toegang tot SABnzbd te geven. -button-apikey Maak een nieuwe sleutel -opt-disableApikey API-sleutel niet gebruiken -explain-disableApikey Gebruik van de API sleutel niet afdwingen. -explain-disableApikeyWarn GEBRUIK OP EIGEN RISICO! -restart1 Begin met herstart...\n -restart2  \n\ - SABnzbd is nu afgesloten.\n\ - Wacht ongeveer 5 seconden en klik dan op onderstaande knop.\n\n\ - Verversen\n - -warning-ambiLocahost Waarschuwing: LOCALHOST is niet eenduidig, gebruik een numeriek IP-adres. - -# Config->Folders -folderConfig Map instellingen -explain-folderConfig Let op: mappen worden vanzelf aangemaakt bij "Opslaan". -userFolders Gebruikersmappen -in In -opt-download_dir Tijdelijke download map -explain-download_dir Plaats om onbewerkte downloads op te slaan\n\ - Kan alleen gewijzigd worden als de wachtrij leeg is. -opt-download_free Minimale vrije ruimte voor tijdelijke download map -explain-download_free Download wordt gepauzeerd als er te weinig ruimte vrij is -opt-complete_dir Map voor verwerkte downloads -explain-complete_dir (kan aangepast worden door de categorieën). -opt-permissions Toegangsrechten voor verwerkte downloads -explain-permissions Zet toegangsrechten voor verwerkte bestanden/mappen, alleen octale notatie! -opt-dirscan_dir Bewaakte map -explain-dirscan_dir .nzb en .zip bestanden in deze map worden automatisch gedownload. -opt-dirscan_speed Leestempo bewaakte map -explain-dirscan_speed Aantal seconden tussen lezen van de bewaakte map. -opt-script_dir Map met gebruikers scripts -explain-script_dir Map waarin zich de script bestanden voor nabewerking bevinden. -opt-email_dir Map met email sjablonen -explain-email_dir Map waarin zich de email sjablonen bevinden. -systemFolders Systeem folders -opt-cache_dir Cache mappen -explain-cache_dir Map gebruikt voor tijdelijke opslag\n\ - Kan alleen gewijzigd worden als de wachtrij leeg is\n\ - Vereist een herstart. -opt-log_dir Map voor logging -explain-log_dir Map waarin de log bestanden worden opgeslagen\n\ - Vereist een herstart. -opt-nzb_backup_dir Map voor het bewaren van nzb bestanden -explain-nzb_backup_dir Map waar reserve kopieën opgeslagen worden. - -# Config->Switches -switchesConfig Diverse instellingen -processingSwitches Nabewerking instellingen -opt-quick_check Snelle controle toestaan -explain-quick_check Geen uitgebreide PAR2 controle als files 100% in orde zijn. -opt-enable_unrar Unrar toestaan -explain-enable_unrar Uitpakken van RAR archieven toestaan. -opt-enable_unzip Unzip toestaan -explain-enable_unzip Uitpakken van ZIP archieven toestaan. -opt-enable_filejoin Samenvoegen van bestanden toestaan -explain-enable_filejoin Voeg bestanden eindigend met .001, .002 enz. samen tot één file. -opt-enable_tsjoin Samenvoegen van TS bestanden toestaan -explain-ts_join Voeg bestanden eindigend met .001.ts, .002.ts enz. samen tot één file. -opt-enable_par_cleanup PAR bestanden opruimen -explain-enable_par_cleanup Ruim PAR bestanden op (na succesvolle verificatie/reparatie). -opt-fail_on_crc Verwijder artikelen met yEnc crc fouten -explain-fail_on_crc Probeer deze artikelen opnieuw te downloaden van een reserve server. -opt-top_only Download alleen artikelen van het begin van de wachtrij -explain-top_only Aanzetten zal leiden tot minder geheugen gebruik.\n\ - Uitzetten om te voorkomen dat langzame opdrachten de wachtrij blokkeren. -opt-safe_postproc Verwerk alleen correct geverifieerde downloads -explain-safe_postproc Voer de nabewerking alleen uit op downloads die alle PAR2 controles hebben doorlopen. -opt-no_dupes Download geen dubbele opdrachten. -explain-no_dupes Sla een opdracht over wanneer de NZB al als reserve bestand is opgeslagen. -opt-dirscan_opts Standaard nabewerking -explain-dirscan_opts Wordt gebruikt wanneer de categorie geen nabewerking opgeeft. -opt-dirscan_script Standaard script -explain-dirscan_script Wordt gebruikt wanneer de categorie geen script opgeeft. -opt-dirscan_priority Standaard prioriteit -explain-dirscan_priority Wordt gebruikt wanneer de categorie geen prioriteit opgeeft. -opt-par2_multicore MultiCore Par2 toestaan -explain-par2_multicore Lees hier voor de Wiki pagina! -opt-par_option Extra PAR2 parameters: -explain-par_option Lees hier voor de Wiki pagina! -opt-nice "Nice" parameters -explain-nice Lees hier voor de Wiki pagina! -opt-ionice "IONice" parameters -explain-ionice Lees hier voor de Wiki pagina! -otherSwitches Diverse instellingen -opt-auto_disconnect Verbreek verbindingen wanneer er niets te doen is -explain-auto_disconnect Verbreek verbindingen wanneer de wachtrij leeg is of er gepauzeerd wordt. -opt-send_group Verzend groep -explain-send_group Verzend de groepsnaam naar de server. -opt-auto_sort Sorteer op leeftijd -explain-auto_sort Automatisch sorteren op basis van gemiddelde leeftijd. -opt-check_new_rel Informeer naar nieuwe versies -explain-check_new_rel Informeer iedere week naar nieuwe SABnzbd versies. -opt-replace_spaces Vervang spaties in map namen -explain-replace_spaces Vervang spaties door onderliggende streepjes in map namen. -opt-replace_illegal Vervang verboden tekens in map namen -explain-replace_illegal Vervang verboden tekens in map namen door gelijkende tekens (anders verwijderen). -opt-auto_browser Start web browser bij opstarten -explain-auto_browser Start de web browser wanneer SABnzbd opstart. -opt-pause_on_post_processing Onderbreek downloaden tijdens nabewerken -explain-pause_on_post_processing Onderbreek downloaden tijdens nabewerken. -opt-ignore_samples Verwerking van "sample" bestanden -explain-ignore_samples Wat te doen met "sample" bestanden? -igsam-off Behouden -igsam-del Verwijderen na download -igsam-not Niet downloaden -opt-ssl_type SSL type -explain-ssl_type Gebruik V23, behalve wanneer persé nodig voor je Internet provider! - -# Config->Server -configServer Usenet servers -addServer Voeg server toe -srv-host Server naam -srv-port Poort nummer -srv-username Gebruikersnaam -srv-password Wachtwoord -srv-timeout Tijdslimiet -srv-connections Verbindingen -srv-ssl SSL -srv-fillserver Reserve server -srv-optional Optioneel -srv-enable Aktief -button-addServer Voeg toe -button-delServer Verwijder -error-needServer Server adres verplicht - -# Config->Scheduling -configSchedule Agenda instellen -addSchedule Taak toevoegen -sch-frequency Frequentie -sch-action Aktie -sch-arguments Parameters -button-addSchedule Voeg toe -button-delSchedule Verwijder -currentSchedules Huidige taken -sch-task Taak -sch-disable_server Server uit: -sch-enable_server Server aan: -sch-resume Doorgaan -sch-pause Pauze -sch-shutdown Afsluiten -sch-restart Herstarten -sch-speedlimit Maximum snelheid -sch-pause_all Alles pauzeren -sch-pause_post Pauzeer nabewerken -sch-resume_post Hervat nabewerken - - -# Config->RSS -configRSS RSS Stroom Definities -newFeedURI Nieuwe Stroom -explain-RSS Om de RSS stroom automatisch te verwerken, vink het selectievlakje bij de definitie naam aan.\n\ - De lees-frequentie is in te stellen op de "Algemene instellingen" pagina.\n\ - Wanneer een nieuwe stroom wordt gedefinieerd, zullen alleen nieuwe items gevonden worden en geen bestaande,\ - behalve wanneer je de op "Forceer download" klikt. -feedDefinition Stroom Definitie -feed Stroom -button-delFeed Verwijder -button-preFeed Voorbeeld -button-forceFeed Forceer download -rss-order Volgorde -rss-type Type -rss-filter Filter -rss-accept Accepteren -rss-reject Verwerpen -rss-must Verplicht -rss-mustcat VerplichteCat -rss-delFilter X -rss-matched Geselecteerd -rss-notMatched Niet geselecteerd -rss-done Gedaan -rss-downloaded Tot nu toe gedaan -link-download Download -explain-rssStar Items met een ster '*' worden niet automatisch gedownload. - -# Config->Email -configEmail Email berichten -emailOptions Email Opties -opt-email_endjob Zend email na voltooien van elke download -email-never Nooit -email-always Altijd -email-errorOnly Alleen bij fouten -opt-email_full Zend email wanneer de harde schijf vol is -explain-email_full Zend email wanneer SABnzbd gestopt is vanwege een volle harde schijf. -emailAccount Email gegevens -opt-email_server SMTP email server -explain-email_server Het adres van je Internet providers email server. -opt-email_to Email bestemming -explain-email_to Adres waarnaar de email verstuurd wordt. -opt-email_from Email afzender -explain-email_from Wie zou de email gestuurd moeten hebben? -opt-email_account OPTIE: Account gebruikersnaam -explain-email_account Wanneer authenticatie nodig is, gebruikersnaam. -opt-email_pwd OPTIE: Account wachtwoord -explain-email_pwd Wanneer authenticatie nodig is, wachtwoord. -error-badEmailAd@1 %s is geen geldig email adres -opt-email_rss Zend email voor RSS -explain-email_rss Zend email wanneer een RSS bron opdrachten\n\ - aan de queue toevoegd. - -# Config->Newzbin -explain-newzbin Wanneer je een account bij www.newzbin.com hebt,\ - kun je hier je gegevens invullen.\n\ - Dit maakt extra mogelijkheden beschikbaar. -accountInfo Account info -opt-username_newzbin Gebruikersnaam -explain-username_newzbin Vul hier je gebruikersnaam in. -opt-password_newzbin Wachtwoord -explain-password_newzbin Vul hier je wachtwoord in. -newzbinBookmarks Automatische bookmark verwerking -opt-newzbin_bookmarks Bookmarks verwerken -explain-newzbin_bookmarks Download alle rapporten die gebookmarked zijn? -link-getBookmarks Download nu alle bookmarks -link-HideBM Verberg verwerkte bookmarks -link-ShowBM Toon verwerkte bookmarks -opt-newzbin_unbookmark Automatisch bookmark verwijderen -explain-newzbin_unbookmark Verwijder bookmark status na voltooide download. -opt-bookmark_rate Lees interval -explain-bookmark_rate In minuten (minimaal 15). -processedBM Verwerkte bookmarks -explain-nzbmatrix Wanneer je een account bij www.nzbmatrix.com hebt,\ - kun je hier je gegevens invullen.\n\ - Dit is nodig om RSS stromen van deze site te kunnen verwerken. -opt-username_matrix Gebruikersnaam -explain-username_matrix Vul hier je gebruikersnaam in. -opt-password_matrix Wachtwoord -explain-password_matrix Vul hier je wachtwoord in. -opt-apikey_matrix NzbMatrix API sleutel -explain-apikey_matrix Vul hier de NzbMatrix API sleutel in. - -# Config->Cat -configCat Categorieën voor nabewerking -explain-configCat Bepalend voor nabewerking en opslag. -explain-catNewzbin De Newzbin kolom beeldt newzbin categorieën af op je eigen categorieën. -link-initCat Klik hier om de standaard newzbin categorieën in te vullen. -explain-relFolder De relatieve mappen zijn gebaseerd op -catFolderPath Map/Pad -catNewzbin NewzBin -catGroups Groepen -button-delCat X - -# Config->Sorting -configSort Sorteer instellingen -seriesSorting Serie sorteren -sort-show Serie -sort-name Naam -opt-tvsort TV sorteren aan -explain-tvsort Sta sorteren en hernoemen van afleveringen toe. -sort-legenda Uitleg -button-clear Wissen -presetSort Voorkeuzes -example Voorbeeld -genericSort Algemeen sorteren -opt-movieSort Film sorteren aan -opt-movieExtra Zet downloads in aparte mappen -explain-movieExtra Sta opslaan van downloads in een eigen map toe. -affectedCat Beïnvloede categorieën -explain-movieSort Sta algemeen sorteren en hernoemen van bestanden toe. -sort-meaning Betekenis -sort-pattern Patroon -sort-result Resultaat -button-Season1x05 1x05 Seizoensmappen -button-SeasonS01E05 S01E05 Seizoensmap -button-Ep1x05 1x05 Episodemap -button-EpS01E05 S01E05 Episodemap -sort-Title Itel -movie-sp-name Film Naam -movie-dot-name Film.Naam -movie-us-name Film_Naam - -show-name Serie Naam -show-sp-name Serie Naam -show-dot-name Serie.Naam -show-us-name Serie_Naam -show-seasonNum Seizoen Nummer -show-epNum Episode Nummer -ep-name Episode Naam -ep-sp-name Episode Naam -ep-dot-name Episode.Naam -ep-us-name Episode_Naam -fileExt Bestandsextensie -extension Extensie -partNumber Volgnummer -decade Decade -orgFilename Originele Bestandsnaam -lowercase kleine letters -TEXT TEKST -text tekst -sort-File bestand -sortString Sorteer formule -multiPartLabel Meervoudig label -button-inFolders In mappen -button-noFolders Geen mappen -dateSorting Datum sorteren -opt-dateSort Datum sorteren aanzetten -explain-dateSort Sta sorteren en hernoemen van datum-gebaseerde bestandsnamen toe. -button-ShowNameF Toon Naam map -button-YMF Jaar-Maand Mappen -button-DailyF Dagelijkse Mappen - -# NZO -nzoDetails Bewerk NZB Details -nzoName Naam -nzo-delete Verwijder -nzo-top Boven -nzo-up Hoger -nzo-down Lager -nzo-bottom Onder -nzo-all alles -nzo-none geen -nzo-invert omkeren -nzo-filename Bestandsnaam -nzo-subject Onderwerp -nzo-age Leeftijd -nzo-selection Selectie - - -# Internal texts -msg-warning-ambiLocalhost Let op: LOCALHOST is niet eenduidig, gebruik een numeriek IP-adres. -msg-invalidServer@2 Server adres "%s:%s" is niet geldig. - -warn-missingKey Sessie sleutel ontbreekt -error-missingKey Fout: Sessie sleutel nodig -warn-badSession Foutieve Sessie sleutel -error-badKey Fout: Sessie sleutel niet geldig -warn-authMissing Authenticatie ontbreekt: Vul gebruikersnaam en wachtwoord van "Algememe instellingen" in\ - bij je hulp programma: -error-authMissing Fout: ontbrekende authenticatie -warn-apikeyNone API Sleutel ontbreekt: Vul de API Sleutel van "Algememe instellingen" in\ - bij je hulp programma: -error-apikeyNone API Sleutel nodig -warn-apikeyBad API Sleutel is fout Vul de API Sleutel van "Algememe instellingen" in\ - bij je hulp programma: -error-apikeyBad Fout: API Sleutel fout -error-noSecUI Fout: geen secundaire interface ingesteld. - -his-badArchive Mislukt, onbruikbaar archief bestand -his-cannotGetReport Mislukt, kan newzbin rapport niet vinden -his-failedURL URL ophalen mislukt -his-retryURL1@1 URL ophalen mislukt; %s -his-retryURL2 Opnieuw - -# Errors and Warnings -error-noPar2 par2 propgramma niet gevonden! -error-noWebUi Kan web interface niet starten -error-noYEnc _yenc module niet gevonden! -error-sameHTTP-HTTPS HTTP en HTTPS poorten kunnen niet gelijk zijn -warn-0000 Let op, wanneer je 0.0.0.0 als hostnaam gebruikt,\ - heb je voor externe toegang een IPv6 adres nodig -warn-noCertKey HTTPS is uitgeschakeld vanwege ontbrekende CERT en KEY bestanden. -warn-noSkin@1 Kan skin bestanden niet vinden: %s, "Default" skin wordt gebruikt. -warn-noUnrar unrar programma niet gevonden! -warn-noUnzip unzip programma niet gevonden! -error-failMkstemp Probleem met tempfile.mkstemp -error-fetchReport@1 Fout bij ophalen van rapport %s van www.newzbin.com -  -error-hibernate Kan systeem niet in slaapstand krijgen -error-loading@1 Inlezen van %s lukt niet -error-saveX@1 Opslaan van %s lukt niet -error-saveXtoY@2 Opslaan van %s als %s lukt niet -error-standby Kan het systeem niet in standby krijgen -error-tempFile@1 Kan geen tijdelijk bestand %s aanmaken -warn-noServer@1 Poging om status van niet bestaande server %s te wijzigen -warn-noSpace Te weinig schijf ruimte, forceer Pauze -warn-signal@1 Signaal %s ontvangen, opslaan en afluiten... -warn-flushFailed@1 Opslaan van %s mislukt -> geen art_id -error-diskError@1 Schrijf fout bij opslaan van bestand %s -error-diskFull Schijf is vol! Forceer Pauze -warn-artMissing@1 %s ontbreekt -error-badIni@1 Ongeldig instellingen bestand %s -error-createIni@1 Kan geen instellingen bestand %s aanmaken -error-encPw@1 Foutief gecodeerd wachtwoord %s -error-version@2 Foutief versie nummer %s in %s" -error-badHisNewline@1 Foutieve fase logging in geschiedenis voor %s (\\r\\n) -error-badHisSemic@1 Foutieve fase logging in geschiedenis voor %s (;) -error-sqlClose Het lukt niet om de database te sluiten, zie log bestand -error-sqlCmd SQL opdracht mislukt, zie log bestand -error-sqlCommit SQL opslag opdracht mislukt, zie log bestand -error-decode@1 Decoderen van %s mislukt -error-decodeUnknown@1 Onbekende fout tijdens het decoderen van %s -warn-artAllMissing@1 %s => ontbreekt op alle servers, overslaan -warn-badYEnc@1 Foutief gevormd yEnc artikel in %s -warn-crcError@3 CRC fout in %s (%s -> %s) -error-readWatched@1 Kan Bewaakte Map %s niet lezen -error-remove@1 Fout bij verwijderen van %s -warn-noRead@1 Kan %s niet lezen -error-except Exception? -error-noInit@3 Kan geen verbinding maken %s@%s:%s -error-serverFailed@4 Verbinding %s@%s:%s mislukt, bericht=%s -error-serverLogin@1 Kan niet aanmelden bij server %s -error-serverNoConn@2 Kan geen verbinding maken met server %s [%s] -error-serverTooMany@2 Te veel verbindingen met server %s:%s -warn-ignoreServer@2 Server %s wordt gedurende %s minuten genegeerd -warn-noConnectServer@2 Kan geen verbinding maken met server %s [%s] -error-accountSharing Mogelijk delen van account -error-serverCred@1 Server %s heeft gebruikersnaam/wachtwoord nodig -warn-thread@3 Verbinding %s@%s:%s: -error-mailAuth Kan niet aanmelden bij email server -error-mailNoConn Kan geen verbinding maken met email server -error-mailSend Verzenden van email is mislukt -error-mailTempl@1 Kan geen email sjablonen vinden in %s -error-mailTLS Kan geen TLS verbinding maken -warn-noEmailClose Afsluiten email verbinding lukt niet -msg-emailOK Email verzonden -error-regex@1 Samenstellen van reguliere expressie lukt niet: %s -error-accessDir@2 %s map: fout %s bij toegang -error-createDir@1 Kan map %s niet aanmaken -error-makeFile@1 Aanmaken %s mislukt -error-moveFile@2 Verplaatsen van %s naar %s mislukt -error-portNoAccess@1 Je hebt geen toestemming om poort %s te gebruiken -error-regConnect Kan geen verbinding maken met register deel HKEY_CURRENT_USER. -error-regOpen@1 Kan register sleutel "%s" niet lezen -error-regSpecial Kan register sleutels voor speciale mappen niet lezen -error-sslFiles Fout bij aanmaken van SSL sleutel en certificaat -error-urlGet@2 Fout bij ophalen via URL %s (oorzaak = "%s") -warn-noBrowser Kan de web-browser niet starten, geen gevonden -warn-pyopenssl Module "pyopenssl" ontbreekt, geen HTTPS mogelijk -error-fileJoin@2 Fout %s bij samenvoegen van %s -error-filePar2@2 Fout %s bij uitvoeren van par2 reparatie op verzameling %s -error-fileRead@1 Kan RAR bestand %s niet lezen -error-fileUnrar@2 Fout "%s" bij uitvoeren van rar_unpack op %s -error-fileUnzip@2 Fout "%s" bij uitvoeren van unzip() op %s -warn-cannotFind@1 FOUT" kan "%s" niet vinden -warn-crcFailed@1 FOUT: Foutieve CRC "%s" -warn-delFailed@1 Verwijderen van %s mislukt! -warn-encrypted FOUT: versleuteld bestand -warn-error@1 FOUT: %s -warn-MissExpectedFile@1 Verwacht bestand %s ontbreekt => unrar fout? -warn-writeError@1 ERROR: schrijf fout (%s) -error-connect@1 Verbinding mislukt: %s -error-newsSSL De server staat geen SSL toe op deze poort -error-noSSL Fout bij importeren van module OpenSSL, probeer NON-SSL -error-nbInfo@1 Newzbin server geeft geen informatie over %s -error-nbProtocol Newzbin server gebruikt ander protocol -error-nbReport@1 Newzbin rapport %s niet gevonden -error-nbUnkownError@1 Newzbin meldt onbekende fout code %s -error-nbUnkownError@2 Newzbin meldt onbekende fout code (%s, %s) -error-nbUpdate@1 Bijwerken newzbin opdracht %s mislukt -warn-nbCredit Je hebt geen betaald Newzbin account -warn-nbNoAuth Niet geauthoriseerd, controleer je newzbin gebruikersnaam/wachtwoord -warn-nbNoDelBM@1 Verwijderen van newzbin bookmark %s mislukt -error-qAdd@1 Fout bij toevoegen van %s, wordt weer verwijderd -error-qBad Onbruikbaar wachtrij bestand gevonden, kan niet verder -error-qCorruptFile@1 Fout bij inladen van %s, corrupt bestand gevonden -warn-unknownEncoding@1 %s -> Onbekende codering -error-qDupPart@3 Dubbel deel %s, met verschillende ID-s (%s // %s) -error-qImport@1 Fout bij importeren van %s -warn-badImport@2 Importeren van %s bestanden van %s mislukt -warn-badNZB@3 Foutief NZB bestand %s, overslaan (reden=%s, regel=%s) -warn-emptyFile@1 Bestand %s is leeg, overslaan -warn-skipDup@1 Overslaan van dubbel NZB bestand "%s" -error-ppCleanup@1 Opschonen van %s mislukt -error-ppDelFailed@1 Verwijderen van %s mislukt -error-ppDelNzo Verwijderen van nzo van nabewerkingswachtrij mislukt -error-ppDelWorkdir@1 Fout bij verwijderen van werkmap %s -error-ppFailed@1 Nabewerking van %s mislukt -error-ppLogFile@1 Kan geen log bestand %s aanmaken -error-ppPermissions@1 Kan beveiliging van %s niet aanpassen -error-ppRename@2 Fout bij hernoemen van "%s" tot "%s" -warn-badPPQueue@2 Fout bij laden van nabewerkingswachtrij: verkeerde versie (nodig:%s, gevonden:%s) -error-rssBadFeed@1 Foutieve RSS stroom definitie "%s" -error-rssRegex@1 Kan reguliere expressie "%s" niet verwerken -warn-emptyRSS@1 Lege RSS stroom gevonden (%s) -warn-failRSS@1 Kan RSS stroom "%s" niet lezen -warn-failRSS@2 Kan RSS stroom "%s" niet lezen van "%s" -warn-badSched@3 Foutieve taak %s om %s:%s -warn-badSchedAction@1 Onbekende aktie: %s -warn-schedNoServer@1 Taak voor niet bestaande server %s -error-tvInfo@1 Fout bij ophalen TV info (%s) -error-tvRename@2 Hernoemen van %s tot %s mislukt -error-tvSimRename@2 Hernoemen van gelijkaardig bestand %s tot %s mislukt -error-tvTemp@1 Aanmaken tijdelijk bestand %s mislukt -warn-matrixBadRep@1 Ongeldig nzbmatrix rapport nummer %s -warn-matrixFail@1 Geen toegang tot nzbmatrix (%s) -warn-noRepair Geen PAR2 programma, kan geen reparaties uitvoeren\n -warn-noUnpack Geen UNRAR programma gevonden, uitpakken van RAR bestanden niet mogelijk\n -warn-badUnrar Versie van UNRAR wordt niet aanbevolen,\ - download UNRAR van http://www.rarlab.com/rar_add.htm\n -warn-missingFiles \nLet op: niet alle bestanded zijn uitgepakt, zie log -error-joinMismatch Verwachte lengte ongelijk aan echte lengte -error-joinFail@1 Samenvoegen van Bestanden %s is mislukt -error-joinFail@2 [%s] Fout "%s" bij samenvoegen van bestanden -msg-joinOK@2 [%s] %s bestanden samengevoegd -error-unpackFail@1 Uitpakken mislukt, %s -error-unpackFail@2 [%s] Fout "%s" bij het uitpakken van RAR bestanden -error-badArchive Kan hoofd archief bestand niet openen (beschadigd of versleuteld) -error-unpackFailed@1 Uitpakken mislukt, kan %s niet vinden -error-unpackCRC Uitpakken mislukt, CRC fout -error-unpackFull Uitpakken mislukt, schrijffout of schijf vol? -error-unpackFailLog Uitpakken mislukt, zie log -error-unpackPassword Uitpakken mislukt, archief heeft wachtwoord nodig -error-unpackMissing Uitpakken mislukt, er zijn te weinig bestanden uitgepakt -msg-unpackDone@2 %s bestanden/mappen uitgepakt in %s -msg-unzipDone@2 %s bestanden in %s -msg-QuickCheck Snelle Controle... -msg-QuickChecking Snelle Controle uitvoeren -msg-QuickOK@1 [%s] Snelle Controle OK -msg-startRepair Start reparatie -error-repairFailed@1 Reparatie mislukt, %s -error-repairBad@2 Fout "%s" bij reparatie van groep %s -msg-verify Verificatie... -msg-verifyOK@2 [%s] Verificatie in %s, alle bestanden zijn goed -msg-repairNeeded Reparatie is nodig -msg-repairNeeded@2 [%s] Verificatie in %s, reparatie is nodig -error-noMainPacket Hoofdpakket niet gevonden... -error-repairBlocks@1 Reparatie mislukt, te weinig herstelblokken (%s te weinig) -msg-fetchBlocks@1 Ophalen van %s blokken... -msg-repairing Repareren -msg-repairDone@2 [%s] Reparatie in %s -msg-verifying Verifiëren -msg-DownloadedIn@2 Gedownload in %s met een gemiddelde van %sB/sec -msg-noParSets@1 [%s] Geen par2 groepen -msg-noPostProc Geen nabewerking vanwege mislukte verificatie -msg-sentToQ@1 %s naar de wachtrij gestuurd -msg-runScript@1 Gebruiker script %s loopt -msg-ranScript@1 %s is klaar -link-more Meer -link-viewSc Toon script resultaat -warn-OutRetention Download mislukt - Buiten de server bewaartijd? -warn-PostCrash Nabwerken is gecrashed, zie log bestand -msg-moving Verplaatsen -msg-running Script uitvoeren -msg-joining Samenvoegen -msg-unpacking Uitpakken -msg-repair Repareren -msg-fetching Ophalen -msg-path Pad - -stage-download Download -stage-repair Reparatie -stage-filejoin Samenvoegen -stage-unpack Uitpakken -stage-script Script - -post-Completed Compleet -post-Failed Mislukt -post-Queued Wacht -post-Repairing Repareren... -post-Extracting Uitpakken... -post-Moving Verplaatsen... -post-Running Script uitvoeren... -post-Fetching Extra blokken ophalen... -post-QuickCheck Snelle Controle... -post-Verifying Verifiëren... - -#Growl Messages -grwl-notif-startup Starten/Afsluiten -grwl-notif-dl NZB toegevoegd -grwl-notif-pp Nabewerken -grwl-notif-other Andere berichten -grwl-shutdown-begin-msg Afsluiten -grwl-shutdown-end-msg SABnzbd is afgesloten -grwl-paused-msg Pauze -grwl-nzbadd-title NZB aan wachtrij toegevoegd -grwl-newversion-msg Nieuwe versie beschikbaar - -#OSX Menu -osx-menu-warnings Waarschuwingen -osx-menu-status-idle Rust -osx-menu-status-paused Pauze -osx-menu-pause Pauze -osx-menu-min min. -osx-menu-resume Doorgaan -osx-menu-queue Wachtrij -osx-menu-queuelimit Wachtrij Eersto 10 Items -osx-menu-history Geschiedenis -osx-menu-historylimit Geschiedenis Laaste 10 Items -osx-menu-speedlimit Beperk snelheid -osx-menu-none Geen -osx-menu-getnewzbinbm Haal Newzbin Bookmarks op -osx-menu-complete Map voltooid\t\t\t -osx-menu-incomplete Map download\t\t -osx-menu-restart Herstart -osx-menu-quit Verlaten -osx-menu-config Instellen -osx-menu-purgequeue Wis wachtrij -osx-menu-purgehistory Wis geschiedenis -osx-menu-wizard Ga naar Wizard -osx-menu-empty Leeg -osx-menu-shutdowning Afsluiten... - -email-full@2 \ -to: %s\r\ -from: %s\r\ -subject: SABnzbd: harde schijf vol\r\ -\r\ -Hallo,\r\ -\r\ -SABnzbd is gestopt met downloaden omdat de harde schijf bijna vol is.\r\ -Maak ruimte vrij en start SABnzbd handmatig door.\r\ -\r diff --git a/main/language/rss-de-de.tmpl b/main/language/rss-de-de.tmpl deleted file mode 100644 index 656c6e1..0000000 --- a/main/language/rss-de-de.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -## -## RSS Email template for SABnzbd -## This a Cheetah template -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Newlines and whitespace are significant! -## -## These are the email headers -to: $to -from: $from -date: $date -subject: SABnzbd has added $amount jobs to the queue -X-priority: 5 -X-MS-priority: 5 -## After this comes the body, the empty line is required! - -Hi, - -SABnzbd has added $amount job(s) to the queue. -They are from RSS feed "$feed". - - $job - - -Bye diff --git a/main/language/rss-fr-fr.tmpl b/main/language/rss-fr-fr.tmpl deleted file mode 100644 index 656c6e1..0000000 --- a/main/language/rss-fr-fr.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -## -## RSS Email template for SABnzbd -## This a Cheetah template -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Newlines and whitespace are significant! -## -## These are the email headers -to: $to -from: $from -date: $date -subject: SABnzbd has added $amount jobs to the queue -X-priority: 5 -X-MS-priority: 5 -## After this comes the body, the empty line is required! - -Hi, - -SABnzbd has added $amount job(s) to the queue. -They are from RSS feed "$feed". - - $job - - -Bye diff --git a/main/language/rss-nl-nl.tmpl b/main/language/rss-nl-nl.tmpl deleted file mode 100644 index b2ffdd1..0000000 --- a/main/language/rss-nl-nl.tmpl +++ /dev/null @@ -1,24 +0,0 @@ -## -## RSS Email template for SABnzbd -## This a Cheetah template -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Newlines and whitespace are significant! -## -## These are the email headers -to: $to -from: $from -date: $date -subject: SABnzbd heeft $amount opdrachten aan de wachtrij toegevoegd -X-priority: 5 -X-MS-priority: 5 -## After this comes the body, the empty line is required! - -Hallo, - -SABnzbd heeft $amount opdrachten aan de wachtrij toegevoegd. -Ze komen van de RSS bron "$feed". - - $job - - diff --git a/main/language/rss-sv-se.tmpl b/main/language/rss-sv-se.tmpl deleted file mode 100644 index 656c6e1..0000000 --- a/main/language/rss-sv-se.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -## -## RSS Email template for SABnzbd -## This a Cheetah template -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Newlines and whitespace are significant! -## -## These are the email headers -to: $to -from: $from -date: $date -subject: SABnzbd has added $amount jobs to the queue -X-priority: 5 -X-MS-priority: 5 -## After this comes the body, the empty line is required! - -Hi, - -SABnzbd has added $amount job(s) to the queue. -They are from RSS feed "$feed". - - $job - - -Bye diff --git a/main/language/rss-us-en.tmpl b/main/language/rss-us-en.tmpl deleted file mode 100644 index 656c6e1..0000000 --- a/main/language/rss-us-en.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -## -## RSS Email template for SABnzbd -## This a Cheetah template -## Documentation: http://sabnzbd.wikidot.com/email-templates -## -## Newlines and whitespace are significant! -## -## These are the email headers -to: $to -from: $from -date: $date -subject: SABnzbd has added $amount jobs to the queue -X-priority: 5 -X-MS-priority: 5 -## After this comes the body, the empty line is required! - -Hi, - -SABnzbd has added $amount job(s) to the queue. -They are from RSS feed "$feed". - - $job - - -Bye diff --git a/main/language/sv-se.txt b/main/language/sv-se.txt deleted file mode 100644 index 5e1b59b..0000000 --- a/main/language/sv-se.txt +++ /dev/null @@ -1,830 +0,0 @@ -# -*- coding: utf-8 -*- -# Svenska -# Translation by "Kristoffer (Malmis) Malmström" - -special-decimal . -special-1000 , - -# General texts -yes Ja -no Nej -default Standard -none Ingen -KBs KB/s -MB MB -GB GB -hour timme -hours timmar -minute minut -minutes minuter -second sekund -seconds sekunder -month MÃ¥nad -year Ã…r -day Dag -days Dagar -daily Dagligen -monday MÃ¥ndag -tuesday Tisdag -wednesday Onsdag -thursday Torsdag -friday Fredag -saturday Lördag -sunday Söndag -day-of-month MÃ¥nadsdag -filename Filnamn - -# General template elements -signOn Det automatiska usenet nedladdningsverktyget -button-save Spara -queued Köad -button-back BakÃ¥t -button-x X - -# Header -menu-home Hem -menu-queue Kö -menu-history Historik -menu-config Konfiguration -menu-cons Anslutningar -menu-help Hjälp -menu-wiki Wiki -menu-forums Forum -menu-irc IRC -cmenu-general Allmänt -cmenu-folders Mappar -cmenu-switches Switchar -cmenu-servers Servrar -cmenu-scheduling Schemaläggare -cmenu-rss RSS -cmenu-email E-mail -cmenu-newzbin Index-sidor -cmenu-cat Kategorier -cmenu-sorting Sortering - -# Footer -ft-download Temporär nedladdningmapp -ft-complete Färdig nedladdningsmapp -ft-speed Nedladdningshastighet -ft-queued Köad -ft-paused PAUSAD -ft-buffer@2 Sparat %s artiklar (%s) -ft-sysload Sysload -ft-warning VARNINGAR -ft-newRelease@1 Ny utgÃ¥va %s tillgänglig - -# Main page -addNewJobs Lägg till ny nedladdning -shutdownOK? Är du säker pÃ¥ att du vill stänga av SABnzbd? -link-shutdown Stäng Av -link-pause Pausa -link-resume Ã…teruppta -button-add Lägg till -add Lägg till -reportId Rapport-id -addFile Lägg till fil -category Kategori -pp Bearbetar -script Skript -priority Prioritet -pp-none Nedladdning -pp-repair +Reparera -pp-unpack +Packar upp -pp-delete +Ta bort -pp-n -pp-r R -pp-u P -pp-d T -pr-force Tvinga -pr-normal Normal -pr-high Hög -pr-low LÃ¥g -enterURL URL -enterID  eller Report ID - -# Queue page -link-sortByName Sortera efter namn -link-sortByAge Sortera efter Ã¥lder -link-sortBySize Sortera efter storlek -link-hideFiles Göm filer -link-showFiles Visa filer -onQueueFinish När kön är färdig -shutdownPc Stäng av PC -standbyPc Sparläge PC -hibernatePc Viloläge PC -shutdownSab Stäng av SABnzbd -speedLimit Hastighetsgräns -pauseFor Pausa för -mode Bearbetar -order Ordning -name Namn -remainTotal Ã…terstÃ¥r/Totalt -eta ETA -age Ã…r -button-del Ta bort -button-resume Ã…teruppta -button-pause Pausa -unknown okänd -fetchingNewzbin@1 hämtar msgid %s frÃ¥n www.newzbin.com -error-fetchNewzbin@1 Fel vid hämtning av msgid %s frÃ¥n www.newzbin.com -\ - Kolla sÃ¥ att användarnamn och lösenord är inställt -fetchNZB@1 Försöker att hämta NZB frÃ¥n %s -eoq-actions Actions -eoq-scripts Scripts -purgeQueue Ta bort kö -purgeQueueConf Ta bort alla saker frÃ¥n kön? - -# History page -purgeHist Ta bort Historik -purgeHistConf Ta bort alla saker frÃ¥n historiken? -hideDetails Göm detaljer -showDetails Visa detaljer -sizeHist Historikstorlek -completed Färdig -size Storlek -status Status -msg-reAdded@1 Jobb "%s" är Ã¥terinlagt i kön - -# Connections page -link-forceDisc Tvinga frÃ¥nkoppling -askTestEmail Detta kommer att skicka ett test e-mail till ditt konto. -link-showLog Visa logg -link-showWeblog Visa webblogg -link-testEmail Testa E-mail -logging Loggning -log-errWarn Fel/Varning -log-info + Info -log-debug + Debug -connections Anslutningar -thread TrÃ¥d -emailResult E-mail testresultat -lastWarnings Senaste Varningar -clearWarnings rensa -server-blocked Ta bort blockering -warning VARNING: -error FEL: -server-resolving  Lösa adress - -# Configuration -configuration Konfiguration -confgFile Konfig fil -explain-Restart Knappen nedanför kommer att starta om SABnzbd..\n\ - Använd den när du tror att programmet har nÃ¥got stabilitetsproblem.\n\ - Nedladdningar kommer att pausas före omstarten och Ã¥terupptas efterÃ¥t. -button-restart Starta om -version Version -uptime Upptid -error Fel -badParm Fel parameter -error-badValue@2 Fel värde för %s: %s -error-noFolder@1 Mappen "%s" finns inte -error-QnotEmpty Fel: Kön är inte tom, kan inte byta mapp. -error-noUNC@1 UNC sökväg "%s" är inte tillÃ¥ten här -error-notOctal@1 %s är inte rätt siffervärde - -# Config->General -generalConfig Allmän konfiguration -restartRequired Ändringar kräver omstart av SABnzbd! -webServer SABnzbd Webbserver -opt-host SABnzbd Adress -explain-host Adress som SABnzbd ska lyssna pÃ¥. -opt-port SABnzbd Port -explain-port Port som SABnzbd ska lyssna pÃ¥. -opt-web_dir Webbkontrollsutseende -explain-web_dir Välj ett skin. -opt-web_dir2 Andra Webbkontrollsutseende -explain-web_dir2 Aktivera ett alternativt skin. -webAuth Webbserver autentiserng -opt-web_username SABnzbd Användarnamn -explain-web_username Väljbart autentiserings användarnamn. -opt-web_password SABnzbd Lösenord -explain-web_password Väljbart autentiserings lösenord. -httpsSupport HTTPS Stöd -opt-enable_https HTTPS Aktivera -opt-notInstalled (ej installerat) -explain-enable_https Aktivera Ã¥tkomst till webbkontrollen med HTTPS adress. -opt-https_port HTTPS Port -explain-https_port Port som SABnzbd ska lyssna pÃ¥ för HTTPS kommunikation. -opt-https_cert HTTPS Certifikat -explain-https_cert Filnamn eller sökväg till HTTPS Certifikat. -opt-https_key HTTPS Nyckel -explain-https_key Filnamn eller sökväg till HTTPS Nyckel. -tuning Justeringar -opt-refresh_rate Automatisk uppdateringsintervall av kö: -explain-refresh_rate Uppdateringsintervall av kö-sidan (sek, 0= ingen). -opt-rss_rate RSS Uppdateringsintervall -explain-rss_rate Uppdateringsintervall (i minuter, minst 15). -opt-bandwidth_limit Hastighetsbegränsning för Nedladdning -explain-bandwidth_limit Medelhastighetsbegränsning för Nedladdning (i KB/s - kilobyte per sekund). -opt-cache_limitstr Cachestorlek för artiklar -explain-cache_limitstr Sparar artiklar i minnet för att reducera diskÃ¥tkomst.\n\ - I bytes, följt av K,M,G. Till exempel: "64M" eller "128M" -opt-cleanup_list Rensa lista -explain-cleanup_list Lista med filändelser som ska tas bort efter nedladdning.\n\ - Till exempel: .nfo or .nfo, .sfv -button-saveChanges Spara ändringar -opt-language SprÃ¥k -explain-language Välj sprÃ¥k till webbkontrollen. -opt-apikey API-nyckel -explain-apikey Denna nyckel ger tredjepartsprogram tillgÃ¥ng till SABnzbd. -button-apikey Generera Ny Nyckel -opt-disableApikey Stäng av API-nyckel -explain-disableApikey Kräv ingen API-nyckel. -explain-disableApikeyWarn ANVÄND PÃ… EGEN RISK! -restart1 Förbereder omstart...\n -restart2  \n\ - SABnzbd nedstängning färdig.\n\ - Vänta ungefär 5 sekunder och klicka sedan pÃ¥ knappen under..\n\n\ - Ladda om\n - -# Config->Folders -folderConfig Mappkonfiguration -explain-folderConfig OBS: Mappar kommer att skapas automatiskt när du Sparar. Du mÃ¥ste ange exakta sökvägar till dina mappar för att spara utanför standardmapparna. -userFolders Användarmappar -in I -opt-download_dir Temporär nedladdningsmapp -explain-download_dir Plats för att lagra ej bearbetade nedladdningar.\n\ - Kan endast ändras när kön är tom. -opt-download_free Minimal fri plats för temporär nedladdningsmapp -explain-download_free Auto-pausa när fri plats är nära sin gräns.\n\ - I bytes, följt av K,M,G,T. Till exempel: "800M" or "8G" -opt-complete_dir Färdig nedladdningsmapp -explain-complete_dir Plats för att lagra bearbetade och färdiga nedladdningar.\n\ - Kan Ã¥sidosättas av användar-definierade kategorier. -opt-permissions Rättigheter för färdiga nedladdningar -explain-permissions Sätt rättigheter för färdiga filer och mappar.\n\ - Använd siffror. Till exempel: "755" or "777" -opt-dirscan_dir Övervakad Mapp -explain-dirscan_dir Mapp som igenomsöks automatiskt efter .nzb filer.\n\ - Skannar även igenom .zip .rar och .tar.gz arkiv efter .nzb filer. -opt-dirscan_speed Skanningsintervall för Övervakade mappar -explain-dirscan_speed Sekunder mellan skanningar för .nzb filer. -opt-script_dir Efterbehandlings skriptmapp -explain-script_dir Mapp innehÃ¥llande skript för efterbehandling. -opt-email_dir Mapp för E-mail mallar -explain-email_dir Mapp som innehÃ¥ller användar-definierade e-mail mallar. -systemFolders Systemmappar -opt-cache_dir Temporär-mapp -explain-cache_dir Plats för temporär lagring.\n\ - Kan endas ändras när kön är tom.\n\ - Kräver omstart av SABnzbd! -opt-log_dir Loggmapp -explain-log_dir Plats för sparade loggfiler frÃ¥n SABnzbd.\n\ - Kräver omstart av SABnzbd! -opt-nzb_backup_dir .nzb Reservmapp -explain-nzb_backup_dir Plats där .nzb filer sparas. - -# Config->Switches -switchesConfig Parameterkonfiguration -processingSwitches Bearbetar parametrar -opt-quick_check Aktivera Snabbkoll -explain-quick_check Strunta i par2 kontroll när filerna är 100% giltiga. -opt-enable_unrar Aktivera Unrar -explain-enable_unrar Aktiverar inbyggda Unrar funktionen. -opt-enable_unzip Aktivera Unzip -explain-enable_unzip Aktiverar inbyggda Unzip funktionen. -opt-enable_filejoin Aktivera Filsammanslagning (Filejoin) -explain-enable_filejoin SlÃ¥r ihop filer med filändelserna .001, .002 etc. till en fil. -opt-enable_tsjoin Aktivera TS Sammanslagning (TS Joining) -explain-ts_join SlÃ¥r ihop filer med filändelserna .001.ts, .002.ts etc. till en fil. -opt-enable_par_cleanup Aktivera Par rensning (Par Cleanup) -explain-enable_par_cleanup Rensar bort par filer (om verifiering/reparation lyckades). -opt-fail_on_crc Vid fel pÃ¥ pÃ¥ yEnc CRC -explain-fail_on_crc Använd backup-server vid yEnc crc fel. -opt-top_only Bara artiklarna för början av kön -explain-top_only Aktivera för lägre minnesanvändning. Avaktivera för att förhindra lÃ¥ngsamma jobb att blockera kön. -opt-safe_postproc Efterbehandla endast verifierade jobb -explain-safe_postproc Efterbehandla enbart jobb som passerat PAR2 kontrollen. -opt-no_dupes Förhindra nedladdningsdubletter -explain-no_dupes Strunta i jobb om en sparad .nzb med samma namn redan finns. -opt-dirscan_opts Standard efterbehandling -explain-dirscan_opts Används när efterbehandlingen är bestämd efter kategori. -opt-dirscan_script Standard användarskript -explain-dirscan_script Används när användarskript är bestämd efter kategori. -opt-dirscan_priority Standard prioritet -explain-dirscan_priority Använd när ingen prioritet är bestämd av kategori. -opt-par_option Extra PAR2 parametrar -explain-par_option Läs Wiki Help för detta! -opt-par2_multicore Aktivera MultiCore Par2 -explain-par2_multicore Läs Wiki Help för detta! -opt-nice Bra parametrar -explain-nice Läs Wiki Help för detta! -opt-ionice IONice parametrar -explain-ionice Läs Wiki Help för detta! -otherSwitches Andra parametrar -opt-auto_disconnect Koppla ifrÃ¥n när kön är tom -explain-auto_disconnect Koppla ifrÃ¥n usenet servrarna när kön är tom eller pausad. -opt-send_group Skicka grupp -explain-send_group Skicka gruppkommando innan du begär artiklar. -opt-auto_sort Sortera efter Ã¥lder -explain-auto_sort Sortera automatiskt efter (medel) Ã¥lder. -opt-check_new_rel Kolla efter ny utgÃ¥va -explain-check_new_rel Kolla efter ny utgÃ¥va av SABnzbd varje vecka. -opt-replace_spaces Ersätt mellanslag i mappnamn -explain-replace_spaces Ersätt mellanslag med understreck i mappnamn. -opt-replace_illegal Ersätt otillÃ¥tna tecken i mappnamn. -explain-replace_illegal Ersätt otillÃ¥tna tecken i mappnamn med motsvarande tecken (annars ta bort). -opt-auto_browser Starta webbläsare vid uppstart -explain-auto_browser Startar standard webbläsaren när SABnzbd startar. -opt-pause_on_post_processing Pausa nedladdning under efterbehandling -explain-pause_on_post_processing Pausas nedladdning när efterbehandling börjar och Ã¥terupptar nedladdning när efterbehandling är klar. -opt-ignore_samples Ignorera Sample-filer -explain-ignore_samples Filtrera ut sample-filer (ex. video samplingar). -igsam-off Av -igsam-del Ta bort efter nedladdning -igsam-not Ladda inte ned. -opt-ssl_type SSL typ -explain-ssl_type Använd V23 om inte din leverantör kräver annat! - - -# Config->Server -configServer Serverkonfiguration -addServer Lägg till server -srv-host Adress -srv-port Port -srv-username Användarnamn -srv-password Lösenord -srv-timeout Timeout -srv-connections Anslutningar -srv-ssl SSL -srv-fillserver Reserv server -srv-optional Valfri -srv-enable Aktivera -button-addServer Lägg till server -button-delServer Ta bort server -error-needServer Kräver serveradress -button-testServer Testserver -srv-testing Testar serverdetaljer... -srv-testHint Klicka nedan för att testa. -srv-success Anslutning lyckades! -srv-noHost Adressen är inte inställd. -srv-noConnections Det är inga anslutningar aktiverade. Var vänlig aktivera minst en anslutning. -srv-starredPass Lösenordet är dolt med ******, försök igen -srv-invalidDetails Ogiltiga serverdetaljer -srv-timedoutSSL Timeout: Försök aktivera SSL eller anslut via en annan port. -srv-timedout Timeout -srv-failedAuth Autentisering misslyckades, kontrollera användarnamn och lösenord. -srv-noAuth Servern kräven användarnamn och lösenord. -srv-tooManyConnections För mÃ¥nga anslutningar, pausa en nedladdning eller försök igen senare -srv-generalFail@1 Det gick inte att ansluta (%s) - -# Config->Scheduling -configSchedule Schemakonfiguration -addSchedule Lägg till schema -sch-frequency Förekomst -sch-action Ã…tgärd -sch-arguments Argument -button-addSchedule Lägg till schema -button-delSchedule Ta bort -currentSchedules Aktuella scheman -sch-task Uppgift -sch-disable_server avaktivera server -sch-enable_server aktivera server -sch-resume Ã…teruppta -sch-pause Pausa -sch-shutdown Stäng av -sch-restart Starta om -sch-speedlimit Hastighetsgräns -sch-pause_all Pausa Allt -sch-pause_post Pausa efterbehandla -sch-resume_post Ã…teruppta efterbehandla - -# Config->RSS -configRSS RSS-konfiguration -newFeedURI Ny flödesadress -explain-RSS Kryssrutan bredvid flödesnamnet ska aktiveras för att flödet automatiskt ska kontrolleras för nya objekt.\n\ - Kontrollfrekvens finns pÃ¥ den allmänna konfigurations sidan.\n\ - När ett flöde läggs till kommer det bara att välja nya objekt och inte allt som redan finns i RSS-flöded sÃ¥ länge du inte klickar pÃ¥ "Tvinga nedladdning". -feedDefinition Flödesdestination -feed Flöde -button-delFeed Ta bort flöde -button-preFeed Förhandsgranska -button-forceFeed Tvinga nedladdning -rss-order Ordning -rss-type Typ -rss-filter Filter -rss-accept Acceptera -rss-reject Avvisa -rss-must Kräver -rss-mustcat KräverKat -rss-delFilter X -rss-matched Matchade -rss-notMatched Matchade inte -rss-done Nedladdae -rss-downloaded Nedladdade än sÃ¥ länge -link-download Ladda ned -explain-rssStar Jobb markerade med '*' kommer ej att laddas ned automatiskt. - -# Config->Email -configEmail E-mail notifiering -emailOptions E-mail alternativ -opt-email_endjob E-mail notifiering när jobb är slutfört -email-never Aldrig -email-always Alltid -email-errorOnly Bara vid fel -opt-email_full Full hÃ¥rddisk notifiering -explain-email_full Skicka e-mail när hÃ¥rddisken är full och SABnzbd har pausat. -opt-email_dir Mapp med e-mail mallar -explain-email_dir Mapp som innehÃ¥ller användardefinierade mallar..\n\ - I förhÃ¥llande till -opt-email_rss Send RSS notifications -explain-email_rss Send email when an RSS feed adds jobs to the queue. - -emailAccount E-mail kontoinställningar -opt-email_server SMTP Server -explain-email_server Ställ in din ISP's server för utgÃ¥ende e-mail. -opt-email_to E-mail mottagare -explain-email_to E-mail adress att skicka e-mailen till. -opt-email_from E-mail sändare -explain-email_from Vem ska vi skicka e-mailet frÃ¥n? -opt-email_account VALFRITT Kontoanvändarnamn -explain-email_account Användarnamn för e-mail som kräver autentisering. -opt-email_pwd VALFRITT Användarlösenord -explain-email_pwd Lösenord för e-mail som kräver autentisering. -error-badEmailAd@1 %s är inte en godkänd e-mail adress - -# Config->Newzbin -explain-newzbin Om du har ett konto pÃ¥ www.newzbin.com,\ - sÃ¥ kan du skriva in din användarinformation här.\n\ - Detta kommer att tillgängliggöra extra funktioner. -accountInfo Användarinfo -opt-username_newzbin Newzbin Användarnamn -explain-username_newzbin Ställ in ditt användarnamn här. -opt-password_newzbin Newzbin Lösenord -explain-password_newzbin Ställ in ditt användarlösenord här. -newzbinBookmarks Bearbetar bokmärken -opt-newzbin_bookmarks Hämta bokmärken automatiskt -explain-newzbin_bookmarks Hämtar jobb frÃ¥n bokmärken automatiskt. -link-getBookmarks Hämta bokmärken nu -link-HideBM Göm bearbetade bokmärken -link-ShowBM Visa bearbetade bokmärken -opt-newzbin_unbookmark Ta bort bokmärke efter nedladdning -explain-newzbin_unbookmark Ta bort frÃ¥n bokmärkeslistan när nedladdning är genomförd. -opt-bookmark_rate Uppdateringsintervall -explain-bookmark_rate I minuter (minst 15 min). -processedBM Bearbetar bokmärken -explain-nzbmatrix Om du har ett konto pÃ¥ www.nzbmatrix.com,\ - sÃ¥ kan du skriva in din användarinformation här.\n\ - Det krävs för att du ska kunna använda RSS-flödet frÃ¥n nzbmatrix. -opt-username_matrix NzbMatrix Användarnamn -explain-username_matrix Ställ in ditt användarnamn här. -opt-password_matrix NzbMatrix Lösenord -explain-password_matrix Ställ in ditt användarlösenord här. -opt-apikey_matrix NzbMatrix API-nyckel -explain-apikey_matrix Ställ in API-nyckel för NzbMatrix här. - -# Config->Cat -configCat Användardefinierade kategorier -explain-configCat Definierar efterbehandling och lagring. -explain-catNewzbin The Newzbin column will map listed Newzbin categories to your own. -link-initCat Klicka här för att ställa in newzbin kategorier. -explain-relFolder Relativa mappar är baserade pÃ¥ -catFolderPath Mapp/Sökväg -catNewzbin NewzBin -catGroups Grupper -button-delCat X - -# Config->Sorting -configSort Sorteringskonfiguration -seriesSorting Seriesortering -sort-show Show -sort-name Namn -opt-tvsort Aktivera TV sortering -explain-tvsort Aktiverar sortering och omdöpning av episoder. -sort-legenda Hjälp till Sorteringssträng -button-clear Rensa -presetSort Förinställningar -example Exempel -genericSort Allmän sortering -opt-movieSort Aktivera filmsortering -explain-movieSort Aktiverar sortering och omdöpning av filer. -opt-movieExtra LÃ¥t nedladdning i extramapp vara -explain-movieExtra Aktivera om nedladdning inte är flyttad till egen mapp. -affectedCat PÃ¥verkade kategorier -sort-meaning Betyder -sort-pattern Mönster -sort-result Resultat -button-Season1x05 1x05 Säsongsmapp -button-SeasonS01E05 S01E05 Säsongsmapp -button-Ep1x05 1x05 Episodmapp -button-EpS01E05 S01E05 Episodmapp -sort-title Titel -movie-sp-name Film Namn -movie-dot-name Film.Namn -movie-us-name Film_Namn -show-name Show Namn -show-sp-name Show Namn -show-dot-name Show.Namn -show-us-name Show_Namn -show-seasonNum Säsongsnummer -show-epNum Episodnummer -ep-name Episodnamn -ep-sp-name Episodnamn -ep-dot-name Episod.Namn -ep-us-name Episod_Namn -fileExt Filändelse -extension ändelse -partNumber Delnummer -decade Tiotal -orgFilename Originalfilnamn -lowercase SmÃ¥ bokstäver -TEXT TEXT -text text -sort-File fil -sortString Sorteringssträng -multiPartLabel Multi-del etikett -button-inFolders In mapp -button-noFolders Ingen mapp -dateSorting Datum sortering -opt-dateSort Aktivera datumssortering -explain-dateSort Aktiverar sortering och omdöpning av datummärkta filer. -button-ShowNameF Visa Namn pÃ¥ mapp -button-YMF Ã…r-MÃ¥nads mappar -button-DailyF Dagliga mappar - -# NZO -nzoDetails Ändra NZB detaljer -nzoName Namn -nzo-delete Ta bort -nzo-top Topp -nzo-up Upp -nzo-down Ner -nzo-bottom Botten -nzo-all Alla -nzo-none Ingen -nzo-invert Invertera -nzo-filename Filnamn -nzo-subject Ämne -nzo-age Ã…r -nzo-selection Urval - -# Internal texts -msg-warning-ambiLocalhost Varning: LOCALHOST är tvetydigt, använda numerisk IP-adress . -msg-invalidServer@2 Serveradressen "%s:%s" är ej giltig. - -warn-missingKey Saknar sessionsnyckel -error-missingKey Fel: Kräver sessionsnyckel -warn-badSession Fel sessionsnyckel -error-badKey Fel: Fel sessionsnyckel -warn-authMissing Autentisering saknas, ange användarnamn / lösenord frÃ¥n Konfiguration-> Allmänt\ - i ditt tredjepartsprogram: -error-authMissing Fel: Saknar autentisering -warn-apikeyNone API-nyckel saknas, skriv in api-nyckeln frÃ¥n Konfiguration-> Allmänt\ - i ditt tredjepartsprogram: -warn-apikeyBad API-nyckel felaktig, använd api-nyckeln frÃ¥n Konfiguration-> Allmänt\ - i ditt tredjepartsprogram: -error-noSecUI Fel: Inget andrainterface definierat. - -his-badArchive Fel, Oanvändbar akrivfil -his-cannotGetReport Det gick inte att hämta newzbin rapport -his-failedURL Det gick inte att lägga till url -his-retryURL1@1 URL hämtning misslyckades; %s -his-retryURL2 Försök igen - -# Errors and Warnings -error-noPar2 par2 binär... EJ funnen! -error-noWebUi Det gick inte att starta webbkontrollen -error-noYEnc _yenc modul... EJ funnen! -error-sameHTTP-HTTPS Kan ej öppna HTTP och HTTPS portarna pÃ¥ samma gÃ¥ng -warn-0000 Tänk pÃ¥ att 0.0.0.0 värdnamnet behöver en IPv6-adress för extern Ã¥tkomst -warn-noCertKey Avaktiverade HTTPS pÃ¥ grund av felande CERT och KEY filer -warn-noSkin@1 Kan inte hitta webb mall: %s, försök med standard mall -warn-noUnrar unrar binär... EJ funnen! -warn-noUnzip unzip binär... EJ funnen! -error-failMkstemp Fel i tempfile.mkstemp -error-fetchReport@1 Fel vid hämtning av msgid %s frÃ¥n www.newzbin.com - -error-hibernate Failed to hibernate system -error-loading@1 Laddning av %s misslyckades -error-saveX@1 Sparar %s misslyckades -error-saveXtoY@2 Sparar %s till %s misslyckades -error-standby Det gick inte att sätta systemet i viloläge -error-tempFile@1 Kan inte skapa temp fil för %s -warn-noServer@1 Försöker att sätta status pÃ¥ icke existerande server %s -warn-noSpace För lite diskutrymme pausar systemet -warn-signal@1 Signal %s mottagen, sparar och stänger... -warn-flushFailed@1 Flushing %s misslyckades -> ingen art_id -error-diskError@1 Diskfel vid skapande av fil %s -error-diskFull Disken är full! Pausar... -warn-artMissing@1 %s saknas -error-badIni@1 Felaktig konfigurationsfil %s -error-createIni@1 Kan ej skapa konfigurationsfil %s -error-encPw@1 Felaktigt kodat lösenord %s -error-version@2 Felaktigt versionsnummer %s i %s" -error-badHisNewline@1 Felaktig loggning i historiken av %s (\\r\\n) -error-badHisSemic@1 Felaktig loggning i historiken av %s (;) -error-sqlClose Det gick inte att stänga databasen, se logg -error-sqlCmd SQL Kommando misslyckades, se logg -error-sqlCommit SQL Commit misslyckades, se logg -error-decode@1 Avkodning av %s misslyckades -error-decodeUnknown@1 Okänt fel under avkodning av %s -warn-artAllMissing@1 %s => saknas frÃ¥n alla servrar, kastar -warn-badYEnc@1 Felaktigt utformad yEnc artikel i %s -warn-crcError@3 CRC Fel i %s (%s -> %s) -error-readWatched@1 Kan ej läsa övervakad mapp %s -error-remove@1 Fel vid borttagning av %s -warn-noRead@1 Kan ej läsa %s -error-except Undantag? -error-noInit@3 Det gick inte att initialisera %s@%s:%s -error-serverFailed@4 Anslutning av %s@%s:%s misslyckades, meddelande=%s -error-serverLogin@1 Det gick inte att logga in pÃ¥ server %s -error-serverNoConn@2 Kan ej ansluta till server %s [%s] -error-serverTooMany@2 För mÃ¥nga anslutningar till server %s:%s -warn-ignoreServer@2 Server %s kommer att ignoreras i %s minuter -warn-noConnectServer@2 Kan ej ansluta till server %s [%s] -error-accountSharing Misstänkt kontodelning -error-serverCred@1 Server %s kräver användarnamn/lösenord -warn-thread@3 TrÃ¥d %s@%s:%s: -error-mailAuth Autentisering till mailserver misslyckades -error-mailNoConn Det gick inte att ansluta till mailserver -error-mailSend Det gick inte att skicka e-mail -error-mailTempl@1 Kan ej finna e-mail mallar i %s -error-mailTLS Det gick inte att initialisera TLS anslutning -warn-noEmailClose Det gick inte att stänga e-mail anslutning -msg-emailOK E-mail sändning lyckades -error-regex@1 Det gick inte att kompilera regex för sök-sträng: %s -error-accessDir@2 %s mapp: %s Ã¥tkomst misslyckad -error-createDir@1 Kan ej skapa mapp %s -error-makeFile@1 Skapande av (%s) misslyckades -error-moveFile@2 Det gick inte att flyta %s till %s -error-portNoAccess@1 Du har ingen behörighet för att använda port %s -error-regConnect Kan ej ansluta till registret HKEY_CURRENT_USER. -error-regOpen@1 Kan ej öppna registernyckel "%s". -error-regSpecial Det gick inte att läsa registernyckel för specialmappar -error-sslFiles Det gick inte att skapa SSL-nyckel eller certifikat. -error-urlGet@2 Det gick inte att hämta url %s (fel = "%s") -warn-noBrowser Kan inte starta webbläsaren, hittades troligtvis inte -warn-pyopenssl pyopenssl modul saknas, var vändlig installera för https Ã¥tkomst -error-fileJoin@2 Fel "%s" när du kör file_join pÃ¥ %s -error-filePar2@2 Fel %s när du kör par2_repair pÃ¥ %s -error-fileRead@1 notrar(): läsning %s misslyckades -error-fileUnrar@2 Fel "%s" när du kör rar_unpack pÃ¥ %s -error-fileUnzip@2 Fel "%s" när du kör unzip() pÃ¥ %s -warn-cannotFind@1 FEL: gick inte att hitta "%s" -warn-crcFailed@1 FEL: CRC misslyckades i "%s" -warn-delFailed@1 Borttagning av %s misslyckades! -warn-encrypted FEL: krypterad fil: -warn-error@1 FEL: %s -warn-MissExpectedFile@1 Saknade förväntad fil: %s => unrar fel? -warn-writeError@1 FEL: skrivningsfel (%s) -error-connect@1 Det gick inte att ansluta: %s -error-newsSSL Denna server tillÃ¥ter ej SSL pÃ¥ denna port -error-noSSL Misslyckades med importering av OpenSSL modul. Ansluter utan SSL -error-nbInfo@1 Newzbin servern misslyckades ge info för %s -error-nbProtocol Newzbin server ändrade sitt protokoll -error-nbReport@1 Newzbin rapporterade %s ej funnen -error-nbUnkownError@1 Newzbin ger odokumenterad felkod (%s) -error-nbUnkownError@2 Newzbin ger odokumenterad felkod (%s, %s) -error-nbUpdate@1 Det gick inte att uppdatera newzbin jobb %s -warn-nbCredit Du har ingen kredit pÃ¥ ditt Newzbin konto -warn-nbNoAuth Obehörig, kontrollera ditt newzbin användarnamn/lösenord -warn-nbNoDelBM@1 Det gick inte att ta bort newzbin bokmärke %s -error-qAdd@1 Det gick inte att lägga till %s, tar bort -error-qBad Felaktig köfil funnen, kan ej fortsätta -error-qCorruptFile@1 Laddningsfel %s, felaktig fil detekterad -warn-unknownEncoding@1 %s -> Okänd kodning -error-qDupPart@3 Dublett del %s, men olika ID-s (%s // %s) -error-qImport@1 Det gick inte att importera %s -warn-badImport@2 Det gick inte att importera %s filer frÃ¥n %s -warn-badNZB@3 Felaktig NZB fil %s, hoppar över (orsak=%s, linje=%s) -warn-emptyFile@1 Fil %s är tom, hoppar över -warn-skipDup@1 Hoppar över dubletter av NZB "%s" -error-ppCleanup@1 Rensning av %s misslyckades. -error-ppDelFailed@1 Borttagning av %s misslyckades -error-ppDelNzo Det gick inte att ta bort nzo frÃ¥n efterbehandlings kön (id) -error-ppDelWorkdir@1 Det gick inte att ta bort arbetsmapp (%s) -error-ppFailed@1 Efterbehandling misslyckades för %s -error-ppLogFile@1 Det gick inte att skapa loggfil %s -error-ppPermissions@1 Det gick inte att ändra rättigheter pÃ¥ %s -error-ppRename@2 Det gick inte att döpa om "%s" till "%s" -warn-badPPQueue@2 Det gick inte att ladda efterbehandlings kön: Fel version (kräver:%s, hittade:%s) -error-rssBadFeed@1 Felaktigt RSS-flödesbeskrivning "%s" -error-rssRegex@1 Gick ej att kompilera regex: %s -warn-emptyRSS@1 Tom RSS post hittades (%s) -warn-failRSS@1 Det gick inte att hämta RSS flödet frÃ¥n %s -warn-failRSS@2 Det gick inte att hämta RSS flödet frÃ¥n %s: %s -warn-badSched@3 Fel schema %s vid %s:%s -warn-badSchedAction@1 Okänd Ã¥tgärd: %s -warn-schedNoServer@1 Schema för icke existerande server %s -error-tvInfo@1 Det gick inte att hämta TV info (%s) -error-tvRename@2 Det gick inte att döpa om: %s till %s -error-tvSimRename@2 Det gick inte att döpa om liknande fil: %s till %s -error-tvTemp@1 Kan inte skapa temporär fil för %s -warn-matrixBadRep@1 Ogiltigt nzbmatrix rapporteringsnummer %s -warn-matrixFail@1 Anslutningsproblem till nzbmatrix server (%s) -warn-noRepair Inget PAR2 program funnet, reparation ej möjlig\n -warn-noUnpack Inget UNRAR program funnet, uppackning ej möjlig\n -warn-badUnrar Din version av UNRAR rekommenderas inte,\ - fÃ¥ UNRAR frÃ¥n http://www.rarlab.com/rar_add.htm\n -warn-missingFiles \nVarning: alla filer blev inte uppackade, se logg -error-joinMismatch Förväntad storlek är inte lika verklig storlek -error-joinFail@1 Filsammanslagning av %s misslyckades -error-joinFail@2 [%s] Fel "%s" under filsammanslagning -msg-joinOK@2 [%s] SlÃ¥r ihop %s filer -error-unpackFail@1 Uppackning misslyckades, %s -error-unpackFail@2 [%s] Fel "%s" under uppackning av RAR fil(er) -error-badArchive Öppnande av huvudarkiv misslyckades (krypterat eller trasigt) -error-unpackFailed@1 Uppackning misslyckades, gick inte att hitta %s -error-unpackCRC Uppackning misslyckades, CRC-fel -error-unpackFull Uppackning misslyckades, skrivfel eller disken full? -error-unpackFailLog Uppackning misslyckades, se logg -error-unpackPassword Uppackning misslyckades, arkivet kräver lösenord -error-unpackMissing Uppackning misslyckades, en väntad fil är inte uppackad -msg-unpackDone@2 Uppackad %s filer/mappar i %s -msg-unzipDone@2 %s filer i %s -msg-QuickCheck Snabbkontroll... -msg-QuickChecking Snabbkontrollerar -msg-QuickOK@1 [%s] Snabbkontroll OK -msg-startRepair Startar reparation -error-repairFailed@1 Reparation misslyckades, %s -error-repairBad@2 Fel "%s" medans par2_repair kördes pÃ¥ %s -msg-verify Verifierar... -msg-verifyOK@2 [%s] Verifierad i %s, alla filer är ok -msg-repairNeeded Kräver reparation -msg-repairNeeded@2 [%s] Verifiering i %s, kräver reparation -error-noMainPacket Huvudarkiv saknas... -error-repairBlocks@1 Misslyckad reparation, finns ej tillräckligt med reparationsblock (%s saknas) -msg-fetchBlocks@1 Hämtar %s block... -msg-repairing Reparerar -msg-repairDone@2 [%s] Reparerad i %s -msg-verifying Verifierar -msg-DownloadedIn@2 Hämtade i %s vid ett genomsnitt pÃ¥ %sB/s -msg-noParSets@1 [%s] Ingen par2 sats -msg-noPostProc Ingen efterbehandling pÃ¥ grund av misslyckad verifiering -msg-sentToQ@1 Skickat %s till kö -msg-runScript@1 Kör användarskript %s -msg-ranScript@1 Körde %s -link-more Mer -link-viewSc Visa skriptutmatning -warn-OutRetention Hämtning misslyclades - Out of your server's retention? -warn-PostCrash Efterbehandling kraschade, se loggfil -msg-moving Flyttar -msg-running Kör skript -msg-joining SlÃ¥r ihop -msg-unpacking Packar upp -msg-repair Reparerar -msg-fetching Hämtar -msg-path Genväg - -stage-download Ladda ned -stage-repair Reparera -stage-filejoin SlÃ¥r ihop filer -stage-unpack Packa upp -stage-script Skript - -post-Completed Färdig -post-Failed Misslyckades -post-Queued Köad -post-Repairing Reparerar... -post-Extracting Extraherar... -post-Moving Flyttar... -post-Running Kör skript... -post-Fetching Hämtar extra block... -post-QuickCheck Snabbkontroll... -post-Verifying Verifierar... - -#Growl Messages -grwl-notif-startup Uppstart/Nedstängning -grwl-notif-dl NZB Tillagd -grwl-notif-pp Efterbehandling -grwl-notif-other Andra meddelanden -grwl-shutdown-begin-msg PÃ¥börjar nedstängning av SABnzbd.. -grwl-shutdown-end-msg SABnzbd nedstängning utförd. -grwl-paused-msg Pausad -grwl-nzbadd-title NZB tillagd i kön -grwl-newversion-msg Ny utgÃ¥va tillgänglig - -#OSX Menu -osx-menu-warnings Varningar -osx-menu-status-idle Sysslolös -osx-menu-status-paused Pausad -osx-menu-pause Pausa -osx-menu-min min. -osx-menu-resume Ã…teruppta -osx-menu-queue Kö -osx-menu-queuelimit Kö (10 första sakerna) -osx-menu-history Historik -osx-menu-historylimit Historik (10 senaste sakerna) -osx-menu-speedlimit Hastighetsbegränsning -osx-menu-none Ingen -osx-menu-getnewzbinbm Hämta Newzbin bokmärken -osx-menu-complete Färdig mapp\t\t\t -osx-menu-incomplete Ofullständig mapp\t\t -osx-menu-restart Starta om -osx-menu-quit Avsluta -osx-menu-config Konfiguration -osx-menu-purgequeue Rensa kö -osx-menu-purgehistory Rensa historik -osx-menu-wizard GÃ¥ till guiden -osx-menu-empty Tom -osx-menu-shutdowning Stänger... - -email-full@2 \ -to: %s\r\ -from: %s\r\ -subject: SABnzbd rapporterar om Full disk\r\ -\r\ -Hej,\r\ -\r\ -SABnzbd har stoppat nedladdning för att disken nästan är full.\r\ -Var vänlig gör plats för nedladdningen och Ã¥teruppta SABnzbd's nedladdning manuellt.\r\ -\r \ No newline at end of file diff --git a/main/language/us-en.txt b/main/language/us-en.txt deleted file mode 100644 index 1c437c1..0000000 --- a/main/language/us-en.txt +++ /dev/null @@ -1,829 +0,0 @@ -# -*- coding: latin-1 -*- -# English (US) - -special-decimal . -special-1000 , - -# General texts -yes Yes -no No -default Default -none None -KBs KB/s -MB MB -GB GB -hour hour -hours hours -minute min -minutes mins -second sec -seconds seconds -month Month -year Year -day Day -days Days -daily Daily -monday Monday -tuesday Tuesday -wednesday Wednesday -thursday Thursday -friday Friday -saturday Saturday -sunday Sunday -day-of-month Day of month -filename Filename - -# General template elements -signOn The automatic usenet download tool -button-save Save -queued Queued -button-back Back -button-x X - -# Header -menu-home Home -menu-queue Queue -menu-history History -menu-config Config -menu-cons Connections -menu-help Help -menu-wiki Wiki -menu-forums Forum -menu-irc IRC -cmenu-general General -cmenu-folders Folders -cmenu-switches Switches -cmenu-servers Servers -cmenu-scheduling Scheduling -cmenu-rss RSS -cmenu-email Email -cmenu-newzbin Index Sites -cmenu-cat Categories -cmenu-sorting Sorting - -# Footer -ft-download Download Dir -ft-complete Complete Dir -ft-speed Download speed -ft-queued Queued -ft-paused PAUSED -ft-buffer@2 Cached %s articles (%s) -ft-sysload Sysload -ft-warning WARNINGS -ft-newRelease@1 New release %s available at - -# Main page -addNewJobs Add new downloads -shutdownOK? Are you sure you want to shutdown SABnzbd? -link-shutdown Shutdown -link-pause Pause -link-resume Resume -button-add Add -add Add -reportId Report-id -addFile Add File -category Category -pp Processing -script Script -priority Priority -pp-none Download -pp-repair +Repair -pp-unpack +Unpack -pp-delete +Delete -pp-n -pp-r R -pp-u U -pp-d D -pr-force Force -pr-normal Normal -pr-high High -pr-low Low -enterURL Enter URL -enterID  or Report ID - -# Queue page -link-sortByName Sort by name -link-sortByAge Sort by age -link-sortBySize Sort by size -link-hideFiles Hide files -link-showFiles Show files -onQueueFinish On queue finish -shutdownPc Shutdown PC -standbyPc Standby PC -hibernatePc Hibernate PC -shutdownSab Shutdown SABnzbd -speedLimit Speed Limit -pauseFor Pause for -mode Processing -order Order -name Name -remainTotal Remain/Total -eta ETA -age AGE -button-del Del -button-resume Resume -button-pause Pause -unknown unknown -fetchingNewzbin@1 fetching msgid %s from www.newzbin.com -error-fetchNewzbin@1 Error Fetching msgid %s from www.newzbin.com -\ - Please make sure your Username and Password are set -fetchNZB@1 Trying to fetch NZB from %s -eoq-actions Actions -eoq-scripts Scripts -purgeQueue Purge Queue -purgeQueueConf Delete all items from the queue? - -# History page -purgeHist Purge History -purgeHistConf Delete all items from History? -hideDetails Hide details -showDetails Show details -sizeHist History Size -completed Completed -size Size -status Status -msg-reAdded@1 Job "%s" was re-added to the queue - -# Connections page -link-forceDisc Force Disconnect -askTestEmail This will send a test email to your account. -link-showLog Show Logging -link-showWeblog Show Weblogging -link-testEmail Test Email -logging Logging -log-errWarn Errors/Warning -log-info + Info -log-debug + Debug -connections Connections -thread Thread -emailResult Email Test Result -lastWarnings Latest Warnings -clearWarnings clear -server-blocked Unblock -warning WARNING: -error ERROR: -server-resolving  Resolving address - -# Configuration -configuration Configuration -confgFile Config File -explain-Restart The button below will restart SABnzbd.\n\ - Use it when you think the program has a stability problem.\n\ - Downloading will be paused before the restart and resume afterwards. -button-restart Restart -version Version -uptime Uptime -error Error -badParm Incorrect parameter -error-badValue@2 Incorrect value for %s: %s -error-noFolder@1 Folder "%s" does not exist -error-QnotEmpty Error: Queue not empty, cannot change folder. -error-noUNC@1 UNC path "%s" not allowed here -error-notOctal@1 %s is not a correct octal value - -# Config->General -generalConfig General configuration -restartRequired Changes will require a SABnzbd restart! -webServer SABnzbd Web Server -opt-host SABnzbd Host -explain-host Host SABnzbd should listen on. -opt-port SABnzbd Port -explain-port Port SABnzbd should listen on. -opt-web_dir Web Interface -explain-web_dir Choose a skin. -opt-web_dir2 Secondary Web Interface -explain-web_dir2 Activate an alternative skin. -webAuth Web server authentication -opt-web_username SABnzbd Username -explain-web_username Optional authentication username. -opt-web_password SABnzbd Password -explain-web_password Optional authentication password. -httpsSupport HTTPS Support -opt-enable_https Enable HTTPS -opt-notInstalled not installed -explain-enable_https Enable accessing the interface from a HTTPS address. -opt-https_port HTTPS Port -explain-https_port Port SABnzbd should listen on for HTTPS communication. -opt-https_cert HTTPS Certificate -explain-https_cert File name or path to HTTPS Certificate. -opt-https_key HTTPS Key -explain-https_key File name or path to HTTPS Key. -tuning Tuning -opt-refresh_rate Queue auto refresh interval: -explain-refresh_rate Refresh interval of the queue web-interface page(sec, 0= none). -opt-rss_rate RSS Checking Interval -explain-rss_rate Checking interval (in minutes, at least 15). -opt-bandwidth_limit Download Speed Limit -explain-bandwidth_limit Download rate limit (in KB/s - kilobytes per second). -opt-cache_limitstr Article Cache Limit -explain-cache_limitstr Cache articles in memory to reduce disk access.\n\ - In bytes, optionally follow with K,M,G. For example: "64M" or "128M" -opt-cleanup_list Cleanup List -explain-cleanup_list List of file extensions that should be deleted after download.\n\ - For example: .nfo or .nfo, .sfv -button-saveChanges Save Changes -opt-language Language -explain-language Select a web interface language. -opt-apikey API Key -explain-apikey This key is used to give 3rd party programs access to SABnzbd. -button-apikey Generate New Key -opt-disableApikey Disable API-key -explain-disableApikey Do not require the API key. -explain-disableApikeyWarn USE AT YOUR OWN RISK! -restart1 Initiating restart...\n -restart2  \n\ - SABnzbd shutdown finished.\n\ - Wait for about 5 second and then click the button below.\n\n\ - Refresh\n - -# Config->Folders -folderConfig Folder configuration -explain-folderConfig NOTE: Folders will be created automatically when Saving. You may use absolute paths to save outside of the default folders. -userFolders User Folders -in In -opt-download_dir Temporary Download Folder -explain-download_dir Location to store unprocessed downloads.\n\ - Can only be changed when queue is empty. -opt-download_free Minimum Free Space for Temporary Download Folder -explain-download_free Auto-pause when free space is beneath this value.\n\ - In bytes, optionally follow with K,M,G,T. For example: "800M" or "8G" -opt-complete_dir Completed Download Folder -explain-complete_dir Location to store finished, fully processed downloads.\n\ - Can be overruled by user-defined categories. -opt-permissions Permissions for completed downloads -explain-permissions Set permissions pattern for completed files/folders.\n\ - In octal notation. For example: "755" or "777" -opt-dirscan_dir Watched Folder -explain-dirscan_dir Folder to monitor for .nzb files.\n\ - Also scans .zip .rar and .tar.gz archives for .nzb files. -opt-dirscan_speed Watched Folder Scan Speed -explain-dirscan_speed Number of seconds between scans for .nzb files. -opt-script_dir Post-Processing Scripts Folder -explain-script_dir Folder containing user scripts for post-processing. -opt-email_dir Email Templates Folder -explain-email_dir Folder containing user-defined email templates. -systemFolders System Folders -opt-cache_dir Cache Folder -explain-cache_dir Location for temporary storage.\n\ - Can only be changed when queue is empty.\n\ - Requires SABnzbd restart! -opt-log_dir Log Folder -explain-log_dir Location of log files for SABnzbd.\n\ - Requires SABnzbd restart! -opt-nzb_backup_dir .nzb Backup Folder -explain-nzb_backup_dir Location where .nzb files will be stored. - -# Config->Switches -switchesConfig Switches configuration -processingSwitches Processing Switches -opt-quick_check Enable Quick Check -explain-quick_check Skip par2 checking when files are 100% valid. -opt-enable_unrar Enable Unrar -explain-enable_unrar Enable built-in unrar functionality. -opt-enable_unzip Enable Unzip -explain-enable_unzip Enable built-in unzip functionality. -opt-enable_filejoin Enable Filejoin -explain-enable_filejoin Join files ending in .001, .002 etc. into one file. -opt-enable_tsjoin Enable TS Joining -explain-ts_join Join files ending in .001.ts, .002.ts etc. into one file. -opt-enable_par_cleanup Enable Par Cleanup -explain-enable_par_cleanup Cleanup par files (if verifiying/repairing succeded). -opt-fail_on_crc Fail on yEnc CRC Errors -explain-fail_on_crc Use backup servers on yEnc crc errors. -opt-top_only Only Get Articles for Top of Queue -explain-top_only Enable for less memory usage. Disable to prevent slow jobs from blocking the queue. -opt-safe_postproc Post-Process Only Verified Jobs -explain-safe_postproc Only perform post-processing on jobs that passed all PAR2 checks. -opt-no_dupes Prevent Duplicate Downloads -explain-no_dupes Skip a job if a backed-up .nzb with the same name exists. -opt-dirscan_opts Default Post-Processing -explain-dirscan_opts Used when no post-processing is defined by the category. -opt-dirscan_script Default User Script -explain-dirscan_script Used when no user script is defined by the category. -opt-dirscan_priority Default Priority -explain-dirscan_priority Used when no priority is defined by the category. -opt-par2_multicore Enable MultiCore Par2 -explain-par2_multicore Read the Wiki Help on this! -opt-par_option Extra PAR2 Parameters -explain-par_option Read the Wiki Help on this! -opt-nice Nice Parameters -explain-nice Read the Wiki Help on this! -opt-ionice IONice Parameters -explain-ionice Read the Wiki Help on this! -otherSwitches Other Switches -opt-auto_disconnect Disconnect on Empty Queue -explain-auto_disconnect Disconnect from Usenet server(s) when queue is empty or paused. -opt-send_group Send Group -explain-send_group Send group command before requesting articles. -opt-auto_sort Sort by Age -explain-auto_sort Automatically sort items by (average) age. -opt-check_new_rel Check for New Release -explain-check_new_rel Weekly check for new SABnzbd release. -opt-replace_spaces Replace Spaces in Foldername -explain-replace_spaces Replace spaces with underscores in folder names. -opt-replace_illegal Replace Illegal Characters in Folder Names -explain-replace_illegal Replace illegal characters in folder names by equivalents (otherwise remove). -opt-auto_browser Launch Browser on Startup -explain-auto_browser Launch the default web browser when starting SABnzbd. -opt-pause_on_post_processing Pause Downloading During Post-Processing -explain-pause_on_post_processing Pauses downloading at the start of post processing and resumes when finished. -opt-ignore_samples Ignore Samples -explain-ignore_samples Filter out sample files (e.g. video samples). -igsam-off Off -igsam-del Delete after download -igsam-not Do not download -opt-ssl_type SSL type -explain-ssl_type Use V23 unless your provider requires otherwise! - - -# Config->Server -configServer Server configuration -addServer Add Server -srv-host Host -srv-port Port -srv-username Username -srv-password Password -srv-timeout Timeout -srv-connections Connections -srv-ssl SSL -srv-fillserver Backup server -srv-optional Optional -srv-enable Enable -button-addServer Add Server -button-delServer Remove Server -error-needServer Server address required -button-testServer Test Server -srv-testing Testing server details... -srv-testHint Click below to test. -srv-success Connection Successful! -srv-noHost The hostname is not set. -srv-noConnections There are no connections set. Please set at least one connection. -srv-starredPass Password masked in ******, please re-enter -srv-invalidDetails Invalid server details -srv-timedoutSSL Timed out: Try enabling SSL or connecting on a different port. -srv-timedout Timed out -srv-failedAuth Authentication failed, check username/password. -srv-noAuth Server requires username and password. -srv-tooManyConnections Too many connections, please pause downloading or try again later -srv-generalFail@1 Could not determine connection result (%s) - -# Config->Scheduling -configSchedule Scheduling configuration -addSchedule Add Schedule -sch-frequency Frequency -sch-action Action -sch-arguments Arguments -button-addSchedule Add Schedule -button-delSchedule Remove -currentSchedules Current Schedules -sch-task Task -sch-disable_server disable server -sch-enable_server enable server -sch-resume Resume -sch-pause Pause -sch-shutdown Shutdown -sch-restart Restart -sch-speedlimit Speedlimit -sch-pause_all Pause All -sch-pause_post Pause post-processing -sch-resume_post Resume post-processing - -# Config->RSS -configRSS RSS Configuration -newFeedURI New Feed URL -explain-RSS The checkbox next to the feed name should be ticked for the feed to be enabled and be automatically checked for new items.\n\ - The checking frequency is in the General page of the configuration.\n\ - When a feed is added, it will only pick up new items and not anything already in the RSS feed unless you press "Force Download". -feedDefinition Feed Definition -feed Feed -button-delFeed Delete Feed -button-preFeed Preview -button-forceFeed Force Download -rss-order Order -rss-type Type -rss-filter Filter -rss-accept Accept -rss-reject Reject -rss-must Requires -rss-mustcat RequiresCat -rss-delFilter X -rss-matched Matched -rss-notMatched Not matched -rss-done Downloaded -rss-downloaded Downloaded so far -link-download Download -explain-rssStar Jobs marked with a '*' will not be automatically downloaded. - -# Config->Email -configEmail Email Notification -emailOptions Email Options -opt-email_endjob Email Notification On Job Completion -email-never Never -email-always Always -email-errorOnly Error-only -opt-email_full Disk Full Notifications -explain-email_full Send email when disk is full and SABnzbd is paused. -opt-email_dir Folder containing email templates -explain-email_dir Folder containing user defined email templates. -opt-email_rss Send RSS notifications -explain-email_rss Send email when an RSS feed adds jobs to the queue. - - Relative to -emailAccount Email Account Settings -opt-email_server SMTP Server -explain-email_server Set your ISP's server for outgoing email. -opt-email_to Email Recipient -explain-email_to Email address to send the email to. -opt-email_from Email Sender -explain-email_from Who should we say sent the email? -opt-email_account OPTIONAL Account Username -explain-email_account For authenticated email, account name. -opt-email_pwd OPTIONAL Account Password -explain-email_pwd For authenticated email, password. -error-badEmailAd@1 %s is not a valid email address - -# Config->Newzbin -explain-newzbin If you have an account at www.newzbin.com,\ - you can enter your account info here.\n\ - This will unlock extra functionality. -accountInfo Account info -opt-username_newzbin Newzbin Username -explain-username_newzbin Set your account username here. -opt-password_newzbin Newzbin Password -explain-password_newzbin Set your account password here. -newzbinBookmarks Bookmark Processing -opt-newzbin_bookmarks Auto-Fetch Bookmarks -explain-newzbin_bookmarks Automatically retrieve jobs from your bookmarks. -link-getBookmarks Get Bookmarks Now -link-HideBM Hide Processed Bookmarks -link-ShowBM Show Processed Bookmarks -opt-newzbin_unbookmark Un-Bookmark If Download Complete -explain-newzbin_unbookmark Remove from bookmark list when download is complete. -opt-bookmark_rate Checking Interval -explain-bookmark_rate In minutes (at least 15 min). -processedBM Processed Bookmarks -explain-nzbmatrix If you have an account at www.nzbmatrix.com,\ - you can enter your account info here.\n\ - This is required if you want to use the RSS feeds of this site. -opt-username_matrix NzbMatrix Username -explain-username_matrix Set your account username here. -opt-password_matrix NzbMatrix Password -explain-password_matrix Set your account password here. -opt-apikey_matrix NzbMatrix API key -explain-apikey_matrix Set the NzbMatrix API key here. - -# Config->Cat -configCat User-defined categories -explain-configCat Defines post-processing and storage. -explain-catNewzbin The Newzbin column will map listed Newzbin categories to your own. -link-initCat Click here to setup newzbin categories. -explain-relFolder Relative folders are based on -catFolderPath Folder/Path -catNewzbin NewzBin -catGroups Groups -button-delCat X - -# Config->Sorting -configSort Sorting configuration -seriesSorting Series Sorting -sort-show Show -sort-name Name -opt-tvsort Enable TV Sorting -explain-tvsort Enable sorting and renaming of episodes. -sort-legenda Pattern Key -button-clear Clear -presetSort Presets -example Example -genericSort Generic Sorting -opt-movieSort Enable Movie Sorting -explain-movieSort Enable generic sorting and renaming of files. -opt-movieExtra Keep loose downloads in extra folders -explain-movieExtra Enable if downloads are not put in their own folders. -affectedCat Affected Categories -sort-meaning Meaning -sort-pattern Pattern -sort-result Result -button-Season1x05 1x05 Season Folder -button-SeasonS01E05 S01E05 Season Folder -button-Ep1x05 1x05 Episode Folder -button-EpS01E05 S01E05 Episode Folder -sort-title Title -movie-sp-name Movie Name -movie-dot-name Movie.Name -movie-us-name Movie_Name -show-name Show Name -show-sp-name Show Name -show-dot-name Show.Name -show-us-name Show_Name -show-seasonNum Season Number -show-epNum Episode Number -ep-name Episode Name -ep-sp-name Episode Name -ep-dot-name Episode.Name -ep-us-name Episode_Name -fileExt File Extension -extension Extension -partNumber Part Number -decade Decade -orgFilename Original Filename -lowercase Lower Case -TEXT TEXT -text text -sort-File file -sortString Sort String -multiPartLabel Multi-part label -button-inFolders In folders -button-noFolders No folders -dateSorting Date Sorting -opt-dateSort Enable Date Sorting -explain-dateSort Enable sorting and renaming of date named files. -button-ShowNameF Show Name folder -button-YMF Year-Month Folders -button-DailyF Daily Folders - -# NZO -nzoDetails Edit NZB Details -nzoName Name -nzo-delete Delete -nzo-top Top -nzo-up Up -nzo-down Down -nzo-bottom Bottom -nzo-all All -nzo-none None -nzo-invert Invert -nzo-filename Filename -nzo-subject Subject -nzo-age Age -nzo-selection Selection - -# Internal texts -msg-warning-ambiLocalhost Warning: LOCALHOST is ambiguous, use numerical IP-address. -msg-invalidServer@2 Server address "%s:%s" is not valid. - -warn-missingKey Missing Session key -error-missingKey Error: Session Key Required -warn-badSession Incorrect Session key -error-badKey Error: Session Key Incorrect -warn-authMissing Authentication missing, please enter username/password from Config->General\ - into your 3rd party program: -error-authMissing Error: Missing authentication -warn-apikeyNone API Key missing, please enter the api key from Config->General\ - into your 3rd party program: -warn-apikeyBad API Key incorrect, Use the api key from Config->General\ - in your 3rd party program: -error-noSecUI Error: No secondary interface defined. - -his-badArchive Failed, Unusable archive file -his-cannotGetReport Failed to fetch newzbin report -his-failedURL Failed to add url -his-retryURL1@1 URL Fetching failed; %s -his-retryURL2 Try again - -# Errors and Warnings -error-noPar2 par2 binary... NOT found! -error-noWebUi Failed to start web-interface -error-noYEnc _yenc module... NOT found! -error-sameHTTP-HTTPS HTTP and HTTPS ports cannot be the same -warn-0000 Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access -warn-noCertKey Disabled HTTPS because of missing CERT and KEY files -warn-noSkin@1 Cannot find web template: %s, trying standard template -warn-noUnrar unrar binary... NOT found -warn-noUnzip unzip binary... NOT found! -error-failMkstemp Failure in tempfile.mkstemp -error-fetchReport@1 Error Fetching msgid %s from www.newzbin.com - -error-hibernate Failed to hibernate system -error-loading@1 Loading %s failed -error-saveX@1 Saving %s failed -error-saveXtoY@2 Saving %s to %s failed -error-standby Failed to standby system -error-tempFile@1 Cannot create temp file for %s -warn-noServer@1 Trying to set status of non-existing server %s -warn-noSpace Too little diskspace forcing PAUSE -warn-signal@1 Signal %s caught, saving and exiting... -warn-flushFailed@1 Flushing %s failed -> no art_id -error-diskError@1 Disk error on creating file %s -error-diskFull Disk full! Forcing Pause -warn-artMissing@1 %s missing -error-badIni@1 Invalid Config file %s -error-createIni@1 Cannot create Config file %s -error-encPw@1 Incorrectly encoded password %s -error-version@2 Incorrect version number %s in %s" -error-badHisNewline@1 Invalid stage logging in history for %s (\\r\\n) -error-badHisSemic@1 Invalid stage logging in history for %s (;) -error-sqlClose Failed to close database, see log -error-sqlCmd SQL Command Failed, see log -error-sqlCommit SQL Commit Failed, see log -error-decode@1 Decoding %s failed -error-decodeUnknown@1 Unknown Error while decoding %s -warn-artAllMissing@1 %s => missing from all servers, discarding -warn-badYEnc@1 Badly formed yEnc article in %s -warn-crcError@3 CRC Error in %s (%s -> %s) -error-readWatched@1 Cannot read Watched Folder %s -error-remove@1 Error removing %s -warn-noRead@1 Cannot read %s -error-except Exception? -error-noInit@3 Failed to initialize %s@%s:%s -error-serverFailed@4 Connecting %s@%s:%s failed, message=%s -error-serverLogin@1 Failed login for server %s -error-serverNoConn@2 Cannot connect to server %s [%s] -error-serverTooMany@2 Too many connections to server %s:%s -warn-ignoreServer@2 Server %s will be ignored for %s minutes -warn-noConnectServer@2 Cannot connect to server %s [%s] -error-accountSharing Probable account sharing -error-serverCred@1 Server %s requires user/password -warn-thread@3 Thread %s@%s:%s: -error-mailAuth Failed to authenticate to mail server -error-mailNoConn Failed to connect to mail server -error-mailSend Failed to send e-mail -error-mailTempl@1 Cannot find email templates in %s -error-mailTLS Failed to initiate TLS connection -warn-noEmailClose Failed to close mail connection -msg-emailOK Email succeeded -error-regex@1 Failed to compile regex for search term: %s -error-accessDir@2 %s directory: %s error accessing -error-createDir@1 Cannot create directory %s -error-makeFile@1 Failed making (%s) -error-moveFile@2 Failed moving %s to %s -error-portNoAccess@1 You have no permisson to use port %s -error-regConnect Cannot connect to registry hive HKEY_CURRENT_USER. -error-regOpen@1 Cannot open registry key "%s". -error-regSpecial Failed to read registry keys for special folders -error-sslFiles Error creating SSL key and certificate -error-urlGet@2 Error getting url %s (cause= "%s") -warn-noBrowser Cannot launch the browser, probably not found -warn-pyopenssl pyopenssl module missing, please install for https access -error-fileJoin@2 Error "%s" while running file_join on %s -error-filePar2@2 Error %s while running par2_repair on set %s -error-fileRead@1 notrar(): reading %s failed -error-fileUnrar@2 Error "%s" while running rar_unpack on %s -error-fileUnzip@2 Error "%s" while running unzip() on %s -warn-cannotFind@1 ERROR: unable to find "%s" -warn-crcFailed@1 ERROR: CRC failed in "%s" -warn-delFailed@1 Deleting %s failed! -warn-encrypted ERROR: encrypted file: -warn-error@1 ERROR: %s -warn-MissExpectedFile@1 Missing expected file: %s => unrar error? -warn-writeError@1 ERROR: write error (%s) -error-connect@1 Failed to connect: %s -error-newsSSL This server does not allow SSL on this port -error-noSSL Error importing OpenSSL module. Connecting with NON-SSL -error-nbInfo@1 Newzbin server fails to give info for %s -error-nbProtocol Newzbin server changed its protocol -error-nbReport@1 Newzbin report %s not found -error-nbUnkownError@1 Newzbin gives undocumented error code (%s) -error-nbUnkownError@2 Newzbin gives undocumented error code (%s, %s) -error-nbUpdate@1 Failed to update newzbin job %s -warn-nbCredit You have no credit on your Newzbin account -warn-nbNoAuth Unauthorised, check your newzbin username/password -warn-nbNoDelBM@1 Could not delete newzbin bookmark %s -error-qAdd@1 Error while adding %s, removing -error-qBad Incompatible queuefile found, cannot proceed -error-qCorruptFile@1 Error loading %s, corrupt file detected -warn-unknownEncoding@1 %s -> Unknown encoding -error-qDupPart@3 Duplicate part %s, but different ID-s (%s // %s) -error-qImport@1 Error importing %s -warn-badImport@2 Failed to import %s files from %s -warn-badNZB@3 Invalid NZB file %s, skipping (reason=%s, line=%s) -warn-emptyFile@1 File %s is empty, skipping -warn-skipDup@1 Skipping duplicate NZB "%s" -error-ppCleanup@1 Cleanup of %s failed. -error-ppDelFailed@1 Removing %s failed -error-ppDelNzo Failed to remove nzo from postproc queue (id) -error-ppDelWorkdir@1 Error removing workdir (%s) -error-ppFailed@1 Post Processing Failed for %s -error-ppLogFile@1 Cannot create logfile %s -error-ppPermissions@1 Cannot change permissions of %s -error-ppRename@2 Error renaming "%s" to "%s" -warn-badPPQueue@2 Failed to load postprocessing queue: Wrong version (need:%s, found:%s) -error-rssBadFeed@1 Incorrect RSS feed description "%s" -error-rssRegex@1 Could not compile regex: %s -warn-emptyRSS@1 Empty RSS entry found (%s) -warn-failRSS@1 Failed to retrieve RSS from %s -warn-failRSS@2 Failed to retrieve RSS from %s: %s -warn-badSched@3 Bad schedule %s at %s:%s -warn-badSchedAction@1 Unknown action: %s -warn-schedNoServer@1 Schedule for non-existing server %s -error-tvInfo@1 Error getting TV info (%s) -error-tvRename@2 Failed to rename: %s to %s -error-tvSimRename@2 Failed to rename similar file: %s to %s -error-tvTemp@1 Cannot create temp file for %s -warn-matrixBadRep@1 Invalid nzbmatrix report number %s -warn-matrixFail@1 Problem accessing nzbmatrix server (%s) -warn-noRepair No PAR2 program found, repairs not possible\n -warn-noUnpack No UNRAR program found, unpacking RAR files is not possible\n -warn-badUnrar Your UNRAR version is not recommended,\ - get it from http://www.rarlab.com/rar_add.htm\n -warn-missingFiles \nWarning: not all files were unpacked, see log -error-joinMismatch Expected size did not equal actual size -error-joinFail@1 File join of %s failed -error-joinFail@2 [%s] Error "%s" while joining files -msg-joinOK@2 [%s] Joined %s files -error-unpackFail@1 Unpacking failed, %s -error-unpackFail@2 [%s] Error "%s" while unpacking RAR files -error-badArchive Failed opening main archive (encrypted or damaged) -error-unpackFailed@1 Unpacking failed, unable to find %s -error-unpackCRC Unpacking failed, CRC error -error-unpackFull Unpacking failed, write error or disk is full? -error-unpackFailLog Unpacking failed, see log -error-unpackPassword Unpacking failed, archive requires a password -error-unpackMissing Unpacking failed, an expected file was not unpacked -msg-unpackDone@2 Unpacked %s files/folders in %s -msg-unzipDone@2 %s files in %s -msg-QuickCheck Quick check... -msg-QuickChecking Quick Checking -msg-QuickOK@1 [%s] Quick Check OK -msg-startRepair Starting Repair -error-repairFailed@1 Repairing failed, %s -error-repairBad@2 Error "%s" while running par2_repair on set %s -msg-verify Verifying... -msg-verifyOK@2 [%s] Verified in %s, all files correct -msg-repairNeeded Repair is required -msg-repairNeeded@2 [%s] Verified in %s, repair is required -error-noMainPacket Main packet not found... -error-repairBlocks@1 Repair failed, not enough repair blocks (%s short) -msg-fetchBlocks@1 Fetching %s blocks... -msg-repairing Repairing -msg-repairDone@2 [%s] Repaired in %s -msg-verifying Verifying -msg-DownloadedIn@2 Downloaded in %s at an average of %sB/s -msg-noParSets@1 [%s] No par2 sets -msg-noPostProc No post-processing because of failed verification -msg-sentToQ@1 Sent %s to queue -msg-runScript@1 Running user script %s -msg-ranScript@1 Ran %s -link-more More -link-viewSc View script output -warn-OutRetention Download failed - Out of your server's retention? -warn-PostCrash PostProcessing Crashed, see logfile -msg-moving Moving -msg-running Running script -msg-joining Joining -msg-unpacking Unpacking -msg-repair Repair -msg-fetching Fetching -msg-path Path - -stage-download Download -stage-repair Repair -stage-filejoin Join files -stage-unpack Unpack -stage-script Script - -post-Completed Completed -post-Failed Failed -post-Queued Queued -post-Repairing Repairing... -post-Extracting Extracting... -post-Moving Moving... -post-Running Running script... -post-Fetching Fetching extra blocks... -post-QuickCheck Quick Check... -post-Verifying Verifying... - -#Growl Messages -grwl-notif-startup Startup/Shutdown -grwl-notif-dl NZB Added -grwl-notif-pp Post-processing -grwl-notif-other Other Messages -grwl-shutdown-begin-msg Shutting down -grwl-shutdown-end-msg SABnzbd shutdown finished -grwl-paused-msg Paused -grwl-nzbadd-title NZB added to queue -grwl-newversion-msg New release available - -#OSX Menu -osx-menu-warnings Warnings -osx-menu-status-idle Idle -osx-menu-status-paused Paused -osx-menu-pause Pause -osx-menu-min min. -osx-menu-resume Resume -osx-menu-queue Queue -osx-menu-queuelimit Queue First 10 Items -osx-menu-history History -osx-menu-historylimit History Last 10 Items -osx-menu-speedlimit Limit Speed -osx-menu-none None -osx-menu-getnewzbinbm Get Newzbin Bookmarks -osx-menu-complete Complete Folder\t\t\t -osx-menu-incomplete Incomplete Folder\t\t -osx-menu-restart Restart -osx-menu-quit Quit -osx-menu-config Configuration -osx-menu-purgequeue Purge Queue -osx-menu-purgehistory Purge History -osx-menu-wizard Go to wizard -osx-menu-empty Empty -osx-menu-shutdowning Stopping... - -email-full@2 \ -to: %s\r\ -from: %s\r\ -subject: SABnzbd reports Disk Full\r\ -\r\ -Hi,\r\ -\r\ -SABnzbd has stopped downloading, because the disk is almost full.\r\ -Please make room and resume SABnzbd manually.\r\ -\r diff --git a/main/licenses/License-CherryPy.txt b/main/licenses/License-CherryPy.txt deleted file mode 100644 index b9925fd..0000000 --- a/main/licenses/License-CherryPy.txt +++ /dev/null @@ -1,39 +0,0 @@ -The module CherryPy-3.1.2 is (c) CherryPy team. - -The module has been stripped of its Tutorial and Test directories. -We embed CherryPy in SABnzbd, because CherryPy releases lack -backward compatibility and cannot be installed as parallel versions -into the system's Python installation. - -Home of the module: -http://www.cherrypy.org - -It is covered by the following license. - -------------------------------------------------------------------------- -Copyright (c) 2004-2007, CherryPy Team (team@cherrypy.org) -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the CherryPy Team nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------- diff --git a/main/licenses/License-configobj.txt b/main/licenses/License-configobj.txt deleted file mode 100644 index b154a36..0000000 --- a/main/licenses/License-configobj.txt +++ /dev/null @@ -1,41 +0,0 @@ -The module configobj.py is written by Michael Foord and Nicola Larosa. - -Home of the module: -http://www.voidspace.org.uk/python/configobj-api/pythonutils.configobj-pysrc.html - -It is covered by the following license. - -------------------------------------------------------------------------- -Copyright (c) 2003-2007, Michael Foord and Nicola Larosa -All rights reserved. -E-mail : fuzzyman AT voidspace DOT org DOT uk - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of Michael Foord nor the name of Voidspace - may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------- diff --git a/main/licenses/License-feedparser.txt b/main/licenses/License-feedparser.txt deleted file mode 100644 index 2297721..0000000 --- a/main/licenses/License-feedparser.txt +++ /dev/null @@ -1,42 +0,0 @@ -The module feedparser.py-4.1 is (c) Mark Pilgrim - -We use only the feedparser itself, all additional material -was removed. - -Home of the feedparser module: -http://www.feedparser.org - -It is covered by the following license. - - -Universal Feed Parser (feedparser.py), its testing harness (feedparsertest.py), -and its unit tests (everything in the tests/ directory) are released under the -following license: - ------ begin license block ----- - -Copyright (c) 2002-2005, Mark Pilgrim -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - ------ end license block ----- diff --git a/main/licenses/License-json.txt b/main/licenses/License-json.txt deleted file mode 100644 index 107f173..0000000 --- a/main/licenses/License-json.txt +++ /dev/null @@ -1,512 +0,0 @@ -The module json.py is written by Patrick D. Logan. -Contact mailto:patrickdlogan@stardecisions.com - -The home of the module is: - http://sourceforge.net/projects/json-py - -It is covered by the following license. - ----------------------------------------------------------------------------- - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! ----------------------------------------------------------------------------- diff --git a/main/licenses/License-kronos.txt b/main/licenses/License-kronos.txt deleted file mode 100644 index ace371a..0000000 --- a/main/licenses/License-kronos.txt +++ /dev/null @@ -1,38 +0,0 @@ -Kronos.py is written by Irmen de Jong. -Retreived from: -http://www.razorvine.net/download/kronos.py - -Quote from the module: -""" - This version has been extracted from the Turbogears source repository - and slightly changed to be completely stand-alone again. - Also some fixes have been made to make it work on Python 2.6 (sched module changes). - The version in Turbogears is based on the original stand-alone Kronos. -""" - -It is covered by the following license. -http://www.opensource.org/licenses/mit-license.php --------------------------------------------------------------------------------------------- - The MIT License - - Kronos.py is Copyright (c) Irmen de Jong. - - 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. - --------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/main/licenses/License-listquote.txt b/main/licenses/License-listquote.txt deleted file mode 100644 index eb20cb1..0000000 --- a/main/licenses/License-listquote.txt +++ /dev/null @@ -1,41 +0,0 @@ -The module listquote.py is written by Michael Foord. - -Home of the module: -http://www.voidspace.org.uk/python/configobj-api/pythonutils.listquote-pysrc.html - -It is covered by the following license. - -------------------------------------------------------------------------- -Copyright (c) 2003-2007, Michael Foord -All rights reserved. -E-mail : fuzzyman AT voidspace DOT org DOT uk - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of Michael Foord nor the name of Voidspace - may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------- diff --git a/main/licenses/License-pynewsleecher.txt b/main/licenses/License-pynewsleecher.txt deleted file mode 100644 index 34553d3..0000000 --- a/main/licenses/License-pynewsleecher.txt +++ /dev/null @@ -1,11 +0,0 @@ -The original author of SABnzbd based his work on Pynewleecher by Freddy@madcowdesease.org. - -Few parts of Pynewsleecher have survived the generations of SABnzbd in a -recognizable form. -Still, we wish to thank Freddy for his inspiration. - -The home of the Pynewsleecher project: -http://www.madcowdisease.org/mcd/pynewsleecher - -The software does not carry any license information. - diff --git a/main/licenses/License-rarfile.txt b/main/licenses/License-rarfile.txt deleted file mode 100644 index 6184f08..0000000 --- a/main/licenses/License-rarfile.txt +++ /dev/null @@ -1,23 +0,0 @@ -The module rarfile.py is written by Marko Kreen. - -Home of the module: -http://grue.l-t.ee/~marko/src/rarfile/ - -It is covered by the following license. - -------------------------------------------------------------------------- - -Copyright (c) 2005 Marko Kreen - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - diff --git a/main/licenses/License-rsslib.txt b/main/licenses/License-rsslib.txt deleted file mode 100644 index 4b10acc..0000000 --- a/main/licenses/License-rsslib.txt +++ /dev/null @@ -1,10 +0,0 @@ -The module rsslib.py is written by C. Mallory. -cmallory /a t/ berserk /dot/ o r g -Home of the module: - http://berserk.org/rsslib/ - -It is covered by the following license. - ------------------------------------------------------------------------------ -You may freely use this code in any way you can think of. ------------------------------------------------------------------------------ diff --git a/main/licenses/License-ssmtplib.txt b/main/licenses/License-ssmtplib.txt deleted file mode 100644 index 650ca06..0000000 --- a/main/licenses/License-ssmtplib.txt +++ /dev/null @@ -1,36 +0,0 @@ -The module ssmtplib.py is written by Matt Butcher. - -Home of the module: -http://aleph-null.tv/downloads/ssmtplib.py - -It is covered by the following license. - - Author: Matt Butcher , Feb. 2007 - License: MIT License (or, at your option, the GPL, v.2 or later as posted at - http://gnu.org). - - Begin License - - Copyright (c) 2007 M Butcher - - 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. - - End License - - This is just a minor modification to the smtplib code by Dragon De Monsyn. diff --git a/main/licenses/Python/LICENSE-BerkeleyDB.txt b/main/licenses/Python/LICENSE-BerkeleyDB.txt deleted file mode 100644 index 87fa4cc..0000000 --- a/main/licenses/Python/LICENSE-BerkeleyDB.txt +++ /dev/null @@ -1,102 +0,0 @@ -/*- - * $Id: LICENSE,v 12.1 2005/06/16 20:20:10 bostic Exp $ - */ - -The following is the license that applies to this copy of the Berkeley DB -software. For a license to use the Berkeley DB software under conditions -other than those described here, or to purchase support for this software, -please contact Sleepycat Software by email at info@sleepycat.com, or on -the Web at http://www.sleepycat.com. - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -/* - * Copyright (c) 1990-2005 - * Sleepycat Software. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Redistributions in any form must be accompanied by information on - * how to obtain complete source code for the DB software and any - * accompanying software that uses the DB software. The source code - * must either be included in the distribution or be available for no - * more than the cost of distribution plus a nominal fee, and must be - * freely redistributable under reasonable conditions. For an - * executable file, complete source code means the source code for all - * modules it contains. It does not include source code for modules or - * files that typically accompany the major components of the operating - * system on which the executable file runs. - * - * THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR - * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL SLEEPYCAT SOFTWARE - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ -/* - * Copyright (c) 1990, 1993, 1994, 1995 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -/* - * Copyright (c) 1995, 1996 - * The President and Fellows of Harvard University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ diff --git a/main/licenses/Python/LICENSE-OpenSSL.txt b/main/licenses/Python/LICENSE-OpenSSL.txt deleted file mode 100644 index c21f132..0000000 --- a/main/licenses/Python/LICENSE-OpenSSL.txt +++ /dev/null @@ -1,127 +0,0 @@ - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a dual license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. Actually both licenses are BSD-style - Open Source licenses. In case of any license issues related to OpenSSL - please contact openssl-core@openssl.org. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - diff --git a/main/licenses/Python/LICENSE-Python.txt b/main/licenses/Python/LICENSE-Python.txt deleted file mode 100644 index d8e1f80..0000000 --- a/main/licenses/Python/LICENSE-Python.txt +++ /dev/null @@ -1,270 +0,0 @@ -A. HISTORY OF THE SOFTWARE -========================== - -Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands -as a successor of a language called ABC. Guido remains Python's -principal author, although it includes many contributions from others. - -In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) -in Reston, Virginia where he released several versions of the -software. - -In May 2000, Guido and the Python core development team moved to -BeOpen.com to form the BeOpen PythonLabs team. In October of the same -year, the PythonLabs team moved to Digital Creations (now Zope -Corporation, see http://www.zope.com). In 2001, the Python Software -Foundation (PSF, see http://www.python.org/psf/) was formed, a -non-profit organization created specifically to own Python-related -Intellectual Property. Zope Corporation is a sponsoring member of -the PSF. - -All Python releases are Open Source (see http://www.opensource.org for -the Open Source Definition). Historically, most, but not all, Python -releases have also been GPL-compatible; the table below summarizes -the various releases. - - Release Derived Year Owner GPL- - from compatible? (1) - - 0.9.0 thru 1.2 1991-1995 CWI yes - 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes - 1.6 1.5.2 2000 CNRI no - 2.0 1.6 2000 BeOpen.com no - 1.6.1 1.6 2001 CNRI yes (2) - 2.1 2.0+1.6.1 2001 PSF no - 2.0.1 2.0+1.6.1 2001 PSF yes - 2.1.1 2.1+2.0.1 2001 PSF yes - 2.2 2.1.1 2001 PSF yes - 2.1.2 2.1.1 2002 PSF yes - 2.1.3 2.1.2 2002 PSF yes - 2.2.1 2.2 2002 PSF yes - 2.2.2 2.2.1 2002 PSF yes - 2.2.3 2.2.2 2003 PSF yes - 2.3 2.2.2 2002-2003 PSF yes - 2.3.1 2.3 2002-2003 PSF yes - 2.3.2 2.3.1 2002-2003 PSF yes - 2.3.3 2.3.2 2002-2003 PSF yes - 2.3.4 2.3.3 2004 PSF yes - 2.3.5 2.3.4 2005 PSF yes - 2.4 2.3 2004 PSF yes - 2.4.1 2.4 2005 PSF yes - 2.4.2 2.4.1 2005 PSF yes - 2.4.3 2.4.2 2006 PSF yes - 2.5 2.4 2006 PSF yes - 2.5.1 2.5 2007 PSF yes - -Footnotes: - -(1) GPL-compatible doesn't mean that we're distributing Python under - the GPL. All Python licenses, unlike the GPL, let you distribute - a modified version without making your changes open source. The - GPL-compatible licenses make it possible to combine Python with - other software that is released under the GPL; the others don't. - -(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, - because its license has a choice of law clause. According to - CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 - is "not incompatible" with the GPL. - -Thanks to the many outside volunteers who have worked under Guido's -direction to make these releases possible. - - -B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON -=============================================================== - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python -alone or in any derivative version, provided, however, that PSF's -License Agreement and PSF's notice of copyright, i.e., "Copyright (c) -2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation; -All Rights Reserved" are retained in Python alone or in any derivative -version prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 -------------------------------------------- - -BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 - -1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an -office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the -Individual or Organization ("Licensee") accessing and otherwise using -this software in source or binary form and its associated -documentation ("the Software"). - -2. Subject to the terms and conditions of this BeOpen Python License -Agreement, BeOpen hereby grants Licensee a non-exclusive, -royalty-free, world-wide license to reproduce, analyze, test, perform -and/or display publicly, prepare derivative works, distribute, and -otherwise use the Software alone or in any derivative version, -provided, however, that the BeOpen Python License is retained in the -Software, alone or in any derivative version prepared by Licensee. - -3. BeOpen is making the Software available to Licensee on an "AS IS" -basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE -SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS -AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY -DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -5. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -6. This License Agreement shall be governed by and interpreted in all -respects by the law of the State of California, excluding conflict of -law provisions. Nothing in this License Agreement shall be deemed to -create any relationship of agency, partnership, or joint venture -between BeOpen and Licensee. This License Agreement does not grant -permission to use BeOpen trademarks or trade names in a trademark -sense to endorse or promote products or services of Licensee, or any -third party. As an exception, the "BeOpen Python" logos available at -http://www.pythonlabs.com/logos.html may be used according to the -permissions granted on that web page. - -7. By copying, installing or otherwise using the software, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 ---------------------------------------- - -1. This LICENSE AGREEMENT is between the Corporation for National -Research Initiatives, having an office at 1895 Preston White Drive, -Reston, VA 20191 ("CNRI"), and the Individual or Organization -("Licensee") accessing and otherwise using Python 1.6.1 software in -source or binary form and its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, CNRI -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 1.6.1 -alone or in any derivative version, provided, however, that CNRI's -License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) -1995-2001 Corporation for National Research Initiatives; All Rights -Reserved" are retained in Python 1.6.1 alone or in any derivative -version prepared by Licensee. Alternately, in lieu of CNRI's License -Agreement, Licensee may substitute the following text (omitting the -quotes): "Python 1.6.1 is made available subject to the terms and -conditions in CNRI's License Agreement. This Agreement together with -Python 1.6.1 may be located on the Internet using the following -unique, persistent identifier (known as a handle): 1895.22/1013. This -Agreement may also be obtained from a proxy server on the Internet -using the following URL: http://hdl.handle.net/1895.22/1013". - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 1.6.1 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 1.6.1. - -4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" -basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. This License Agreement shall be governed by the federal -intellectual property law of the United States, including without -limitation the federal copyright law, and, to the extent such -U.S. federal law does not apply, by the law of the Commonwealth of -Virginia, excluding Virginia's conflict of law provisions. -Notwithstanding the foregoing, with regard to derivative works based -on Python 1.6.1 that incorporate non-separable material that was -previously distributed under the GNU General Public License (GPL), the -law of the Commonwealth of Virginia shall govern this License -Agreement only as to issues arising under or with respect to -Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this -License Agreement shall be deemed to create any relationship of -agency, partnership, or joint venture between CNRI and Licensee. This -License Agreement does not grant permission to use CNRI trademarks or -trade name in a trademark sense to endorse or promote products or -services of Licensee, or any third party. - -8. By clicking on the "ACCEPT" button where indicated, or by copying, -installing or otherwise using Python 1.6.1, Licensee agrees to be -bound by the terms and conditions of this License Agreement. - - ACCEPT - - -CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 --------------------------------------------------- - -Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, -The Netherlands. All rights reserved. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Stichting Mathematisch -Centrum or CWI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. - -STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE -FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/main/licenses/Python/LICENSE-TclTk.txt b/main/licenses/Python/LICENSE-TclTk.txt deleted file mode 100644 index f1dcaa5..0000000 --- a/main/licenses/Python/LICENSE-TclTk.txt +++ /dev/null @@ -1,40 +0,0 @@ -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState -Corporation and other parties. The following terms apply to all files -associated with the software unless explicitly disclaimed in -individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. diff --git a/main/licenses/Python/LICENSE.txt b/main/licenses/Python/LICENSE.txt deleted file mode 100644 index edd42ae..0000000 --- a/main/licenses/Python/LICENSE.txt +++ /dev/null @@ -1,97 +0,0 @@ -ActivePython Community License v2.2 - -Preamble: - -The intent of this document is to state the conditions under which the -Package may be copied and distributed, such that ActiveState maintains -control over the development and distribution of the Package, while allowing -the users of the Package to use the Package in a variety of ways. - -This license establishes the terms under which the Package may be copied, -modified, distributed and/or redistributed. The intent is that ActiveState -Software Inc. ("ActiveState") maintain control over the development and -distribution of the Package, while allowing the users of the Package to use -the Package in a variety of ways. You are always permitted to make -arrangements wholly outside of this license directly with ActiveState. If -the terms of this license do not permit the full use that you propose to make -of the Package or if you require clarification regarding your particular -intended use of the Package, You should contact sales@activestate.com in -order to seek clarification or to request a different licensing arrangement. - -Definitions: - -"ActiveState" refers to ActiveState Software Inc., the copyright holder of -the Package. - -"Package" refers to those files, including, but not limited to, source code, -binary executables, images, and scripts, which are distributed by -ActiveState, and derivatives of that collection and/or those files. - -"You" and "your" means any person who copies, distributes, or modifies the -Package. - -Terms: - -1. You may use this Package for commercial or non-commercial purposes - without charge. - -2. You may make and give away verbatim copies of this Package for personal - use, or for use within your organization, provided that you duplicate all - of the original copyright notices and associated disclaimers. You may not - distribute copies of this Package, or copies of packages derived from - this Package, or cause by Your actions copies of this Package to be - distributed, to others outside your organization without specific prior - written permission from ActiveState (although you are encouraged to - direct them to sources from which they may obtain it for themselves). - -3. You may apply bug fixes, portability fixes, and other modifications - made available from ActiveState. A Package modified in such a way shall - still be covered by the terms of this license. - -4. In addition to the above allowed uses, this license does allow for the - redistribution of parts of the Package together with other software code - in a wrapped format, including but not limited to a format wrapped with - executable generators such as "py2app" or "py2exe". However, if you wish - to redistribute the complete Package either as a standalone distribution - or in a wrapped format, you must obtain written permission from - ActiveState. ActiveState may charge a fee for such license. To obtain - permission for redistribution or clarification regarding your particular - intended use of the Package, please contact us at: sales@ActiveState.com. - -5. ActiveState's name and trademarks may not be used to endorse or promote - packages derived from this Package without specific prior written - permission from ActiveState. - -6. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -7. This Package may be subject to export controls imposed by applicable - laws and regulations, which may prohibit or restrict the distribution, - exportation and re-exportation of the Package. You will comply with - all applicable export control laws, including such laws of the U.S., - Canada and the European Community, in effect from time to time, - including without limitation the Canadian Export and Import Permits - Act, the Canadian United Nations Act, and the U.S. Foreign Corrupt - Practices Act and with all export laws and restrictions and regulations - of the United States Department of Commerce or other United States, - European Community or other foreign agency or authority, and will not - distribute, export or re-export, or allow the distribution, export or - re-export, of the Package or any copy or adaptation of direct product - thereof, or any underlying technology, except in full compliance with - any and all such applicable laws, restrictions and regulations. You - represent and warrant that you are not located in, under the control - of, or a national or resident of, any restricted country (currently - including Myanmar [Burma], Belarus, Cuba, Libya, North Korea, Iran, - Iraq, Sudan, Syria, and Afghanistan) or of any designated entity or - person. - -The Package may contain software covered by other licenses and copyrights. - -- Copyright (c) 2001 Python Software Foundation. All Rights Reserved. -- Copyright (c) 2000 BeOpen.com. All Rights Reserved. -- Copyright (c) 1995-2001 Corporation for National Research Initiatives. All - Rights Reserved. -- Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All Rights - Reserved. - diff --git a/main/nzb.ico b/main/nzb.ico deleted file mode 100644 index c808b052b73afe4449c02a646c2e373749052ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96689 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 M^=4Gj1M>X;4|XZQyZ`_I diff --git a/main/osx/par2/LICENSE b/main/osx/par2/LICENSE deleted file mode 100644 index 1bed972..0000000 --- a/main/osx/par2/LICENSE +++ /dev/null @@ -1,10 +0,0 @@ -par2SL version 1.0, Copyright (C) 2003 Peter Brian Clements. -Adapted for use with MacPar deLuxe by Gerard Putter. - -This program is compatible with Mac OS X Snow Leopard or later. -It uses Grand Central Dispatch to optimize the speed and processor load. - -This is free software, and you are welcome to redistribute it and/or modify -it under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2 of the License, or (at your -option) any later version. See COPYING for details. \ No newline at end of file diff --git a/main/osx/par2/par2-classic b/main/osx/par2/par2-classic deleted file mode 100755 index c27ea45be0e08cabac3b7f985285610181e7b512..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955376 zcmeFae|%KM)jz(Qtgw--H%Qc|v4Blm5UNB`Srh9fVG~p$Q3#+Cg9<1X6=9b|C77_g zgz4ofTGHAUELPgmmR71jse&dX%?6>m{3t}A7!~cVo7$)pA|m;|-!u1aHi7o(^ZDm_ zeP1u5?7es9%$ak}oH=vm%-p$eoO`lE7CI_(}p_N#H99d?kUeB=D64zLLOK68K62UrFFA3H<*|0&kx9$0>8- zFM|M>{oAUXHe1MM$A32482qcKD9tbS-r>D%LK1TX{5O9r7r{?O#U$_4Nl8E~v!0;_ zb!EM0;a@*KYKR`^<#C zGz^)ZVp{<`LrPO5zg9VuD*0GZG0}IoZ}z=6J~UfW(-%j>!W7$8prK(-N^d$WWVnKk zhaZ~X!%SZsN0+A9hCxP0t9sLsgaSBb-d{0m-rWz*RH=P&WPLxy)_%3kmi1U~90P2& z=@y=fiaE1=Gw0nsXY`qIoP1sJaPr08I1mU*{INYVAfSqhvH6qo6Uh(&5iP8YQbH)7EdQPo633%+X7r@=rNIXppsqIGf5h?N!!s&oqctmL z`5(IXG(Hvr$8_LW*at^iPqip>-@W%%%&fY1=3HNe@9um0(s2kletwP3cBl`IBowAR z?tS>~ITa6)@4h%{j;Gi>DNyFWr^tShT-Lg$UOo8W!w>a5_m*kH=lyIxvvaU-S$}Lp z>#w5Xp84~w2VDEoG5S%v+*Fu^j9S2c-icm~tECerNq~QF z=KT40-#4>j-ppAb;!NdN5*^AX*PYA@WH4vGS)QPMajZnG=;F4O{}Bgt!arvw)MD1d zXTY%;ILOB4J~)t+_^YUx{UA9pQJh9cD{xRZTmJ(N%CQ0eDk^R)DV=cJB;2aMbW@I$ zpeaYn(vnF<#oUKyKZKrbHsqPg-!C!sPn6-KWovm~QSpHP!MW7tInu)P#ZdzqJ_3O? zpdq;&cye5X@@x~*uf~Y+H{NoyckGQ82SfVXRxo-D9K4ct!didiBa;uvuf^r$1^sQ$ zo^7+icG*gqp7b{e_xzVo`lLMT)^&b=+d}Ih>3R>duZu@1$4Oy$6IC0{`2gny`AidOq|MrjL)0zHQ_jLSYU9$bMuf=7g{fdc? z&iBoH@QU%X@0oY^yhpDnqN%TZc;5HsUs3e1{~;L9*$+Q-xf}qPdc|b4Hd5waQJ9nu zoWwsm8NY+l?%%^Nc%JW@aqox`mtS)^c%OaG8Olg*?Y+v-;?2K2$0~AKJ!z>^QBUtO zilxg7tU{;JW_$m%G7sPLz`d8}TP2YF)!$bV_(}p_N#MVbzymh%LEuPdpd(!`cZg}( zHlxHT#%DVMP4>q3Q|vpCD zEwtU=|4*DF#4i+Y#LvmQ!gp3+n?24Su}j;O5^V6t#niEA@A{?7dP!ePW-tX@22IlVFASMkUVH*;<1I^iY zT1ZAKBw=qSkttk;w-d#k>H;h;DlEwCju27UdxU7>ml48|t$SVF5#8GvYVe<%l#)Q% zDZED@k3jS2zO@?Os3|xO@X%k` zt;|Frib(f%Xq!B#!3Hh#7U5Bj9)J z5Q$Q!5jfO4b6iiR3n04339{$PI~VR|@vhX&5tFhVL};8sQ+SUCs*iU2y!f^G(I6cy zp4621lBt^C#v~1 zd~s^L2daN0P<`aA%KXjL46#kyRB~j`d!mfh1lrGoPJ(RQUBkwK%aI@UIvG*e9{VK{6}%|#(#xH~ ze^U3mL{>INHb?YU&&Iz*e8=+pt_Ke@eWmNs~-&8B`)9;0||$4T;3?FxrR zLIxx@)U7@FI3hOBXMhx=JgAqY8^%Ip1{z!xomWnuOn+gK!B%sFXzujt06M z3#J*RC*2Wk@!J=|#sG=JYxtK!S}uTfi_t{xh<;BZT>2^-3%ap+h8k3&KY&<76QH6~ z0TDW=1;2x7vRNq#0(L84qu&Eu2*cKAn4QDMhEr6lJM~eaV_NWGrWzzMv|W4h?fy2~ zD>C1Zq+Y0P;*b~oCDMbtea^h^Xu%PXC0q0|&_jkVQuu=rXss^gY1CJd{%O#s^5pHYA2&;=+L@~|#ES@9lk8A7{*w+SoY=P_S zTJYLbN{7(k*oh0Tj?2lpD?7R{*3TB`>h{euO6|JjE4TEhR<{VkQWPr26AemLL8F4~ z=nqj;mqH-IRzFAvISn9(P1T7g0KrK3L_)$(^EenGAPcjZQts3XVfnPsBqS?_4F7tf z2fpZ)03pQ;Sg-=;_fP?f9*-(1ym&62rS4<_GI&r6Rg+UGR>Qy9qB0KfWHjfPXx5u( z?oXikD^iGNJi>WOV1~beXxNf#Of<-o)MS`wW}9e+CeS=-qA4L7sV|1Vm1x)z%KMYE0%`HHq4GyAOpeu3e`IK0&LADPYTggqo7_t|um=OIMO6seq5N?^E z1((3r)Kb#m_W*enVkHIa3#)gzMMhC?gl{8c$AR;Sd*PDiPp3{(g<`SCHA-!g@=k_ zly86x+0D&%GA-c@z$JG>*_*Snqr;JInTe6SN7{JeOz+XK(EX5`2xaltZ1(d2g4)EY zIZWI*7rz)QIQtF@aagMQIw9*N0U6oRb$s$V?NdDi=Z?*tJ6>D-2;^3omOFKvwqzD=N!cCa#Jusb zseJN6DqBqBXNn(Ep(5P^OvzG_#t9M_gmgqQQMl8`jWp(`1U^4otNS~~Rc%utoMbJu3ipUaoFk3d5Ssr+4Z!72 zIcT>Ojlu{4Tru}4(#39QzN@%oe*xIVYCR1Vv7}w*5@9j5AYpYm^++sAwsL5 zec=Kp1_NRZl#>}I4-c_-^DIlq`Yfoy#Y&jaLvNy1dm)mc;H_|mWP{&esTVwX^EL23hb2hF$o@Xq|zWrLE zomm6PS@b)Bt{b%_qrgf6NAv+@pWEJrZtOu7HILh&1ul%;5OSEd+!jk^gDFSlLiY}T zM(jGEQ0CgSqvA88(5YX=s>T5mHS#C8x;Jt#^S`SGHKqoUnzK8$hc-faz2(bv>Fi>B zq5`8n8^;F#2ciy$%oY86I~y?rm}JjF9b1q>Y=>}-)%}aOD1JRN!B^%?#g~oL(3wH0 zqlDfAsVE+&(&?Z}DkVD@>50gfU2PfG>#F* zXfjqf#@*^WFK4%ID{zOH;{R7@w-&0UBG$7%$?f3dQsgi|O?&rW=H^ zh75`n%_Mv1GD51dApKE3l{@Y8Jp&&foBR0qdFhpB<<1|s0KqP&m^)5Xjqlw6T3xoZ z4$hj#M%lz3E%e7>NTWmSO&>}am z#i&1Q2N=Q3&m_m}CeZ>)Le4b||5{-a9)~Wikm3CRjBp}pI!{0P8w`UvvHuziQA|FU zoYX-0i;=CmH$_0-Ody4>%|cvbx1-AL>=3txgbTAIbp_}Iq%M`c4Ag~yl++zK0ULNN zz?nJF%)H;s+{#QH!>ZU3`-DR2QPj~`U)2qzs4LH;s7DTgMDNPe6xAiUA*s6n!7*ep z`5J__QirDQ$EgpCmjjPAQ(u(yL_01lkQqi#OD4%|!__(>K8I zK1=v#kyo?zI_CIR#dk32W1>K@{kTTse301V%hZ+b{yj)FJtB0HNqCBtlN?0`+9MxH z@xR4C4jxo#TJU=08{Va?Ae->t!E^l0_)e7{UBt8jJvdPRmj{s4FOd}c0&NoiOgR}j zyG=JEwgO`=IwL$9f3>ow(-QV{41E{)GQkGl0PVGiQ4oR8yC#{lxQT$Lsc56(S zy9wh#1155+%$#E8d@DJ}W9EE^Ij-a!$Nj3tLCpCyAtHa7J~uOT%s)Dz1X^$-RH#Q0 zZb?-8jEN%B1{6DzkxKpINt$Rv-^{Ep6Ir^E1zH%bx{?_?5*g9uc#gOC7zd7n zh6=g&CulmJF=R#Lo|WKBIDkl;#Bhv80)3?N4SYCHpS*2>*rNWFIXU!lCBZxTQbg8=x1AL_%-@-7)1<`1$Qx?_Aq7F~zt!1qLrKt#UBBy7t;`y>N)(s4>PCL_{H^ajQLFW-oXbCG{%U z1)npx8!J^1=V=CVhB;4I|5s4?+hqE)&72=H#}CORcy6ApB({(_cP8g7H*@Y`PClhw z;taU${_#px*OR;3vpAgVxK;X@pM_gn?8l!-Xg%K<=(71HEW8S{gg}?Qa)b#bqmHrp zfJ)G@-t4DG_oB8vpC;w}#iacJbN+-J)Q?#or|OW2*)QarIyO|*ODfCt{EPwl>Hb_j zAFHF7qG7y{Cg$-JWy?E_B00|Vn3r#wjr<5Jnv*OFhnX{lIoBi;*Jh3)*E1&zIXT;N z4sJ%2-FE!l@9j9-$QWqc5)nHZzZh(91hoVA6bHVriE-&-YKB&~1YotF|MjFJkpF8R$b}>yMPeFh6u=EiFxGX=z_A9akFKuC%lx zF|bJb)iC~|*`8;!^0Oea1fzqJ{j_B!*!#Nywhc_7%V8;t3U!^fjJ7n;m7+cMSKJ^R zL629eLhO=%CP}N))Zyodq#8(|JCA6=X91lgH)&Hp_!tIi3;n@_dvqyFjlh@@8-l?m zb}@cvb$v*tT`R{m`Urk{EaWMe9K*YkP#^3<;g9ibS;&(}P`IPlqELKQ>=x8!?E-jtP@98^V|BB1IYY z!1H7x!)UlL@QMrffZ`%|iiSNy)KfMuEuLY>7^!YCqb(gHZgYe^9wvl6W7TDxx{Ozs zQeIA5AKf0C0%Oy&K8y9&t50$L^;=*J{Bsl35W{=SD3_ac=#}r~d8KWnBBdr;N$jG10zUaN4$vbZtzXznF!AAkQq^N>65LKHIUVEqt??Do(9g;UBW z-ZQ+%rMiIUKO-r=OEj_g+@rZy%i2=VGxzb@6z}MRt4!hgtAz`F;8EggPF`P8 z>(zmdJW?TB&5_ML`q3YdBS-cmq($Fj1>RQHl?T_=+^GN!BaOPsNPV{(Q5`LKfgCbh z165AD*tWY9343>PKnET;FW6z!3h+R~7~zfR zcZ_j2`Ok@8-D4lb7dqmLQpfdN$iux)lVwQe&vR%g4DJxWhN@Y}O z&9CiFC z%s2(5Ylfq4U4*E+sv-iRvWi=7Qfyz#Dqb}uEqTy_tASMVu@dR1MDmfDsN}OU#RtS< zi;-l2aDZ=MLE_R{c*OOw?a$)_=G~)&ED7iRB`(j|%R7LqtlC192G1f?oi?G$CHFkx>%DobDopU9!n4F1Z(ZYIeK??35 zsPkC?Qt}9cR%?k z%y40Ug595-b8Mns?wYk+bmnYN?r&n-u8-E*H$&()%^S|oi3C1(`adcXsevX(?I~{Y z^Y4_ZxLlR8`X_g_apzifdf3}xJAvxG?V{{R+BQ*kC>cMu3YB$)8uTlDBk3lJPisHq z{uABX-uRL8s*H^+8)&o#_SkY-#Xi04NX~(@ZT>cKZ6NFjcsm@m*oOsc?B5h<&XR?X=-5M`YM$~t@x>g64;Ly@|5f2TMgJ~@8i_}ii^DoTzdtw)N_#R(9i zZEDm@qGJD5c_B$qQ+Hrr_huG8KC{EVE4AbZHfn*FRO|#QY1hlz2bFc^w256gpQJVV zUlm=)BZ1~jC8yKq!+3Iy98dPO%JBrx*UIM>^~~{Q6!ymGWf{6Z6Wazw*-?G6OD}Q; zPS`5H9_aE^UI>u}*+#ZN^QfE#8ft5OqfzV$G&ThGbi>E4e7E-V)l2NQ%D3TA8B?*J zP^!!CQ4jnVk%CdmY1viUjx4AP3dAMWKtWz|B_u^z*Xm*%S`JE-X>(pv;OPEtlaBiem2REF2}}GFnP) z45TIs^PoD|=|mIFWdj)1r~!J|cei~D9MRo($Spgg5f2_B0fxifF$(2IG{QYLLiV1- zP~uOoZKgEjwoIvleGJIo{w&Avx04Kry#;onm1B5&pE3Nm0LIuYH)#G0_kD0Zt#Dxs zS7r|MY(!GL*|IojA8w^ne4u&t6sR@Wz~0bwaBYsz+y@$c{$0CGwrjGzK>6B^rEFXn z7qnUVQ8=rHe;Ga4F?xzoF+>!fLER{r+HWQV$aS?I0Y)!{0E-g>bYqKFlBY{jHa7R` z*)NCwIY#+^;H)fXxAfqt81RI!w|kuHB|GMN{kDrp6YMEUFa1(752G6) zOP2Jv;kd)!P7h=G3^k8SM=aR=i70CjCC!yr%)bP*$jJ{}ZxJz_Z@8~YD((Xd-bt1Z z4OwcbW6(IKC_^w0IQHr#&BG7qZs4P~He|B98->$xaYU~gLI9db z>7oR`O{G=)J6R}oTR*uU5BSj@*U9!+fHXX-o-+|9J;k_vy2zh?x^>2$*Piz51z#%i zOaBLW)j!$Ni7^X;s6MGYfS!>nJJ3~CIXE#KD)~b6ISrO}X@j}cgz;w{s5C&N&u!$!jdPvjtmK}t--@RZIWtWXYK++Z*F1gpUdd+afI-HcI8 zT9c$)Zoe-YMdOXZt56PJg>vwM@h)_lqn2tJSHRnj!RrW&)e)G|gncV>(J6cS9lMP) zkTj@4;BlX=GOhOUxi*i@wjf>FYKX!TgmLrqKvStGZ`P}uU*!b&B>J^@Q@s7zFQsed zJ6qdSgizju?%|k}XrWDTDJ2f{%Y=YyP|h45&9`>oP@swYFcolL+V%eW)T4o>)WG{E zp?QI(g^W93KzynJ`q!_oY;6#_90>JuxO?9Q?*M+mWJfq(jeywCblxzGe;DU5&hy;` zInH66$2f;^9`&Kt{JG**pMF80v8vCg_ajsqXdc-!X!V+Z=SqG4_)1I|jf?h5#mD|7&p(ggHh5hY>Jy`qs zc)WOAxd+3Rk-wo4yE_Wf^}Dd)O3LS9RC`AC`x`UCOAcfOT3fzmKOXg=O||AbWd8-pE%vY@*PrRTkz8} z--UgV{#OS87*fJO?@y<(pXwNqDdsuFW3I+8Qp6qU;*N~Q_wicUcvFhQUxTplu9>~B zqWy>&99>0-+ai?C$>n8B@AUIV(b2*i9el6BQb2g7XHvaKJmS%@R6x2Q@Lb0Q9!s}t zOU8mDIFNuut}>`3X=u?V7pvur(mEdJ$IDY#z7if^9MAVLV z%=L|u06?@1k#7l%ABtf_?m8fnyNCoqZp;gO;E9Na5K;8c*lw?|F|k4VO3`$bt!-vY z_jFSZ7FUX0`eTlmhPpWvRlN!a@K{g(mGiMYylh}h=@ya3=wKrYZ`e3@eUV$8Zj9di z1g4G|qMsGwNSH4*K47HhOMYd05pIbO#(vp;U|Kj{F(xWp_QP=f#-q`UNwyTxm|K><@J4r8 zI$mEYciyBsejpq=81%xnxVYzpN=ru;L{k@}*Y1jDQ1H#;rN5o*pBW|XVxLhCd%IVZ z>=fm#@pDzS$*1t|#Vi-Ivx07LXyn!E{f(@rIgy9KOvSJvS=h-=Ea~^1rTZfYGNl@m zu1SIC1{y&h$bDj?_$1~96$t^>prI1>KM!Ufvm&FKlo)rNjBAPv)X`5I4#XX}$wOuB z44zSHdsUU`5ZOVdo!&rw@Kg3Ex)*P21o@7SXn|h4_h~_a2fn`fnZaQvBFc8guSMnN z_>V^F96^#Cn3&0yIxu`2b&x~ml2>R8_KGp?a+hzcIE*IMb2)|BDaZ(jjZj2VIHdFs zd~4+{Yr@3#iE=9jO8d7detXnR)o-l2Ux*}<)RIS3SFd$mCD&nRItXw{tqme-tCPF{4Rmj0~NlIQL*Jc_Qs+I{UyWj zwxQMNMME>N{68aE|iE2=sh5&A3H38F!qF_apz}6AZ=1BPaD+PwM?e{z=s>U5Tg$bQ+zNcu|m5 zM9&6l(FO{L>512^PAd+NKo7z6qk1PgN#m)Mc)FBtlLG{3OCCqlQ$I>}Vw90xlUqO8 zV~%u}WniwvPOJ~o?eIFKW#Fc@#8gAlfT_ZhSh0?;QwpJet@fTn{ew@d2n}?li|TdS zlPWTXS5UR!-_VQDXy`*>?|R&0Ubk9!HyGY#;a$@sU-9XPvUS}h8yZijW}tmECZ9C2 z>O|REv}@TKHhX`H-rKBuS5w-O0WJ70Ybb)--U?gb-DyCHkZCC0AdgxQ5nh`pUn>r% zX*|aaDPYEETu~3g$9mZYIh4>e!X9%S09cfL6m28C>!iA*FB;bEU620kUGMg$YoQ`3 z-3*FMmIhKHda{WM zOH%Td47RcSA#^XrAm5*q<)LrnpN7}lz`iE=Z?LkppiR=bHufdDxEkQB_Ji@jkbsWe z0WHCskiy%k-!x2YlQF}a0w=nC!}Y62!+|iS4YVi68@F9)&zAwmhO07`xZf5Le+O*3 zezVhE(xFduRDO4Uk=Qe$ywi8JDsP2rt?>iz-8P_nzE%3;M2DC13N*WpN2CDVWzl&X zdmek{d+?vp872KPzEW}s6I+BD&A|Xs2+ZY5+O)dmkpK1FH^39D+sLNyx8-!(TL$hA zV4Licmyr_2>*F4qZ8#0f5eN_6<&YdQ%iC+4RssOp5Pe`E6}g>Wigz#isdE}LXkp0MON~KqBJJz^2v7@K4X=NHwIzKL$z&z8y6YBf^9jhZ3-{FEM%Q1+RPC;(tk! zf9)y7P(E80RulwFe86;;q}c0>znBECmmC>h(nd(D5($6E-bxb%1t@WDkJX{pWckYY zk6di!L}khty?8W6L3Fg-DVdcIYJoa1t50$0aKOtpV-cuii#{RS&UlbMWt6>jcto@` zo*FEjpf=$@q)*AvCuEK&YrPmAMOnN1O@y!)OoqPdnW2OJX?oda-P>&6ZI57F)k1Fo zd5?Wik)<;PDolCi7H7;q7<)L;U*>L09 zerFY7|skS8rR7BPXo)d#{)C*%ly032X`oJf0~dDH-g?h;J5pta7y8ERly26sEby{3aAi zblxQLO@FjM)gcA?C<+{Uu~QT{^kb;Mx_=x!bL-vEQ&^wu6N-K$j)-3eiv2?vTqK2(G4qqJx2-AC+JzV_ zYFNm!cgf>LoqGqzi{rb+$xY9f9BBSG<`9ubuW>L;{`mv{vvUXdYCM`fm)be2DI#uD9)mwrwq}jWQ!@o#1z_# zME9o0{e6g8PBz2Ec_?O!4^4TzDd2S^%tiD=Y(%3!#mF#(iq~a|Rr6n?2Khwu z59n!r)1OIh|0P!YOA(1Fc`>d?BV@hgd$`7?<3}$Zscmw4MDa+yc$l_n6bD_s0->K_ zYTZ?|T~(Zy( z{X0kW&^mOo;$gC$Y+#2RMnIMr0l@BYY=Of%HzgJ;2T>^KkoLAXn|*0D%T6J7z{~fZ zdh84IH_1LwdCkQi45#QrtN1w`Etqs=dLpu~ z#w*BE+N846d(mDZG6z8aW}m4hb#F&u4d zav52JaVo`u)Ob`&K zT@Qp^X*dtal?u{4>BfpHKYnv-qjcR$g^kOI@)zWfJJ!BHD%?23SOaeWLrf=$9r~uEOji1-?r+dNLqMCozUWJfHq5X@Waz$Lv^8TW1#NB5*39mq zt@Sk8T6NDb(Dvf-v3d_}J5Qr+r|uaE+Wvsuu|2d!PNOZNdq#n_*Y-~nJ+$pTjkdkI zXEbQLbl~#u_0ZPVLz^8!YXen3c;wkHp)gjPLQyc;Suh5G(mVBc4&9g5$*sPJjAiyG z3m^R@+Qk&yo5%MFOmIATLr)DY>BI~JEVZU}>i%~7HqizehdMXhXtr!*fVXpKS%*EW zd)FEp#@zGGuOAbwjV)&xqpuv=Il$Xt$NX}Ou_e>sz9;vFRM~2{e#Rrj%}t{S9MT`ftLUVxp_DF+-ey(y^t6zJWa}ZFcND z*^I|lW5bo@=~wI%2V})LLqDY|?zHb0Zx~y~Ow1UY0+PaM#}T>vF6upjvYmFU8?>_` zW93D)A3onEK1J=Qdnh)t=-v(XU8rlBv-OKTf0s3*EYv-z-d3~T5C8J+(BAbPGV9&f z|JtUcdQS}POxwm<*Bil$>b~~Zqm2#c7!FKvqi~`-_3~yQ{FI%@zRL&>_(#Sa-o}QE zRL)V4004VchMxF_H%j6p-%(@PsIy}4|62D(8ynBURu^{JBa{nfb@u&w**cKC^17}U z{&^BhIzw9>&j`_O@__cpeig94+k0*_L9N9++}MgQ-Q zzsvw})y<9DGK`G#b0RryRGG~XO@aFagS(9m!*zB}Yfh&f%o-~P*B*PMPOm=H*faoj z<+SBQ?C5(DW5cLR?_TwwXlraiH2JEW&YV`LQm3)v0@s)izSOHXG;X^f3IAH)AN$d3 zYtDfG*KZxZS+CyN8-D}vPrv!qV`soWcgyRq>D6m`<8K50mPJ1ub_V<>zWw}1di9px z_}2q}Xw*OVo&o<^mn?Nqe7)#z1%7vAFX9BJ$>)O~AN)|SUe_CcJMecc{5ec-FZrOW zT`+UB{Le z9Cp0~+M3dI`<*jcQAU4RQ6#6!aHJYR`!hRTPswUhsGq1NVmSKg{+&j!U-i*{cANE( z0@MRt*Q?hW!T!6-gCV`Tjdi(HUCYA`e9>GjbLi~ha*p! z)sc3qx-F-mAsTh36?22`|o(Zu6ts3?MpuKx78t*j^yc0-Cn@wE;W zy}En;uB`s1a3Ku{sx`H21!VH{o+WYAD9#7jsTf0X)>GL^I!#3w##b8-O%%BT z&C_MDr^i3weib?5&w&+2gi-gWBVcH+oHTICRDDXR;kYu;bwlO1LdSd;8Dp=*Y;%o_ z!kI54+g|8rvsac{K{x}0ym$4h9ylSx_n6?r57U){PX#~55q<0Dn4W!ZFJF^$P)1Gg zUc?}6Q~tS)?`1Z&r>7xWl|Qht-6?OP&k>r=1aQ0F`BuwAeGnjr3ERxI+qsM zbvr6wniAONxY>V@@$K!Lt;_j1=HD}b&nR!vZ=I^=Pl7XsSrz0sHaipX-LcsjI@Zg$ z1eDK!zY8zdn66u+<+^1+3Q4Y8_VZlao5Ro7K41Q4Gzgjnaz~rs_usV$J!#n-a(?2BE{3et zM)SlA7nl8vtuozee9j8CKF3*o4MmWoUlRk(HS9dBf8YP%1R*gyFnRht80f>(WH1ou zs7dB2wkkPZQ}!p!hw%CZOoHKEQ`@lFov&~8po8T!oc!#!`dy`n_f@R-3~$4! zkVcuyz&6>UU2qxnb45K*B+%;#tjjYDME!Uc+-)zKG;s1%EDy+3eJkPYZ7?ue-Ix@4 z#$4zeTvhgP+9Ow>`vz?Zj}kECX$PV{4`t$48)L6bSMNm0iJY`9&gdgxPnRcX*o#V8 z_@5q>7u5(xG?0&kR#wlGVyzr&_KAE?DA z!&jA(k%O2lai#?|_@C|9idEc+FHP7kb+Vf^4}A(Rc7=;%{|am+;u{w9hZU>Bo#KKE zJ6E&9-SUNUyx5qh#4741$z=N?3KV=9jtgj~hbg%*Q?56fR`+(av3*f#Z8Muw4giLH zJwSxU0y2qbUE;+)xFnOEg~H+!yLkX#LjC_A`DcX*{_$2F+Q$@u|M5nf{3%S3QH^}~t zyg~l2MdxdLC2J|BVc4x*Fv%IXZ7N>fxIw(3Zzb_sT_(d^*cZX|JM<`H?Aht;Q`>$b zhe7+?Qe?{E8Nt>6YDBJWra+}8E6FjQsw5X{LkJDdJ;~FkuSvcqWwq;l+9p9>bO!dt~9n;uG_>`;lcy4zKwjo$2UWS z;|%ddTj!ydAe!G4eG+%>Cf^-^=q^CtID(f%a>w|tgR+kzDT09({eDxoKC%pi$&3{MHi$tJ+SC{d}aja@yfa|b&qH- zdXLDxT`umTbh;b0CC?&L@0YXN-QsgesqkE=PXFg{r|`1O?&F`pt)4Q5JAbf9h*i-# zVk5I>gRz|LqOOeyWU6{~L)0B&%K7enI41@BKlF3+-JkkD*IsNCb?wMu**EKbo@5AQwn{7jip`S|R}h;bPhq8!C_2Cf@!%WWF`>5YQ0aG+a?CXZM{V!h_k& zl`$m`%l zxOcy3hPz7()?gQ5&Th#c94BA|FN7^O<~xKRLT?66Tkg#cEtqOr_{HQGy&lW6 z8EScUJ@;bJ3~+fC8>dnvGZD4&Fc39>-mtfom}(n?EM2lz@6YOg0&{M53sO--5c9(J z3;REJm$hnv`Lz0A0vk(8TD2FSWXq&JDVcswwwr&gUf@W@3R+n+bfYzOGUDeB96hkq z`*)n`tq2cXm!dt%!!N_vYqkp)X;NY1PK0;1u?!E`ltv>rkIpm2)uc-An<5y<2!e z)SXy-59aKK^0LJt8?!z4%*Wy2>%b>Af;dH+_TpmMnv2<*|6Z#c&ym8+zbKvBN_;RK zyY1f11IxA)vNHb68Rqixnpwy+J+u+r*HLn;M4 z%oIx-o>^%Nu6Ccd+8ZboQDlf?&3-F&ew~l(w)zheP^t-KOk^}ebFU}O3#_E zSRG_CVaGLaL&_p7&arUl>+BQ7(|P*>yF~Fc-nPlxNxZ#;ja!K=71L6Sr@MqcqIr}))8I)UNQt!$GHdNLoBPLjW_lg22`Ore z&jaq*A5c@G0*^`N{bqs5xPnM2BB>urK8gB>^p{U67CmMwj5Nz$q$)!L21la~Rq_nw zXPM|&`muLucrgTD1VoyYIt#!Z3eAV?;{}qpqFjoZgjj-g1!9kgRUP(lY?X+ z&%?4@xFGNJasV{S-;2Im3{!?OX-Q?qVT~?afP}tv$ujRpe`l8YE3WME^c`o2su|)5 z`6|ehOope5uchp1q6dY=nIo);6Ao3Q2CAuUzmf+|^Ukwaaayb$nq0)i*_ z24&8(sMZ*fnuR#!-Ad9k7NF<8acu|Aby{IfmLM?_Tb7_yl?S z)gJ6I$iX|FUGekHew)*fUx-7((2 z-%Vpj*^{9CySu%6YpeIlm(qWPRXM!NC`$7ny0AyljuS!f7gmRYggv9w(vyYJkuS!07m5J1sdVH2E$%@3^x5nhknN# z42t57;Rmn_8LtBb@KFmMm5V5S&~OB3lyZ)7=iWQ_l3FCA`^*sXI}m#Q48A~svzep= zEd3LC{I36B+#a@%U9G7q>}{8I;We3YRU$IHm4k4nw&ZQd+Hm}V4k2ryU>}!t1apq* zhKjq%-*dUi@ZzxYesS6bv4y=6Ua%p`oYaK9QXTlsgEECrQ`})KumE(U({TfSJtx^B#DEuqccBKObg*_~r18XAjqjzT%EQ1#S+m&Icw%tl zM;F^8f%d_}BihnU6jc~&wxT>Ds`u&=xxR{6boqUVKI5JHE#Iu<@dU4rl#Ucw7b^8& zZvaP}?}JReWF_T&LlYe}-&FC5wD)`3i?9@g$uPHfq{8pgacUFSMFOXWU=OPAFTXt;5X7{}+~Erz!p%_?`+OBWH%n+GkAWuY?-k3grm z4agfbu(J%#Iy6o?9v8}va0V?4{e(m04$&I>HEw8f%Ysl*oW+P`A?z){W?Xl^!#59x zzcx&(t4~hnyzVY}y3MDJ%IodVrh(6Tq4r1bh8C=l&l27bv1KZEic<@IhEgGX5d^UY zY$}}M0AhiSzGXGt1)1FiSpn}Bxkd5d5*U+`%{cbMy9MXA{YZVDL`UcGT_T|G8r=tZaV%AUcNWG8_s zxT6e=sfJELQ*%$RIy>$WvB%x%8=`+5k&;2o8*w){#&rW=kjZzFI{oc>3=PqX9$AIiNA@e{jM=ui-l6RPy$Dg}97!a&rp zu}_0vC*kMl#dH2U_=SMii)SD(1i1~04^E(0;~n0A$|S*M0CRul?=&Vru;Uc!v++Ln zY4wkk^`o8g{=52522eka1n3#Yw%-6FkDa-w^&!|X?4Jz8UFNY>c&$pEl!Q~>IT3-* z$#)WCi{+UY?^@?nKq0;c#PJC9so2qT<^@-BqkjZ2&%Ee!*2OOrj=xzrFj{X%63zu~ zGRb-8k9J%9MWrI#XW64AIpm^8OD>g<2`w2U9}`;QkdFy1`4=j|x$0Jfe<&ZNmbBy6 zcuHEPI{7PgrT=L%-%Pk99XTE1hZ3SkD^7>-v076P@R>B(=+lvgj)|{L#XnAN_|r>Y zBk}jN`solE#NVr(-@P6kt$c6nXD}|w_F;Q$KXy*{_$Rd;9L?kwXKds@YLxH9E>W~2 zgX_@=wLsewMh#T~88v6@?+`$Rx!tMG>cZ(M?meQu8M#{MBD~X!{SerMe^ic>*306I z$Kezzddbm;fmei9nAon_WVaa@uu&rw=s*oBHDo5|Oc*8410q%zVMVJ{HSe7Tsypc% zBbWm19;7oHSH#GYh}{NMx~wuOaRL)JlFzX6r10@E9DXC; z9YXxLx$+@=(5tJW@;<#@3Iks0Lc|v7@3~VJjpk>2mN`rk_3~Cya*0XFCr^M9bHX`+ z_n>MIuKFrs(l^R>WIlRf>kc@x6ObIJZiW}PmS3F?dnriF9DashY+KQ7#;Uyl5us=K z3v6qNZL1_61LJgnF?2*4a7(E;dByN0LOh`?x*H)Ryij=`oE(`z-zppCMLiMYcwmeT zlu1NOfIo52OfY}NMli4R0y=Ri!Jh>{ZFK|G4pcU1OSrNdV=!0x6KN2KPhvzS z)#1;6`6`Lx@eg;Y;~#eL?Ah6XuibhGAe^0Pq1z=5?RYloN8|q0At;o4R%SyA`+~Nj zCW>b`4D}0%6|FM)Fv!GCd2fSz-#n+gNelb|5V}EGg+m+gi$|L<*5ht?+l8Of3#w-_ zW-oe(skxZPmuM6sdKCuvyI{IkTU&zA0QXNk4 zeN48LK;Z%r|3Xv0L1fNBE;re~0F?u=J+m2a<(#7}eh~bD;Keh^v%xa_nwr_|?s^Z8 z8#&if+a5MjjPR+6`S8hqBh8DE8`$auKD>K&4jyW^%5ek|(CSXHLFH%e2FPzhXu%Gq zY|Ui#8#C~W*Vii30;ejpCA%eT7IV~B8bUR!xITzqY=8>B#Qb`u=?2r__1ixk__;8a z@u8%_y^1%Yekp%fZQ-x68NXUx6-uI=-q7kEA`bNx0b?X;lBeEQ>Gi`{Yl!;EL&MV0 z3$-Qu7=pcV;2yWcr7gY^&y_B>!nrsbPwxGdm*I`CmdcCV^{gBGBXyq39U=`{olU~b z%d7;b4Z;6;I(Uu={zD1= zp#^>`!51^Fx0{nu=T;yTG$n z_dEobi+5cXe~I+i4=7c6grN>t2F9jjbBQXO0~y`|QL9|KY(rv=z6=WVjcmryG125Z zN3Z8SP0s}+88++}z^iX$uhUntyNTmz?`XlNm@3aA9w3!j3sy4)(~x|4#-r4yIIap& z^K*E_bLcK+Bg$3?(}dUMTNyL}0f832|AiAYqK{vNCF3?NbTt4mm@@zt{W+Kj)57%$ zIEH(jLCb*L#F6^VqXgdJz^PsG6JWX_dzu_a@U>ilbGXLH(;M*4JpD$G*yrBmy8>r=@r};&>96!hNQ~Fz zK)}YFAg4)h!m;a&zs-5EjH<~M8LZ4O(u&%)m6$lk={JrS5s7nO56+h{=OfNM3+H&F z$l-1T&K48rIQnJg`F??ham4u$aZ0V>;Q34!BqbFE=R`tPIx3-;PcTs#1gr|)o^5__ zEq_?-HFRTrEA=WIT8Ce@r`Wm%cls*%yOAQpyWRcx#t?ST7CO0gw$O!rv+&JDQ934W zq9{Wz%oIhLdSR9*%F+vmh@v5SVYVpB<_kte!!RYo`+IufD7@0A7mgN1qXS#neEqd0 z7cuy=m6dSc4ihmq(KWn}wYVG2#&^w*hCgi8*9f zynX?c-H|;V(uw{W_Z)&11@Zt{x`xs75sk##0HXX*lDGFVN?7dSK$K!M#m;?4&BE_qT^gWw&gf;Zj6e@O_krLa$<*1-4RsF<{(? z2e;DRy6bTt8^G4}<7~?DJPN}KE`YF-(e$1dPCbBKOHAfmrGC)xlO>uF2f@*u=fqeO?cNtPtBudtOXdAQ1`Bpo$Al#uAQSQ zm$L^{)$oO@n>eTB&AhgnI7mC z$i#I-!3hhlj)|trGDcfX@BA4ir(xD~HB-@O-y!^9 z_ZRBTUwOvJdbk>7)m-y9{s_ge{!EN6LlzmG#qa%ko8<@Ieo9N{U2pi0pak2I28vcm zO7BG?!*-*BllTJZ021&$l~QwEsjoUId6Jbp*Efq`AwH``n8$c~F-Q(gB=$VKUk$^+ z>njpS3aw1uuBH5LlDBJkdjoFqhJ&2z_e83do2cJ(GPGUMw12LovgR>+z7}L)HHolS z6M1+07AB>?pwhM13hdSwQpbY4B#7DsMB*E&ml6V8$@XsG`;8!S3E^-nn?MG??D#N& zxtvpt%otB{Tb_jZ+X{2dV=1@!)+eQFiS&7z+!-Bz2IGPJfK55Fu==2C9L5I-c?jW^ zkk6C1Qj}-QTPe!!hY27>c@(#lxsTT{OTULZoOlq9hlyAgeTzv=O5>V%|3_rMjDN4- zU%g8IEz@5Y;n-skM(_10bH5sPT8(nIXu&t2T1NGu_$_LGnW;li=5GUqUe;D~-CTT` z8_lJ@%mC|g$5D6rUhJjdaE*5qVTJjKP9V3+xwK#M15zu6{2B@r6DbRE+bVHJAAZwPHB^B-kDx9f|$h#?# zcQ;O{Pf|wYU9R$ymCn{1vnv6SP`bm=9@+SrIQ!LuO8(TpUnHeJl}LyF@x-!tUC;a8h~Fmn!$hOSZbKb?jC}?W!B2du zh@_hb5QF{ENRC~}wBD1W59TOvo))0KJSfM9vlKb858zisCW9?YFXQX8wpLzRqvVdVxRDBaNL4&X6Lb{aUi zPR;S@^ly~m9XOjDcb5F7Cv-{gRSRXG4Rx<}sY543XBvFb^}@eF3ywg=oTFe?@{P@wmH$3{l|yiT?3Rr6o}IJ0PQ14&5N2+h7<2Qz|mfY0(uyz^fp4Nw0mQI(watTp z+Pen56&~(;_$9I%U@VAiH=c36VWz%uC3&h&gd!2lO2<&mXDcKb^$Hc{_!5P<75jI% zLbGy?MZ*t3SIWS=Ne@=*ud^?@AraSj4NKJQ(aQm6hFsLH@90vbP~Tfkh==e@$Z5E$ z!!d9u7{k}9g>D8hRzO>&oQ;&)W@<*_z&NnBI>s5YMGr!;u{Q9Rb1c3d?tI|8_C+rw zX#1h*z#N?o+GO+y_0u9nJCH)!=2j}|cjGx$0lbC`3y4Hqf7y1(&I~qIp&kg2J2zzz zzOw~+GIDIJYDJz=T|=322MG0-6Q6YQyj6zXOhb6_n<(UU)@)|X)TUtr1K2M0sHmJ< z20_h4oI6myK5z;#=P6h~u!5(YkFsP~&V1Azr-o7&dgiIdT%?6Voc0k08jfvy+LJRN z%-IHKM%{3sQlYZQCz z4Z~Yxt5d)F0k;Z+vbAY2PTi+k`!Q1=j^G)D%hmh>Gtb&d`xoZXi~!TO%sgug?KX^YwXxeU|? zaf67xi7?aDIavvV*66>W*otvWH{$7#igAazYVvPXw4_-E5BwYKlAwV~z>2K$_4Ce! z*}&+ND>JpaeVh|-rJ7?wNNfz^Mv4Nqd&UlA!A432rGbnn1E~f7NcG}2rVS#rnI-DC z;1_4BN~>wvOKAzsuy2s2L|IV%Lfs&^j^n5b9al*N47~Zn=*%^*$v)yAsc&2c7~}CQ z8FfF2&mZIQj7L}dpVB4SfhLy;`_8|K%HNC5uFFuk)#)>51SEPgl2@nPdq5UK^&(=(JK2KX)6U^1)l`v3C( z$Z5TCvr93HSG6cYDHX-_8D*n|Xy78<+5n!z35q?h0Lm6E@bpyF4+JAT|WBzpL1NtVVhWzRAaXa;*g#~c`GkKx&X5or8z{o9&G?OfQ}vWS{e_xi`45Y5pU@wJ zg{=NUG-iL1eI(Fi^^r5{z5i!QgJaJ~f;_g`FF0^$OU^#-~n_jmC)%1V|K|R1-IJmPs{meQW45G4F2*vvN zqxapdM1Bx&_FMiaq+N&PSeS47_x{k>7!&*_68wnOI8zC}1ZfF>qPLH4H;Xmmn}de; zU8~qo7W*C2PE$RBoZhNeixjHfc+=G&;jyFm;vl`wCp_3?wUuohdz#HE%{W&+MuH}_ zaEWzQsG*0YcA!+BNyzl+N(^0)P||Wy4U%JAK|>4{Qn?zB+$$B~7sO zj_X1b*IaYwAg5rTv>7dIjx9dDqMzQOjQ9d( z^{n~7isaZmNV9@S=YXI-G)^~*UMh?BtpBqp_geI^nK>qS8U$KcBzqS#aQ8=|Hpc0SP zI!!JW?k#pG85qO%Ul|AU?e9bQ|3}^12S!z0d;fVEC1~^niHZ^xTWw8AZ$W8g4Ai_Z ziEmL9f~Z8jx0K?ey$_8uVq1g3$pEK^QF;q4w}lpOxh-vJp)CTnU;{}BDAn*%Mdd15 zv@-@3&K-2T ztO$%#5{9y%Mc3ujJl)p(K>$8AFXfS~*Yj|CDwNCox|>qJ%se(1;05AVTg&vz(%?De63O7M%qaH1PNn6)(`zF{8)krgQ{72l%qjpv#^y3Q27* z@*t zw`rLM?e8DgPsw9g)RJHw{wi+SRCl&VCKrbjIwi-(l^6)G3z*A(TCmLJw{x|smnO-h z;h!c=(mPoMK-J=hEq{?ZA#aw%MUpD-BUKU~Q?vec`fn#Kk9owvX|mcs{9O@kq?0X= zIS=IAZMP0N{GH9A31Z&Fkl##K_N0LBo>%}dX1`-3)tPj5oW^-}03H(mOukFkT<7bW zAJD2afi#~o8S7{QpuZ2OS~>pDH_gwj@kl$DfY;imvB5?mXxDrsrZbx;4$FeDT{&d6 zyV20~)4^H;@I2FDd-_wUccyN2-#e=qrMy`xMUpHhx}td=ubAk4r0n*+yB#@n^C!N6g+ zBZ#ssJWl_dXF0{c<`=IAomuSQyDEN}p7q_eToqjAd||;&FOC&y3MJ{fxey zaeVD>__Z}zL1)a!PgQ%FX2i&!;q-0cPRrUWY<2fx+7hcda1HZYzLHnL0$>r*l)4+og?xQZ~dl6uAwXd(P|CN98xuh2^Y@M1^gSh%WrlDdRqE zf|R^0I{75u#a%m64SXZu$`(Bxpr;+$JV0(*P^@G1v?*3 zrlm+fh5%oxu$~LS?_cm+1}+0mLg!On^(d~tAib6DW(>9VdrBpcnomhAe}fn%7j-I| zt75O2EnTozQkf;T%x=DOvYGlOKXoeuLDsm_$R2Y%CCEP^$RDsGvLlb9CSCN~2_G~Ys2cpk18%9_3(Qz{^3~X@b_^90Eh3nV zx%N4{J*^N}IkR0e)~v22S;Bq_k9r=_mUxe3m`$&4uBnvp<^Ek`$tvYUlkji*7$CI=5oz+J+Pya|0$5Z&Fa}+I30yi zn{A*79Fd#aL+9K8;2wbR=lh#L9gSO4zt<~!HBzX>`5PZ@FlRLGi@zc)YmmLtpA8RZ z%-a05wshpd?D>{KFi<`EDPgozgb7Kdn$1t{fNa_=gC#xzZEtDS_2tz+xZd)W9cDph7{%{+oK}9k%=SY@^Grwu zn;0x-w#WNTod+Rg@zbc9Qj$pg!R4VT_yO%;n}lnp#BPcbmPG?)EHu3RxYOSw4TcC_ z%Oa%ns07uC{~BuYMwfEKKxUSsu_m=~7{b!1b)Yba=gkN7928T*eHStxDV*E(maLt|JnJK8Is_oWD|$-o+>S@!^!=pXT# zmPxhJN`rPb?Y4JSW1=dZ2p729W(>=mzD7R_8R~s7IYhij_y3`c~Gd`W^;%vW*U49n>{HBjxYr8tcr$_uD+_iOW zmzg=^P1}>gy=f@G^SfXB;B!z>$51n^|Hjld0N(bvsyzV!u#9i0F2ErR`@lDsx2-Kd z$eV)M!fDgyM~CF6W!k%|x4oa?Z!BT9Q{0dNUpw9#H%e{RhRT(Uj3`$RZ4ffDey8-C z{msby85d{TJd-wsA4c=s#m>daR25y*My8K!7@e{)*e$yc40a&Ksme95#sFm!AjEX7!Uy-IkFevuJz z$){=M0E&KfSY^v9?<*C}{ic7bGPZL1!}J)h%+DgL_Ny&Y_xc;C$N4R!F7rQ^@aYrJ zLAD{f8FC4rsBilG%&#z9aaNy~{%1_@Ic#e6RhH2&=T%@^fGnToae5)o>^8~mHWr^8 zA@Mc8ZYKvbS^D62Rd*%Na=NVufU%bpO{-`Ow*DyaI8>QmOQFPE+yOJaf0DI~b3TCY{fS-uG(hSTr48uSc;_J_|U41B}JmP-s2gS$$#( zWsF5HjI@d^kM7RFWWE{egTK#`Ef@2sXO$|Ma}X-E=TzESXN2WX0{t3+w4X;k3w!3P znmL4_nwwK?fvM&^@~=jG+bs%JALDWQR-UEhh?>5hKUtkSZCCOjr=@HCmM-E|U~HnL zyVX*OU*8 ziMIp{FMY0|pS9`BA(pgE3~onyDj%8HkNU!Si#XHR;`pnN#h)zTs?3%SyHf05dmf`A zICouDl$^#L6OL3a@Gj`#j(b%eXZY@B?hl;qZVTU1a_@fc#$w_e91QPwH*%8Qud=43 zxt|}0&pqgW$!T8^`u-_6AEdwk?(Z!4i%tZ8eBUJ~kb|I8rJ5$2Qp`_VmAVzYDU}|n zu{*r{Fp{IO2kFZF^bqG4RkkF-df`P+lIC+u{TM` zO-#%;+qSqnVi%GVnJ|ludn@}j5A#SiO?zq8Z|`r$Q-eXY6p_Eq=^2`Je&xR7aY2VY z6dk0VVJ&#~n)A5VYN6cs$k*-14a=JEOuU+SOYuog+sEaM)i5Nn#c4B2ON3-R!|c85 zkUVi3%Q(#TWm;Ecp+>>@$a2*ckt&Z-_H z^$_V3hrgJ=p-1r#YOBLdrO{hj!+Ftnoz?kBxHrAg3WG%2Mj{-M_JA*LBFe}JdeqN; zbGwJyCv$EFLP83SR1l%sIr(ZV_UmkVC$Pw-ynIgENCA9bvy@GzEe#JvZyf%jP4VP4 zloc`*WP8a_l-|hPo&mkK(9H{k=Q%gZ;qM5bB81ZRUnz1Ze?M7z}ScS1t7 zX_d30iJ*(-c#~8fr2U!~j^ML-InaY376Op0awCfvd4aR~h1L)9=QKX&%K9w@L9iDK zw-H4~_`kFeVD+!4&tB6YZV5FEDs0%5uO(tMmOKGI8pN7JYL{kEixtwMQ?9P`c6KI` z)Su|cSv`JazQy9Ofpyijm9f&;YDN-nT;;^S!IZYPJeP-$zj}?VQm??h&}%9yY+A&; z4$PuYQ+rQzqTqNZfMZk!j$R-zp!QC%XQFc#no0H}T#X9g@*&y-uZJIE;KjhH6try@ zqE))q*&50&a31*>#334wmKf7VR?K9abU5HkGo-FaJL5rhn`1u=)~<0IgJsA$@Z*;g zZca?XYnu0XnD1*V`J=>Uk#4KK`kU#dDk)RU4K{g*K~=BJsyaqhuRd|rkEv=)Sz*f@ zKiE=FxyApcy67-OY<;l9`NEZoc1b9&tq?Shl|b#RKHEF5geBt=-^=F68ci>$rzr}b z<$k<3_Fd({KSfY6@cEPTHr2)Q z=hQ`g5CRBZ;Y|jD*h3k1Yw1mcjz)X&b>rU|^rr#PJJUc8r$1A_%s32y`MU(~AJ|=F z-~~3pJMrDtug4(2OTh7_T4LEWmK;NMCdFQ)G(Xao-#CXGg^5}iZ92rC41lewe=M>J zk_|_OIBm~Kvm(3h3N5*XEWAQeM-rxZ^{``+-N(pFuGkX^>2Th8ql8}cs~UjJXmsNl zn}GZx7}4iAeNyOS6tcwT8_ToSgI&9yX6>?GwS2klP}n#qSqw`QJ-1$w7wyM7xwK$T zer=86XZrwBY$9G_0A7Xfn)t**t-6Lq`F`SVf0#M-E1UMj_N8^(+*v)}aLHi<({fr0 zex?UYwLQ~v+_sWqu$MXc>600>c$xq6W>HN`i2}QC$E6B*x*|)2&8|qR`7ja4^zABT zNsBDWS~Byqm&}sfCG)A#qI(ly^PAcf#+KM6^PX1Q{KvDF%yCuU9_25Y)-D^%LVoSg ztk%oQ%zC+uQpY08i44bjiO$GcD+((ok~eGRKPZ;FRtCsr>BMX0-}|hU-&f|W6*X-H z@?*To^d5W2Yg%F#2eFqlysX7>-0(^?yv*V_Ohd;lj+HoUWdIcRvlhoEnaIrISVG5I z9A=vG8(XzLCYbf1<&`1sFVdx9Xd2!9EMgJ$9D3I0efosBBNQ@W3tA(}IM$_vc^z3)RJi^DH4s^9Mt5n3omhTn z$G0pqz785V7QvdZ)QoQ^OEznKI@VKnhUWeWIC96g_}#22{X65kNpM>BY{oady(%0j zjlG|qz>M;vGO~vsFKc=mONO@(ZQPBAbL@lkm!auQ**&=51^!?6$a}AzI0Zw<4%WEb zyCIan!EIPsSzqSN{&(ak$q03zI0l%ka4nYFh;42KzTzPDYXF2X_RQRP*frr7VjsBm zBc%sxig7Z+b-#kvZ0>q|fh2IlYpur_5`uM8?Mk zyU!C0&wa9|P#+DQ&T3^ULV4VeNoP$}0U_o#5={<0|3MG!X$_&*n^sOqw98`Nww#WJ zZ|NZr*ciTScXt)mkDOClR9$&P=-#m;_Eh@l&>WNzB5_Awwm~_KHX1q^hP~6>c(JY^ zkO!2^S-x^|AFBt`mX#XEmm1p~#r($~%hgE%)k6%&-^QVaL`EZ~tFfZi%v*lZTQT3)!L0(Pe4MUm_PMLQsvMwI!3=se@d_&QFGcehwG2i{D)(E%)C<+S`!_*2Uz8})jET^6 z`1e9>VSN$kT3LAW$T`IYm3M^hof1%*kMigrgQ2uD2copyCz`qk45eKMrM*x~%el=q z|0IV$`Q&pk)u1d?b)Y#|2N+u6gfWk-%-^^vbc$YvUuu3uRCffh{c6A9tFxwo1nPT+ zZ-M5XM(w&5WOb3qo_{?bpJ&F$-Q+^(K+P>@c*o3^R&@0hniXl00Xch7J()YyJtrEf zLM%C}87eUUtsa`cf82P7psI(ZOtlI`@w7(Lq>4&cG%imTUzWcu+_agMmS00e5%%Sd*QR~gCvTVHMc#btJpEz&28>~0FBjpwG=`ipwB zlvgZwk}_F7j;5T$$NQ^NL`p!Wv-7h%TjY0E?RWMWzq6x!rq>x|a&!JJvo($^PnMn| z=8<1{Ly;5L4OPge=OtKlcMU9ZQ)p0r<;|hy18Hdy?z6Oc5x6MSf5m~x0_qL?P9k=U`M{G|;?3li^nSIoG`-9RRrv4{KcC$FG3 z{ss|1K8&YBiVvyD9~mTB!Oqc-^NP{1t}C6kb&zwArsKS1Xb*wk^(j z2Ns6lP0FgIW^MRjtdbiTxo4~n<<`2jb!DA`!*wk-58%hIA6 z-aj<5C~U$6Bry-NeXQG2cuKPRf(@yY?7Yn$gubz1PXYHHB1t6oz5pyXMDYiuQXP2A^sPSR;ujA_7TSxcM} zTXD!X=q1(eg{RYO>?gHTh98R?AVYKz`$3lc=kR#upX5KJPGcT>J1nKoyN}(eF3mU+ z+!HbroA`nz)}YQa2=L5!^Y{0S1)VHD_qZs~kEdQ?FbhQNEpoS24}#g_C$W{m-UCXU#JFSE9!(Z zBn$1vmi6)z+XG9>c0xF3+fQtv#%Bj(GoaaVEH8e2^guZJKyYt;svU1*u)GfO2C`PT$-<5;t5vSxJ+D#hg;KlcVL1)fcS~V}jD%^M6 z$IOdOHWISCc_>_~fpoE5hCIzS(|Pzs1f(A+Tq&Qd{On&yly`2#(PB8VGdlK$ICOD@ zjfE7H#?9CJ$c!K5f_xk3ZEPiHOWVo3&7gTRCR(>?PGUgpSEOd{(;k=6Sf6HnA807FR;rC;&W-7F58Y&yM#-8y^taER%;WuRb!Rm8r7F@~VZ{`5yp6bl`l_s$^ zlr?{{55;>zPh7y8-{?;|g^cXmU;N9PL%-`S@DmF719K9J$uj&{&zaf!bA8w>#^{CS zf2s9UN-K@e*xWsyT|z`Mt6jg&7q-Gpd>&h z%gzrx)7n+oL6veh<9t!tM?Vt&y3xmUs|@|(blYwp{UU3yfr_#65^}m4sL|K{d-G4t z6V3m1n*2yH(HY6(*7hNIgWD<`JU&)W+58HdoLO)2eCR1_SpipWI8so)IlRdwE$r-5 z;GD_EyGtxJ;o&GL+K4OZJS6Re zX#4NSIHiK}lf}PuS%Q(B5)`;Jip7%tOJH=Uho+)r@p`J{>}IsN95iGwWLENMUjxYRI#6e)3^XV@ri0|lLb;YxaY?qVMP8+x8)G|TXKK^;(~Aj{*-{kaP};_d&+(>M zf03Lb9^9Gb$M_15h*$;vevfb24i8#?t0rZYXCwsGxvI(?Th&!xy5jpAM$Q0a>+M-V@Yp$@@-ZhRldzxz}Coa z@-^@cnGp=3I61Mxy=szsRmJf3#Fnl;34@|1+mHz^=j-E2;+-MVlLz_FFH-HiUWezC z#cby+Bh;0EGoQmB7xnfpyRoUTH znc;Qy3AY+=Fa3M3yJ{+glCGL6eQc^3&)13i+Et@~E@It6JglY`aY2HaLGca6j1?Rz z9wlt8njLMikomkV8{a^<&r3|%OWfMB;|nSWd3A|*BR(B?c9`vPp*JoRZ{Hl>e#}|k zO-=?bMcL!-E_+(wMLN?u4u^T!^-J?pFqkgb;6B6A#>97%W8bZbyCjb4}4cEnZWU z*g}iF4yu=Bw|Ibd)H>$-t}4@rJMrB)rGs>O(a;%gXpc6ths5P}O|)j@l$l2rmGkp3 z6`?f0w;yNrEpYkcq3^md3;Lih?@SHC@6K6$Moy10IrwS#HlkGO-)KWoql6F+J@$W5 z&fG=8C0U59NuBiGhBac#_p0UEVVM9UH!nO7xXn3;NW<6-hG1km%;x)tJfKruY%VnS zn$Mz=1wr8%d+#>GIEw6$3^?cjduYSnnbC#RL|QF1;GJxo;T57{hbbU;6=@EsAL%E8 zMx&wnqvov%u&U|`*vlp6-22NUr%`k@ke)q^&uAE^3m4LchLH#}zMh#m>+{_Uv_73j z(lijbg)xj$Dy9F(vz+3;_ls{a#WPn^U*mE5F`mKKO_0Em>a=gPhHv;)KQvYMYPg2e zs;YGOoZ`3n#f9C#QxCwtuHuI&&Z&_N01#Ujt2Xpz`1iV)x%V)LV)&&0Ij7N+O`{KH z-+TBJk9xM|lzZuX!?lR#X@>}56{y^IXmd%=kJPvIE?gJQje_t)Q`LFoE(3SQ$@@z}`lUU_?^KT$+ zKAOCkY&z{DFXr&b%8MGlS^vTKK3s(T&4M-#Rl~$r_s1?`@tEzNU4?^Q(h$171_sP$vgDAoSRelLuWD+-**|R7&(YBN;VexZAt^GDLy{&#~8!H z`5WFaofD5DcUtkLRzZ=UTQ+d4@zpfsJMy{asO0nOWhNiC)FE7dV+WOF0t0$ONSr81I-$3q9E_@LgUU$o^nI(c9j{MIkn0GD7M3NaoM#Xj_MO;{ zY*;hn?yFCO&t83X?8xM_XabT@98Gk+t;b_?3ux}*KN zYKK8)dEU5TGv8NskLgW?<3^aawUNca{xpL)Xr)y+?mecMKG+_Yj3B*k=HT(W=h`!o zIr@a<-b^9tLjj^T=)1T6<$nDV>dWiY>M!6YcRxRU7><}{chwtx%s`g4WA$#nB>sMW z^b*J9g^s^p;Iz#E%=r6-(bC+q(uc`Gj&tfQnQczhwzqV?UQt;;?7nAufzvoLeoA-x z353_5V+Z#$eKNSOQHUE)^3U$ozv?S`e$Ck+Coe9ii$mNO2Hq^=0+-Q`p~WGbMK^{h ze@ZjMx8w4Pm4E-C*xupWfeg>l^3Cqe6;9jd)$F{QZK>D?W*|IFe}-ph+8l%(5$hbx zPtFFDV~;s2p6vO(ukZWoLw>DL=!F6nAK}_!X9Yp!dE)TI8;4t^TU#2vATVE?#Waz) zT+?JG`ndU?O|=Y4f*j^Q9b{3mP@kaWOBB+4E0;Mt2;V+)B7f#ok}Am=)7*|ei`T6i z$-*vX3RCx}&51?kG8AARJsYs?)jyVEvaU+2QJR2PH&VmeehbLRuxu@KA0KAD-NQ!P zYaE0LR|zBQq=aos&elkiKiJ7%lPeMJ8fVd-^Rm_xQ4$}#yG~d8+XhfcabfC9u&eHH zR@_ircta^MP*CKRgZ!qE&WcUgOr15M8cws7r7wy|ScQtq{Fi_ofGw6f!sQgfovMOs zDtYpftp0Gf5FXEE>`0H_q%hR`?pa(f^JcdLs`s5v{^m!P4ZzQYhuk$Y&t3EU&@1kS zyCTa~QIcr(W>aG;f3-cAZs;?z)Tclw7bm&0ipgQOf_-UxaL~37m@95t1 z2M8irc2@ZLd+T(Rg4k8cAp)2Iafy#<6Pz)M6_>8UPdER;Sc=&KCAP$-;@G`jo5aeUsZ_O>mY#A2aI*`<<+g0)jIk=A{mP zLWYV7CLg!yTy(|MUrvMGgsNoSSk6$r+pojGS$X?dr|oeH`58}#;|{i4b;6a=^GVoK zgfTd^@t@dzRqETa>+JpRRxP+Xp%J{68sWAX^(tiID}jb2QD{vNIs5c1-Yy&)f~=}Jk57dfFgyO%y|<6Tq3 zw-0k>$uR+C@A}D1TXA7sY5tMp@oMaMA%oYQ=V%UM?eyt8;adHycYM=jdxyTl#D>XdcdgZvfa7|`@g{TN^m88C>(x<_>|a_yOhT*!(21` z41MchVSVvH4#%;x`$AhQ+85e?8E|sIdWob~9D63-vOI74>G0vvd9CowS>?3di=>+X zEh9A7`bdh=h8J7rwa8s1WNz#*njIyU0{-Nex`9#}i4~3Zs)MAv|iKr7l;GO{>B> z9l)6pq5gB#!L6-jU6-H5*5t*(63nOa>asw4lBcD8UP08=zSx4kCZvZ!E z2h&Te-D_DIZkgYFvok9!Y)0mBsdi{&$>7GNJvR*JEtz)8nA6^M-Ag-X0c?hLdY}pu zLcTAU7O_Jk^9DE0S0c9R(O1?udDE|;mvG}!XZ9bF!N=SH z5?eC3WvR=e#0b{1({0?{Q%08RDw^n-~S%yy(sIw%2?9>;=+6QvKnEOS`kLGWCn~8JUbgJ#A0q?TjdRgPsV4$z! zK6H`4f57`bMflXP`817g&j8q+p$2RRdvWVx*FouwNKIG@2>ZIz-Mi_(iZ8}6mR`M{r{z>}Jxz%S^1 z!`^Vi(&>YmVds0oktO$@&PgQ?hc+%5+_1C<9bt*ruyknSp1}=!xl&_CsDrK8X14`( za~E`$z6b#OqBoe&J%bzfrVk(!!kiS&8ZH^qFhA%pHZL4ghuL(2CM51+7lBk0^3$Uy zaO!4A9WwAy11W%jmfdNSQZa_l?{8QTD7D4W^5O0ByskpLmw49~hhLa}a`UIdo14qM z&+$5z=F0ny_=dvx4¥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 z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs> zC<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%I zfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs> zC<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%I zfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or 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%0DRl#2Z;aSG$)Hu0V9HM=J1 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 z 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 zbSL(b6}E#N*yVY`nrQ=4;*)+6$X8a>z4hZC`@Z(c4zyq`MkDFgwgC* zrJJA)y?(ap;#y8vi_z$yMLW}?X;@)1aj!Bvu$y}Jzj;37HfUk|*EE3xS{F`eq5a%- zR(Q!5T58KHz9?L>!WQbLk1%Y+5yg%--Mf+qA*&r$L5%;SX#_&svo7 zK>z^+5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ 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 diff --git a/main/osx/par2/par2-sl b/main/osx/par2/par2-sl deleted file mode 100755 index c03dc37db0f7fd736ef4178aab25711379007365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910112 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 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL 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
        r=hU=WsC8W73%6iAt|0FgVB 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 z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$F zi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n? zz!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$F zi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n? zz!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$F zi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n? zz!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(cd|33!4Q&`@Vs?fLM&8v;q-7yJ%ilDJ=PBl18%&uS1-r{wff49H9Pv1p5q4(}ZKl^NCQU!4vO>mJ#e&*o3w6BKPk!MqUearEr@#38&B<7z zd?H$lW;LbU;3#jXX=|%W&Q7)_n`$v2*7dztm=(g0Xzj>zs0YT~8qnGzGh<5g9B+}= zx`1R0i)?tZHkCjP^>dmi>+o}gb@gp6&233a≪8rjx;IqAJ*Ipd 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 diff --git a/main/osx/resources/Credits.rtf b/main/osx/resources/Credits.rtf deleted file mode 100755 index 0a7a358..0000000 --- a/main/osx/resources/Credits.rtf +++ /dev/null @@ -1,59 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf270 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\b\fs48 \cf0 SABnzbd+ v0.3.4 -\fs24 \ -\ -engineering: -\b0 \ - the SABnzbd+ team\ -\ - -\b engineering for OS X:\ - -\b0 osx.boiboite.net\ - br41n.com\ -\ - -\b built using:\ - -\b0 SABnzbd+: An improved version of the SABnzbd Usenet binary download engine\ - SABnzbd: The original, OS independant, SABnzbd package by tdian\ - NOVA & Plush themes\ - Split & Concat\ - py2app\ - python\ - Apple Developer Tools\ - & more -\b \ -\ -web adresses:\ - -\b0 www.sabnzbd.org\ - sourceforge.net/projects/sabnzbdplus\ - osx.boiboite.net\ - br41n.com -\b \ -\ -license: -\b0 \ -Copyright 2005 Gregor Kaufmann \ - 2007 - 2008 The ShyPike \ - 2007 - 2008 br41ncom \ -\ -This program is free software; you can redistribute it and/or\ -modify it under the terms of the GNU General Public License\ -as published by the Free Software Foundation; either version 2\ -of the License, or (at your option) any later version.\ -\ -This program is distributed in the hope that it will be useful,\ -but WITHOUT ANY WARRANTY; without even the implied warranty of\ -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\ -GNU General Public License for more details.\ -\ -You should have received a copy of the GNU General Public License\ -along with this program; if not, write to the Free Software\ -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.} \ No newline at end of file diff --git a/main/osx/resources/InfoPlist.strings b/main/osx/resources/InfoPlist.strings deleted file mode 100755 index 28faccd214ed4751849a68ed3092949efdf8f220..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmW-a%?g4*6h_b5rx;usJ$!X=G4tJf<_zEOo01SH7^o?^ zbLB%zBU{XoNixuz!R)+GZk_X%=ju^F&Fl} M_cm4<8%gG`KRntQL;wH) diff --git a/main/osx/resources/MainMenu.nib/classes.nib b/main/osx/resources/MainMenu.nib/classes.nib deleted file mode 100755 index a48bc27..0000000 --- a/main/osx/resources/MainMenu.nib/classes.nib +++ /dev/null @@ -1,18 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - { - ACTIONS = {shutdownSABnzbd = id; }; - CLASS = SABnzbdController; - LANGUAGE = ObjC; - SUPERCLASS = NSObject; - }, - { - CLASS = SABnzbdDelegate; - LANGUAGE = ObjC; - OUTLETS = {mainWindow = id; }; - SUPERCLASS = NSObject; - } - ); - IBVersion = 1; -} \ No newline at end of file diff --git a/main/osx/resources/MainMenu.nib/info.nib b/main/osx/resources/MainMenu.nib/info.nib deleted file mode 100755 index 9f8fed4..0000000 --- a/main/osx/resources/MainMenu.nib/info.nib +++ /dev/null @@ -1,21 +0,0 @@ - - - - - IBDocumentLocation - 53 83 620 303 0 0 1024 746 - IBEditorPositions - - 29 - 233 546 207 44 0 0 1024 746 - - IBFramework Version - 446.1 - IBOpenObjects - - 29 - - IBSystem Version - 8S165 - - diff --git a/main/osx/resources/MainMenu.nib/objects.nib b/main/osx/resources/MainMenu.nib/objects.nib deleted file mode 100755 index 06bc903b196c2dff427a9c83a69521421fa5e95f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1882 zcmb7FO>7%Q6rOFI)NPy}D3o3*`GTs7Q#qAfu#+mP4{?A!a6v+Adx*F7?wa+O&|J`j z@d^ovAIl!q#uZUipp2zRi4jva2`m zd+&SSd-FCjOl}l$u0&jHSajeK(-Mra(X^hLoXuRrS#rf721Va97ESAc1y!nn%T&2U z94jzhtg#ab2^~x8Gi73A3RowuY0qg28GhH8_S{HXPZo;>GiwmjvAv4NH1jM6uf93NATiH;XUUIQT)} zlx56eiIG(TgQ+~uUbhVQy608c=llye0kAxoG2g~Hofrgr9vdx{GZq+=Sy}P~2nZ71 zx`o)yMwiDDum!H|rJzL9HZ5~O<SM8y&vu^VK%@ zo4i%$o%LpvuS2J_OCH~VH}d%EL%s*`BbVUucpZ$fX|sSYl;X4VHg-L}{~hm0$nzd= z!TV?*$(0p@aSit$Ca{hMWxol6&6h%Ofz((s_H1iW~yhO zmqL$i=`kohLc^|tlx=B(q3VM$_LS0OwoD3`^h)y6o%%imi{=g+4JB8aarobu&C8;F zPW-$eexs-=?oqTTet1^=LecwT^)>MaMGaBc#C?iB62DUPf!LwwW3f-Qh}fJEt@FZv zLF`fVp14cVhoW;${7%tLu|6jrT@bqzaj`ZiHXQLM)rQ0tMem9S6xGGbGh&+}Pb{Bl bQf;h>svz2UYI4fSI>xkXSa{x%KZL&kTdzf; diff --git a/main/osx/resources/nzbfile.icns b/main/osx/resources/nzbfile.icns deleted file mode 100644 index 389c99019264ce42c6465011605e064b9f0e92f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114788 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
        7V@w}^&_f6a_Ji!Bx}V6CK4J& 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 UND;VZWoobSbpjDYKS4nL7xr>8a{vGU diff --git a/main/osx/resources/sab_clicked.png b/main/osx/resources/sab_clicked.png deleted file mode 100644 index 41b29df34784beed4a20fe52df1d79787db64400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek+5P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-3Q0skRCwC7lQByJQ4oaZoo8bcOTj|KLhuKq4Pu!>L=dsC5`TeRs`S>DHn!Rb z7XAjoP752W6b2L#LbUj1ZSLSaa)JpiEW?{Ovu}6drHIh9k!gnbVGjE|?67`i37V7M|o88#Y>D~5Z+ zt)UeWs$M3;nc>~ASu?f`L&Jq3FZoF?oY)>24vX`yVPxpnwN10_7ad#{csxn>+j2UF iXG6D1lVj1Y(PKR+P8^0000KLZ*U+XT^3wxIiMvWi1f9K)kHE3B*g9 z&w+TuDJu{yAX#-QRS?g>lQZtk%5B95ipc56ivNatqG|?=-TOcrG2=(g8u7{ zH*^fW({ORy@m>}YfatrcFHcSYAYvADKZW7TFhuv@eK!o>PQvj06uKUvwd$+~jnBIX z(T3l8olW=p2cYME&pJN01FXVA+196xhmh z&FuV~Y1RB%P?xsj@xM~urUI~Pax18mSCly`rSB!og{m{2Fej496dwQ%b80VDf=2)V z03c&XQcVB=ZI%E4bBq80_A&qffkFTPaBTnp<6i&(F?av~6LkA4Dh&Vt0e4A6K~#9! zoRTqUT2T~+zk9vU-lr0@kq3fwpZ~u~MEKuQiL(Q^3wk5q7LYV@7C6f1 z^Sw+ab01fvlu|(ugtOV~0vM)|>#plwRw|V%*L5dxOlvLE>2zy69^U~wX|i5>o;Rvi ztFMxPh^T(Q{}K2Zzt{1eD2fn~e9B-QhM|q``-Hrz+i~)}h&UpmQmu}nOfnq&0U6U%g)c>-+wbwT&^?*4m9A2)@lDy#&|>hQ=6awOXG<#H77E7z}c?TJ6{vBft;f z{Ui2LYkgWSmq)!`?`=}Lh^ThEy;&-ierc`G0WUe+04KRzZqn&=4n!n7Cz@unxmPF@ zZh$l3#WEAWSZn=mxBFQ{)*6k*p|#crz9tM_Si6qn{PsNW${6zp*k3iqcfj{W-|;zR cmw^uh0F-=mpP>P{_5c6?07*qoM6N<$f+>)T;Q#;t diff --git a/main/osx/resources/sab_pause.png b/main/osx/resources/sab_pause.png deleted file mode 100755 index e40dd7e24c291ccacac5e8269d573af88bda5ec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmV-71jze|P)KLZ*U+XT^3wxIiMvWi1f9K)kHE3B*g9 z&w+TuDJu{yAX#-QRS?g>lQZtk%5B95ipc56ivNatqG|?=-TOcrG2=(g8u7{ zH*^fW({ORy@m>}YfatrcFHcSYAYvADKZW7TFhuv@eK!o>PQvj06uKUvwd$+~jnBIX z(T3l8olW=p2cYME&pJN01FXVA+196xhmh z&FuV~Y1RB%P?xsj@xM~urUI~Pax18mSCly`rSB!og{m{2Fej496dwQ%b80VDf=2)V z03c&XQcVB=ZI%E4bBq80_A&qffkFTPaBTnp<6i&(F?av~6LkA4Dh&Vt0w_sDK~#9! zoKrz-6G0SyGqYxQGa(H%k(>krNqcG#1ffX0D0uKxAyn`xNGM2QF;r<7G*DQKNQfs7 zg4clg1A+^sxrF8*l1dPJ>NeGoR@`oqO=iYZLTu85J{Xwy9^dyqKHfu8O8DPElL=$Y zr>ZK|G;NBp-|x#&mA&E{(W*aiRz z0DwpRU@#cdb^SrW@9&D?a1R4CM-QZI5R5M=ns%2lrcO;Jgj{GH9P~WS3yiVqS=q&6 z@gX53;W&;m1;!Xlj1cG;>$AKOLIg0zl2SVMV=P+;ApxQDtrr4>5Py}%lR4)SNl6eP zXcpF|X$VP)zwYmk`^pQ(ZfUx{crg-*4L#3iw_2SUScwp_eX4r!DrSv)g2)wbmX@x?e4coTg9Jkxc=GN97 zDdm*(Xf(P!;C%7N(a~E)QJ&;-xorXfP^na$L?TfS&dtpsfVCaVa*pHiy~EvI0RSYQ z&#w?do@0QIos$zYo6Xt)0A$2mtJS)xRBA^82tTEdZ!Roc35Ubq)-suO&+{@v&ff)E zt(Q*=g{n3QH&mWapWpTqO>hnlXhB$t-%pStelQ`ddvdEWc1X?o`##zf#!sdPhA x)z#mQ^PyU;ekzyC{9i5(8-_tA7wK&L834TO+tk#9daD2c002ovPDHLkV1nLD;6nfa diff --git a/main/osx/resources/sabnzbdplus.icns b/main/osx/resources/sabnzbdplus.icns deleted file mode 100644 index 63c21c692a4465b3d613a71c7068a8204d03f935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117188 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 fU6l$;|7A)+G2Vqk*3*ow1yuL> Dir : $DIR_RESOURCES" - -if [ -d $DIR_TMP ]; then - `rm -rf $DIR_TMP` - echo " tmp directory deleted" -fi - -echo "2/5 > Exporting last svn revision..." -svn export http://svn2.assembla.com/svn/SABnzbd/branches/sabnzbd-0.5.x/ $DIR_TMP>/dev/null -SVN_REV=`svn info http://svn2.assembla.com/svn/SABnzbd/branches/sabnzbd-0.5.x/ | awk '$1 == "Revision:" {print $2}'` -echo " done." - -echo "3/5 > Cleaning up for OSX binary..." -cd $DIR_TMP -unzip cherrypy*.zip>/dev/null -rm -rf *.txt *.ico *.nsi *.zip *.tmpl PKG-INFO setup.py package.py Sample-*>/dev/null -rm -rd win>/dev/null -mv osx osx_tmp>/dev/null -mv osx_tmp/osx osx>/dev/null -mv osx_tmp/resources/* ./>/dev/null -rm -rf osx_tmp>/dev/null - -sed -e "s/trunk/0.5.0 (rev$SVN_REV)/g" -e "s/unknown/$SVN_REV/g" sabnzbd/version.py>sabnzbd/version_tmp.py -mv -f sabnzbd/version_tmp.py sabnzbd/version.py>/dev/null -defaults write $DIR_RESOURCES/../Info CFBundleShortVersionString -string "0.5.0 (rev$SVN_REV)" -defaults write $DIR_RESOURCES/../Info CFBundleVersion -string "0.5.0 (rev$SVN_REV)" - -echo " done." - -echo "4/5 > Installing update..." -cd .. -rm -rd sabnzbd interfaces/Concept interfaces/Classic interfaces/Mobile interfaces/Plush interfaces/smpl interfaces/wizard language osx MainMenu.nib cherrypy licenses>/dev/null -mv -f interfaces interfaces_tmp>/dev/null -mv -f tmp/* ./>/dev/null -cp -r interfaces_tmp/* interfaces/>/dev/null -rm -rf *tmp>/dev/null -echo " done." - -echo "5/5 > Update to rev $SVN_REV finished - Don't forget to restart SABnzbd !" -echo "if you have any problem http://forums.sabnzbd.org" \ No newline at end of file diff --git a/main/osx/unrar/unrar b/main/osx/unrar/unrar deleted file mode 100755 index 33dc8495e901d52d80941966b84de8164e465674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440184 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 -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -from distutils.core import setup - -import glob -import sys -import os -import platform -import tarfile -import re -import subprocess -import shutil -try: - import py2exe -except ImportError: - py2exe = None -try: - import py2app - from setuptools import setup -except ImportError: - py2app = None - - -VERSION_FILE = 'sabnzbd/version.py' -VERSION_FILEAPP = 'osx/resources/InfoPlist.strings' - -def DeleteFiles(name): - ''' Delete one file or set of files from wild-card spec ''' - for f in glob.glob(name): - try: - os.remove(f) - except: - print "Cannot remove file %s" % f - exit(1) - -def CheckPath(name): - if os.name == 'nt': - sep = ';' - ext = '.exe' - else: - sep = ':' - ext = '' - - for path in os.environ['PATH'].split(sep): - full = os.path.join(path, name+ext) - if os.path.exists(full): - return name+ext - print "Sorry, cannot find %s%s in the path" % (name, ext) - return None - - -def PatchVersion(name): - """ Patch in the SVN baseline number, but only when this is - an unmodified checkout - """ - try: - pipe = subprocess.Popen(SvnVersion, shell=True, stdout=subprocess.PIPE).stdout - svn = pipe.read().strip(' \t\n\r') - pipe.close() - except: - pass - - if not svn: - print "WARNING: Cannot run %s" % SvnVersion - svn = 'unknown' - - if not (svn and svn.isdigit()): - svn = 'unknown' - - try: - ver = open(VERSION_FILE, 'rb') - text = ver.read() - ver.close() - except: - print "WARNING: cannot patch " + VERSION_FILE - return - - regex = re.compile(r'__baseline__\s+=\s+"\w*"') - text = re.sub(r'__baseline__\s*=\s*"[^"]*"', '__baseline__ = "%s"' % svn, text) - text = re.sub(r'__version__\s*=\s*"[^"]*"', '__version__ = "%s"' % name, text) - try: - ver = open(VERSION_FILE, 'wb') - ver.write(text) - ver.close() - except: - print "WARNING: cannot patch " + VERSION_FILE - -def PairList(src): - """ Given a list of files and dirnames, - return a list of (destn-dir, sourcelist) tuples. - A file returns (path, [name]) - A dir returns for its root and each of its subdirs - (path, ) - Always return paths with Unix slashes. - Skip all SVN elements, .bak .pyc .pyo and *.~* - """ - lst = [] - for item in src: - if item.endswith('/'): - for root, dirs, files in os.walk(item.rstrip('/\\')): - path = root.replace('\\', '/') - if path.find('.svn') < 0 and path.find('_svn') < 0 : - flist = [] - for file in files: - if not (file.endswith('.bak') or file.endswith('.pyc') or file.endswith('.pyo') or '~' in file): - flist.append(os.path.join(root, file).replace('\\','/')) - if flist: - lst.append((path, flist)) - else: - path, name = os.path.split(item) - items = [] - items.append(name) - lst.append((path, items)) - return lst - - -def CreateTar(folder, fname, release): - """ Create tar.gz file for source distro """ - tar = tarfile.open(fname, "w:gz") - - for root, dirs, files in os.walk(folder): - for _file in files: - uroot = root.replace('\\','/') - if (uroot.find('/win') < 0) and (uroot.find('licenses/Python') < 0): - path = os.path.join(root, _file) - fpath = path.replace('srcdist\\', release+'/').replace('\\', '/') - tarinfo = tar.gettarinfo(path, fpath) - tarinfo.uid = 0 - tarinfo.gid = 0 - if _file in ('SABnzbd.py', 'Sample-PostProc.sh'): # One day add: 'setup.py' - tarinfo.mode = 0755 - else: - tarinfo.mode = 0644 - f= open(path, "rb") - tar.addfile(tarinfo, f) - f.close() - tar.close() - -def Dos2Unix(name): - """ Read file, remove \r and write back """ - base, ext = os.path.splitext(name) - if ext.lower() not in ('.py', '.txt', '.css', '.js', '.tmpl', '.sh', '.cmd'): - return - - print name - try: - f = open(name, 'rb') - data = f.read() - f.close() - except: - print "File %s does not exist" % name - exit(1) - data = data.replace('\r', '') - try: - f = open(name, 'wb') - f.write(data) - f.close() - except: - print "Cannot write to file %s" % name - exit(1) - - -def Unix2Dos(name): - """ Read file, remove \r, replace \n by \r\n and write back """ - base, ext = os.path.splitext(name) - if ext.lower() not in ('.py', '.txt', '.css', '.js', '.tmpl', '.sh', '.cmd'): - return - - print name - try: - f = open(name, 'rb') - data = f.read() - f.close() - except: - print "File %s does not exist" % name - exit(1) - data = data.replace('\r', '') - data = data.replace('\n', '\r\n') - try: - f = open(name, 'wb') - f.write(data) - f.close() - except: - print "Cannot write to file %s" % name - exit(1) - - -def rename_file(folder, old, new): - try: - oldpath = "%s/%s" % (folder, old) - newpath = "%s/%s" % (folder, new) - if os.path.exists(newpath): - os.remove(newpath) - os.rename(oldpath, newpath) - except WindowsError: - print "Cannot create %s" % newpath - exit(1) - - -print sys.argv[0] - -#OSX if svnversion not installed install SCPlugin and execute these commands -#sudo cp /Library/Contextual\ Menu\ Items/SCFinderPlugin.plugin/Contents/Resources/SCPluginUIDaemon.app/Contents/lib/lib* /usr/lib -#sudo cp /Library/Contextual\ Menu\ Items/SCFinderPlugin.plugin/Contents/Resources/SCPluginUIDaemon.app/Contents/bin/svnversion /usr/bin - -SvnVersion = CheckPath('svnversion') -SvnRevert = CheckPath('svn') -ZipCmd = CheckPath('zip') -UnZipCmd = CheckPath('unzip') -if os.name == 'nt': - NSIS = CheckPath('makensis') -else: - NSIS = '-' - -if not (SvnVersion and SvnRevert and ZipCmd and UnZipCmd and NSIS): - exit(1) - -SvnRevertApp = SvnRevert + ' revert ' -SvnUpdateApp = SvnRevert + ' update ' -SvnRevert = SvnRevert + ' revert ' + VERSION_FILE - -if len(sys.argv) < 2: - target = None -else: - target = sys.argv[1] - -if target not in ('source', 'binary', 'installer', 'app'): - print 'Usage: package.py binary|source|app' - exit(1) - -# Derive release name from path -base, release = os.path.split(os.getcwd()) - -prod = 'SABnzbd-' + release -Win32ServiceName = 'SABnzbd-service.exe' -Win32ConsoleName = 'SABnzbd-console.exe' -Win32WindowName = 'SABnzbd.exe' -Win32TempName = 'SABnzbd-windows.exe' - -fileIns = prod + '-win32-setup.exe' -fileBin = prod + '-win32-bin.zip' -fileSrc = prod + '-src.tar.gz' -fileDmg = prod + '-osx.dmg' -fileOSr = prod + '-osx-src.tar.gz' -fileImg = prod + '.sparseimage' - - -PatchVersion(release) - - -# List of data elements, directories end with a '/' -data = [ 'README.txt', - 'INSTALL.txt', - 'GPL2.txt', - 'GPL3.txt', - 'CHANGELOG.txt', - 'COPYRIGHT.txt', - 'LICENSE.txt', - 'ISSUES.txt', - 'nzb.ico', - 'Sample-PostProc.cmd', - 'Sample-PostProc.sh', - 'PKG-INFO', - 'licenses/', - 'language/', - 'interfaces/Classic/', - 'interfaces/smpl/', - 'interfaces/Plush/', - 'interfaces/Mobile/', - 'interfaces/wizard/', - 'win/par2/', - 'win/unzip/', - 'win/unrar/' - ] - -options = dict( - name = 'SABnzbd', - version = release, - url = 'http://sourceforge.net/projects/sabnzbdplus', - author = 'The SABnzbd-Team', - author_email = 'team@sabnzbd.org', - #description = 'SABnzbd ' + str(sabnzbd.__version__), - scripts = ['SABnzbd.py'], # One day, add 'setup.py' - packages = ['sabnzbd', 'sabnzbd.utils'], - platforms = ['posix'], - license = 'GNU General Public License 2 (GPL2) or later', - data_files = PairList(data) - -) - - -if target == 'app': - if not platform.system() == 'Darwin': - print "Sorry, only works on Apple OSX!" - os.system(SvnRevert) - exit(1) - - #Create sparseimage from template - os.system("unzip sabnzbd-template.sparseimage.zip") - os.rename('sabnzbd-template.sparseimage', fileImg) - - #mount sparseimage - os.system("hdiutil mount %s" % (fileImg)) - - # Unpack cherrypy - os.system("unzip -o cherrypy.zip") - - import sabnzbd - options['description'] = 'SABnzbd ' + str(sabnzbd.__version__) - - #remove prototype and iphone interfaces - os.system("rm -rf interfaces/prototype>/dev/null") - os.system("rm -rf interfaces/Concept>/dev/null") - os.system("rm -rf interfaces/iphone>/dev/null") - - #build SABnzbd.py - sys.argv[1] = 'py2app' - - APP = ['SABnzbd.py'] - DATA_FILES = ['interfaces','language',('',glob.glob("osx/resources/*"))] - NZBFILE = dict( - CFBundleTypeExtensions = [ "nzb","zip","rar" ], - CFBundleTypeIconFile = 'nzbfile.icns', - CFBundleTypeMIMETypes = [ "text/nzb" ], - CFBundleTypeName = 'NZB File', - CFBundleTypeRole = 'Viewer', - LSTypeIsPackage = 0, - NSPersistentStoreTypeKey = 'Binary', - ) - OPTIONS = {'argv_emulation': True, 'iconfile': 'osx/resources/sabnzbdplus.icns','plist': { - 'NSUIElement':1, - #'CFBundleName':'SABnzbd+', - 'CFBundleShortVersionString':release, - 'NSHumanReadableCopyright':'The SABnzbd-Team', - 'CFBundleIdentifier':'org.sabnzbd.team', - 'CFBundleDocumentTypes':[NZBFILE] - }} - - setup( - app=APP, - data_files=DATA_FILES, - options={'py2app': OPTIONS }, - setup_requires=['py2app'], - ) - - #copy unrar & par2 binary to avoid striping - os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx>/dev/null") - os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx/par2>/dev/null") - os.system("cp -pR osx/par2/ dist/SABnzbd.app/Contents/Resources/osx/par2>/dev/null") - os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx/unrar>/dev/null") - os.system("cp -pR osx/unrar/ dist/SABnzbd.app/Contents/Resources/osx/unrar>/dev/null") - os.system("chmod +x dist/SABnzbd.app/Contents/Resources/update>/dev/null") - os.system("find dist/SABnzbd.app -name .svn | xargs rm -rf") - - #copy builded app to mounted sparseimage - os.system("cp -r dist/SABnzbd.app /Volumes/SABnzbd/>/dev/null") - - #cleanup src dir - os.system("rm -rf dist/>/dev/null") - os.system("rm -rf build/>/dev/null") - os.system("find ./ -name *.pyc | xargs rm") - os.system("rm -rf NSIS_Installer.nsi") - os.system("rm -rf win/") - os.system("rm -rf cherrypy*.zip") - - #Create src tar.gz - os.system("tar -czf %s --exclude \".svn\" --exclude \"sab*.zip\" --exclude \"SAB*.tar.gz\" --exclude \"*.sparseimage\" ./>/dev/null" % (fileOSr) ) - - #Copy src tar.gz to mounted sparseimage - os.system("cp %s /Volumes/SABnzbd/Sources/>/dev/null" % (fileOSr)) - - #Hide dock icon for the app - #os.system("defaults write /Volumes/SABnzbd/SABnzbd.app/Contents/Info LSUIElement 1") - - #Wait for enter from user - #For manually arrange icon position in mounted Volume... - #wait = raw_input ("Arrange Icons in DMG and then press Enter to Finalize") - - #Unmount sparseimage - os.system("hdiutil eject /Volumes/SABnzbd/>/dev/null") - os.system("sleep 5") - #Convert sparseimage to read only compressed dmg - os.system("hdiutil convert %s -format UDBZ -o %s>/dev/null" % (fileImg,fileDmg)) - #Remove sparseimage - os.system("rm %s>/dev/null" % (fileImg)) - - #os.system(SvnRevert) - os.system(SvnRevertApp + "NSIS_Installer.nsi") - os.system(SvnRevertApp + VERSION_FILEAPP) - os.system(SvnRevertApp + VERSION_FILE) - os.system(SvnUpdateApp) - -elif target in ('binary', 'installer'): - if not py2exe: - print "Sorry, only works on Windows!" - os.system(SvnRevert) - exit(1) - - # Unpack cherrypy - os.system("unzip -o cherrypy.zip") - - import sabnzbd - options['description'] = 'SABnzbd ' + str(sabnzbd.__version__) - - sys.argv[1] = 'py2exe' - program = [ {'script' : 'SABnzbd.py', 'icon_resources' : [(0, "sabnzbd.ico")] } ] - options['options'] = {"py2exe": - { - "bundle_files": 3, - "packages": "email,xml,Cheetah", - "excludes": ["pywin", "pywin.debugger", "pywin.debugger.dbgcon", "pywin.dialogs", - "pywin.dialogs.list", "Tkconstants", "Tkinter", "tcl"], - "optimize": 2, - "compressed": 0 - } - } - options['zipfile'] = 'lib/sabnzbd.zip' - - - ############################ - # Generate the console-app - options['console'] = program - setup(**options) - rename_file('dist', Win32WindowName, Win32ConsoleName) - - - # Make sure that the root files are DOS format - for file in options['data_files'][0][1]: - Unix2Dos("dist/%s" % file) - DeleteFiles('dist/Sample-PostProc.sh') - DeleteFiles('dist/PKG-INFO') - - DeleteFiles('*.ini') - - ############################ - # Generate the windowed-app - options['windows'] = program - del options['data_files'] - del options['console'] - setup(**options) - rename_file('dist', Win32WindowName, Win32TempName) - - - ############################ - # Generate the service-app - options['service'] = [{'modules':["SABnzbd"], 'cmdline_style':'custom'}] - del options['windows'] - setup(**options) - rename_file('dist', Win32WindowName, Win32ServiceName) - - # Give the Windows app its proper name - rename_file('dist', Win32TempName, Win32WindowName) - - - ############################ - if target == 'installer': - - os.system('makensis.exe /v3 /DSAB_PRODUCT=%s /DSAB_FILE=%s NSIS_Installer.nsi' % \ - (release, fileIns)) - - DeleteFiles(fileBin) - os.rename('dist', prod) - os.system('zip -9 -r -X %s %s' % (fileBin, prod)) - os.rename(prod, 'dist') - - os.system(SvnRevert) - -else: - # Prepare Source distribution package. - # Make sure all source files are Unix format - import shutil - - root = 'srcdist' - root = os.path.normpath(os.path.abspath(root)) - if not os.path.exists(root): - os.mkdir(root) - - # Copy the data files - for set in options['data_files']: - dest, src = set - ndir = root + '/' + dest - ndir = os.path.normpath(os.path.abspath(ndir)) - if not os.path.exists(ndir): - os.makedirs(ndir) - for file in src: - shutil.copy2(file, ndir) - Dos2Unix(ndir + '/' + os.path.basename(file)) - - # Copy the script files - for name in options['scripts']: - file = os.path.normpath(os.path.abspath(name)) - shutil.copy2(file, root) - base = os.path.basename(file) - fullname = os.path.normpath(os.path.abspath(root + '/' + base)) - Dos2Unix(fullname) - - # Copy all content of the packages (but skip backups and pre-compiled stuff) - for unit in options['packages']: - unitpath = unit.replace('.','/') - dest = os.path.normpath(os.path.abspath(root + '/' + unitpath)) - if not os.path.exists(dest): - os.makedirs(dest) - for name in glob.glob("%s/*.*" % unitpath): - file = os.path.normpath(os.path.abspath(name)) - front, ext = os.path.splitext(file) - base = os.path.basename(file) - fullname = os.path.normpath(os.path.abspath(dest + '/' + base)) - if (ext.lower() not in ('.pyc', '.pyo', '.bak')) and '~' not in ext: - shutil.copy2(file, dest) - Dos2Unix(fullname) - - # Install CherryPy - os.chdir(root) - os.system("unzip -o ../cherrypy.zip") - os.chdir('..') - - # Prepare the TAR.GZ pacakge - CreateTar('srcdist', fileSrc, prod) - - os.system(SvnRevert) - diff --git a/main/sabnzbd-template.sparseimage.zip b/main/sabnzbd-template.sparseimage.zip deleted file mode 100644 index beb4b10b4dbd92fcd99caea7acb35c717acf9eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466185 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

        14f7t$mj|$RVR(SqutM87p^A|+0 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 -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -from sabnzbd.version import __version__, __baseline__ -__configversion__ = 18 -__queueversion__ = 8 - -import os -import logging -import datetime -import tempfile -import cPickle -import zipfile -import glob -import gzip -import subprocess -import time -import cherrypy -from threading import RLock, Lock, Condition, Thread -from sabnzbd.lang import T, Ta - -#------------------------------------------------------------------------ -# Determine platform flags - -WIN32 = DARWIN = DARWIN_INTEL = POSIX = FOUNDATION = WIN64 = False -KERNEL32 = None - -if os.name == 'nt': - WIN32 = True - try: - import ctypes - KERNEL32 = ctypes.windll.LoadLibrary("Kernel32.dll") - except: - pass -elif os.name == 'posix': - ORG_UMASK = os.umask(18) - os.umask(ORG_UMASK) - POSIX = True - import platform - if platform.system().lower() == 'darwin': - DARWIN = True - try: - import Foundation - FOUNDATION = True - except: - pass - if platform.machine() == 'i386': - DARWIN_INTEL = True - -#------------------------------------------------------------------------ - -import sabnzbd.nzbqueue as nzbqueue -from sabnzbd.postproc import PostProcessor -import sabnzbd.downloader as downloader -from sabnzbd.assembler import Assembler -from sabnzbd.newzbin import Bookmarks, MSGIDGrabber -import sabnzbd.misc as misc -from sabnzbd.dirscanner import DirScanner, ProcessArchiveFile, ProcessSingleFile -from sabnzbd.urlgrabber import URLGrabber -import sabnzbd.scheduler as scheduler -import sabnzbd.rss as rss -import sabnzbd.emailer as emailer -from sabnzbd.articlecache import ArticleCache -import sabnzbd.newsunpack -import sabnzbd.codecs as codecs -import sabnzbd.config as config -from sabnzbd.bpsmeter import BPSMeter -import sabnzbd.cfg as cfg -import sabnzbd.database -import sabnzbd.lang as lang -from sabnzbd.decorators import * -from sabnzbd.constants import * - -LINUX_POWER = misc.HAVE_DBUS - -START = datetime.datetime.now() - -MY_NAME = None -MY_FULLNAME = None -NEW_VERSION = None -DIR_HOME = None -DIR_APPDATA = None -DIR_LCLDATA = None -DIR_PROG = None -DIR_INTERFACES = None -DIR_LANGUAGE = None - -QUEUECOMPLETE = None #stores the nice name of the action -QUEUECOMPLETEACTION = None #stores the name of the function to be called -QUEUECOMPLETEARG = None #stores an extra arguments that need to be passed -QUEUECOMPLETEACTION_GO = False # Booleen value whether to run an action or not at the queue end. - -DEBUG_DELAY = 0 -DAEMON = None - -LOGFILE = None -WEBLOGFILE = None -LOGHANDLER = None -GUIHANDLER = None -AMBI_LOCALHOST = False -WIN_SERVICE = None # Instance of our Win32 Service Class - -WEB_DIR = None -WEB_DIR2 = None -WIZARD_DIR = None -WEB_COLOR = None -WEB_COLOR2 = None -SABSTOP = False -RESTART_REQ = False -OSX_ICON = 1 -PAUSED_ALL = False -OLD_QUEUE = False - -__INITIALIZED__ = False -__SHUTTING_DOWN__ = False - - -################################################################################ -# Signal Handler # -################################################################################ -def sig_handler(signum = None, frame = None): - global SABSTOP - if sabnzbd.WIN32 and type(signum) != type(None) and DAEMON and signum==5: - # Ignore the "logoff" event when running as a Win32 daemon - return True - if type(signum) != type(None): - logging.warning(Ta('warn-signal@1'), signum) - try: - save_state() - finally: - SABSTOP = True - os._exit(0) - - -################################################################################ -# Initializing # -################################################################################ - -INIT_LOCK = Lock() - -def connect_db(thread_index): - # Create a connection and store it in the current thread - cherrypy.thread_data.history_db = sabnzbd.database.get_history_handle() - - -@synchronized(INIT_LOCK) -def initialize(pause_downloader = False, clean_up = False, evalSched=False): - global __INITIALIZED__, __SHUTTING_DOWN__,\ - LOGFILE, WEBLOGFILE, LOGHANDLER, GUIHANDLER, AMBI_LOCALHOST, WAITEXIT, \ - DEBUG_DELAY, \ - DAEMON, MY_NAME, MY_FULLNAME, NEW_VERSION, \ - DIR_HOME, DIR_APPDATA, DIR_LCLDATA, DIR_PROG , DIR_INTERFACES, \ - DARWIN, RESTART_REQ, OSX_ICON, OLD_QUEUE - - if __INITIALIZED__: - return False - - __SHUTTING_DOWN__ = False - - ### Set global database connection for Web-UI threads - cherrypy.engine.subscribe('start_thread', connect_db) - - ### Clean the cache folder, if requested - if clean_up: - xlist= glob.glob(cfg.cache_dir.get_path() + '/*') - for x in xlist: - os.remove(x) - - ### If dirscan_dir cannot be created, set a proper value anyway. - ### Maybe it's a network path that's temporarily missing. - path = cfg.dirscan_dir.get_path() - if not os.path.exists(path): - sabnzbd.misc.create_real_path(cfg.dirscan_dir.ident(), '', path, False) - - ### Set call backs for Config items - cfg.cache_limit.callback(new_limit) - cfg.cherryhost.callback(guard_restart) - cfg.cherryport.callback(guard_restart) - cfg.web_dir.callback(guard_restart) - cfg.web_dir2.callback(guard_restart) - cfg.web_color.callback(guard_restart) - cfg.web_color2.callback(guard_restart) - cfg.log_dir.callback(guard_restart) - cfg.cache_dir.callback(guard_restart) - cfg.https_port.callback(guard_restart) - cfg.https_cert.callback(guard_restart) - cfg.https_key.callback(guard_restart) - cfg.enable_https.callback(guard_restart) - cfg.bandwidth_limit.callback(guard_speedlimit) - cfg.top_only.callback(guard_top_only) - cfg.pause_on_post_processing.callback(guard_pause_on_pp) - - ### Set cache limit - ArticleCache.do.new_limit(cfg.cache_limit.get_int(), cfg.debug_delay()) - - ### Set language files - lang.install_language(DIR_LANGUAGE, cfg.language()) - - ### Check for old queue (when a new queue is not present) - if not os.path.exists(os.path.join(cfg.cache_dir.get_path(), QUEUE_FILE_NAME)): - OLD_QUEUE = bool(glob.glob(os.path.join(cfg.cache_dir.get_path(), QUEUE_FILE_TMPL % '?'))) - - ### - ### Initialize threads - ### - - Bookmarks() - rss.init() - scheduler.init() - - bytes = load_data(BYTES_FILE_NAME, remove = False, do_pickle = False) - try: - bytes = int(bytes) - BPSMeter.do.bytes_sum = bytes - except: - BPSMeter.do.reset() - - nzbqueue.init() - - PostProcessor() - - Assembler() - - downloader.init(pause_downloader) - - DirScanner() - - MSGIDGrabber() - - URLGrabber() - - if evalSched: - scheduler.analyse(pause_downloader) - - logging.info('All processes started') - RESTART_REQ = False - __INITIALIZED__ = True - return True - - -@synchronized(INIT_LOCK) -def start(): - global __INITIALIZED__ - - if __INITIALIZED__: - logging.debug('Starting postprocessor') - PostProcessor.do.start() - - logging.debug('Starting assembler') - Assembler.do.start() - - logging.debug('Starting downloader') - downloader.start() - - scheduler.start() - - logging.debug('Starting dirscanner') - DirScanner.do.start() - - MSGIDGrabber.do.start() - - logging.debug('Starting urlgrabber') - URLGrabber.do.start() - - -@synchronized(INIT_LOCK) -def halt(): - global __INITIALIZED__, __SHUTTING_DOWN__ - - if __INITIALIZED__: - logging.info('SABnzbd shutting down...') - __SHUTTING_DOWN__ = True - - rss.stop() - - Bookmarks.do.save() - - logging.debug('Stopping URLGrabber') - URLGrabber.do.stop() - try: - URLGrabber.do.join() - except: - pass - - logging.debug('Stopping Newzbin-Grabber') - MSGIDGrabber.do.stop() - try: - MSGIDGrabber.do.join() - except: - pass - - logging.debug('Stopping dirscanner') - DirScanner.do.stop() - try: - DirScanner.do.join() - except: - pass - - - ## Stop Required Objects ## - logging.debug('Stopping downloader') - downloader.stop() - - logging.debug('Stopping assembler') - Assembler.do.stop() - try: - Assembler.do.join() - except: - pass - - logging.debug('Stopping postprocessor') - PostProcessor.do.stop() - try: - PostProcessor.do.join() - except: - pass - - ## Save State ## - save_state() - - # The Scheduler cannot be stopped when the stop was scheduled. - # Since all warm-restarts have been removed, it's not longer - # needed to stop the scheduler. - # We must tell the scheduler to deactivate. - scheduler.abort() - - logging.info('All processes stopped') - - __INITIALIZED__ = False - - - -################################################################################ -## Misc Wrappers ## -################################################################################ - -def new_limit(): - """ Callback for article cache changes """ - ArticleCache.do.new_limit(cfg.cache_limit.get_int()) - -def guard_restart(): - """ Callback for config options requiring a restart """ - global RESTART_REQ - sabnzbd.RESTART_REQ = True - -def guard_speedlimit(): - """ Callback for change of bandwidth_limit, sets actual speed """ - downloader.limit_speed(cfg.bandwidth_limit()) - -def guard_top_only(): - """ Callback for change of top_only option """ - nzbqueue.set_top_only(cfg.top_only()) - -def guard_pause_on_pp(): - """ Callback for change of pause-download-on-pp """ - if cfg.pause_on_post_processing(): - pass # Not safe to idle downloader, because we don't know - # if post-processing is active now - else: - downloader.unidle_downloader() - -def add_msgid(msgid, pp=None, script=None, cat=None, priority=None, nzbname=None): - - if pp and pp=="-1": pp = None - if script and script.lower()=='default': script = None - if cat and cat.lower()=='default': cat = None - - if cfg.newzbin_username() and cfg.newzbin_password(): - logging.info('Fetching msgid %s from www.newzbin.com', msgid) - msg = T('fetchingNewzbin@1') % msgid - - future_nzo = nzbqueue.generate_future(msg, pp, script, cat=cat, url=msgid, priority=priority, nzbname=nzbname) - - MSGIDGrabber.do.grab(msgid, future_nzo) - else: - logging.error(Ta('error-fetchNewzbin@1'), msgid) - - -def add_url(url, pp=None, script=None, cat=None, priority=None, nzbname=None): - if 'http' not in url: - return - if pp and pp=="-1": pp = None - if script and script.lower()=='default': script = None - if cat and cat.lower()=='default': cat = None - if 'nzbindex.nl/' in url or 'nzbindex.com/' in url or 'nzbclub.com/' in url: - nzbname = '' - logging.info('Fetching %s', url) - msg = T('fetchNZB@1') % url - future_nzo = nzbqueue.generate_future(msg, pp, script, cat, url=url, priority=priority, nzbname=nzbname) - URLGrabber.do.add(url, future_nzo) - - -def save_state(): - ArticleCache.do.flush_articles() - nzbqueue.save() - save_data(str(BPSMeter.do.get_sum()), BYTES_FILE_NAME, do_pickle = False) - rss.save() - Bookmarks.do.save() - DirScanner.do.save() - PostProcessor.do.save() - -def pause_all(): - global PAUSED_ALL - PAUSED_ALL = True - sabnzbd.downloader.pause_downloader() - logging.debug('PAUSED_ALL active') - -def unpause_all(): - global PAUSED_ALL - PAUSED_ALL = False - sabnzbd.downloader.resume_downloader() - logging.debug('PAUSED_ALL inactive') - - -################################################################################ -## NZB_LOCK Methods ## -################################################################################ -NZB_LOCK = Lock() - -@synchronized(NZB_LOCK) -def backup_exists(filename): - """ Return True if backup exists and no_dupes is set - """ - path = cfg.nzb_backup_dir.get_path() - return path and sabnzbd.cfg.no_dupes() and \ - os.path.exists(os.path.join(path, filename+'.gz')) - -@synchronized(NZB_LOCK) -def backup_nzb(filename, data): - """ Backup NZB file - """ - if cfg.nzb_backup_dir.get_path(): - backup_name = filename + '.gz' - - # Need to go to the backup folder to - # prevent the pathname being embedded in the GZ file - here = os.getcwd() - os.chdir(cfg.nzb_backup_dir.get_path()) - - logging.info("Backing up %s", backup_name) - try: - _f = gzip.GzipFile(backup_name, 'wb') - _f.write(data) - _f.flush() - _f.close() - except: - logging.error("Saving %s to %s failed", backup_name, cfg.nzb_backup_dir.get_path()) - logging.debug("Traceback: ", exc_info = True) - - os.chdir(here) - - -################################################################################ -## CV synchronized (notifies downloader) ## -################################################################################ -@synchronized_CV -def add_nzbfile(nzbfile, pp=None, script=None, cat=None, priority=NORMAL_PRIORITY, nzbname=None): - if pp and pp=="-1": pp = None - if script and script.lower()=='default': script = None - if cat and cat.lower()=='default': cat = None - - # Consider reception of Latin-1 names for non-Windows platforms - # When an OSX/Unix server receives a file from Windows platform - filename = codecs.special_fixer(nzbfile.filename) - - if not sabnzbd.WIN32: - # If windows client sends file to Unix server backslashed may - # be included, so convert these - filename = filename.replace('\\', '/') - - filename = os.path.basename(filename) - root, ext = os.path.splitext(filename) - - logging.info('Adding %s', filename) - - try: - f, path = tempfile.mkstemp(suffix=ext, text=False) - os.write(f, nzbfile.value) - os.close(f) - except: - logging.error(Ta('error-tempFile@1'), filename) - logging.debug("Traceback: ", exc_info = True) - - if ext.lower() in ('.zip', '.rar'): - ProcessArchiveFile(filename, path, pp, script, cat, priority=priority) - else: - ProcessSingleFile(filename, path, pp, script, cat, priority=priority, nzbname=nzbname) - - -################################################################################ -## Unsynchronized methods ## -################################################################################ -def enable_server(server): - try: - config.get_config('servers', server).enable.set(1) - except: - logging.warning(Ta('warn-noServer@1'), server) - return - config.save_config() - downloader.update_server(server, server) - - -def disable_server(server): - """ Disable server """ - try: - config.get_config('servers', server).enable.set(0) - except: - logging.warning(Ta('warn-noServer@1'), server) - return - config.save_config() - downloader.update_server(server, server) - - -def system_shutdown(): - logging.info("Performing system shutdown") - - Thread(target=halt).start() - while __INITIALIZED__: - time.sleep(1.0) - - if sabnzbd.WIN32: - misc.win_shutdown() - elif DARWIN: - misc.osx_shutdown() - else: - misc.linux_shutdown() - - -def system_hibernate(): - logging.info("Performing system hybernation") - if sabnzbd.WIN32: - misc.win_hibernate() - elif DARWIN: - misc.osx_shutdown() - else: - misc.linux_hibernate() - - -def system_standby(): - logging.info("Performing system standby") - if sabnzbd.WIN32: - misc.win_standby() - elif DARWIN: - misc.osx_standby() - else: - misc.linux_standby() - - -def shutdown_program(): - logging.info("Performing sabnzbd shutdown") - Thread(target=halt).start() - while __INITIALIZED__: - time.sleep(1.0) - os._exit(0) - - -def restart_program(): - """ Restart program (used by scheduler) """ - logging.info("Performing sabnzbd restart") - sabnzbd.halt() - while __INITIALIZED__: - time.sleep(1.0) - cherrypy.engine.restart() - - -def change_queue_complete_action(action): - """ - Action or script to be performed once the queue has been completed - Scripts are prefixed with 'script_' - """ - global QUEUECOMPLETE, QUEUECOMPLETEACTION, QUEUECOMPLETEARG - - _action = None - _argument = None - if 'script_' in action: - #all scripts are labeled script_xxx - _action = run_script - _argument = action.replace('script_', '') - elif action == 'shutdown_pc': - _action = system_shutdown - elif action == 'hibernate_pc': - _action = system_hibernate - elif action == 'standby_pc': - _action = system_standby - elif action == 'shutdown_program': - _action = shutdown_program - - #keep the name of the action for matching the current select in queue.tmpl - QUEUECOMPLETE = action - - QUEUECOMPLETEACTION = _action - QUEUECOMPLETEARG = _argument - - -def run_script(script): - command = os.path.join(cfg.script_dir.get_path(), script) - stup, need_shell, command, creationflags = sabnzbd.newsunpack.build_command(command) - logging.info('Spawning external command %s', command) - subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - startupinfo=stup, creationflags=creationflags) - - -def empty_queues(): - """ Return True if queues empty or non-existent """ - global __INITIALIZED__ - return (not __INITIALIZED__) or (PostProcessor.do.empty() and not nzbqueue.has_articles()) - - -def keep_awake(): - """ If we still have work to do, keep Windows system awake - """ - global KERNEL32 - if KERNEL32 and not downloader.paused(): - if (not PostProcessor.do.empty()) or nzbqueue.has_articles(): - # set ES_SYSTEM_REQUIRED - KERNEL32.SetThreadExecutionState(ctypes.c_int(0x00000001)) - - -def CheckFreeSpace(): - if cfg.download_free() and not downloader.paused(): - if misc.diskfree(cfg.download_dir.get_path()) < cfg.download_free.get_float() / GIGI: - logging.warning(Ta('warn-noSpace')) - # Pause downloader, but don't save, since the disk is almost full! - downloader.pause_downloader(save=False) - emailer.diskfull() - - -################################################################################ -# Data IO # -################################################################################ -IO_LOCK = RLock() - -@synchronized(IO_LOCK) -def get_new_id(prefix): - try: - fd, l = tempfile.mkstemp('', 'SABnzbd_%s_' % prefix, cfg.cache_dir.get_path()) - os.close(fd) - head, tail = os.path.split(l) - return tail - except: - logging.error(Ta('error-failMkstemp')) - logging.debug("Traceback: ", exc_info = True) - - -@synchronized(IO_LOCK) -def save_data(data, _id, do_pickle = True, doze=0): - path = os.path.join(cfg.cache_dir.get_path(), _id) - logging.info("Saving data for %s in %s", _id, path) - - try: - _f = open(path, 'wb') - if do_pickle: - cPickle.dump(data, _f, 2) - else: - _f.write(data) - if doze: - # Only for debugging decoder overflow - time.sleep(doze) - _f.flush() - _f.close() - except: - logging.error(Ta('error-saveX@1'), path) - logging.debug("Traceback: ", exc_info = True) - - -@synchronized(IO_LOCK) -def load_data(_id, remove = True, do_pickle = True): - path = os.path.join(cfg.cache_dir.get_path(), _id) - logging.info("Loading data for %s from %s", _id, path) - - if not os.path.exists(path): - logging.info("%s missing", path) - return None - - data = None - - try: - _f = open(path, 'rb') - if do_pickle: - data = cPickle.load(_f) - else: - data = _f.read() - _f.close() - - if remove: - remove_data(_id) - except: - logging.error(Ta('error-loading@1'), path) - logging.debug("Traceback: ", exc_info = True) - return None - - return data - - -@synchronized(IO_LOCK) -def remove_data(_id): - path = os.path.join(cfg.cache_dir.get_path(), _id) - try: - os.remove(path) - logging.info("%s removed", path) - except: - pass - - -def pp_to_opts(pp): - """ Convert numeric processinf options to (repair, unpack, delete) """ - # Convert the pp to an int - pp = sabnzbd.interface.IntConv(pp) - if pp == 0 : return (False, False, False) - if pp == 1 : return (True, False, False) - if pp == 2 : return (True, True, False) - return (True, True, True) - - -def opts_to_pp(repair, unpack, delete): - """ Convert (repair, unpack, delete) to numeric process options """ - if repair is None: - return None - pp = 0 - if repair: pp += 1 - if unpack: pp += 1 - if delete: pp += 1 - return pp - - -def SimpleRarExtract(rarfile, fn): - """ Wrapper for call to newsunpack, required to avoid circular imports - """ - return sabnzbd.newsunpack.SimpleRarExtract(rarfile, fn) - - -def check_all_tasks(): - """ Check every task and restart safe ones, else restart program - Return True when everything is under control - """ - if __SHUTTING_DOWN__ or not __INITIALIZED__: - return True - - # Non-restartable threads, require program restart - if not sabnzbd.PostProcessor.do.isAlive(): - logging.info('Restarting because of crashed postprocessor') - return False - if not sabnzbd.downloader.alive(): - logging.info('Restarting because of crashed downloader') - return False - if not Assembler.do.isAlive(): - logging.info('Restarting because of crashed assembler') - return False - - # Kick the downloader, in case it missed the semaphore - sabnzbd.downloader.wakeup() - - # Restartable threads - if not DirScanner.do.isAlive(): - logging.info('Restarting crashed dirscanner') - DirScanner.do.__init__() - if not URLGrabber.do.isAlive(): - logging.info('Restarting crashed urlgrabber') - URLGrabber.do.__init__() - if not MSGIDGrabber.do.isAlive(): - logging.info('Restarting crashed newzbin') - MSGIDGrabber.do.__init__() - if not sabnzbd.scheduler.sched_check(): - logging.info('Restarting crashed scheduler') - sabnzbd.scheduler.init() - sabnzbd.downloader.unblock_all() - - # Check one-shot pause - sabnzbd.scheduler.pause_check() - - return True - - -# Required wrapper because nzbstuff.py cannot import downloader.py -def active_primaries(): - return sabnzbd.downloader.active_primaries() diff --git a/main/sabnzbd/articlecache.py b/main/sabnzbd/articlecache.py deleted file mode 100644 index 48e0788..0000000 --- a/main/sabnzbd/articlecache.py +++ /dev/null @@ -1,165 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.articlecache - Article cache handling -""" - -import logging -import threading - -import sabnzbd -from sabnzbd.decorators import synchronized - - -ARTICLE_LOCK = threading.Lock() -class ArticleCache: - do = None - - def __init__(self): - self.__cache_limit = 0 - self.__cache_size = 0 - self.__doze = 0 - - self.__article_list = [] # List of buffered articles - self.__article_table = {} # Dict of buffered articles - ArticleCache.do = self - - @synchronized(ARTICLE_LOCK) - def cache_info(self): - return (len(self.__article_list), self.__cache_size, self.__cache_limit) - - @synchronized(ARTICLE_LOCK) - def new_limit(self, limit, doze=0): - """ Called when cache limit changes """ - self.__cache_limit = limit - self.__doze = doze - - - @synchronized(ARTICLE_LOCK) - def save_article(self, article, data): - nzf = article.nzf - nzo = nzf.nzo - - if nzf.deleted or nzo.deleted: - # Do not discard this article because the - # file might still be processed at this moment!! - logging.info("%s would be discarded", article) - # return - - saved_articles = article.nzf.nzo.saved_articles - - if article not in saved_articles: - saved_articles.append(article) - - if self.__cache_limit: - if self.__cache_limit < 0: - self.__add_to_cache(article, data) - - else: - data_size = len(data) - - while (self.__cache_size > (self.__cache_limit - data_size)) \ - and self.__article_list: - ## Flush oldest article in cache - old_article = self.__article_list.pop(0) - old_data = self.__article_table.pop(old_article) - self.__cache_size -= len(old_data) - ## No need to flush if this is a refreshment article - if old_article != article: - self.__flush_article(old_article, old_data) - - ## Does our article fit into our limit now? - if (self.__cache_size + data_size) <= self.__cache_limit: - self.__add_to_cache(article, data) - else: - self.__flush_article(article, data) - - else: - self.__flush_article(article, data) - - @synchronized(ARTICLE_LOCK) - def load_article(self, article): - data = None - - if article in self.__article_list: - data = self.__article_table.pop(article) - self.__article_list.remove(article) - self.__cache_size -= len(data) - logging.info("Loaded %s from cache", article) - logging.debug("cache_size -> %s", self.__cache_size) - elif article.art_id: - data = sabnzbd.load_data(article.art_id, remove = True, - do_pickle = False) - - nzo = article.nzf.nzo - if article in nzo.saved_articles: - nzo.saved_articles.remove(article) - - return data - - @synchronized(ARTICLE_LOCK) - def flush_articles(self): - self.__cache_size = 0 - while self.__article_list: - article = self.__article_list.pop(0) - data = self.__article_table.pop(article) - self.__flush_article(article, data) - - @synchronized(ARTICLE_LOCK) - def purge_articles(self, articles): - logging.debug("Purgable articles -> %s", articles) - for article in articles: - if article in self.__article_list: - self.__article_list.remove(article) - data = self.__article_table.pop(article) - self.__cache_size -= len(data) - if article.art_id: - sabnzbd.remove_data(article.art_id) - - def __flush_article(self, article, data): - nzf = article.nzf - nzo = nzf.nzo - - if nzf.deleted or nzo.deleted: - # Do not discard this article because the - # file might still be processed at this moment!! - logging.info("%s would be discarded", article) - # return - - art_id = article.get_art_id() - if art_id: - logging.info("Flushing %s to disk", article) - logging.debug("cache_size -> %s", self.__cache_size) - sabnzbd.save_data(data, art_id, do_pickle = False, doze=self.__doze) - else: - logging.warning("Flushing %s failed -> no art_id", article) - - def __add_to_cache(self, article, data): - if article in self.__article_table: - self.__cache_size -= len(self.__article_table[article]) - else: - self.__article_list.append(article) - - self.__article_table[article] = data - self.__cache_size += len(data) - logging.info("Added %s to cache", article) - logging.debug("cache_size -> %s", self.__cache_size) - - -### Create the instance -ArticleCache() diff --git a/main/sabnzbd/assembler.py b/main/sabnzbd/assembler.py deleted file mode 100644 index 59291c8..0000000 --- a/main/sabnzbd/assembler.py +++ /dev/null @@ -1,243 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.assembler - threaded assembly/decoding of files -""" - -import os -import Queue -import binascii -import logging -import struct -from threading import Thread -from time import sleep -try: - import hashlib - new_md5 = hashlib.md5 -except: - import md5 - new_md5 = md5.new - -import sabnzbd -from sabnzbd.misc import get_filepath, sanitize_filename, get_unique_path, renamer -import sabnzbd.cfg as cfg -from sabnzbd.articlecache import ArticleCache -from sabnzbd.postproc import PostProcessor -import sabnzbd.downloader -from sabnzbd.lang import Ta - - -#------------------------------------------------------------------------------ -class Assembler(Thread): - do = None # Link to the instance of this method - - def __init__ (self, queue = None): - Thread.__init__(self) - - if queue: - self.queue = queue - else: - self.queue = Queue.Queue() - Assembler.do = self - - def stop(self): - self.process(None) - - def process(self, nzf): - self.queue.put(nzf) - - def run(self): - while 1: - nzo_nzf_tuple = self.queue.get() - if not nzo_nzf_tuple: - logging.info("Shutting down") - break - - nzo, nzf = nzo_nzf_tuple - - if nzf: - sabnzbd.CheckFreeSpace() - filename = sanitize_filename(nzf.get_filename()) - nzf.set_filename(filename) - - dupe = nzo.check_for_dupe(nzf) - - filepath = get_filepath(cfg.download_dir.get_path(), nzo, filename) - - if filepath: - logging.info('Decoding %s %s', filepath, nzf.get_type()) - try: - filepath = _assemble(nzf, filepath, dupe) - except IOError, (errno, strerror): - # 28 == disk full => pause downloader - if errno == 28: - logging.error(Ta('error-diskFull')) - sabnzbd.downloader.pause_downloader() - else: - logging.error(Ta('error-diskError@1'), filepath) - - setname = nzf.get_setname() - if nzf.is_par2() and (nzo.get_md5pack(setname) is None): - pack = GetMD5Hashes(filepath) - if pack: - nzo.set_md5pack(setname, pack) - logging.debug('Got md5pack for set %s', setname) - - - else: - PostProcessor.do.process(nzo) - - -def _assemble(nzf, path, dupe): - if os.path.exists(path): - unique_path = get_unique_path(path, create_dir = False) - if dupe: - path = unique_path - else: - renamer(path, unique_path) - - fout = open(path, 'ab') - - if cfg.quick_check(): - md5 = new_md5() - else: - md5 = None - - _type = nzf.get_type() - decodetable = nzf.get_decodetable() - - for articlenum in decodetable: - sleep(0.01) - article = decodetable[articlenum] - - data = ArticleCache.do.load_article(article) - - if not data: - logging.warning(Ta('warn-artMissing@1'), article) - else: - # yenc data already decoded, flush it out - if _type == 'yenc': - fout.write(data) - if md5: md5.update(data) - # need to decode uu data now - elif _type == 'uu': - data = data.split('\r\n') - - chunks = [] - for line in data: - if not line: - continue - - if line == '-- ' or line.startswith('Posted via '): - continue - try: - tmpdata = binascii.a2b_uu(line) - chunks.append(tmpdata) - except binascii.Error, msg: - ## Workaround for broken uuencoders by - ##/Fredrik Lundh - nbytes = (((ord(line[0])-32) & 63) * 4 + 5) / 3 - try: - tmpdata = binascii.a2b_uu(line[:nbytes]) - chunks.append(tmpdata) - except binascii.Error, msg: - logging.info('Decode failed in part %s: %s', article.article, msg) - fout.write(''.join(chunks)) - if md5: md5.update(''.join(chunks)) - - fout.flush() - fout.close() - if md5: - nzf.md5sum = md5.digest() - del md5 - - return path - - -# For a full description of the par2 specification, visit: -# http://parchive.sourceforge.net/docs/specifications/parity-volume-spec/article-spec.html - -def GetMD5Hashes(fname): - """ Get the hash table from a PAR2 file - Return as dictionary, indexed on names - """ - table = {} - try: - f = open(fname, 'rb') - except: - return table - - try: - header = f.read(8) - while header: - name, hash = ParseFilePacket(f, header) - if name: - table[name] = hash - header = f.read(8) - - except (struct.error, IndexError): - logging.info('Cannot use corrupt par2 file for QuickCheck, "%s"', fname) - table = {} - except: - logging.debug('QuickCheck parser crashed in file %s', fname) - logging.debug('Traceback: ', exc_info = True) - table = {} - - f.close() - return table - - -def ParseFilePacket(f, header): - """ Look up and analyse a FileDesc package """ - - nothing = None, None - - if header != 'PAR2\0PKT': - return nothing - - # Length must be multiple of 4 and at least 20 - len = struct.unpack(' -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.bpsmeter - bpsmeter -""" - -import time -import logging - -#------------------------------------------------------------------------------ - -class BPSMeter: - do = None - - def __init__(self, bytes_sum = 0): - t = time.time() - - self.start_time = t - self.log_time = t - self.last_update = t - self.bps = 0.0 - self.bytes_total = 0 - self.bytes_sum = bytes_sum - BPSMeter.do = self - - def update(self, bytes_recvd): - self.bytes_total += bytes_recvd - self.bytes_sum += bytes_recvd - - t = time.time() - try: - self.bps = (self.bps * (self.last_update - self.start_time) - + bytes_recvd) / (t - self.start_time) - except: - self.bps = 0.0 - - self.last_update = t - - check_time = t - 5.0 - - if self.start_time < check_time: - self.start_time = check_time - - if self.bps < 0.01: - self.reset() - - elif self.log_time < check_time: - logging.debug("bps: %s", self.bps) - self.log_time = t - - def get_sum(self): - return self.bytes_sum - - def reset(self): - self.__init__(bytes_sum = self.bytes_sum) - - def get_bps(self): - return self.bps - - -BPSMeter() diff --git a/main/sabnzbd/cfg.py b/main/sabnzbd/cfg.py deleted file mode 100644 index 0401db1..0000000 --- a/main/sabnzbd/cfg.py +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.cfg - Configuration Parameters -""" -import re - -import sabnzbd -from sabnzbd.constants import DEF_HOST, DEF_PORT_WIN_SSL, DEF_PORT_WIN, DEF_STDINTF, \ - DEF_DOWNLOAD_DIR, DEF_NZBBACK_DIR, DEF_PORT_UNIX_SSL, \ - NORMAL_PRIORITY, DEF_SCANRATE, DEF_PORT_UNIX, DEF_COMPLETE_DIR -from sabnzbd.config import OptionBool, OptionNumber, OptionPassword, \ - OptionDir, OptionStr, OptionList, no_nonsense, \ - validate_octal, validate_safedir, validate_dir_exists, \ - create_api_key, validate_notempty -from sabnzbd.lang import T -#------------------------------------------------------------------------------ -# Email validation support -# -RE_VAL = re.compile('[^@ ]+@[^.@ ]+\.[^.@ ]') -def validate_email(value): - global email_endjob, email_full - if email_endjob() or email_full(): - if value and RE_VAL.match(value): - return None, value - else: - return T('error-badEmailAd@1') % value, None - else: - return None, value - - -def validate_server(value): - """ Check if server non-empty""" - global email_endjob, email_full - if value == '' and (email_endjob() or email_full()): - return T('error-needServer'), None - else: - return None, value - -#------------------------------------------------------------------------------ -if sabnzbd.WIN32: - DEF_FOLDER_MAX = 128 -else: - DEF_FOLDER_MAX = 256 - -#------------------------------------------------------------------------------ -# Configuration instances -# -quick_check = OptionBool('misc', 'quick_check', True) -fail_on_crc = OptionBool('misc', 'fail_on_crc', False) -send_group = OptionBool('misc', 'send_group', False) - -email_server = OptionStr('misc', 'email_server', validation=validate_server) -email_to = OptionStr('misc', 'email_to', validation=validate_email) -email_from = OptionStr('misc', 'email_from', validation=validate_email) -email_account= OptionStr('misc', 'email_account') -email_pwd = OptionPassword('misc', 'email_pwd') -email_endjob = OptionNumber('misc', 'email_endjob', 0, 0, 2) -email_full = OptionBool('misc', 'email_full', False) -email_dir = OptionDir('misc', 'email_dir', create=False, validation=validate_dir_exists) -email_rss = OptionBool('misc', 'email_rss', False) - -dirscan_pp = OptionNumber('misc', 'dirscan_opts', 3, 0, 3) -version_check = OptionBool('misc', 'check_new_rel', True) -dirscan_script = OptionStr('misc', 'dirscan_script', 'None') -dirscan_priority = OptionNumber('misc', 'dirscan_priority', NORMAL_PRIORITY) -autobrowser = OptionBool('misc', 'auto_browser', True) -replace_illegal = OptionBool('misc', 'replace_illegal', True) - -enable_unrar = OptionBool('misc', 'enable_unrar', True) -enable_unzip = OptionBool('misc', 'enable_unzip', True) -enable_filejoin = OptionBool('misc', 'enable_filejoin', True) -enable_tsjoin = OptionBool('misc', 'enable_tsjoin', True) -enable_par_cleanup = OptionBool('misc', 'enable_par_cleanup', True) -par_option = OptionStr('misc', 'par_option', '', validation=no_nonsense) -nice = OptionStr('misc', 'nice', '', validation=no_nonsense) -ionice = OptionStr('misc', 'ionice', '', validation=no_nonsense) -ignore_wrong_unrar = OptionBool('misc', 'ignore_wrong_unrar', False) -par2_multicore = OptionBool('misc', 'par2_multicore', True) - -newzbin_username = OptionStr('newzbin', 'username') -newzbin_password = OptionPassword('newzbin', 'password') -newzbin_bookmarks = OptionBool('newzbin', 'bookmarks', False) -newzbin_unbookmark = OptionBool('newzbin', 'unbookmark', True) -bookmark_rate = OptionNumber('newzbin', 'bookmark_rate', 60, minval=15, maxval=24*60) - -top_only = OptionBool('misc', 'top_only', True) -autodisconnect = OptionBool('misc', 'auto_disconnect', True) - -replace_spaces = OptionBool('misc', 'replace_spaces', False) -replace_dots = OptionBool('misc', 'replace_dots', False) -no_dupes = OptionBool('misc', 'no_dupes', False) -ignore_samples = OptionNumber('misc', 'ignore_samples', 0, 0, 2) -create_group_folders = OptionBool('misc', 'create_group_folders', False) -auto_sort = OptionBool('misc', 'auto_sort', False) -folder_rename = OptionBool('misc', 'folder_rename', True) -folder_max_length = OptionNumber('misc', 'folder_max_length', DEF_FOLDER_MAX, 20, 65000) - -safe_postproc = OptionBool('misc', 'safe_postproc', True) -pause_on_post_processing = OptionBool('misc', 'pause_on_post_processing', False) - -schedules = OptionList('misc', 'schedlines') - -enable_tv_sorting = OptionBool('misc', 'enable_tv_sorting', False) -tv_sort_string = OptionStr('misc', 'tv_sort_string') -tv_sort_countries = OptionNumber('misc', 'tv_sort_countries', 1) -tv_categories = OptionList('misc', 'tv_categories', '') - -enable_movie_sorting = OptionBool('misc', 'enable_movie_sorting', False) -movie_sort_string = OptionStr('misc', 'movie_sort_string') -movie_sort_extra = OptionStr('misc', 'movie_sort_extra', '-cd%1', strip=False) -movie_extra_folders = OptionBool('misc', 'movie_extra_folder', False) -movie_categories = OptionList('misc', 'movie_categories', ['movies']) - -enable_date_sorting = OptionBool('misc', 'enable_date_sorting', False) -date_sort_string = OptionStr('misc', 'date_sort_string') -date_categories = OptionStr('misc', 'date_categories', ['tv']) - -matrix_username = OptionStr('nzbmatrix', 'username') -matrix_apikey = OptionStr('nzbmatrix', 'apikey') - -configlock = OptionBool('misc', 'config_lock', 0) - -umask = OptionStr('misc', 'permissions', '', validation=validate_octal) -download_dir = OptionDir('misc', 'download_dir', DEF_DOWNLOAD_DIR, validation=validate_safedir) -download_free = OptionStr('misc', 'download_free') -complete_dir = OptionDir('misc', 'complete_dir', DEF_COMPLETE_DIR, apply_umask=True, validation=validate_notempty) -script_dir = OptionDir('misc', 'script_dir', create=False, validation=validate_dir_exists) -nzb_backup_dir = OptionDir('misc', 'nzb_backup_dir', DEF_NZBBACK_DIR) -cache_dir = OptionDir('misc', 'cache_dir', 'cache', validation=validate_safedir) -admin_dir = OptionDir('misc', 'admin_dir', 'admin', validation=validate_safedir) -#log_dir = OptionDir('misc', 'log_dir', 'logs') -dirscan_dir = OptionDir('misc', 'dirscan_dir', create=False) -dirscan_speed = OptionNumber('misc', 'dirscan_speed', DEF_SCANRATE, 1, 3600) -SIZE_LIMIT = OptionStr('misc', 'size_limit') - -cherryhost = OptionStr('misc','host', DEF_HOST) -if sabnzbd.WIN32: - cherryport = OptionStr('misc','port', DEF_PORT_WIN) -else: - cherryport = OptionStr('misc','port', DEF_PORT_UNIX) -if sabnzbd.WIN32: - https_port = OptionStr('misc','https_port', DEF_PORT_WIN_SSL) -else: - https_port = OptionStr('misc','https_port', DEF_PORT_UNIX_SSL) - -username = OptionStr('misc', 'username') -password = OptionPassword('misc', 'password') -bandwidth_limit = OptionNumber('misc', 'bandwidth_limit', 0) -refresh_rate = OptionNumber('misc', 'refresh_rate', 0) -rss_rate = OptionNumber('misc', 'rss_rate', 60, 15, 24*60) -cache_limit = OptionStr('misc', 'cache_limit') -web_dir = OptionStr('misc', 'web_dir', DEF_STDINTF) -web_dir2 = OptionStr('misc', 'web_dir2') -web_color = OptionStr('misc', 'web_color', '') -web_color2 = OptionStr('misc', 'web_color2') -cleanup_list = OptionList('misc', 'cleanup_list') -warned_old_queue = OptionBool('misc', 'warned_old_queue', False) - -log_web = OptionBool('logging', 'enable_cherrypy_logging', False) -log_dir = OptionDir('misc', 'log_dir', 'logs', validation=validate_notempty) -log_level = OptionNumber('logging', 'log_level', 1, 0, 2) -log_size = OptionStr('logging', 'max_log_size', '5242880') -log_backups = OptionNumber('logging', 'log_backups', 5, 1, 1024) - -https_cert = OptionDir('misc', 'https_cert', 'server.cert', create=False) -https_key = OptionDir('misc', 'https_key', 'server.key', create=False) -enable_https = OptionBool('misc', 'enable_https', False) - -language = OptionStr('misc', 'language', 'us-en') -ssl_type = OptionStr('misc', 'ssl_type', 'v23') -unpack_check = OptionBool('misc', 'unpack_check', True) -no_penalties = OptionBool('misc', 'no_penalties', False) - -# Internal options, not saved in INI file -debug_delay = OptionNumber('misc', 'debug_delay', 0, add=False) - -api_key = OptionStr('misc','api_key', create_api_key()) -disable_key = OptionBool('misc', 'disable_api_key', False) - -#------------------------------------------------------------------------------ -# Set root folders for Folder config-items -# -def set_root_folders(home, lcldata, prog, interf): - email_dir.set_root(home) - download_dir.set_root(home) - complete_dir.set_root(home) - script_dir.set_root(home) - nzb_backup_dir.set_root(lcldata) - cache_dir.set_root(lcldata) - admin_dir.set_root(lcldata) - dirscan_dir.set_root(home) - log_dir.set_root(lcldata) - -def set_root_folders2(): - https_cert.set_root(admin_dir.get_path()) - https_key.set_root(admin_dir.get_path()) diff --git a/main/sabnzbd/codecs.py b/main/sabnzbd/codecs.py deleted file mode 100644 index ff43549..0000000 --- a/main/sabnzbd/codecs.py +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.codecs - Unicoded filename support -""" - -import locale -from xml.sax.saxutils import escape -from Cheetah.Filters import Filter - -import sabnzbd - -try: - if sabnzbd.DARWIN: - gUTF = True - else: - gUTF = locale.getdefaultlocale()[1].lower().find('utf') >= 0 -except: - # Incorrect locale implementation, assume the worst - gUTF = False - -def reliable_unpack_names(): - """ See if it is safe to rely on unrar names """ - if sabnzbd.WIN32 or sabnzbd.DARWIN: - return True - else: - return gUTF - -def platform_encode(p): - """ Return the correct encoding for the platform: - Latin-1 for Windows/Posix-non-UTF and UTF-8 for OSX/Posix-UTF - """ - if isinstance(p, unicode): - if gUTF: - return p.encode('utf-8') - else: - return p.encode('latin-1', 'replace').replace('?', '_') - elif isinstance(p, basestring): - if gUTF: - try: - p.decode('utf-8') - return p - except: - return p.decode('latin-1').encode('utf-8') - else: - try: - return p.decode('utf-8').encode('latin-1', 'replace').replace('?', '_') - except: - return p - else: - return p - -def name_fixer(p): - """ Return UTF-8 encoded string, if appropriate for the platform """ - - if gUTF and p: - return p.decode('Latin-1', 'replace').encode('utf-8', 'replace').replace('?', '_') - else: - return p - -def special_fixer(p): - """ Return string appropriate for the platform. - Also takes care of the situation where a non-Windows/UTF-8 system - receives a latin-1 encoded name. - """ - if sabnzbd.WIN32: - try: - return p.decode('utf-8').encode('latin-1', 'replace').replace('?', '_') - except: - return p - else: - if gUTF: - try: - # First see if it isn't just UTF-8 - p.decode('utf-8') - return p - except: - # Now assume it's latin-1 - return p.decode('Latin-1').encode('utf-8') - else: - return p - -def unicoder(p): - """ Make sure a Unicode string is returned """ - if isinstance(p, unicode): - return p - if isinstance(p, str): - if gUTF: - try: - return p.decode('utf-8') - except: - return p.decode('latin-1', 'replace') - return p.decode('latin-1', 'replace') - else: - return unicode(str(p)) - -def unicode2local(p): - """ Convert Unicode filename to appropriate local encoding - """ - if sabnzbd.WIN32: - return p.encode('Latin-1', 'replace').replace('?', '_') - else: - return p.encode('utf-8', 'replace').replace('?', '_') - - -def xml_name(p, keep_escape=False, encoding=None): - """ Prepare name for use in HTML/XML contect """ - - if isinstance(p, unicode): - pass - elif isinstance(p, str): - if sabnzbd.DARWIN or encoding == 'utf-8': - p = p.decode('utf-8', 'replace') - elif gUTF: - p = p.decode('utf-8', 'replace') - else: - p = p.decode('Latin-1', 'replace') - else: - p = str(p) - - if keep_escape: - return p.encode('ascii', 'xmlcharrefreplace') - else: - return escape(p).encode('ascii', 'xmlcharrefreplace') - - -def latin1(txt): - """ When Unicode, convert to Latin-1 """ - if isinstance(txt, unicode): - return txt.encode('latin-1', 'replace').replace('?', '_') - else: - return txt - - -def encode_for_xml(ustr, encoding='ascii'): - """ - Encode unicode_data for use as XML or HTML, with characters outside - of the encoding converted to XML numeric character references. - """ - if isinstance(ustr, unicode): - pass - elif isinstance(ustr, str): - ustr = ustr.decode('Latin-1', 'replace') - else: - ustr = unicode(str(ustr)) - return ustr.encode(encoding, 'xmlcharrefreplace') - - -def titler(p): - """ title() replacement - Python's title() fails with Latin-1, so use Unicode detour. - """ - if gUTF: - try: - return p.decode('utf-8').title().encode('utf-8') - except: - return p.decode('latin-1', 'replace').title().encode('latin-1', 'replace') - else: - return p.decode('latin-1', 'replace').title().encode('latin-1', 'replace') - - -class LatinFilter(Filter): - """ Make sure Cheetah gets only Unicode strings """ - def filter(self, val, str=str, **kw): - if isinstance(val, unicode): - return val - elif isinstance(val, basestring): - if gUTF: - try: - return val.decode('utf-8', 'replace') - except: - return val.decode('latin-1', 'replace') - else: - return val.decode('latin-1', 'replace') - elif val is None: - return u'' - else: - return unicode(str(val)) - - -################################################################################ -# -# Map CodePage-850 characters to Python's pseudo-Unicode 8bit ASCII -# -# Use to transform 8-bit console output to plain Python strings -# -import string -gTABLE850 = string.maketrans( - "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F" - "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" - "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF" - "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF" - "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF" - "\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF" - "\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF" - "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF" , - - "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5" - "\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\x66" - "\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xDB\xBC\xA1\xAB\xBB" - "\x7E\x7E\x7E\x7E\x7E\xC1\xC2\xC0\xA9\x7E\x7E\x7E\x7E\xA2\xA5\x7E" - "\x7E\x7E\x7E\x7E\x7E\x7E\xE3\xc3\x7E\x7E\x7E\x7E\x7E\x7E\x7E\xA4" - "\xF0\xD0\xCA\xCB\xC8\x7E\xCD\xCE\xCF\x7E\x7E\x7E\x7E\xA6\xCC\x7E" - "\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4" - "\xAD\xB1\x5F\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\x7E\xA0" ) - - -def TRANS(p): - """ For Windows: Translate CP850 to Python's Latin-1 - """ - global gTABLE850 - if sabnzbd.WIN32: - return p.translate(gTABLE850) - else: - return p diff --git a/main/sabnzbd/config.py b/main/sabnzbd/config.py deleted file mode 100644 index 08263b2..0000000 --- a/main/sabnzbd/config.py +++ /dev/null @@ -1,932 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.config - Configuration Support -""" - -import os -import logging -import threading -import sabnzbd.misc -import sabnzbd.constants as constants -from sabnzbd.utils import listquote -from sabnzbd.utils import configobj -from sabnzbd.decorators import synchronized -from sabnzbd.lang import Ta - -CONFIG_LOCK = threading.Lock() -SAVE_CONFIG_LOCK = threading.Lock() - - -__CONFIG_VERSION = '18' # Minumum INI file version required - -CFG = {} # Holds INI structure - # uring re-write this variable is global allow - # direct access to INI structure - -database = {} # Holds the option dictionary - -modified = False # Signals a change in option dictionary - # Should be reset after saving to settings file - - -class Option: - """ Basic option class, basic fields """ - def __init__(self, section, keyword, default_val=None, add=True): - """ Basic option - section : single section or comma-separated list of sections - a list will be a hierarchy: "foo, bar" --> [foo][[bar]] - keyword : keyword in the (last) section - default_val : value returned when no value has been set - callback : procedure to call when value is succesfully changed - """ - self.__sections = section.split(',') - self.__keyword = keyword - self.__default_val = default_val - self.__value = None - self.__callback = None - - # Add myself to the config dictionary - if add: - global database - anchor = database - for section in self.__sections: - if section not in anchor: - anchor[section] = {} - anchor = anchor[section] - anchor[keyword] = self - - def __call__(self): - """ get() replacement """ - return self.get() - - def get(self): - """ Retrieve value field """ - if self.__value != None: - return self.__value - else: - return self.__default_val - - def get_dict(self, safe=False): - """ Return value a dictionary """ - return { self.__keyword : self.get() } - - def set_dict(self, dict): - """ Set value based on dictionary """ - try: - return self.set(dict['value']) - except KeyError: - return False - - def __set(self, value): - """ Set new value, no validation """ - global modified - if (value != None): - if type(value) == type([]) or type(value) == type({}) or value != self.__value: - self.__value = value - modified = True - if self.__callback: - self.__callback() - return None - - def set(self, value): - return self.__set(value) - - def callback(self, callback): - """ Set callback function """ - self.__callback = callback - - def ident(self): - """ Return section-list and keyword """ - return self.__sections, self.__keyword - - - -class OptionNumber(Option): - """ Numeric option class, int/float is determined from default value """ - def __init__(self, section, keyword, default_val=0, minval=None, maxval=None, validation=None, add=True): - Option.__init__(self, section, keyword, default_val, add=add) - self.__minval = minval - self.__maxval = maxval - self.__validation = validation - self.__int = type(default_val) == type(0) - - def set(self, value): - """ set new value, limited by range """ - if value != None: - try: - if self.__int: - value = int(value) - else: - value = float(value) - except ValueError: - value = 0 - if self.__validation: - error, val = self.__validation(value) - self._Option__set(val) - else: - if (self.__maxval != None) and value > self.__maxval: - value = self.__maxval - elif (self.__minval != None) and value < self.__minval: - value = self.__minval - self._Option__set(value) - return None - - -class OptionBool(Option): - """ Boolean option class """ - def __init__(self, section, keyword, default_val=False, add=True): - Option.__init__(self, section, keyword, int(default_val), add=add) - - def set(self, value): - if value is None: - value = 0 - try: - self._Option__set(int(value)) - except ValueError: - self._Option__set(0) - return None - - -class OptionDir(Option): - """ Directory option class """ - def __init__(self, section, keyword, default_val='', apply_umask=False, create=True, validation=None, add=True): - self.__validation = validation - self.__root = '' # Base directory for relative paths - self.__apply_umask = apply_umask - self.__create = create - Option.__init__(self, section, keyword, default_val, add=add) - - def get_path(self): - """ Return full absolute path """ - value = self.get() - path = '' - if value: - path = sabnzbd.misc.real_path(self.__root, value) - if self.__create and not os.path.exists(path): - res, path = sabnzbd.misc.create_real_path(self.ident()[1], self.__root, value, self.__apply_umask) - return path - - def set_root(self, root): - """ Set new root, is assumed to be valid """ - self.__root = root - - def set(self, value): - """ Set new dir value, validate and create if needed - Return None when directory is accepted - Return error-string when not accepted, value will not be changed - """ - error = None - if value != None and value != self.get(): - value = value.strip() - if self.__validation: - error, value = self.__validation(self.__root, value, self._Option__default_val) - if not error: - if value and self.__create: - res, path = sabnzbd.misc.create_real_path(self.ident()[1], self.__root, value, self.__apply_umask) - if not res: - error = "Cannot create %s folder %s" % (self.ident()[1], path) - if not error: - self._Option__set(value) - return error - -class OptionList(Option): - """ List option class """ - def __init__(self, section, keyword, default_val=None, add=True): - if default_val is None: - default_val = [] - Option.__init__(self, section, keyword, default_val, add=add) - - def set(self, value): - """ Set value, convert single item to list of one - Empty string will be an empty list. - """ - if value != None: - if type(value) != type([]): - if value == '': - value = [] - else: - value = [ value ] - return self._Option__set(value) - return None - - def get_string(self): - """ Return the list as a comma-separated string """ - lst = self.get() - if type(lst) == type(""): - return lst - txt = '' - r = len(lst) - for n in xrange(r): - txt += lst[n] - if n < r-1: txt += ', ' - return txt - - def set_string(self, txt): - """ Set the list given a comma-separated string """ - if type(txt) == type(''): - self._Option__set(listquote.simplelist(txt)) - else: - self._Option__set(txt) - - -class OptionStr(Option): - """ String class """ - def __init__(self, section, keyword, default_val='', validation=None, add=True, strip=True): - Option.__init__(self, section, keyword, default_val, add=add) - self.__validation = validation - self.__strip = strip - - def get_float(self): - """ Return value converted to a float, allowing KMGT notation """ - return sabnzbd.misc.from_units(self.get()) - - def get_int(self): - """ Return value converted to an int, allowing KMGT notation """ - return int(self.get_float()) - - def set(self, value): - """ Set stripped value """ - error = None - if type(value) == type('') and self.__strip: - value = value.strip() - if self.__validation: - error, val = self.__validation(value) - self._Option__set(val) - else: - self._Option__set(value) - return error - - -class OptionPassword(Option): - """ Password class """ - def __init__(self, section, keyword, default_val='', add=True): - Option.__init__(self, section, keyword, default_val, add=add) - - def get(self): - """ Return decoded password """ - value = self._Option__value - if value is None: - return self._Option__default_val - else: - return decode_password(value, self.ident()) - - def get_stars(self): - """ Return decoded password as asterisk string """ - return '*' * len(decode_password(self.get(), self.ident())) - - def get_dict(self, safe=False): - """ Return value a dictionary """ - if safe: - return { self._Option__keyword : self.get_stars() } - else: - return { self._Option__keyword : self.get() } - - def set(self, pw): - """ Set password, encode it """ - if (pw != None and pw == '') or (pw and pw.strip('*')): - self._Option__set(encode_password(pw)) - return None - - -@synchronized(CONFIG_LOCK) -def add_to_database(section, keyword, object): - global database - if section not in database: - database[section] = {} - database[section][keyword] = object - - -@synchronized(CONFIG_LOCK) -def delete_from_database(section, keyword): - global database, CFG, modified - del database[section][keyword] - try: - del CFG[section][keyword] - except KeyError: - pass - modified = True - - -class ConfigServer: - """ Class defining a single server """ - def __init__(self, name, values): - - self.__name = name - name = 'servers,' + self.__name - - self.host = OptionStr(name, 'host', '', add=False) - self.port = OptionNumber(name, 'port', 119, 0, 2**16-1, add=False) - self.timeout = OptionNumber(name, 'timeout', 120, 30, 240, add=False) - self.username = OptionStr(name, 'username', '', add=False) - self.password = OptionPassword(name, 'password', '', add=False) - self.connections = OptionNumber(name, 'connections', 1, 0, 100, add=False) - self.fillserver = OptionBool(name, 'fillserver', False, add=False) - self.ssl = OptionBool(name, 'ssl', False, add=False) - self.enable = OptionBool(name, 'enable', True, add=False) - self.optional = OptionBool(name, 'optional', False, add=False) - - self.set_dict(values) - add_to_database('servers', self.__name, self) - - def set_dict(self, values): - """ Set one or more fields, passed as dictionary """ - for kw in ('host', 'port', 'timeout', 'username', 'password', 'connections', - 'fillserver', 'ssl', 'enable', 'optional'): - try: - value = values[kw] - except KeyError: - continue - exec 'self.%s.set(value)' % kw - return True - - def get_dict(self, safe=False): - """ Return a dictionary with all attributes """ - dict = {} - dict['name'] = self.__name - dict['host'] = self.host() - dict['port'] = self.port() - dict['timeout'] = self.timeout() - dict['username'] = self.username() - if safe: - dict['password'] = self.password.get_stars() - else: - dict['password'] = self.password() - dict['connections'] = self.connections() - dict['fillserver'] = self.fillserver() - dict['ssl'] = self.ssl() - dict['enable'] = self.enable() - dict['optional'] = self.optional() - return dict - - def delete(self): - """ Remove from database """ - delete_from_database('servers', self.__name) - - def rename(self, name): - """ Give server new identity """ - delete_from_database('servers', self.__name) - self.__name = name - add_to_database('servers', self.__name, self) - - def ident(self): - return 'servers', self.__name - - -class ConfigCat: - """ Class defining a single category """ - def __init__(self, name, values): - self.__name = name - name = 'categories,' + name - - self.pp = OptionStr(name, 'pp', '', add=False) - self.script = OptionStr(name, 'script', 'Default', add=False) - self.dir = OptionDir(name, 'dir', add=False, create=False) - self.newzbin = OptionList(name, 'newzbin', add=False) - self.priority = OptionNumber(name, 'priority', constants.DEFAULT_PRIORITY, add=False) - - self.set_dict(values) - add_to_database('categories', self.__name, self) - - def set_dict(self, values): - """ Set one or more fields, passed as dictionary """ - for kw in ('pp', 'script', 'dir', 'newzbin', 'priority'): - try: - value = values[kw] - except KeyError: - continue - if kw == 'newzbin': - exec 'self.%s.set_string(value)' % kw - else: - exec 'self.%s.set(value)' % kw - return True - - def get_dict(self, safe=False): - """ Return a dictionary with all attributes """ - dict = {} - dict['name'] = self.__name - dict['pp'] = self.pp() - dict['script'] = self.script() - dict['dir'] = self.dir() - dict['newzbin'] = self.newzbin.get_string() - dict['priority'] = self.priority() - return dict - - def delete(self): - """ Remove from database """ - delete_from_database('categories', self.__name) - - -class OptionFilters(Option): - """ Filter list class """ - def __init__(self, section, keyword, add=True): - Option.__init__(self, section, keyword, add=add) - self.set([]) - - def move(self, current, new): - """ Move filter from position 'current' to 'new' """ - lst = self.get() - try: - item = lst.pop(current) - lst.insert(new, item) - except IndexError: - return - self.set(lst) - - def update(self, pos, value): - """ Update filter 'pos' definition, value is a list - Append if 'pos' outside list - """ - lst = self.get() - try: - lst[pos] = value - except IndexError: - lst.append(value) - self.set(lst) - - def delete(self, pos): - """ Remove filter 'pos' """ - lst = self.get() - try: - lst.pop(pos) - except IndexError: - return - self.set(lst) - - def get_dict(self, safe=False): - """ Return filter list as a dictionary with keys 'filter[0-9]+' """ - dict = {} - n = 0 - for filter in self.get(): - dict['filter'+str(n)] = filter - n = n + 1 - return dict - - def set_dict(self, values): - """ Create filter list from dictionary with keys 'filter[0-9]+' """ - filters = [] - for n in xrange(len(values)): - kw = 'filter%d' % n - val = values.get(kw) - if val is not None: - val = values[kw] - if type(val) == type([]): - filters.append(val) - else: - filters.append(listquote.simplelist(val)) - if filters: - self.set(filters) - return True - -class ConfigRSS: - """ Class defining a single Feed definition """ - def __init__(self, name, values): - self.__name = name - name = 'rss,' + name - - self.uri = OptionStr(name, 'uri', add=False) - self.cat = OptionStr(name, 'cat', add=False) - self.pp = OptionStr(name, 'pp', '', add=False) - self.script = OptionStr(name, 'script', add=False) - self.enable = OptionBool(name, 'enable', add=False) - self.priority = OptionNumber(name, 'priority', constants.DEFAULT_PRIORITY, constants.DEFAULT_PRIORITY, 2, add=False) - self.filters = OptionFilters(name, 'filters', add=False) - self.filters.set([['', '', '', 'A', '*']]) - - self.set_dict(values) - add_to_database('rss', self.__name, self) - - def set_dict(self, values): - """ Set one or more fields, passed as dictionary """ - for kw in ('uri', 'cat', 'pp', 'script', 'priority', 'enable'): - try: - value = values[kw] - except KeyError: - continue - exec 'self.%s.set(value)' % kw - - self.filters.set_dict(values) - return True - - def get_dict(self, safe=False): - """ Return a dictionary with all attributes """ - dict = {} - dict['name'] = self.__name - dict['uri'] = self.uri() - dict['cat'] = self.cat() - dict['pp'] = self.pp() - dict['script'] = self.script() - dict['enable'] = self.enable() - dict['priority'] = self.priority() - filters = self.filters.get_dict() - for kw in filters: - dict[kw] = filters[kw] - return dict - - def delete(self): - """ Remove from database """ - delete_from_database('rss', self.__name) - - def ident(self): - return 'rss', self.__name - - - -def get_dconfig(section, keyword, nested=False): - """ Return a config values dictonary, - Single item or slices based on 'section', 'keyword' - """ - data = {} - if not section: - for section in database.keys(): - res, conf = get_dconfig(section, None, True) - data.update(conf) - - elif not keyword: - try: - sect = database[section] - except KeyError: - return False, {} - if section in ('servers', 'categories', 'rss'): - data[section] = [] - for keyword in sect.keys(): - res, conf = get_dconfig(section, keyword, True) - data[section].append(conf) - else: - data[section] = {} - for keyword in sect.keys(): - res, conf = get_dconfig(section, keyword, True) - data[section].update(conf) - - else: - try: - item = database[section][keyword] - except KeyError: - return False, {} - data = item.get_dict(safe=True) - if not nested: - if section in ('servers', 'categories', 'rss'): - data = {section : [ data ]} - else: - data = {section : data} - - return True, data - - -def get_config(section, keyword): - """ Return a config object, based on 'section', 'keyword' - """ - try: - return database[section][keyword] - except KeyError: - logging.info('Missing configuration item %s,%s', section, keyword) - return None - - -def set_config(kwargs): - """ Set a config item, using values in dictionary - """ - try: - item = database[kwargs.get('section')][kwargs.get('keyword')] - except KeyError: - return False - item.set_dict(kwargs) - return True - - -def delete(section, keyword): - """ Delete specific config item - """ - try: - database[section][keyword].delete() - except KeyError: - return - - -################################################################################ -# -# INI file support -# -# This does input and output of configuration to an INI file. -# It translates this data structure to the config database. - -@synchronized(SAVE_CONFIG_LOCK) -def read_config(path): - """ Read the complete INI file and check its version number - if OK, pass values to config-database - """ - global CFG, database, modified - - if not os.path.exists(path): - # No file found, create default INI file - try: - fp = open(path, "w") - fp.write("__version__=%s\n[misc]\n[logging]\n" % __CONFIG_VERSION) - fp.close() - except IOError: - return False, 'Cannot create INI file %s' % path - - try: - CFG = configobj.ConfigObj(path) - try: - if int(CFG['__version__']) > int(__CONFIG_VERSION): - return False, "Incorrect version number %s in %s" %(CFG['__version__'], path) - except KeyError: - CFG['__version__'] = __CONFIG_VERSION - except ValueError: - CFG['__version__'] = __CONFIG_VERSION - except configobj.ConfigObjError, strerror: - return False, '"%s" is not a valid configuration file
        Error message: %s' % (path, strerror) - - if 'misc' in CFG: - compatibility_fix(CFG['misc']) - - # Use CFG data to set values for all static options - for section in database: - if section not in ('servers', 'categories', 'rss'): - for option in database[section]: - sec, kw = database[section][option].ident() - sec = sec[-1] - try: - database[section][option].set(CFG[sec][kw]) - except KeyError: - pass - - define_categories() - define_rss() - define_servers() - - modified = False - return True, "" - - - -@synchronized(SAVE_CONFIG_LOCK) -def save_config(force=False): - """ Update Setup file with current option values """ - global CFG, database, modified - - if not (modified or force): - return True - - for section in database: - if section in ('servers', 'categories', 'rss'): - try: - CFG[section] - except: - CFG[section] = {} - for subsec in database[section]: - subsec_mod = subsec.replace('[', '{').replace(']','}') - try: - CFG[section][subsec_mod] - except: - CFG[section][subsec_mod] = {} - items = database[section][subsec].get_dict() - CFG[section][subsec_mod] = items - else: - for option in database[section]: - sec, kw = database[section][option].ident() - sec = sec[-1] - try: - CFG[sec] - except: - CFG[sec] = {} - value = database[section][option]() - if type(value) == type(True): - CFG[sec][kw] = str(int(value)) - elif type(value) == type(0): - CFG[sec][kw] = str(value) - else: - CFG[sec][kw] = value - - try: - CFG.write() - f = open(CFG.filename) - x = f.read() - f.close() - f = open(CFG.filename, "w") - f.write(x) - f.flush() - f.close() - modified = False - return True - except IOError: - return False - - - -def define_servers(): - """ Define servers listed in the Setup file - return a list of ConfigServer instances - """ - global CFG - try: - for server in CFG['servers']: - svr = CFG['servers'][server] - ConfigServer(server.replace('{', '[').replace('}', ']'), svr) - except KeyError: - pass - -def get_servers(): - global database - try: - return database['servers'] - except: - return {} - - -def define_categories(force=False): - """ Define categories listed in the Setup file - return a list of ConfigCat instances - """ - global CFG, categories - cats = ['Unknown', 'Anime', 'Apps', 'Books', 'Consoles', 'Emulation', 'Games', - 'Misc', 'Movies', 'Music', 'PDA', 'Resources', 'TV'] - - try: - for cat in CFG['categories']: - ConfigCat(cat, CFG['categories'][cat]) - except KeyError: - force = True - - if force: - for cat in cats: - val = { 'newzbin' : cat, 'dir' : cat } - ConfigCat(cat.lower(), val) - -def get_categories(): - global database - try: - return database['categories'] - except: - return {} - -def define_rss(): - """ Define rss-ffeds listed in the Setup file - return a list of ConfigRSS instances - """ - global CFG - try: - for r in CFG['rss']: - ConfigRSS(r, CFG['rss'][r]) - except KeyError: - pass - -def get_rss(): - global database - try: - return database['rss'] - except: - return {} - -def get_filename(): - global CFG - return CFG.filename - - -################################################################################ -# -# Default Validation handlers -# -__PW_PREFIX = '!!!encoded!!!' - -#------------------------------------------------------------------------------ -def encode_password(pw): - """ Encode password in hexadecimal if needed """ - enc = False - if pw: - encPW = __PW_PREFIX - for c in pw: - cnum = ord(c) - if c == '#' or cnum<33 or cnum>126: - enc = True - encPW += '%2x' % cnum - if enc: - return encPW - return pw - - -def decode_password(pw, name): - """ Decode hexadecimal encoded password - but only decode when prefixed - """ - decPW = '' - if pw and pw.startswith(__PW_PREFIX): - for n in range(len(__PW_PREFIX), len(pw), 2): - try: - ch = chr( int(pw[n] + pw[n+1], 16) ) - except: - logging.error(Ta('error-encPw@1'), name) - return '' - decPW += ch - return decPW - else: - return pw - - -def no_nonsense(value): - """ Strip and Filter out None and 'None' from strings """ - value = str(value).strip() - if value.lower() == 'none': - value = '' - return None, value - - -def validate_octal(value): - """ Check if string is valid octal number """ - if not value: - return None, value - try: - int(value, 8) - return None, value - except: - return Ta('error-notOctal@1') % value, None - - -def validate_no_unc(root, value, default): - """ Check if path isn't a UNC path """ - # Only need to check the 'value' part - if value and not value.startswith(r'\\'): - return validate_notempty(root, value, default) - else: - return Ta('error-noUNC@1') % value, None - - -def validate_safedir(root, value, default): - """ Allow only when queues are empty and no UNC """ - if sabnzbd.empty_queues(): - return validate_no_unc(root, value, default) - else: - return Ta('error-QnotEmpty'), None - - -def validate_dir_exists(root, value, default): - """ Check if directory exists """ - p = sabnzbd.misc.real_path(root, value) - if os.path.exists(p): - return None, value - else: - return Ta('error-noFolder@1') % p, None - - -def validate_notempty(root, value, default): - """ If value is empty, return default """ - if value: - return None, value - else: - return None, default - - -def create_api_key(): - import time - try: - from hashlib import md5 - except ImportError: - from md5 import md5 - import random - # Create some values to seed md5 - t = str(time.time()) - r = str(random.random()) - # Create the md5 instance and give it the current time - m = md5(t) - # Update the md5 instance with the random variable - m.update(r) - - # Return a hex digest of the md5, eg 49f68a5c8493ec2c0bf489821c21fc3b - return m.hexdigest() - - -#------------------------------------------------------------------------------ -_FIXES = \ -( - ('bandwith_limit', 'bandwidth_limit'), - ('enable_par_multicore', 'par2_multicore') -) - -def compatibility_fix(cf): - # Convert obsolete entries - for item in _FIXES: - old, new = item - try: - cf[new] - except KeyError: - try: - cf[new] = cf[old] - del cf[old] - except KeyError: - pass diff --git a/main/sabnzbd/constants.py b/main/sabnzbd/constants.py deleted file mode 100644 index 3d70fba..0000000 --- a/main/sabnzbd/constants.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -CONFIG_VERSION = 18 -QUEUE_VERSION = 9 -POSTPROC_QUEUE_VERSION = 1 - -PNFO_REPAIR_FIELD = 0 -PNFO_UNPACK_FIELD = 1 -PNFO_DELETE_FIELD = 2 -PNFO_SCRIPT_FIELD = 3 -PNFO_NZO_ID_FIELD = 4 -PNFO_FILENAME_FIELD = 5 -PNFO_UNPACKSTRHT_FIELD = 6 -PNFO_MSGID_FIELD = 7 -PNFO_EXTRA_FIELD1 = 8 -PNFO_EXTRA_FIELD2 = 9 -PNFO_BYTES_LEFT_FIELD = 10 -PNFO_BYTES_FIELD = 11 -PNFO_AVG_DATE_FIELD = 12 -PNFO_FINISHED_FILES_FIELD = 13 -PNFO_ACTIVE_FILES_FIELD = 14 -PNFO_QUEUED_FILES_FIELD = 15 -PNFO_STATUS_FIELD = 16 -PNFO_PRIORITY_FIELD = 17 - -QNFO_BYTES_FIELD = 0 -QNFO_BYTES_LEFT_FIELD = 1 -QNFO_PNFO_LIST_FIELD = 2 - -ANFO_ARTICLE_SUM_FIELD = 0 -ANFO_CACHE_SIZE_FIELD = 1 -ANFO_CACHE_LIMIT_FIELD = 2 - -GIGI = float(2 ** 30) -MEBI = float(2 ** 20) -KIBI = float(2 ** 10) - -BYTES_FILE_NAME = 'bytes%s.sab' % QUEUE_VERSION -QUEUE_FILE_TMPL = 'queue%s.sab' -QUEUE_FILE_NAME = QUEUE_FILE_TMPL % QUEUE_VERSION -POSTPROC_QUEUE_FILE_NAME = 'postproc%s.sab' % POSTPROC_QUEUE_VERSION -RSS_FILE_NAME = 'rss_data.sab' -BOOKMARK_FILE_NAME = 'bookmarks.sab' -SCAN_FILE_NAME = 'watched_data.sab' - -DB_HISTORY_VERSION = 1 -DB_QUEUE_VERSION = 1 - -DB_HISTORY_NAME = 'history%s.db' % DB_HISTORY_VERSION -DB_QUEUE_NAME = 'queue%s.db' % DB_QUEUE_VERSION - -DEF_DOWNLOAD_DIR = 'downloads/incomplete' -DEF_COMPLETE_DIR = 'downloads/complete' -DEF_CACHE_DIR = 'cache' -DEF_LOG_DIR = 'logs' -DEF_NZBBACK_DIR = '' -DEF_LANGUAGE = 'language' -DEF_INTERFACES = 'interfaces' -DEF_INT_LANGUAGE = 'language' -DEF_STDINTF = 'smpl' -DEF_SKIN_COLORS = {'smpl':'white', 'classic':'darkblue', 'mobile':'light'} -DEF_MAIN_TMPL = 'templates/main.tmpl' -DEF_INI_FILE = 'sabnzbd.ini' -DEF_HOST = 'localhost' -DEF_PORT_WIN = 8080 -DEF_PORT_UNIX = 8080 -DEF_PORT_WIN_SSL = 9090 -DEF_PORT_UNIX_SSL= 9090 -DEF_WORKDIR = 'sabnzbd' -DEF_LOG_FILE = 'sabnzbd.log' -DEF_LOG_ERRFILE = 'sabnzbd.error.log' -DEF_LOG_CHERRY = 'cherrypy.log' -DEF_TIMEOUT = 60 -MIN_TIMEOUT = 10 -MAX_TIMEOUT = 200 -DEF_LOGLEVEL = 1 -DEF_SCANRATE = 5 -DEF_QRATE = 0 -MIN_DECODE_QUEUE = 5 -MAX_DECODE_QUEUE = 10 -MAX_WARNINGS = 20 - -TOP_PRIORITY = 2 -HIGH_PRIORITY = 1 -NORMAL_PRIORITY = 0 -LOW_PRIORITY = -1 -DEFAULT_PRIORITY = -100 - -series_match = [ (r'([sS]|[\d]+)x(\d+)', # 1x01 - [r'^[-\.]+([sS]|[\d])+x(\d+)', r'^[-\.](\d+)'] ), #(MATCHER, [EXTRA,MATCHERS]) - - (r'[Ss](\d+)[\.\-]?[Ee](\d+)', # S01E01 - [r'^[-\.]+[Ss](\d+)[\.\-]?[Ee](\d+)', r'^[-\.](\d+)']) ] # Extra matchers - - #possibly flawed - 101 - support: [\.\- \s]?(\d)(\d{2,2})[\.\- \s]? - -date_match = [r'(\d{4})\W(\d{1,2})\W(\d{1,2})', #2008-10-16 - r'(\d{1,2})\W(\d{1,2})\W(\d{4})'] #10.16.2008 - -year_match = r'[\W]([1|2]\d{3})([^\w]|$)' # Something '(YYYY)' or '.YYYY.' or ' YYYY ' - -sample_match = r'((^|[\W_])sample\d*[\W_])|(-s\.)' # something-sample.avi something-s.avi diff --git a/main/sabnzbd/database.py b/main/sabnzbd/database.py deleted file mode 100644 index 50e4b07..0000000 --- a/main/sabnzbd/database.py +++ /dev/null @@ -1,407 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.database - Database Support -""" - -try: - import sqlite3 -except: - try: - import pysqlite2.dbapi2 as sqlite3 - except: - pass - -import os -import time -import datetime -from calendar import MONDAY -import zlib -import logging - -import sabnzbd -import sabnzbd.cfg -from sabnzbd.constants import DB_HISTORY_NAME -from sabnzbd.lang import T, Ta -from sabnzbd.codecs import unicoder - -_HISTORY_DB = None # Will contain full path to history database -_DONE_CLEANING = False # Ensure we only do one Vacuum per session - -def get_history_handle(): - """ Get an instance of the history db hanlder """ - global _HISTORY_DB - if not _HISTORY_DB: - _HISTORY_DB = os.path.join(sabnzbd.cfg.admin_dir.get_path(), DB_HISTORY_NAME) - return HistoryDB(_HISTORY_DB) - - -# Note: Add support for execute return values - -class HistoryDB: - def __init__(self, db_path): - global _DONE_CLEANING - #Thread.__init__(self) - if not os.path.exists(db_path): - create_table = True - else: - create_table = False - if sabnzbd.WIN32: - self.con = sqlite3.connect(db_path.decode('latin-1').encode('utf-8')) - else: - self.con = sqlite3.connect(db_path) - self.con.row_factory = dict_factory - self.c = self.con.cursor() - if create_table: - self.create_history_db() - elif not _DONE_CLEANING: - # Run VACUUM on sqlite - # When an object (table, index, or trigger) is dropped from the database, it leaves behind empty space - # http://www.sqlite.org/lang_vacuum.html - _DONE_CLEANING = True - self.execute('VACUUM') - - def execute(self, command, args=(), save=False): - ''' Wrapper for executing SQL commands ''' - try: - if args and isinstance(args, tuple): - self.c.execute(command, args) - else: - self.c.execute(command) - if save: - self.save() - return True - except: - logging.error(Ta('error-sqlCmd')) - logging.debug("SQL: %s" , command) - logging.debug("Traceback: ", exc_info = True) - try: - self.con.rollback() - except: - logging.debug("Rollback Failed:", exc_info = True) - return False - - def create_history_db(self): - self.execute(""" - CREATE TABLE "history" ( - "id" INTEGER PRIMARY KEY, - "completed" INTEGER NOT NULL, - "name" TEXT NOT NULL, - "nzb_name" TEXT NOT NULL, - "category" TEXT, - "pp" TEXT, - "script" TEXT, - "report" TEXT, - "url" TEXT, - "status" TEXT, - "nzo_id" TEXT, - "storage" TEXT, - "path" TEXT, - "script_log" BLOB, - "script_line" TEXT, - "download_time" INTEGER, - "postproc_time" INTEGER, - "stage_log" TEXT, - "downloaded" INTEGER, - "completeness" INTEGER, - "fail_message" TEXT, - "url_info" TEXT, - "bytes" INTEGER, - "meta" TEXT - ) - """) - - def save(self): - try: - self.con.commit() - except: - logging.error(Ta('error-sqlCommit')) - logging.debug("Traceback: ", exc_info = True) - - def close(self): - try: - self.c.close() - self.con.close() - except: - logging.error(Ta('error-sqlClose')) - logging.debug("Traceback: ", exc_info = True) - - def remove_all(self): - return self.execute("""DELETE FROM history""") - - def remove_failed(self): - return self.execute('''DELETE FROM history WHERE status="Failed"''', save=True) - - def remove_history(self, jobs=None): - if jobs is None: - self.remove_all() - else: - if type(jobs) == type(''): - jobs = [jobs] - - for job in jobs: - self.execute("""DELETE FROM history WHERE nzo_id=?""", (job,)) - - self.save() - - def add_history_db(self, nzo, storage, path, postproc_time, script_output, script_line): - - - t = build_history_info(nzo, storage, path, postproc_time, script_output, script_line) - - if self.execute("""INSERT INTO history (completed, name, nzb_name, category, pp, script, report, - url, status, nzo_id, storage, path, script_log, script_line, download_time, postproc_time, stage_log, - downloaded, completeness, fail_message, url_info, bytes) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""", t): - self.save() - - def fetch_history(self, start=None, limit=None, search=None): - - if not search: - # Default value - search = '' - else: - # Allow * for wildcard matching and space - search = search.replace('*','%').replace(' ', '%') - - # Allow ^ for start of string and $ for end of string - if search and search.startswith('^'): - search = search.replace('^','') - search += '%' - elif search and search.endswith('$'): - search = search.replace('$','') - search = '%' + search - else: - search = '%' + search + '%' - - # Get the number of results - if self.execute('select count(*) from History WHERE name LIKE ?', (search,)): - total_items = self.c.fetchone()['count(*)'] - else: - total_items = -1 - - if not start: - start = 0 - if not limit: - limit = total_items - - t = (search, start,limit) - fetch_ok = self.execute("""SELECT * FROM history WHERE name LIKE ? ORDER BY completed desc LIMIT ?, ?""", t) - - if fetch_ok: - items = self.c.fetchall() - else: - items = [] - - fetched_items = len(items) - - # Unpack the single line stage log - # Stage Name is seperated by ::: stage lines by ; and stages by \r\n - items = [unpack_history_info(item) for item in items] - - return (items, fetched_items, total_items) - - def get_history_size(self): - """ - Returns the total size of the history and - amounts downloaded in the last month and week - """ - # Total Size of the history - if self.execute('''SELECT sum(bytes) FROM history'''): - f = self.c.fetchone() - total = f['sum(bytes)'] - else: - total = 0 - - # Amount downloaded this month - r = time.gmtime(time.time()) - month_timest = int(time.mktime((r.tm_year, r.tm_mon, 0, 0, 0, 1, r.tm_wday, r.tm_yday, r.tm_isdst))) - - if self.execute('''SELECT sum(bytes) FROM history WHERE "completed">?''', (month_timest,)): - f = self.c.fetchone() - month = f['sum(bytes)'] - else: - month = 0 - - # Amount downloaded this week - monday = find_monday() - week_timest = int(time.mktime(find_monday())) - - if self.execute('''SELECT sum(bytes) FROM history WHERE "completed">?''', (week_timest,)): - f = self.c.fetchone() - week = f['sum(bytes)'] - else: - week = 0 - - return (total, month, week) - - - def get_script_log(self, nzo_id): - t = (nzo_id,) - if self.execute('SELECT script_log FROM history WHERE nzo_id=?', t): - f = self.c.fetchone() - return zlib.decompress(f['script_log']) - else: - return '' - - def get_name(self, nzo_id): - t = (nzo_id,) - if self.execute('SELECT name FROM history WHERE nzo_id=?', t): - return self.c.fetchone()['name'] - else: - return '' - - -def dict_factory(cursor, row): - d = {} - for idx, col in enumerate(cursor.description): - d[col[0]] = row[idx] - return d - -def build_history_info(nzo, storage='', path='', postproc_time=0, script_output='', script_line=''): - ''' Collects all the information needed for the database ''' - - path = decode_factory(path) - storage = decode_factory(storage) - script_line = decode_factory(script_line) - - flagRepair, flagUnpack, flagDelete = nzo.get_repair_opts() - nzo_info = decode_factory(nzo.get_nzo_info()) - - # Get the url and newzbin msgid - report = decode_factory(nzo_info.get('msgid', '')) - if report: - url = 'https://newzbin.com/browse/post/%s/' % (report) - else: - url = decode_factory(nzo_info.get('url', '')) - - #group = nzo.get_group() - - completed = int(time.time()) - name = decode_factory(nzo.get_original_dirname()) - - nzb_name = decode_factory(nzo.get_filename()) - category = decode_factory(nzo.get_cat()) - pps = ['','R','U','D'] - try: - pp = pps[sabnzbd.opts_to_pp(flagRepair, flagUnpack, flagDelete)] - except: - pp = '' - script = decode_factory(nzo.get_script()) - status = decode_factory(nzo.get_status()) - nzo_id = nzo.get_nzo_id() - bytes = nzo.get_bytes_downloaded() - - if script_output: - # Compress the output of the script - script_log = sqlite3.Binary(zlib.compress(script_output)) - # - else: - script_log = '' - - download_time = decode_factory(nzo_info.get('download_time', 0)) - - downloaded = nzo.get_bytes_downloaded() - completeness = 0 - fail_message = decode_factory(nzo.get_fail_msg()) - url_info = nzo_info.get('more_info', '') - - # Get the dictionary containing the stages and their unpack process - stages = decode_factory(nzo.get_unpack_info()) - # Pack the ditionary up into a single string - # Stage Name is seperated by ::: stage lines by ; and stages by \r\n - lines = [] - for key, results in stages.iteritems(): - lines.append('%s:::%s' % (key, ';'.join(results))) - stage_log = '\r\n'.join(lines) - - return (completed, name, nzb_name, category, pp, script, report, url, status, nzo_id, storage, path, \ - script_log, script_line, download_time, postproc_time, stage_log, downloaded, completeness, \ - fail_message, url_info, bytes,) - -def unpack_history_info(item): - ''' - Expands the single line stage_log from the DB - into a python dictionary for use in the history display - ''' - # Stage Name is seperated by ::: stage lines by ; and stages by \r\n - if item['stage_log']: - try: - lines = item['stage_log'].split('\r\n') - except: - logging.error(T('error-badHisNewline@1'), unicoder(item['name'])) - logging.debug('Lines: %s', item['stage_log']) - lines = [] - item['stage_log'] = [] - for line in lines: - stage = {} - try: - key, logs = line.split(':::') - except: - logging.debug('Missing key:::logs "%s"', line) - key = line - logs = '' - stage['name'] = key - stage['actions'] = [] - try: - logs = logs.split(';') - except: - logging.error(T('error-badHisSemic@1'), unicoder(item['name'])) - logging.debug('Logs: %s', logs) - logs = [] - for log in logs: - stage['actions'].append(log) - item['stage_log'].append(stage) - if item['script_log']: - item['script_log'] = zlib.decompress(item['script_log'][:]) - # The action line is only available for items in the postproc queue - if not item.has_key('action_line'): - item['action_line'] = '' - return item - - -def decode_factory(text): - ''' - Recursivly looks through the supplied argument - and converts and text to Unicode - ''' - if isinstance(text, str): - return unicoder(text) - - elif isinstance(text, list): - new_text = [] - for t in text: - new_text.append(decode_factory(t)) - return new_text - - elif isinstance(text, dict): - new_text = {} - for key in text: - new_text[key] = decode_factory(text[key]) - return new_text - else: - return text - - -def find_monday(): - last_monday = datetime.date.today() - minus_one_day = datetime.timedelta(days=1) - while last_monday.weekday() != MONDAY: - last_monday -= minus_one_day - return (last_monday.year, last_monday.month, last_monday.day, 0, 1, 1, 0, 0, 0) - diff --git a/main/sabnzbd/decoder.py b/main/sabnzbd/decoder.py deleted file mode 100644 index 2e6eff3..0000000 --- a/main/sabnzbd/decoder.py +++ /dev/null @@ -1,312 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.decoder - article decoder -""" - -import Queue -import binascii -import logging -import re -from threading import Thread -try: - import _yenc - HAVE_YENC = True - -except ImportError: - HAVE_YENC = False - -import sabnzbd -from sabnzbd.constants import * -from sabnzbd.articlecache import ArticleCache -import sabnzbd.downloader -import sabnzbd.cfg as cfg -import sabnzbd.nzbqueue -from sabnzbd.codecs import name_fixer -from sabnzbd.lang import Ta - -#------------------------------------------------------------------------------- - -class CrcError(Exception): - def __init__(self, needcrc, gotcrc, data): - Exception.__init__(self) - self.needcrc = needcrc - self.gotcrc = gotcrc - self.data = data - -class BadYenc(Exception): - def __init__(self): - Exception.__init__(self) - -#------------------------------------------------------------------------------- - -class Decoder(Thread): - def __init__(self, servers): - Thread.__init__(self) - - self.queue = Queue.Queue() - self.servers = servers - - def decode(self, article, lines): - self.queue.put((article, lines)) - if self.queue.qsize() > MAX_DECODE_QUEUE: - sabnzbd.downloader.delay_downloader() - - def stop(self): - self.queue.put(None) - - def run(self): - while 1: - art_tup = self.queue.get() - if not art_tup: - break - - if self.queue.qsize() < MIN_DECODE_QUEUE and sabnzbd.downloader.delayed(): - sabnzbd.downloader.undelay_downloader() - - article, lines = art_tup - nzf = article.nzf - nzo = nzf.nzo - - data = None - - register = True - - if lines: - try: - logging.info("Decoding %s", article) - - data = decode(article, lines) - nzf.increase_article_count() - except IOError, e: - logging.error(Ta('error-decode@1'), article) - sabnzbd.downloader.pause_downloader() - - article.fetcher = None - - sabnzbd.nzbqueue.reset_try_lists(nzf, nzo) - - register = False - - except CrcError, e: - logging.warning(Ta('warn-crcError@3'), article, e.needcrc, e.gotcrc) - - data = e.data - - if cfg.fail_on_crc(): - new_server_found = self.__search_new_server(article) - if new_server_found: - register = False - - except BadYenc, e: - logging.warning("Badly formed yEnc article in %s", article) - - if cfg.fail_on_crc(): - new_server_found = self.__search_new_server(article) - if new_server_found: - register = False - - except: - logging.error(Ta('error-decodeUnknown@1'), article) - - else: - new_server_found = self.__search_new_server(article) - if new_server_found: - register = False - - if data: - ArticleCache.do.save_article(article, data) - - if register: - sabnzbd.nzbqueue.register_article(article) - - def __search_new_server(self, article): - article.add_to_try_list(article.fetcher) - - nzf = article.nzf - nzo = nzf.nzo - - new_server_found = False - fill_server_found = False - - for server in self.servers: - if server.active and not article.server_in_try_list(server): - if server.fillserver: - fill_server_found = True - else: - new_server_found = True - break - - # Only found one (or more) fill server(s) - if not new_server_found and fill_server_found: - article.allow_fill_server = True - new_server_found = True - - if new_server_found: - article.fetcher = None - - ## Allow all servers to iterate over this nzo and nzf again ## - sabnzbd.nzbqueue.reset_try_lists(nzf, nzo) - - logging.info('%s => found at least one untested server', article) - - else: - logging.warning(Ta('warn-artAllMissing@1'), article) - - return new_server_found -#------------------------------------------------------------------------------- - -YDEC_TRANS = ''.join([chr((i + 256 - 42) % 256) for i in xrange(256)]) -def decode(article, data): - data = strip(data) - ## No point in continuing if we don't have any data left - if data: - nzf = article.nzf - nzo = nzf.nzo - yenc, data = yCheck(data) - ybegin, ypart, yend = yenc - decoded_data = None - - #Deal with non-yencoded posts - if not ybegin: - found = False - for i in xrange(10): - if data[i].startswith('begin '): - nzf.set_filename(name_fixer(data[i].split(None, 2)[2])) - nzf.set_type('uu') - found = True - break - if found: - for n in xrange(i): - data.pop(0) - if data[-1] == 'end': - data.pop() - if data[-1] == '`': - data.pop() - - decoded_data = '\r\n'.join(data) - - #Deal with yenc encoded posts - elif (ybegin and yend): - if 'name' in ybegin: - nzf.set_filename(name_fixer(ybegin['name'])) - else: - logging.debug("Possible corrupt header detected " + \ - "=> ybegin: %s", ybegin) - nzf.set_type('yenc') - # Decode data - if HAVE_YENC: - decoded_data, crc = _yenc.decode_string(''.join(data))[:2] - partcrc = '%08X' % ((crc ^ -1) & 2**32L - 1) - else: - data = ''.join(data) - for i in (0, 9, 10, 13, 27, 32, 46, 61): - j = '=%c' % (i + 64) - data = data.replace(j, chr(i)) - decoded_data = data.translate(YDEC_TRANS) - crc = binascii.crc32(decoded_data) - partcrc = '%08X' % (crc & 2**32L - 1) - - if ypart: - crcname = 'pcrc32' - else: - crcname = 'crc32' - - if crcname in yend: - _partcrc = '0' * (8 - len(yend[crcname])) + yend[crcname].upper() - else: - _partcrc = None - logging.debug("Corrupt header detected " + \ - "=> yend: %s", yend) - - if not (_partcrc == partcrc): - raise CrcError(_partcrc, partcrc, decoded_data) - else: - raise BadYenc() - - return decoded_data - -def yCheck(data): - ybegin = None - ypart = None - yend = None - - ## Check head - for i in xrange(10): - try: - if data[i].startswith('=ybegin '): - splits = 3 - if data[i].find(' part=') > 0: - splits += 1 - if data[i].find(' total=') > 0: - splits += 1 - - ybegin = ySplit(data[i], splits) - - if data[i+1].startswith('=ypart '): - ypart = ySplit(data[i+1]) - data = data[i+2:] - break - else: - data = data[i+1:] - break - except IndexError: - break - - ## Check tail - for i in xrange(-1, -11, -1): - try: - if data[i].startswith('=yend '): - yend = ySplit(data[i]) - data = data[:i] - break - except IndexError: - break - - return ((ybegin, ypart, yend), data) - -# Example: =ybegin part=1 line=128 size=123 name=-=DUMMY=- abc.par -YSPLIT_RE = re.compile(r'([a-zA-Z0-9]+)=') -def ySplit(line, splits = None): - fields = {} - - if splits: - parts = YSPLIT_RE.split(line, splits)[1:] - else: - parts = YSPLIT_RE.split(line)[1:] - - if len(parts) % 2: - return fields - - for i in range(0, len(parts), 2): - key, value = parts[i], parts[i+1] - fields[key] = value.strip() - - return fields - -def strip(data): - while data and not data[0]: - data.pop(0) - - while data and not data[-1]: - data.pop() - - for i in xrange(len(data)): - if data[i][:2] == '..': - data[i] = data[i][1:] - return data diff --git a/main/sabnzbd/decorators.py b/main/sabnzbd/decorators.py deleted file mode 100644 index 5771339..0000000 --- a/main/sabnzbd/decorators.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -################################################################################ -# Decorators # -################################################################################ -from threading import RLock, Condition - -NZBQUEUE_LOCK = RLock() -CV = Condition(NZBQUEUE_LOCK) - -def synchronized(lock): - def wrap(f): - def newFunction(*args, **kw): - lock.acquire() - try: - return f(*args, **kw) - finally: - lock.release() - return newFunction - return wrap - - -def synchronized_CV(func): - global CV - def call_func(*params, **kparams): - CV.acquire() - try: - return func(*params, **kparams) - finally: - CV.notifyAll() - CV.release() - return call_func diff --git a/main/sabnzbd/dirscanner.py b/main/sabnzbd/dirscanner.py deleted file mode 100644 index 473b7fa..0000000 --- a/main/sabnzbd/dirscanner.py +++ /dev/null @@ -1,356 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.dirscanner - Scanner for Watched Folder -""" - -import os -import time -import logging -import re -import zipfile -import gzip -import threading - -import sabnzbd -from sabnzbd.constants import * -from sabnzbd.utils.rarfile import is_rarfile, RarFile -import sabnzbd.nzbstuff as nzbstuff -import sabnzbd.misc as misc -import sabnzbd.config as config -import sabnzbd.cfg as cfg -import sabnzbd.nzbqueue -from sabnzbd.lang import Ta - - -RE_CAT = re.compile(r'^{{(\w+)}}(.+)') # Category prefix -def name_to_cat(fname, cat=None): - """ - Translate Get options associated with the category. - Category options have priority over default options. - """ - if cat is None: - m = RE_CAT.search(fname) - if m and m.group(1) and m.group(2): - cat = m.group(1).lower() - fname = m.group(2) - logging.debug('Job %s has category %s', fname, cat) - - return fname, cat - - -def CompareStat(tup1, tup2): - """ Test equality of two stat-tuples, content-related parts only """ - if tup1.st_ino != tup2.st_ino: return False - if tup1.st_size != tup2.st_size: return False - if tup1.st_mtime != tup2.st_mtime: return False - if tup1.st_ctime != tup2.st_ctime: return False - return True - - -def ProcessArchiveFile(filename, path, pp=None, script=None, cat=None, catdir=None, keep=False, priority=None): - """ Analyse ZIP file and create job(s). - Accepts ZIP files with ONLY nzb/nfo/folder files in it. - returns: -1==Error/Retry, 0==OK, 1==Ignore - """ - if catdir is None: - catdir = cat - - filename, cat = name_to_cat(filename, catdir) - - if path.lower().endswith('.zip'): - try: - zf = zipfile.ZipFile(path) - except: - return -1 - elif is_rarfile(path): - try: - zf = RarFile(path) - except: - return -1 - else: - return 1 - - status = 1 - names = zf.namelist() - names.sort() - for name in names: - name = name.lower() - if not (name.endswith('.nzb') or name.endswith('.nfo') or name.endswith('/')): - status = 1 - break - elif name.endswith('.nzb'): - status = 0 - if status == 0: - for name in names: - if name.lower().endswith('.nzb'): - try: - data = zf.read(name) - except: - zf.close() - return -1 - name = re.sub(r'\[.*nzbmatrix.com\]', '', name) - name = os.path.basename(name) - name = misc.sanitize_foldername(name) - if data: - try: - nzo = nzbstuff.NzbObject(name, 0, pp, script, data, cat=cat, priority=priority) - except: - nzo = None - if nzo: - sabnzbd.nzbqueue.add_nzo(nzo) - zf.close() - try: - if not keep: os.remove(path) - except: - logging.error(Ta('error-remove@1'), path) - logging.debug("Traceback: ", exc_info = True) - status = 1 - else: - zf.close() - status = 1 - - return status - - -def ProcessSingleFile(filename, path, pp=None, script=None, cat=None, catdir=None, keep=False, priority=None, nzbname=None): - """ Analyse file and create a job from it - Supports NZB, NZB.GZ and GZ.NZB-in-disguise - returns: -2==Error/retry, -1==Error, 0==OK, 1==OK-but-ignorecannot-delete - """ - if catdir is None: - catdir = cat - - try: - f = open(path, 'rb') - b1 = f.read(1) - b2 = f.read(1) - f.close() - - if (b1 == '\x1f' and b2 == '\x8b'): - # gzip file or gzip in disguise - name = filename.replace('.nzb.gz', '.nzb') - f = gzip.GzipFile(path, 'rb') - else: - name = filename - f = open(path, 'rb') - data = f.read() - f.close() - except: - logging.warning(Ta('warn-noRead@1'), path) - logging.debug("Traceback: ", exc_info = True) - return -2 - - - if name: - name, cat = name_to_cat(name, catdir) - # The name is used as the name of the folder, so sanitize it using folder specific santization - name = misc.sanitize_foldername(name) - - try: - nzo = nzbstuff.NzbObject(name, 0, pp, script, data, cat=cat, priority=priority, nzbname=nzbname) - except TypeError: - # Duplicate, ignore - nzo = None - except: - if data.find("= 0 and data.find(" 0: - logging.info('Trying to import %s', path) - - # Wait until the attributes are stable for 1 second - # but give up after 3 sec - stable = False - for n in xrange(3): - time.sleep(1.0) - try: - stat_tuple_tmp = os.stat(path) - except: - continue - if CompareStat(stat_tuple, stat_tuple_tmp): - stable = True - break - else: - stat_tuple = stat_tuple_tmp - - if not stable: - continue - - # Handle ZIP files, but only when containing just NZB files - if ext in ('.zip', '.rar') : - res = ProcessArchiveFile(filename, path, catdir=catdir) - if res == -1: - self.suspected[path] = stat_tuple - elif res == 0: - self.error_reported = False - else: - self.ignored[path] = 1 - - # Handle .nzb, .nzb.gz or gzip-disguised-as-nzb - elif ext == '.nzb' or filename.lower().endswith('.nzb.gz'): - res = ProcessSingleFile(filename, path, catdir=catdir) - if res < 0: - self.suspected[path] = stat_tuple - elif res == 0: - self.error_reported = False - else: - self.ignored[path] = 1 - - else: - self.ignored[path] = 1 - - CleanList(self.ignored, folder, files) - CleanList(self.suspected, folder, files) - - logging.info('Dirscanner starting up') - self.shutdown = False - - while not self.shutdown: - # Use variable scan delay - dirscan_dir = self.dirscan_dir - x = self.dirscan_speed - while (x > 0) and not self.shutdown: - time.sleep(1.0) - x = x - 1 - - if dirscan_dir and not self.shutdown and not sabnzbd.PAUSED_ALL: - run_dir(dirscan_dir, None) - - try: - list = os.listdir(dirscan_dir) - except: - if not self.error_reported: - logging.error(Ta('error-readWatched@1'), dirscan_dir) - self.error_reported = True - list = [] - - cats = config.get_categories() - for dd in list: - dpath = os.path.join(dirscan_dir, dd) - if os.path.isdir(dpath) and dd.lower() in cats: - run_dir(dpath, dd.lower()) - diff --git a/main/sabnzbd/downloader.py b/main/sabnzbd/downloader.py deleted file mode 100644 index d8eb41a..0000000 --- a/main/sabnzbd/downloader.py +++ /dev/null @@ -1,842 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.downloader - download engine -""" - -import time -import select -import logging -import datetime -from threading import Thread -from nntplib import NNTPPermanentError -import socket - -import sabnzbd -from sabnzbd.decorators import synchronized_CV, CV -from sabnzbd.decoder import Decoder -from sabnzbd.newswrapper import NewsWrapper, request_server_info -from sabnzbd.utils import osx -from sabnzbd.constants import * -import sabnzbd.config as config -import sabnzbd.cfg as cfg -from sabnzbd.bpsmeter import BPSMeter -import sabnzbd.scheduler -import sabnzbd.nzbqueue -from sabnzbd.lang import T, Ta - -#------------------------------------------------------------------------------ -# Timeout penalty in minutes for each cause -_PENALTY_UNKNOWN = 3 # Unknown cause -_PENALTY_502 = 5 # Unknown 502 -_PENALTY_TIMEOUT = 10 # Server doesn't give an answer (multiple times) -_PENALTY_SHARE = 10 # Account sharing detected -_PENALTY_TOOMANY = 10 # Too many connections -_PENALTY_PERM = 10 # Permanent error, like bad username/password -_PENALTY_SHORT = 1 # Minimal penalty when no_penalties is set - -#------------------------------------------------------------------------------ -# Wrapper functions - -__DOWNLOADER = None # Global pointer to post-proc instance - - -def init(paused): - global __DOWNLOADER - if __DOWNLOADER: - __DOWNLOADER.__init__(paused or __DOWNLOADER.paused) - else: - __DOWNLOADER = Downloader(paused) - -def start(): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.start() - - -def servers(): - global __DOWNLOADER - if __DOWNLOADER: return __DOWNLOADER.servers - -def stop(): - global __DOWNLOADER - CV.acquire() - try: - __DOWNLOADER.stop() - finally: - CV.notifyAll() - CV.release() - try: - __DOWNLOADER.join() - except: - pass - -def alive(): - global __DOWNLOADER - if __DOWNLOADER: - return __DOWNLOADER.isAlive() - else: - return False - -#------------------------------------------------------------------------------ - -@synchronized_CV -def pause_downloader(save=True): - global __DOWNLOADER - if __DOWNLOADER: - __DOWNLOADER.pause() - if cfg.autodisconnect(): - __DOWNLOADER.disconnect() - if save: - sabnzbd.save_state() - -@synchronized_CV -def resume_downloader(): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.resume() - -@synchronized_CV -def delay_downloader(): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.delay() - -@synchronized_CV -def undelay_downloader(): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.undelay() - -@synchronized_CV -def idle_downloader(): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.wait_postproc() - -@synchronized_CV -def unidle_downloader(): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.resume_postproc() - -@synchronized_CV -def limit_speed(value): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.limit_speed(int(value)) - logging.info("Bandwidth limit set to %s", value) - -def update_server(oldserver, newserver): - global __DOWNLOADER - try: - CV.acquire() - try: - __DOWNLOADER.init_server(oldserver, newserver) - finally: - CV.notifyAll() - CV.release() - except: - logging.exception("Error accessing DOWNLOADER?") - -@synchronized_CV -def set_paused(state): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.paused = state - -@synchronized_CV -def unblock(server): - global __DOWNLOADER - if __DOWNLOADER: return __DOWNLOADER.unblock(server) - -@synchronized_CV -def unblock_all(): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.unblock_all() - -@synchronized_CV -def wakeup(): - # Just let the decorator rattle the semaphore - pass - - -#------------------------------------------------------------------------------ - -def paused(): - global __DOWNLOADER - if __DOWNLOADER: return __DOWNLOADER.paused - -def get_limit(): - global __DOWNLOADER - if __DOWNLOADER: return __DOWNLOADER.get_limit() - -def disconnect(): - global __DOWNLOADER - if __DOWNLOADER: __DOWNLOADER.disconnect() - -def delayed(): - global __DOWNLOADER - if __DOWNLOADER: return __DOWNLOADER.delayed - -def active_primaries(): - global __DOWNLOADER - if __DOWNLOADER: return __DOWNLOADER.active_primaries() - -#------------------------------------------------------------------------------ -class Server: - def __init__(self, id, host, port, timeout, threads, fillserver, ssl, username = None, - password = None, optional=False): - self.id = id - self.newid = None - self.restart = False - self.host = host - self.port = port - self.timeout = timeout - self.threads = threads - self.fillserver = fillserver - self.ssl = ssl - self.optional = optional - - self.username = username - self.password = password - - self.busy_threads = [] - self.idle_threads = [] - self.active = True - self.bad_cons = 0 - self.errormsg = '' - self.warning = '' - self.info = None # Will hold getaddrinfo() list - self.request = False # True if a getaddrinfo() request is pending - - for i in range(threads): - self.idle_threads.append(NewsWrapper(self, i+1)) - - def stop(self, readers, writers): - for nw in self.idle_threads: - try: - fno = nw.nntp.sock.fileno() - except: - fno = None - if fno and fno in readers: - readers.pop(fno) - if fno and fno in writers: - writers.pop(fno) - nw.terminate(quit=True) - self.idle_threads = [] - - def __repr__(self): - return "%s:%s" % (self.host, self.port) - - -#------------------------------------------------------------------------------ - -class Downloader(Thread): - def __init__(self, paused = False): - Thread.__init__(self) - - logging.debug("Initializing downloader/decoder") - - # Used for scheduled pausing - self.paused = paused - - #used for throttling bandwidth and scheduling bandwidth changes - self.bandwidth_limit = cfg.bandwidth_limit() - cfg.bandwidth_limit.callback(self.speed_set) - - # Used for reducing speed - self.delayed = False - - self.postproc = False - - self.shutdown = False - - # A user might change server parsm again before server restart is ready. - # Keep a counter to prevent multiple restarts - self.__restart = 0 - - self.force_disconnect = False - - self.read_fds = {} - self.write_fds = {} - - self.servers = [] - self._timers = {} - - for server in config.get_servers(): - self.init_server(None, server) - - self.decoder = Decoder(self.servers) - - - def init_server(self, oldserver, newserver): - """ Setup or re-setup single server - When oldserver is defined and in use, delay startup. - Return True when newserver is primary - Note that the server names are "host:port" strings! - """ - - primary = False - create = False - - servers = config.get_servers() - if newserver in servers: - srv = servers[newserver] - enabled = srv.enable() - host = srv.host() - port = srv.port() - timeout = srv.timeout() - threads = srv.connections() - fillserver = srv.fillserver() - primary = enabled and (not fillserver) and (threads > 0) - ssl = srv.ssl() and sabnzbd.newswrapper.HAVE_SSL - username = srv.username() - password = srv.password() - optional = srv.optional() - create = True - - if oldserver: - for n in xrange(len(self.servers)): - if self.servers[n].id == oldserver: - # Server exists, do re-init later - create = False - self.servers[n].newid = newserver - self.servers[n].restart = True - self.__restart += 1 - break - - if create and enabled and host and port and threads: - self.servers.append(Server(newserver, host, port, timeout, threads, fillserver, ssl, - username, password, optional)) - - return primary - - def stop(self): - self.shutdown = True - osx.sendGrowlMsg("SABnzbd",T('grwl-shutdown-begin-msg'),osx.NOTIFICATION['startup']) - - def resume(self): - logging.info("Resuming") - self.paused = False - - def pause(self): - logging.info("Pausing") - osx.sendGrowlMsg("SABnzbd",T('grwl-paused-msg'),osx.NOTIFICATION['download']) - self.paused = True - if self.is_paused(): - BPSMeter.do.reset() - - def delay(self): - logging.info("Delaying") - self.delayed = True - - def undelay(self): - logging.info("Undelaying") - self.delayed = False - - def wait_postproc(self): - logging.info("Waiting for post-processing to finish") - self.postproc = True - - def resume_postproc(self): - logging.info("Post-processing finished, resuming download") - self.postproc = False - - def disconnect(self): - self.force_disconnect = True - - def limit_speed(self, value): - self.bandwidth_limit = value - - def get_limit(self): - return self.bandwidth_limit - - def speed_set(self): - self.bandwidth_limit = cfg.bandwidth_limit() - - def is_paused(self): - if not self.paused: - return False - else: - if sabnzbd.nzbqueue.has_forced_items(): - return False - else: - return True - - def active_primaries(self): - """ Check if any primary server is defined and active """ - for server in self.servers: - if server.active and not server.fillserver: - return True - return False - - def maybe_block_server(self, server): - if server.optional and server.active and (server.bad_cons/server.threads) > 3: - # Optional and active server had too many problems, - # disable it now and send a re-enable plan to the scheduler - server.bad_cons = 0 - server.active = False - server.errormsg = T('warn-ignoreServer@2') % ('', _PENALTY_TIMEOUT) - logging.warning(Ta('warn-ignoreServer@2'), server.id, _PENALTY_TIMEOUT) - self.plan_server(server.id, _PENALTY_TIMEOUT) - sabnzbd.nzbqueue.reset_all_try_lists() - - - def run(self): - self.decoder.start() - - while 1: - for server in self.servers: - for nw in server.busy_threads[:]: - if nw.nntp.error_msg or (nw.timeout and time.time() > nw.timeout): - if nw.nntp.error_msg: - self.__reset_nw(nw, "", warn=False) - else: - self.__reset_nw(nw, "timed out") - server.bad_cons += 1 - self.maybe_block_server(server) - if server.restart: - if not server.busy_threads: - newid = server.newid - server.stop(self.read_fds, self.write_fds) - self.servers.remove(server) - if newid: - self.init_server(None, newid) - self.__restart -= 1 - sabnzbd.nzbqueue.reset_all_try_lists() - # Have to leave this loop, because we removed element - break - else: - # Restart pending, don't add new articles - continue - - if not server.idle_threads or server.restart or self.is_paused() or self.shutdown or self.delayed or self.postproc: - continue - - if not (server.active and sabnzbd.nzbqueue.has_articles_for(server)): - continue - - for nw in server.idle_threads[:]: - if nw.timeout: - if time.time() < nw.timeout: - continue - else: - nw.timeout = None - - if not server.active: - break - - if server.info is None: - self.maybe_block_server(server) - request_server_info(server) - break - - article = sabnzbd.nzbqueue.get_article(server) - - if not article: - break - - else: - server.idle_threads.remove(nw) - server.busy_threads.append(nw) - - nw.article = article - - if nw.connected: - self.__request_article(nw) - else: - try: - logging.info("%s@%s:%s: Initiating connection", - nw.thrdnum, server.host, server.port) - nw.init_connect() - self.write_fds[nw.nntp.sock.fileno()] = nw - except: - logging.error(Ta('error-noInit@3'), - nw.thrdnum, server.host, - server.port) - logging.debug("Traceback: ", exc_info = True) - self.__reset_nw(nw, "failed to initialize") - - # Exit-point - if self.shutdown: - empty = True - for server in self.servers: - if server.busy_threads: - empty = False - break - - if empty: - self.decoder.stop() - self.decoder.join() - - for server in self.servers: - server.stop(self.read_fds, self.write_fds) - - logging.info("Shutting down") - break - - if self.force_disconnect: - for server in self.servers: - for nw in server.idle_threads + server.busy_threads: - quit = nw.connected and server.active - self.__reset_nw(nw, "forcing disconnect", warn=False, wait=False, quit=quit) - # Make sure server address resolution is refreshed - server.info = None - - self.force_disconnect = False - - # => Select - readkeys = self.read_fds.keys() - writekeys = self.write_fds.keys() - - if readkeys or writekeys: - read, write, error = select.select(readkeys, writekeys, (), 1.0) - - else: - read, write, error = ([], [], []) - - BPSMeter.do.reset() - - time.sleep(1.0) - - CV.acquire() - while (not sabnzbd.nzbqueue.has_articles() or self.is_paused() or self.delayed or self.postproc) and not \ - self.shutdown and not self.__restart: - CV.wait() - CV.release() - - self.force_disconnect = False - - for selected in write: - nw = self.write_fds[selected] - - fileno = nw.nntp.sock.fileno() - - if fileno not in self.read_fds: - self.read_fds[fileno] = nw - - if fileno in self.write_fds: - self.write_fds.pop(fileno) - - if not read: - BPSMeter.do.update(0) - continue - - for selected in read: - nw = self.read_fds[selected] - article = nw.article - server = nw.server - - if article: - nzo = article.nzf.nzo - - try: - bytes, done, skip = nw.recv_chunk() - except: - bytes, done, skip = (0, False, False) - - if skip: - BPSMeter.do.update(0) - continue - - if bytes < 1: - self.__reset_nw(nw, "server closed connection", warn=False, wait=False) - continue - - else: - if self.bandwidth_limit: - bps = BPSMeter.do.get_bps() - bps += bytes - limit = self.bandwidth_limit * 1024 - if bps > limit: - while BPSMeter.do.get_bps() > limit: - time.sleep(0.05) - BPSMeter.do.update(0) - BPSMeter.do.update(bytes) - - if nzo: - nzo.update_bytes(bytes) - nzo.update_avg_kbs(BPSMeter.do.get_bps()) - - if len(nw.lines) == 1: - code = nw.lines[0][:3] - if not nw.connected: - done = False - - try: - nw.finish_connect() - logging.debug("%s@%s:%s last message -> %s", - nw.thrdnum, nw.server.host, - nw.server.port, nw.lines[0]) - nw.lines = [] - nw.data = '' - except NNTPPermanentError, error: - # Handle login problems - block = False - penalty = 0 - msg = error.response - ecode = msg[:3] - display_msg = ' [%s]' % msg - logging.debug('Server login problem: %s, %s', ecode, msg) - if ((ecode in ('502', '400')) and clues_too_many(msg)) or \ - (ecode == '481' and clues_too_many(msg)): - # Too many connections: remove this thread and reduce thread-setting for server - # Plan to go back to the full number after a penalty timeout - if server.active: - server.errormsg = Ta('error-serverTooMany@2') % ('', display_msg) - logging.error(Ta('error-serverTooMany@2'), server.host, server.port) - self.__reset_nw(nw, None, warn=False, destroy=True, quit=True) - self.plan_server(server.id, _PENALTY_TOOMANY) - server.threads -= 1 - elif ecode in ('502', '481') and clues_too_many_ip(msg): - # Account sharing? - if server.active: - server.errormsg = Ta('error-accountSharing') + display_msg - name = ' (%s:%s)' % (server.host, server.port) - logging.error(Ta('error-accountSharing') + name) - penalty = _PENALTY_SHARE - elif ecode in ('481', '482', '381') or (ecode == '502' and clues_login(msg)): - # Cannot login, block this server - if server.active: - server.errormsg = Ta('error-serverLogin@1') % display_msg - logging.error(Ta('error-serverLogin@1'), '%s:%s' % (server.host, server.port)) - penalty = _PENALTY_PERM - block = True - elif ecode == '502': - # Cannot connect (other reasons), block this server - if server.active: - server.errormsg = Ta('warn-noConnectServer@2') % ('', display_msg) - logging.warning(Ta('warn-noConnectServer@2'), '%s:%s' % (server.host, server.port), msg) - penalty = _PENALTY_502 - block = True - else: - # Unknown error, just keep trying - if server.active: - server.errormsg = Ta('error-serverNoConn@2') % ('', display_msg) - logging.error(Ta('error-serverNoConn@2'), '%s:%s' % (server.host, server.port), msg) - penalty = _PENALTY_UNKNOWN - if block or (penalty and server.optional): - if server.active: - server.active = False - if (not server.optional) and cfg.no_penalties(): - penalty = _PENALTY_SHORT - if penalty and (block or server.optional): - logging.info('Server %s ignored for %s minutes', server.id, penalty) - self.plan_server(server.id, penalty) - sabnzbd.nzbqueue.reset_all_try_lists() - self.__reset_nw(nw, None, warn=False, quit=True) - continue - except: - logging.error(Ta('error-serverFailed@4'), - nw.thrdnum, - nw.server.host, nw.server.port, nw.lines[0]) - # No reset-warning needed, above logging is sufficient - self.__reset_nw(nw, None, warn=False) - - if nw.connected: - logging.info("Connecting %s@%s:%s finished", - nw.thrdnum, nw.server.host, - nw.server.port) - self.__request_article(nw) - - elif code == '211': - done = False - - logging.debug("group command ok -> %s", - nw.lines) - nw.group = nw.article.nzf.nzo.get_group() - nw.lines = [] - nw.data = '' - self.__request_article(nw) - - elif code in ('411', '423', '430'): - done = True - nw.lines = None - - logging.info('Thread %s@%s:%s: Article ' + \ - '%s missing', - nw.thrdnum, nw.server.host, - nw.server.port, article.article) - - elif code == '480': - if server.active: - server.active = False - server.errormsg = T('error-serverCred@1') % '' - self.plan_server(server.id, 0) - sabnzbd.nzbqueue.reset_all_try_lists() - msg = T('error-serverCred@1') % ('%s:%s' % (nw.server.host, nw.server.port)) - self.__reset_nw(nw, msg, quit=True) - - if done: - logging.info('Thread %s@%s:%s: %s done', - nw.thrdnum, server.host, - server.port, article.article) - self.decoder.decode(article, nw.lines) - - nw.soft_reset() - server.busy_threads.remove(nw) - server.idle_threads.append(nw) - - def __lookup_nw(self, nw): - ''' Find the fileno matching the nw, needed for closed connections ''' - for f in self.read_fds: - if self.read_fds[f] == nw: - return f - for f in self.write_fds: - if self.read_fds[f] == nw: - return f - return None - - def __reset_nw(self, nw, errormsg, warn=True, wait=True, destroy=False, quit=False): - server = nw.server - article = nw.article - fileno = None - - if nw.nntp: - try: - fileno = nw.nntp.sock.fileno() - except: - fileno = self.__lookup_nw(nw) - destroy = True - nw.nntp.error_msg = None - - if warn and errormsg: - server.warning = errormsg - logging.info('Thread %s@%s:%s: ' + errormsg, - nw.thrdnum, server.host, server.port) - elif errormsg: - logging.info('Thread %s@%s:%s: ' + errormsg, - nw.thrdnum, server.host, server.port) - - if nw in server.busy_threads: - server.busy_threads.remove(nw) - if not (destroy or nw in server.idle_threads): - server.idle_threads.append(nw) - - if fileno and fileno in self.write_fds: - self.write_fds.pop(fileno) - if fileno and fileno in self.read_fds: - self.read_fds.pop(fileno) - - # Remove this server from try_list - if article: - article.fetcher = None - - nzf = article.nzf - nzo = nzf.nzo - - ## Allow all servers to iterate over each nzo/nzf again ## - sabnzbd.nzbqueue.reset_try_lists(nzf, nzo) - - if destroy: - nw.terminate(quit=quit) - else: - nw.hard_reset(wait, quit=quit) - - def __request_article(self, nw): - try: - if cfg.send_group() and nw.article.nzf.nzo.get_group() != nw.group: - group = nw.article.nzf.nzo.get_group() - logging.info('Thread %s@%s:%s: GROUP <%s>', - nw.thrdnum, nw.server.host, - nw.server.port, group) - nw.send_group(group) - else: - logging.info('Thread %s@%s:%s: BODY %s', - nw.thrdnum, nw.server.host, - nw.server.port, nw.article.article) - nw.body() - - fileno = nw.nntp.sock.fileno() - if fileno not in self.read_fds: - self.read_fds[fileno] = nw - except socket.error, err: - logging.info('Looks like server closed connection: %s', err) - self.__reset_nw(nw, "server broke off connection", quit=False) - except: - logging.error('Suspect error in downloader') - logging.debug("Traceback: ", exc_info = True) - self.__reset_nw(nw, "server broke off connection", quit=False) - - #------------------------------------------------------------------------------ - # Timed restart of servers admin. - # For each server all planned events are kept in a list. - # When the first timer of a server fires, all other existing timers - # are neutralized. - # Each server has a dictionary entry, consisting of a list of timestamps. - - def plan_server(self, server_id, interval): - """ Plan the restart of a server in 'interval' minutes """ - logging.debug('Set planned server resume %s in %s mins', server_id, interval) - if server_id not in self._timers: - self._timers[server_id] = [] - stamp = datetime.datetime.now() - self._timers[server_id].append(stamp) - if interval: - sabnzbd.scheduler.plan_server(self.trigger_server, [server_id, stamp], interval) - - def trigger_server(self, server_id, timestamp): - """ Called by scheduler, start server if timer still valid """ - logging.debug('Trigger planned server resume %s', server_id) - if server_id in self._timers: - if timestamp in self._timers[server_id]: - del self._timers[server_id] - self.init_server(server_id, server_id) - - def unblock(self, server_id): - # Remove timer - try: - # Use this instead of if/del, because the line below is atomic - # an if/del could be victim of a race condition - del self._timers[server_id] - except KeyError: - pass - # Activate server if it was inactive - for server in self.servers: - if server.id == server_id and not server.active: - logging.debug('Unblock server %s', server_id) - self.init_server(server_id, server_id) - break - - def unblock_all(self): - for server_id in self._timers.keys(): - self.unblock(server_id) - - -#------------------------------------------------------------------------------ -def clues_login(text): - """ Check for any "failed login" clues in the response code - """ - text = text.lower() - for clue in ('username', 'password', 'invalid', 'authen'): - if clue in text: - return True - return False - - -def clues_too_many(text): - """ Check for any "too many connections" clues in the response code - """ - text = text.lower() - for clue in ('exceed', 'connections', 'too many', 'threads', 'limit'): - if clue in text: - return True - return False - - -def clues_too_many_ip(text): - """ Check for any "account sharing" clues in the response code - """ - text = text.lower() - for clue in ('simultaneous ip', 'multiple ip'): - if clue in text: - return True - return False diff --git a/main/sabnzbd/emailer.py b/main/sabnzbd/emailer.py deleted file mode 100644 index d83d913..0000000 --- a/main/sabnzbd/emailer.py +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.emailer - Send notification emails -""" -#------------------------------------------------------------------------------ - -from sabnzbd.utils import ssmtplib -import smtplib -import os -import logging -import re -import time -import glob -from sabnzbd.constants import * -import sabnzbd -from sabnzbd.misc import to_units, split_host -from sabnzbd.codecs import LatinFilter -import sabnzbd.cfg as cfg -from sabnzbd.lang import T, Ta - - -################################################################################ -# EMAIL_SEND -# -# -################################################################################ -def send(message): - """ Send message if message non-empty and email-parms are set """ - if not message.strip('\n\r\t '): - return "Skipped empty message" - - if cfg.email_server() and cfg.email_to() and cfg.email_from(): - - failure = T('error-mailSend') - server, port = split_host(cfg.email_server()) - if not port: - port = 25 - - logging.info("Connecting to server %s:%s", server, port) - - try: - mailconn = ssmtplib.SMTP_SSL(server, port) - mailconn.ehlo() - - logging.info("Connected to server %s:%s", server, port) - - except Exception, errorcode: - if errorcode[0]: - - # Non SSL mail server - logging.debug("Non-SSL mail server detected " \ - "reconnecting to server %s:%s", server, port) - - try: - mailconn = smtplib.SMTP(server, port) - mailconn.ehlo() - except: - logging.error(Ta('error-mailNoConn')) - return failure - else: - logging.error(Ta('error-mailNoConn')) - return failure - - # TLS support - if mailconn.ehlo_resp: - m = re.search('STARTTLS', mailconn.ehlo_resp, re.IGNORECASE) - if m: - logging.debug("TLS mail server detected") - - try: - mailconn.starttls() - mailconn.ehlo() - except: - logging.error(Ta('error-mailTLS')) - return failure - - # Authentication - if (cfg.email_account() != "") and (cfg.email_pwd() != ""): - try: - mailconn.login(cfg.email_account(), cfg.email_pwd()) - except: - logging.error(Ta('error-mailAuth')) - return failure - - try: - if isinstance(message, unicode): - message = message.encode('utf8') - mailconn.sendmail(cfg.email_from(), cfg.email_to(), message) - except: - logging.error(Ta('error-mailSend')) - return failure - - try: - mailconn.close() - except: - logging.warning(Ta('warn-noEmailClose')) - - logging.info("Notification e-mail succesfully sent") - return T('msg-emailOK') - - - -################################################################################ -# email_endjob -# -# -################################################################################ -from Cheetah.Template import Template - -def send_with_template(prefix, parm): - """ Send an email using template """ - - parm['to'] = cfg.email_to() - parm['from'] = cfg.email_from() - parm['date'] = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) - - lst = [] - path = cfg.email_dir.get_path() - if path and os.path.exists(path): - try: - lst = glob.glob(os.path.join(path, '%s-*.tmpl' % prefix)) - except: - logging.error(Ta('error-mailTempl@1'), path) - else: - path = os.path.join(sabnzbd.DIR_PROG, DEF_LANGUAGE) - tpath = os.path.join(path, '%s-%s.tmpl' % (prefix, cfg.language())) - if os.path.exists(tpath): - lst = [tpath] - else: - lst = [os.path.join(path, '%s-us-en.tmpl' % prefix)] - - ret = "No templates found" - for temp in lst: - if os.access(temp, os.R_OK): - source = _decode_file(temp) - message = Template(source=source, - searchList=[parm], - filter=LatinFilter, - compilerSettings={'directiveStartToken': ''}) - ret = send(message.respond()) - del message - return ret - - -def endjob(filename, msgid, cat, status, path, bytes, stages, script, script_output, script_ret): - """ Send end-of-job email """ - - # Translate the stage names - xstages = {} - for stage in stages: - xstages[T('stage-'+stage.lower())] = stages[stage] - - parm = {} - parm['status'] = status - parm['name'] = filename - parm['path'] = path - parm['msgid'] = str(msgid) - parm['stages'] = xstages - parm['script'] = script - parm['script_output'] = script_output - parm['script_ret'] = script_ret - parm['cat'] = cat - parm['size'] = "%sB" % to_units(bytes) - parm['end_time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) - - return send_with_template('email', parm) - - -def rss_mail(feed, jobs): - """ Send notification email containing list of files """ - - parm = {'amount' : len(jobs), 'feed' : feed, 'jobs' : jobs} - return send_with_template('rss', parm) - - -################################################################################ -# EMAIL_DISKFULL -# -# -################################################################################ -def diskfull(): - """ Send email about disk full, no templates """ - - if cfg.email_full(): - return send(T('email-full@2') % (cfg.email_to(), cfg.email_from())) - else: - return "" - - -################################################################################ -def _decode_file(path): - """ Return content of file in Unicode string - using encoding as specified in the file. - Work-around for dumb handling of decoding by Cheetah. - """ - fp = open(path, 'r') - txt = fp.readline() - m = re.search(r'#encoding[:\s]+(\S+)', txt) - if m and m.group(1): - encoding = m.group(1) - else: - encoding = 'latin-1' - source = fp.read() - fp.close() - - return source.decode(encoding) diff --git a/main/sabnzbd/interface.py b/main/sabnzbd/interface.py deleted file mode 100644 index a1b9071..0000000 --- a/main/sabnzbd/interface.py +++ /dev/null @@ -1,3700 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.interface - webinterface -""" - -import os -import datetime -import time -import cherrypy -import logging -import re -import glob -import urllib -from xml.sax.saxutils import escape - -from sabnzbd.utils.rsslib import RSS, Item -from sabnzbd.utils.json import JsonWriter -import sabnzbd -import sabnzbd.rss -import sabnzbd.scheduler as scheduler - -from Cheetah.Template import Template -import sabnzbd.emailer as emailer -from sabnzbd.misc import real_path, loadavg, \ - to_units, diskfree, disktotal, get_ext, sanitize_foldername, \ - get_filename, cat_to_opts, IntConv, panic_old_queue -from sabnzbd.newswrapper import GetServerParms -from sabnzbd.newzbin import Bookmarks, MSGIDGrabber -from sabnzbd.codecs import TRANS, xml_name, LatinFilter, unicoder, special_fixer, platform_encode -import sabnzbd.config as config -import sabnzbd.cfg as cfg -from sabnzbd.articlecache import ArticleCache -import sabnzbd.newsunpack -from sabnzbd.postproc import PostProcessor -import sabnzbd.downloader as downloader -from sabnzbd.bpsmeter import BPSMeter -import sabnzbd.nzbqueue as nzbqueue -from sabnzbd.database import build_history_info, unpack_history_info -import sabnzbd.wizard -from sabnzbd.utils.servertests import test_nntp_server_dict - -from sabnzbd.constants import * -from sabnzbd.lang import T, Ta, Tspec, list_languages, reset_language - -#------------------------------------------------------------------------------ -# Global constants - -DIRECTIVES = { - 'directiveStartToken': '', - 'prioritizeSearchListOverSelf' : True - } -FILTER = LatinFilter - -#------------------------------------------------------------------------------ -# -def check_server(host, port): - """ Check if server address resolves properly """ - - if host.lower() == 'localhost' and sabnzbd.AMBI_LOCALHOST: - return badParameterResponse(T('msg-warning-ambiLocalhost')) - - if GetServerParms(host, IntConv(port)): - return "" - else: - return badParameterResponse(T('msg-invalidServer@2') % (host, port)) - - -def ListScripts(default=False): - """ Return a list of script names """ - lst = [] - dd = cfg.script_dir.get_path() - - if dd and os.access(dd, os.R_OK): - if default: - lst = ['Default', 'None'] - else: - lst = ['None'] - for script in glob.glob(dd + '/*'): - if os.path.isfile(script): - sc= os.path.basename(script) - if sc != "_svn" and sc != ".svn": - lst.append(sc) - return lst - - -def ListCats(default=False): - """ Return list of categories """ - lst = sorted(config.get_categories().keys()) - if lst: - lst.insert(0, 'None') - if default: - lst.insert(0, 'Default') - return lst - - -def ConvertSpecials(p): - """ Convert None to 'None' and 'Default' to '' - """ - if p is None: - p = 'None' - elif p.lower() == T('default').lower(): - p = '' - return p - - -def Raiser(root, **kwargs): - args = {} - for key in kwargs: - val = kwargs.get(key) - if val: - args[key] = val - root = '%s?%s' % (root, urllib.urlencode(args)) - return cherrypy.HTTPRedirect(root) - - -def queueRaiser(root, kwargs): - return Raiser(root, start=kwargs.get('start'), - limit=kwargs.get('limit'), - search=kwargs.get('search'), - _dc=kwargs.get('_dc')) - -def dcRaiser(root, kwargs): - return Raiser(root, _dc=kwargs.get('_dc')) - - -#------------------------------------------------------------------------------ -def IsNone(value): - """ Return True if either None, 'None' or '' """ - return value==None or value=="" or value.lower()=='none' - - -def List2String(lst): - """ Return list as a comma-separated string """ - if type(lst) == type(""): - return lst - return ', '.join(lst) - -def Strip(txt): - """ Return stripped string, can handle None """ - try: - return txt.strip() - except: - return None - - -#------------------------------------------------------------------------------ -# Web login support -def get_users(): - users = {} - users[cfg.username()] = cfg.password() - return users - -def encrypt_pwd(pwd): - return pwd - - -def set_auth(conf): - """ Set the authentication for CherryPy - """ - if cfg.username() and cfg.password(): - conf.update({'tools.basic_auth.on' : True, 'tools.basic_auth.realm' : 'SABnzbd', - 'tools.basic_auth.users' : get_users, 'tools.basic_auth.encrypt' : encrypt_pwd}) - conf.update({'/api':{'tools.basic_auth.on' : False}, - '/m/api':{'tools.basic_auth.on' : False}, - '/sabnzbd/api':{'tools.basic_auth.on' : False}, - '/sabnzbd/m/api':{'tools.basic_auth.on' : False}, - }) - else: - conf.update({'tools.basic_auth.on':False}) - - -def check_session(kwargs): - """ Check session key """ - key = kwargs.get('session') - if not key: - key = kwargs.get('apikey') - msg = None - if not key: - logging.warning(Ta('warn-missingKey')) - msg = T('error-missingKey') - elif key != cfg.api_key(): - logging.warning(Ta('error-badKey')) - msg = T('error-badKey') - return msg - - -def check_apikey(kwargs, nokey=False): - """ Check api key """ - output = kwargs.get('output') - mode = kwargs.get('mode', '') - - # Don't give a visible warning: these commands are used by some - # external utilities to detect if username/password is required - special = mode in ('get_scripts', 'qstatus') - - # First check APIKEY, if OK that's sufficient - if not (cfg.disable_key() or nokey): - key = kwargs.get('apikey') - if not key: - if not special: - logging.warning(Ta('warn-apikeyNone')) - return report(output, 'API Key Required') - elif key != cfg.api_key(): - logging.warning(Ta('warn-apikeyBad')) - return report(output, 'API Key Incorrect') - else: - return None - - # No active APIKEY, check web credentials instead - if cfg.username() and cfg.password(): - if kwargs.get('ma_username') == cfg.username() and kwargs.get('ma_password') == cfg.password(): - pass - else: - if not special: - logging.warning(Ta('warn-authMissing')) - return report(output, 'Missing authentication') - return None - - -def del_from_section(kwargs): - """ Remove keyword in section """ - section = kwargs.get('section', '') - if section in ('servers', 'rss', 'categories'): - keyword = kwargs.get('keyword') - if keyword: - item = config.get_config(section, keyword) - if item: - item.delete() - del item - config.save_config() - if section == 'servers': - downloader.update_server(keyword, None) - return True - else: - return False - - -#------------------------------------------------------------------------------ -class NoPage: - def __init__(self): - pass - - @cherrypy.expose - def index(self, **kwargs): - return badParameterResponse(T('error-noSecUI')) - - -#------------------------------------------------------------------------------ -_MSG_NO_VALUE = 'expect one parameter' -_MSG_NO_VALUE2 = 'expect two parameters' -_MSG_INT_VALUE = 'expect integer value' -_MSG_NO_ITEM = 'item does not exist' -_MSG_NOT_IMPLEMENTED = 'not implemented' -_MSG_NO_FILE = 'no file given' -_MSG_NO_PATH = 'file does not exist' -_MSG_OUTPUT_FORMAT = 'Format not supported' -_MSG_NO_SUCH_CONFIG = 'Config item does not exist' -_MSG_BAD_SERVER_PARMS = 'Incorrect server settings' - -def remove_callable(dic): - """ Remove all callable items from dictionary """ - for key, value in dic.items(): - if callable(value): - del dic[key] - return dic - -_PLURAL_TO_SINGLE = { - 'categories' : 'category', - 'servers' : 'server', - 'rss' : 'feed', - 'scripts' : 'script', - 'warnings' : 'warning', - 'files' : 'file', - 'jobs' : 'job' - } -def plural_to_single(kw, def_kw=''): - try: - return _PLURAL_TO_SINGLE[kw] - except KeyError: - return def_kw - - -def report(output, error=None, keyword='value', data=None): - """ Report message in json, xml or plain text - If error is set, only an status/error report is made. - If no error and no data, only a status report is made. - Else, a data report is made (optional 'keyword' for outer XML section). - """ - if output == 'json': - content = "application/json;charset=UTF-8" - if error: - info = {'status':False, 'error':error} - elif data is None: - info = {'status':True} - else: - if hasattr(data,'__iter__') and not keyword: - info = data - else: - info = {keyword:data} - response = JsonWriter().write(info) - - elif output == 'xml': - content = "text/xml" - xmlmaker = xml_factory() - if error: - status_str = xmlmaker.run('result', {'status':False, 'error':error}) - elif data is None: - status_str = xmlmaker.run('result', {'status':True}) - else: - status_str = xmlmaker.run(keyword, data) - response = '\n%s\n' % status_str - - else: - content = "text/plain" - if error: - response = "error: %s\n" % error - elif data is None: - response = 'ok\n' - else: - if type(data) in (list, tuple): - # Special handling for list/tuple (backward compatibility) - data = [str(val) for val in data] - response = '%s\n' % ' '.join(data) - else: - response = '%s\n' % str(data) - - cherrypy.response.headers['Content-Type'] = content - cherrypy.response.headers['Pragma'] = 'no-cache' - return response - - -class MainPage: - def __init__(self, web_dir, root, web_dir2=None, root2=None, prim=True, first=0): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - if first >= 1: - self.m = MainPage(web_dir2, root2, prim=False) - if first == 2: - self.sabnzbd = MainPage(web_dir, '/sabnzbd/', web_dir2, '/sabnzbd/m/', prim=True, first=1) - self.queue = QueuePage(web_dir, root+'queue/', prim) - self.history = HistoryPage(web_dir, root+'history/', prim) - self.connections = ConnectionInfo(web_dir, root+'connections/', prim) - self.config = ConfigPage(web_dir, root+'config/', prim) - self.nzb = NzoPage(web_dir, root+'nzb/', prim) - self.wizard = sabnzbd.wizard.Wizard(web_dir, root+'wizard/', prim) - - - @cherrypy.expose - def index(self, **kwargs): - if sabnzbd.OLD_QUEUE and not cfg.warned_old_queue(): - cfg.warned_old_queue.set(True) - config.save_config() - return panic_old_queue() - - if kwargs.get('skip_wizard') or config.get_servers(): - info, pnfo_list, bytespersec = build_header(self.__prim) - - if cfg.newzbin_username() and cfg.newzbin_password.get_stars(): - info['newzbinDetails'] = True - - info['script_list'] = ListScripts(default=True) - info['script'] = cfg.dirscan_script() - - info['cat'] = 'Default' - info['cat_list'] = ListCats(True) - - info['warning'] = '' - if cfg.enable_unrar(): - if sabnzbd.newsunpack.RAR_PROBLEM and not cfg.ignore_wrong_unrar(): - info['warning'] = T('warn-badUnrar') - if not sabnzbd.newsunpack.RAR_COMMAND: - info['warning'] = T('warn-noUnpack') - if not sabnzbd.newsunpack.PAR2_COMMAND: - info['warning'] = T('warn-noRepair') - - template = Template(file=os.path.join(self.__web_dir, 'main.tmpl'), - filter=FILTER, searchList=[info], compilerSettings=DIRECTIVES) - return template.respond() - else: - # Redirect to the setup wizard - raise cherrypy.HTTPRedirect('/wizard/') - - #@cherrypy.expose - #def reset_lang(self, **kwargs): - # msg = check_session(kwargs) - # if msg: return msg - # reset_language(cfg.language()) - # raise dcRaiser(self.__root, kwargs) - - - def add_handler(self, kwargs): - id = kwargs.get('id', '') - if not id: - id = kwargs.get('url', '') - pp = kwargs.get('pp') - script = kwargs.get('script') - cat = kwargs.get('cat') - priority = kwargs.get('priority') - redirect = kwargs.get('redirect') - nzbname = kwargs.get('nzbname') - - RE_NEWZBIN_URL = re.compile(r'/browse/post/(\d+)') - newzbin_url = RE_NEWZBIN_URL.search(id.lower()) - - id = Strip(id) - if id and (id.isdigit() or len(id)==5): - sabnzbd.add_msgid(id, pp, script, cat, priority, nzbname) - elif newzbin_url: - sabnzbd.add_msgid(Strip(newzbin_url.group(1)), pp, script, cat, priority, nzbname) - elif id: - sabnzbd.add_url(id, pp, script, cat, priority, nzbname) - if not redirect: - redirect = self.__root - raise cherrypy.HTTPRedirect(redirect) - - - @cherrypy.expose - def addID(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - raise self.add_handler(kwargs) - - - @cherrypy.expose - def addURL(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - raise self.add_handler(kwargs) - - - @cherrypy.expose - def addFile(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - nzbfile = kwargs.get('nzbfile') - if nzbfile != None and nzbfile.filename and nzbfile.value: - sabnzbd.add_nzbfile(nzbfile, kwargs.get('pp'), kwargs.get('script'), - kwargs.get('cat'), kwargs.get('priority', NORMAL_PRIORITY)) - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def shutdown(self, **kwargs): - msg = check_session(kwargs) - if msg: - yield msg - else: - yield "Initiating shutdown..." - sabnzbd.halt() - yield "
        SABnzbd-%s shutdown finished" % sabnzbd.__version__ - cherrypy.engine.exit() - sabnzbd.SABSTOP = True - - @cherrypy.expose - def pause(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - scheduler.plan_resume(0) - downloader.pause_downloader() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def resume(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - scheduler.plan_resume(0) - sabnzbd.unpause_all() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def rss(self, **kwargs): - msg = check_apikey(kwargs, nokey=True) - if msg: return msg - - if kwargs.get('mode') == 'history': - return rss_history(cherrypy.url(), limit=kwargs.get('limit',50), search=kwargs.get('search')) - elif kwargs.get('mode') == 'queue': - return rss_qstatus() - elif kwargs.get('mode') == 'warnings': - return rss_warnings() - - @cherrypy.expose - def tapi(self, **kwargs): - """Handler for API over http, for template use - """ - msg = check_session(kwargs) - if msg: return msg - return self.api_handler(kwargs) - - @cherrypy.expose - def api(self, **kwargs): - """Handler for API over http, with explicit authentication parameters - """ - if kwargs.get('mode', '') not in ('version', 'auth'): - msg = check_apikey(kwargs) - if msg: return msg - return self.api_handler(kwargs) - - - def api_handler(self, kwargs): - """ Actual API handler, not exposed to Web-ui - """ - mode = kwargs.get('mode') - output = kwargs.get('output') - - if mode == 'set_config': - if kwargs.get('section') == 'servers': - handle_server_api(output, kwargs) - else: - res = config.set_config(kwargs) - if not res: - return report(output, _MSG_NO_SUCH_CONFIG) - config.save_config() - - if mode == 'del_config': - if del_from_section(kwargs): - return report(output) - else: - return report(output, _MSG_NOT_IMPLEMENTED) - - if mode in ('get_config', 'set_config'): - res, data = config.get_dconfig(kwargs.get('section'), kwargs.get('keyword')) - return report(output, keyword='config', data=data) - - if mode == 'qstatus': - if output == 'json': - # Compatibility Fix: - # Old qstatus did not have a keyword, so do not use one now. - keyword = '' - else: - keyword = 'queue' - return report(output, keyword=keyword, data=qstatus_data()) - - if mode == 'queue': - name = kwargs.get('name') - sort = kwargs.get('sort') - dir = kwargs.get('dir') - value = kwargs.get('value') - value2 = kwargs.get('value2') - start = kwargs.get('start') - limit = kwargs.get('limit') - - if name == 'delete': - if value.lower()=='all': - nzbqueue.remove_all_nzo() - return report(output) - elif value: - items = value.split(',') - nzbqueue.remove_multiple_nzos(items) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - elif name == 'delete_nzf': - # Value = nzo_id Value2 = nzf_id - if value and value2: - nzbqueue.remove_nzf(value, value2) - return report(output) - else: - return report(output, _MSG_NO_VALUE2) - elif name == 'rename': - if value and value2: - nzbqueue.rename_nzo(value, special_fixer(value2)) - return report(output) - else: - return report(output, _MSG_NO_VALUE2) - elif name == 'change_complete_action': - # http://localhost:8080/sabnzbd/api?mode=queue&name=change_complete_action&value=hibernate_pc - sabnzbd.change_queue_complete_action(value) - return report(output) - elif name == 'purge': - nzbqueue.remove_all_nzo() - return report(output) - elif name == 'pause': - if value: - items = value.split(',') - nzbqueue.pause_multiple_nzo(items) - return report(output) - elif name == 'resume': - if value: - items = value.split(',') - nzbqueue.resume_multiple_nzo(items) - return report(output) - elif name == 'priority': - if value and value2: - try: - try: - priority = int(value2) - except: - return report(output, _MSG_INT_VALUE) - items = value.split(',') - if len(items) > 1: - pos = nzbqueue.set_priority_multiple(items, priority) - else: - pos = nzbqueue.set_priority(value, priority) - # Returns the position in the queue, -1 is incorrect job-id - return report(output, keyword='position', data=pos) - except: - return report(output, _MSG_NO_VALUE2) - else: - return report(output, _MSG_NO_VALUE2) - elif name == 'sort': - if sort: - nzbqueue.sort_queue(sort,dir) - return report(output) - else: - return report(output, _MSG_NO_VALUE2) - - elif output in ('xml', 'json'): - if sort and sort != 'index': - reverse = dir.lower() == 'desc' - nzbqueue.sort_queue(sort,reverse) - - # &history=1 will show unprocessed items in the history - history = bool(kwargs.get('history')) - - info, pnfo_list, bytespersec, verboseList, dictn = \ - build_queue(history=history, start=start, limit=limit, output=output) - info['categories'] = info.pop('cat_list') - info['scripts'] = info.pop('script_list') - return report(output, keyword='queue', data=remove_callable(info)) - elif output == 'rss': - return rss_qstatus() - - else: - return report(output, _MSG_NOT_IMPLEMENTED) - - if mode == 'options': - return options_list(output) - - if mode == 'translate': - return report(output, keyword='value', data=T(kwargs.get('value'))) - - name = kwargs.get('name', '') - pp = kwargs.get('pp') - script = kwargs.get('script') - cat = kwargs.get('cat') - priority = kwargs.get('priority') - value = kwargs.get('value') - value2 = kwargs.get('value2') - start = kwargs.get('start') - limit = kwargs.get('limit') - nzbname = kwargs.get('nzbname') - - if mode == 'addfile': - # When uploading via flash it will send the nzb in a kw arg called Filedata - if name is None or isinstance(name, str) or isinstance(name, unicode): - name = kwargs.get('Filedata') - # Normal upload will send the nzb in a kw arg called nzbfile - if name is None or isinstance(name, str) or isinstance(name, unicode): - name = kwargs.get('nzbfile') - - if name is not None and name.filename and name.value: - sabnzbd.add_nzbfile(name, pp, script, cat, priority, nzbname) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - - if mode == 'addlocalfile': - if name: - if os.path.exists(name): - fn = get_filename(name) - if fn: - if get_ext(name) in ('.zip','.rar', '.gz'): - sabnzbd.dirscanner.ProcessArchiveFile(\ - fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True) - elif get_ext(name) in ('.nzb'): - sabnzbd.dirscanner.ProcessSingleFile(\ - fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True, nzbname=nzbname) - else: - return report(output, _MSG_NO_FILE) - else: - return report(output, _MSG_NO_PATH) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - - if mode == 'switch': - if value and value2: - pos, prio = nzbqueue.switch(value, value2) - # Returns the new position and new priority (if different) - if output not in ('xml', 'json'): - return report(output, data=(pos, prio)) - else: - return report(output, keyword='result', data={'position':pos, 'priority':prio}) - else: - return report(output, _MSG_NO_VALUE2) - - - if mode == 'change_cat': - if value and value2: - nzo_id = value - cat = value2 - if cat == 'None': - cat = None - nzbqueue.change_cat(nzo_id, cat) - cat, pp, script, cat_priority = cat_to_opts(cat) - - nzbqueue.change_script(nzo_id, script) - nzbqueue.change_opts(nzo_id, pp) - nzbqueue.set_priority(nzo_id, cat_priority) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - - if mode == 'change_script': - if value and value2: - nzo_id = value - script = value2 - if script.lower() == 'none': - script = None - nzbqueue.change_script(nzo_id, script) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - - if mode == 'change_opts': - if value and value2 and value2.isdigit(): - nzbqueue.change_opts(value, int(value2)) - return report(output) - - if mode == 'fullstatus': - return report(output, _MSG_NOT_IMPLEMENTED + ' YET') #xml_full() - - if mode == 'history': - if name == 'delete': - if value.lower()=='all': - history_db = cherrypy.thread_data.history_db - history_db.remove_history() - return report(output) - elif value: - jobs = value.split(',') - history_db = cherrypy.thread_data.history_db - history_db.remove_history(jobs) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - elif not name: - search = kwargs.get('search') - history, pnfo_list, bytespersec = build_header(True) - history['total_size'], history['month_size'], history['week_size'] = get_history_size() - history['slots'], fetched_items, history['noofslots'] = build_history(start=start, limit=limit, verbose=True, search=search) - return report(output, keyword='history', data=remove_callable(history)) - else: - return report(output, _MSG_NOT_IMPLEMENTED) - - if mode == 'get_files': - if value: - return report(output, keyword='files', data=build_file_list(value)) - else: - return report(output, _MSG_NO_VALUE) - - if mode == 'addurl': - if name: - sabnzbd.add_url(name, pp, script, cat, priority, nzbname) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - - if mode == 'addid': - RE_NEWZBIN_URL = re.compile(r'/browse/post/(\d+)') - newzbin_url = RE_NEWZBIN_URL.search(name.lower()) - - if name: name = name.strip() - if name and (name.isdigit() or len(name)==5): - sabnzbd.add_msgid(name, pp, script, cat, priority, nzbname) - return report(output) - elif newzbin_url: - sabnzbd.add_msgid(newzbin_url.group(1), pp, script, cat, priority, nzbname) - return report(output) - elif name: - sabnzbd.add_url(name, pp, script, cat, priority, nzbname) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - - if mode == 'pause': - scheduler.plan_resume(0) - downloader.pause_downloader() - return report(output) - - if mode == 'resume': - scheduler.plan_resume(0) - sabnzbd.unpause_all() - return report(output) - - if mode == 'shutdown': - sabnzbd.halt() - cherrypy.engine.exit() - sabnzbd.SABSTOP = True - return report(output) - - if mode == 'warnings': - if name == 'clear': - return report(output, keyword="warnings", data=sabnzbd.GUIHANDLER.clear()) - elif name == 'show': - return report(output, keyword="warnings", data=sabnzbd.GUIHANDLER.content()) - elif name: - return report(output, _MSG_NOT_IMPLEMENTED) - return report(output, keyword="warnings", data=sabnzbd.GUIHANDLER.content()) - - if mode == 'config': - if name == 'speedlimit' or name == 'set_speedlimit': # http://localhost:8080/sabnzbd/api?mode=config&name=speedlimit&value=400 - if not value: value = '0' - if value.isdigit(): - try: - value = int(value) - except: - return report(output, _MSG_NO_VALUE) - downloader.limit_speed(value) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - elif name == 'get_speedlimit': - return report(output, keyword='speedlimit', data=int(downloader.get_limit())) - elif name == 'set_colorscheme': - if value: - if self.__prim: - cfg.web_color.set(value) - else: - cfg.web_color2.set(value) - return report(output) - else: - return report(output, _MSG_NO_VALUE) - elif name == 'set_pause': - scheduler.plan_resume(IntConv(value)) - return report(output) - - elif name == 'set_apikey': - cfg.api_key.set(config.create_api_key()) - config.save_config() - return report(output, keyword='apikey', data=cfg.api_key()) - - elif name == 'test_server': - - result, msg = test_nntp_server_dict(kwargs) - response = {'result': result, 'message': msg} - - if output: - return report(output, data=response) - else: - return msg - - else: - return report(output, _MSG_NOT_IMPLEMENTED) - - if mode == 'get_cats': - return report(output, keyword="categories", data=ListCats()) - - if mode == 'get_scripts': - return report(output, keyword="scripts", data=ListScripts()) - - if mode == 'version': - return report(output, keyword='version', data=sabnzbd.__version__) - - if mode == 'auth': - auth = 'None' - if cfg.username() and cfg.password(): - auth = 'login' - if not cfg.disable_key(): - auth = 'apikey' - return report(output, keyword='auth', data=auth) - - if mode == 'newzbin': - if name == 'get_bookmarks': - Bookmarks.do.run() - return report(output) - return report(output, _MSG_NOT_IMPLEMENTED) - - if mode == 'restart': - sabnzbd.halt() - cherrypy.engine.restart() - return report(output) - - if mode == 'disconnect': - downloader.disconnect() - return report(output) - - if mode == 'osx_icon': - sabnzbd.OSX_ICON = int(value != '0') - return report(output) - - return report(output, _MSG_NOT_IMPLEMENTED) - - @cherrypy.expose - def scriptlog(self, **kwargs): - """ Duplicate of scriptlog of History, needed for some skins """ - # No session key check, due to fixed URLs - - name = kwargs.get('name') - if name: - history_db = cherrypy.thread_data.history_db - return ShowString(history_db.get_name(name), history_db.get_script_log(name)) - else: - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def retry(self, **kwargs): - """ Duplicate of retry of History, needed for some skins """ - msg = check_session(kwargs) - if msg: return msg - - url = kwargs.get('url', '') - pp = kwargs.get('pp') - cat = kwargs.get('cat') - script = kwargs.get('script') - - url = url.strip() - if url and (url.isdigit() or len(url)==5): - sabnzbd.add_msgid(url, pp, script, cat) - elif url: - sabnzbd.add_url(url, pp, script, cat) - if url: - return ShowOK(url) - else: - raise dcRaiser(self.__root, kwargs) - -#------------------------------------------------------------------------------ -class NzoPage: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__verbose = False - self.__prim = prim - self.__cached_selection = {} #None - - @cherrypy.expose - def default(self, *args, **kwargs): - # Allowed URL's - # /nzb/SABnzbd_nzo_xxxxx/ - # /nzb/SABnzbd_nzo_xxxxx/details - # /nzb/SABnzbd_nzo_xxxxx/files - # /nzb/SABnzbd_nzo_xxxxx/bulk_operation - # /nzb/SABnzbd_nzo_xxxxx/save - - info, pnfo_list, bytespersec = build_header(self.__prim) - nzo_id = None - - for a in args: - if a.startswith('SABnzbd_nzo'): - nzo_id = a - break - - if nzo_id: - # /SABnzbd_nzo_xxxxx/bulk_operation - if 'bulk_operation' in args: - return self.bulk_operation(nzo_id, kwargs) - - # /SABnzbd_nzo_xxxxx/details - elif 'details' in args: - info = self.nzo_details(info, pnfo_list, nzo_id) - - # /SABnzbd_nzo_xxxxx/files - elif 'files' in args: - info = self.nzo_files(info, pnfo_list, nzo_id) - - # /SABnzbd_nzo_xxxxx/save - elif 'save' in args: - self.save_details(nzo_id, args, kwargs) - return - - # /SABnzbd_nzo_xxxxx/ - else: - info = self.nzo_details(info, pnfo_list, nzo_id) - info = self.nzo_files(info, pnfo_list, nzo_id) - - template = Template(file=os.path.join(self.__web_dir, 'nzo.tmpl'), - filter=FILTER, searchList=[info], compilerSettings=DIRECTIVES) - return template.respond() - - - def nzo_details(self, info, pnfo_list, nzo_id): - slot = {} - n = 0 - for pnfo in pnfo_list: - if pnfo[PNFO_NZO_ID_FIELD] == nzo_id: - repair = pnfo[PNFO_REPAIR_FIELD] - unpack = pnfo[PNFO_UNPACK_FIELD] - delete = pnfo[PNFO_DELETE_FIELD] - unpackopts = sabnzbd.opts_to_pp(repair, unpack, delete) - script = pnfo[PNFO_SCRIPT_FIELD] - if script is None: - script = 'None' - cat = pnfo[PNFO_EXTRA_FIELD1] - if not cat: - cat = 'None' - filename = xml_name(pnfo[PNFO_FILENAME_FIELD]) - priority = pnfo[PNFO_PRIORITY_FIELD] - - slot['nzo_id'] = str(nzo_id) - slot['cat'] = cat - slot['filename'] = filename - slot['script'] = script - slot['priority'] = str(priority) - slot['unpackopts'] = str(unpackopts) - info['index'] = n - break - n += 1 - - info['slot'] = slot - info['script_list'] = ListScripts() - info['cat_list'] = ListCats() - info['noofslots'] = len(pnfo_list) - - return info - - def nzo_files(self, info, pnfo_list, nzo_id): - - active = [] - for pnfo in pnfo_list: - if pnfo[PNFO_NZO_ID_FIELD] == nzo_id: - info['nzo_id'] = nzo_id - info['filename'] = xml_name(pnfo[PNFO_FILENAME_FIELD]) - - for tup in pnfo[PNFO_ACTIVE_FILES_FIELD]: - bytes_left, bytes, fn, date, nzf_id = tup - checked = False - if nzf_id in self.__cached_selection and \ - self.__cached_selection[nzf_id] == 'on': - checked = True - - line = {'filename':xml_name(fn), - 'mbleft':"%.2f" % (bytes_left / MEBI), - 'mb':"%.2f" % (bytes / MEBI), - 'size': format_bytes(bytes), - 'sizeleft':format_bytes(bytes_left), - 'nzf_id':nzf_id, - 'age':calc_age(date), - 'checked':checked} - active.append(line) - break - - info['active_files'] = active - return info - - - def save_details(self, nzo_id, args, kwargs): - index = kwargs.get('index', None) - name = kwargs.get('name',None) - pp = kwargs.get('pp',None) - script = kwargs.get('script',None) - cat = kwargs.get('cat',None) - priority = kwargs.get('priority',None) - nzo = sabnzbd.nzbqueue.get_nzo(nzo_id) - - if index != None: - nzbqueue.switch(nzo_id, index) - if name != None: - sabnzbd.nzbqueue.change_name(nzo_id, special_fixer(name)) - if cat != None: - sabnzbd.nzbqueue.change_cat(nzo_id,cat) - if script != None: - sabnzbd.nzbqueue.change_script(nzo_id,script) - if pp != None: - sabnzbd.nzbqueue.change_opts(nzo_id,pp) - if priority != None and nzo and nzo.get_priority() != int(priority): - sabnzbd.nzbqueue.set_priority(nzo_id, priority) - - args = [arg for arg in args if arg != 'save'] - extra = '/'.join(args) - url = cherrypy._urljoin(self.__root,extra) - if url and not url.endswith('/'): - url += '/' - raise dcRaiser(url, {}) - - def bulk_operation(self, nzo_id, kwargs): - self.__cached_selection = kwargs - if kwargs['action_key'] == 'Delete': - for key in kwargs: - if kwargs[key] == 'on': - nzbqueue.remove_nzf(nzo_id, key) - - elif kwargs['action_key'] == 'Top' or kwargs['action_key'] == 'Up' or \ - kwargs['action_key'] == 'Down' or kwargs['action_key'] == 'Bottom': - nzf_ids = [] - for key in kwargs: - if kwargs[key] == 'on': - nzf_ids.append(key) - if kwargs['action_key'] == 'Top': - nzbqueue.move_top_bulk(nzo_id, nzf_ids) - elif kwargs['action_key'] == 'Up': - nzbqueue.move_up_bulk(nzo_id, nzf_ids) - elif kwargs['action_key'] == 'Down': - nzbqueue.move_down_bulk(nzo_id, nzf_ids) - elif kwargs['action_key'] == 'Bottom': - nzbqueue.move_bottom_bulk(nzo_id, nzf_ids) - - if nzbqueue.get_nzo(nzo_id): - url = cherrypy._urljoin(self.__root, nzo_id) - else: - url = cherrypy._urljoin(self.__root, '../queue') - if url and not url.endswith('/'): - url += '/' - raise dcRaiser(url, kwargs) - -#------------------------------------------------------------------------------ -class QueuePage: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__verbose = False - self.__verboseList = [] - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - start = kwargs.get('start') - limit = kwargs.get('limit') - dummy2 = kwargs.get('dummy2') - - info, pnfo_list, bytespersec, self.__verboseList, self.__dict__ = build_queue(self.__web_dir, self.__root, self.__verbose, self.__prim, self.__verboseList, self.__dict__, start=start, limit=limit, dummy2=dummy2) - - template = Template(file=os.path.join(self.__web_dir, 'queue.tmpl'), - filter=FILTER, searchList=[info], compilerSettings=DIRECTIVES) - return template.respond() - - - - @cherrypy.expose - def delete(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - uid = kwargs.get('uid') - if uid: - nzbqueue.remove_nzo(uid, False) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def purge(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzbqueue.remove_all_nzo() - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def removeNzf(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzo_id = kwargs.get('nzo_id') - nzf_id = kwargs.get('nzf_id') - if nzo_id and nzf_id: - nzbqueue.remove_nzf(nzo_id, nzf_id) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def tog_verbose(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - self.__verbose = not self.__verbose - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def tog_uid_verbose(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - uid = kwargs.get('uid') - if self.__verboseList.count(uid): - self.__verboseList.remove(uid) - else: - self.__verboseList.append(uid) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def change_queue_complete_action(self, **kwargs): - """ - Action or script to be performed once the queue has been completed - Scripts are prefixed with 'script_' - """ - msg = check_session(kwargs) - if msg: return msg - sabnzbd.change_queue_complete_action(kwargs.get('action')) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def switch(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - uid1 = kwargs.get('uid1') - uid2 = kwargs.get('uid2') - if uid1 and uid2: - nzbqueue.switch(uid1, uid2) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def change_opts(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzo_id = kwargs.get('nzo_id') - pp = kwargs.get('pp', '') - if nzo_id and pp and pp.isdigit(): - nzbqueue.change_opts(nzo_id, int(pp)) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def change_script(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzo_id = kwargs.get('nzo_id') - script = kwargs.get('script', '') - if nzo_id and script: - if script == 'None': - script = None - nzbqueue.change_script(nzo_id, script) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def change_cat(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzo_id = kwargs.get('nzo_id') - cat = kwargs.get('cat', '') - if nzo_id and cat: - if cat == 'None': - cat = None - nzbqueue.change_cat(nzo_id, cat) - item = config.get_config('categories', cat) - if item: - cat, pp, script, priority = cat_to_opts(cat) - else: - script = cfg.dirscan_script() - pp = cfg.dirscan_pp() - priority = cfg.dirscan_priority() - - nzbqueue.change_script(nzo_id, script) - nzbqueue.change_opts(nzo_id, pp) - nzbqueue.set_priority(nzo_id, priority) - - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def shutdown(self, **kwargs): - msg = check_session(kwargs) - if msg: - yield msg - else: - yield "Initiating shutdown..." - sabnzbd.halt() - cherrypy.engine.exit() - yield "
        SABnzbd-%s shutdown finished" % sabnzbd.__version__ - sabnzbd.SABSTOP = True - - @cherrypy.expose - def pause(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - scheduler.plan_resume(0) - downloader.pause_downloader() - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def resume(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - scheduler.plan_resume(0) - sabnzbd.unpause_all() - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def pause_nzo(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - uid = kwargs.get('uid', '') - nzbqueue.pause_multiple_nzo(uid.split(',')) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def resume_nzo(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - uid = kwargs.get('uid', '') - nzbqueue.resume_multiple_nzo(uid.split(',')) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def set_priority(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzbqueue.set_priority(kwargs.get('nzo_id'), kwargs.get('priority')) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def sort_by_avg_age(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzbqueue.sort_queue('avg_age', kwargs.get('dir')) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def sort_by_name(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzbqueue.sort_queue('name', kwargs.get('dir')) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def sort_by_size(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - nzbqueue.sort_queue('size', kwargs.get('dir')) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def set_speedlimit(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - downloader.limit_speed(IntConv(kwargs.get('value'))) - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def set_pause(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - scheduler.plan_resume(IntConv(kwargs.get('value'))) - raise dcRaiser(self.__root, kwargs) - -class HistoryPage: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__verbose = False - self.__verbose_list = [] - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - start = kwargs.get('start') - limit = kwargs.get('limit') - search = kwargs.get('search') - - history, pnfo_list, bytespersec = build_header(self.__prim) - - history['isverbose'] = self.__verbose - - if cfg.newzbin_username() and cfg.newzbin_password(): - history['newzbinDetails'] = True - - #history_items, total_bytes, bytes_beginning = sabnzbd.history_info() - #history['bytes_beginning'] = "%.2f" % (bytes_beginning / GIGI) - - history['total_size'], history['month_size'], history['week_size'] = get_history_size() - - history['lines'], history['fetched'], history['noofslots'] = build_history(limit=limit, start=start, verbose=self.__verbose, verbose_list=self.__verbose_list, search=search) - - if search: - history['search'] = escape(search) - else: - history['search'] = '' - - history['start'] = IntConv(start) - history['limit'] = IntConv(limit) - history['finish'] = history['start'] + history['limit'] - if history['finish'] > history['noofslots']: - history['finish'] = history['noofslots'] - if not history['finish']: - history['finish'] = history['fetched'] - - - template = Template(file=os.path.join(self.__web_dir, 'history.tmpl'), - filter=FILTER, searchList=[history], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def purge(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - history_db = cherrypy.thread_data.history_db - history_db.remove_history() - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def delete(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - job = kwargs.get('job') - if job: - jobs = job.split(',') - history_db = cherrypy.thread_data.history_db - history_db.remove_history(jobs) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def purge_failed(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - history_db = cherrypy.thread_data.history_db - history_db.remove_failed() - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def reset(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - #sabnzbd.reset_byte_counter() - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def tog_verbose(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - jobs = kwargs.get('jobs') - if not jobs: - self.__verbose = not self.__verbose - self.__verbose_list = [] - else: - if self.__verbose: - self.__verbose = False - else: - jobs = jobs.split(',') - for job in jobs: - if job in self.__verbose_list: - self.__verbose_list.remove(job) - else: - self.__verbose_list.append(job) - raise queueRaiser(self.__root, kwargs) - - @cherrypy.expose - def scriptlog(self, **kwargs): - """ Duplicate of scriptlog of History, needed for some skins """ - # No session key check, due to fixed URLs - - name = kwargs.get('name') - if name: - history_db = cherrypy.thread_data.history_db - return ShowString(history_db.get_name(name), history_db.get_script_log(name)) - else: - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def retry(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - url = kwargs.get('url', '').strip() - pp = kwargs.get('pp') - cat = kwargs.get('cat') - script = kwargs.get('script') - if url and (url.isdigit() or len(url)==5): - sabnzbd.add_msgid(url, pp, script, cat) - elif url: - sabnzbd.add_url(url, pp, script, cat, nzbname=kwargs.get('nzbname')) - if url: - return ShowOK(url) - else: - raise dcRaiser(self.__root, kwargs) - -#------------------------------------------------------------------------------ -class ConfigPage: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - self.directories = ConfigDirectories(web_dir, root+'directories/', prim) - self.email = ConfigEmail(web_dir, root+'email/', prim) - self.general = ConfigGeneral(web_dir, root+'general/', prim) - self.newzbin = ConfigNewzbin(web_dir, root+'newzbin/', prim) - self.rss = ConfigRss(web_dir, root+'rss/', prim) - self.scheduling = ConfigScheduling(web_dir, root+'scheduling/', prim) - self.server = ConfigServer(web_dir, root+'server/', prim) - self.switches = ConfigSwitches(web_dir, root+'switches/', prim) - self.categories = ConfigCats(web_dir, root+'categories/', prim) - self.sorting = ConfigSorting(web_dir, root+'sorting/', prim) - - - @cherrypy.expose - def index(self, **kwargs): - conf, pnfo_list, bytespersec = build_header(self.__prim) - - conf['configfn'] = config.get_filename() - - new = {} - for svr in config.get_servers(): - new[svr] = {} - conf['servers'] = new - - template = Template(file=os.path.join(self.__web_dir, 'config.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def restart(self, **kwargs): - msg = check_session(kwargs) - if msg: - yield msg - else: - yield T('restart1') - sabnzbd.halt() - yield T('restart2') - cherrypy.engine.restart() - - -#------------------------------------------------------------------------------ -LIST_DIRPAGE = ( \ - 'download_dir', 'download_free', 'complete_dir', 'cache_dir', - 'nzb_backup_dir', 'dirscan_dir', 'dirscan_speed', 'script_dir', - 'email_dir', 'permissions', 'log_dir' - ) - -class ConfigDirectories: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - for kw in LIST_DIRPAGE: - conf[kw] = config.get_config('misc', kw)() - - conf['my_home'] = sabnzbd.DIR_HOME - conf['my_lcldata'] = sabnzbd.DIR_LCLDATA - - # Temporary fix, problem with build_header - conf['restart_req'] = sabnzbd.RESTART_REQ - - template = Template(file=os.path.join(self.__web_dir, 'config_directories.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def saveDirectories(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - for kw in LIST_DIRPAGE: - value = kwargs.get(kw) - if value != None: - value = platform_encode(value) - msg = config.get_config('misc', kw).set(value) - if msg: - return badParameterResponse(msg) - - config.save_config() - raise dcRaiser(self.__root, kwargs) - - -SWITCH_LIST = \ - ('par2_multicore', 'par_option', 'enable_unrar', 'enable_unzip', 'enable_filejoin', - 'enable_tsjoin', 'send_group', 'fail_on_crc', 'top_only', - 'dirscan_opts', 'enable_par_cleanup', 'auto_sort', 'check_new_rel', 'auto_disconnect', - 'safe_postproc', 'no_dupes', 'replace_spaces', 'replace_illegal', 'auto_browser', - 'ignore_samples', 'pause_on_post_processing', 'quick_check', 'dirscan_script', 'nice', 'ionice', - 'dirscan_priority', 'ssl_type' - ) - -#------------------------------------------------------------------------------ -class ConfigSwitches: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - conf['nt'] = sabnzbd.WIN32 - conf['have_nice'] = bool(sabnzbd.newsunpack.NICE_COMMAND) - conf['have_ionice'] = bool(sabnzbd.newsunpack.IONICE_COMMAND) - - for kw in SWITCH_LIST: - conf[kw] = config.get_config('misc', kw)() - - conf['script_list'] = ListScripts() - - template = Template(file=os.path.join(self.__web_dir, 'config_switches.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def saveSwitches(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - for kw in SWITCH_LIST: - item = config.get_config('misc', kw) - value = platform_encode(kwargs.get(kw)) - msg = item.set(value) - if msg: - return badParameterResponse(msg) - - config.save_config() - raise dcRaiser(self.__root, kwargs) - - -#------------------------------------------------------------------------------ -GENERAL_LIST = ( - 'host', 'port', 'username', 'password', 'disable_api_key', - 'refresh_rate', 'rss_rate', - 'cache_limit', - 'enable_https', 'https_port', 'https_cert', 'https_key' - ) - -class ConfigGeneral: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - def ListColors(web_dir): - lst = [] - web_dir = os.path.join(sabnzbd.DIR_INTERFACES ,web_dir) - dd = os.path.abspath(web_dir + '/templates/static/stylesheets/colorschemes') - if (not dd) or (not os.access(dd, os.R_OK)): - return lst - for color in glob.glob(dd + '/*'): - col= os.path.basename(color).replace('.css','') - if col != "_svn" and col != ".svn": - lst.append(col) - return lst - - def add_color(dir, color): - if dir: - if not color: - try: - color = DEF_SKIN_COLORS[dir.lower()] - except KeyError: - return dir - return '%s - %s' % (dir, color) - else: - return '' - - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - conf['configfn'] = config.get_filename() - - # Temporary fix, problem with build_header - conf['restart_req'] = sabnzbd.RESTART_REQ - - if sabnzbd.newswrapper.HAVE_SSL: - conf['have_ssl'] = 1 - else: - conf['have_ssl'] = 0 - - wlist = [] - wlist2 = ['None'] - interfaces = glob.glob(sabnzbd.DIR_INTERFACES + "/*") - for k in interfaces: - if k.endswith(DEF_STDINTF): - interfaces.remove(k) - interfaces.insert(0, k) - break - for web in interfaces: - rweb = os.path.basename(web) - if rweb != '.svn' and rweb != '_svn' and os.access(web + '/' + DEF_MAIN_TMPL, os.R_OK): - cols = ListColors(rweb) - if cols: - for col in cols: - if rweb != 'Mobile': - wlist.append(add_color(rweb, col)) - wlist2.append(add_color(rweb, col)) - else: - if rweb != 'Mobile': - wlist.append(rweb) - wlist2.append(rweb) - conf['web_list'] = wlist - conf['web_list2'] = wlist2 - - # Obsolete template variables, must exist and have a value - conf['web_colors'] = ['None'] - conf['web_color'] = 'None' - conf['web_colors2'] = ['None'] - conf['web_color2'] = 'None' - - conf['web_dir'] = add_color(cfg.web_dir(), cfg.web_color()) - conf['web_dir2'] = add_color(cfg.web_dir2(), cfg.web_color2()) - - conf['language'] = cfg.language() - list = list_languages(sabnzbd.DIR_LANGUAGE) - if len(list) < 2: - list = [] - conf['lang_list'] = list - - conf['disable_api_key'] = cfg.disable_key() - conf['host'] = cfg.cherryhost() - conf['port'] = cfg.cherryport() - conf['https_port'] = cfg.https_port() - conf['https_cert'] = cfg.https_cert() - conf['https_key'] = cfg.https_key() - conf['enable_https'] = cfg.enable_https() - conf['username'] = cfg.username() - conf['password'] = cfg.password.get_stars() - conf['bandwidth_limit'] = cfg.bandwidth_limit() - conf['refresh_rate'] = cfg.refresh_rate() - conf['rss_rate'] = cfg.rss_rate() - conf['cache_limit'] = cfg.cache_limit() - conf['cleanup_list'] = List2String(cfg.cleanup_list()) - - template = Template(file=os.path.join(self.__web_dir, 'config_general.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def saveGeneral(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - # Special handling for cache_limitstr - #kwargs['cache_limit'] = kwargs.get('cache_limitstr') - - # Handle general options - for kw in GENERAL_LIST: - item = config.get_config('misc', kw) - value = platform_encode(kwargs.get(kw)) - msg = item.set(value) - if msg: - return badParameterResponse(msg) - - # Handle special options - language = kwargs.get('language') - if language and language != cfg.language(): - cfg.language.set(language) - reset_language(language) - - cleanup_list = kwargs.get('cleanup_list') - if cleanup_list and sabnzbd.WIN32: - cleanup_list = cleanup_list.lower() - cfg.cleanup_list.set_string(cleanup_list) - - web_dir = kwargs.get('web_dir') - web_dir2 = kwargs.get('web_dir2') - change_web_dir(web_dir) - try: - web_dir2, web_color2 = web_dir2.split(' - ') - except: - web_color2 = '' - web_dir2_path = real_path(sabnzbd.DIR_INTERFACES, web_dir2) - - if web_dir2 == 'None': - cfg.web_dir2.set('') - elif os.path.exists(web_dir2_path): - cfg.web_dir2.set(web_dir2) - cfg.web_color2.set(web_color2) - - bandwidth_limit = kwargs.get('bandwidth_limit') - if bandwidth_limit != None: - bandwidth_limit = IntConv(bandwidth_limit) - cfg.bandwidth_limit.set(bandwidth_limit) - - config.save_config() - - # Update CherryPy authentication - set_auth(cherrypy.config) - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def generateAPIKey(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - logging.debug('API Key Changed') - cfg.api_key.set(config.create_api_key()) - config.save_config() - raise dcRaiser(self.__root, kwargs) - -def change_web_dir(web_dir): - try: - web_dir, web_color = web_dir.split(' - ') - except: - try: - web_color = DEF_SKIN_COLORS[web_dir.lower()] - except: - web_color = '' - - web_dir_path = real_path(sabnzbd.DIR_INTERFACES, web_dir) - - if not os.path.exists(web_dir_path): - return badParameterResponse('Cannot find web template: %s' % unicoder(web_dir_path)) - else: - cfg.web_dir.set(web_dir) - cfg.web_color.set(web_color) - - -#------------------------------------------------------------------------------ - -class ConfigServer: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - new = {} - servers = config.get_servers() - for svr in servers: - new[svr] = servers[svr].get_dict(safe=True) - conf['servers'] = new - - if sabnzbd.newswrapper.HAVE_SSL: - conf['have_ssl'] = 1 - else: - conf['have_ssl'] = 0 - - template = Template(file=os.path.join(self.__web_dir, 'config_server.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - - @cherrypy.expose - def addServer(self, **kwargs): - return handle_server(kwargs, self.__root) - - - @cherrypy.expose - def saveServer(self, **kwargs): - return handle_server(kwargs, self.__root) - - @cherrypy.expose - def testServer(self, **kwargs): - return handle_server_test(kwargs, self.__root) - - - @cherrypy.expose - def delServer(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - kwargs['section'] = 'servers' - kwargs['keyword'] = kwargs.get('server') - del_from_section(kwargs) - raise dcRaiser(self.__root, kwargs) - -def handle_server(kwargs, root=None): - """ Internal server handler """ - msg = check_session(kwargs) - if msg: return msg - - host = kwargs.get('host', '').strip() - if not host: - return badParameterResponse(T('error-needServer')) - - port = kwargs.get('port', '').strip() - if not port: - if not kwargs.get('ssl', '').strip(): - port = '119' - else: - port = '563' - kwargs['port'] = port - - if kwargs.get('connections', '').strip() == '': - kwargs['connections'] = '1' - - msg = check_server(host, port) - if msg: - return msg - - server = '%s:%s' % (host, port) - - svr = None - old_server = kwargs.get('server') - if old_server: - svr = config.get_config('servers', old_server) - if not svr: - svr = config.get_config('servers', server) - - if svr: - for kw in ('fillserver', 'ssl', 'enable', 'optional'): - if kw not in kwargs.keys(): - kwargs[kw] = None - svr.set_dict(kwargs) - svr.rename(server) - else: - old_server = None - config.ConfigServer(server, kwargs) - - config.save_config() - downloader.update_server(old_server, server) - if root: - raise dcRaiser(root, kwargs) - -def handle_server_test(kwargs, root): - result, msg = test_nntp_server_dict(kwargs) - return msg - - -def handle_server_api(output, kwargs): - """ Special handler for API-call 'set_config' - """ - name = kwargs.get('keyword') - if not name: - name = kwargs.get('name') - if not name: - host = kwargs.get('host') - port = kwargs.get('port', '119') - if host: - name = '%s:%s' % (host, port) - else: - return False - - server = config.get_config('servers', name) - if server: - server.set_dict(kwargs) - old_name = name - else: - config.ConfigServer(name, kwargs) - old_name = None - downloader.update_server(old_name, name) - - - -#------------------------------------------------------------------------------ - -class ConfigRss: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - conf['script_list'] = ListScripts(default=True) - pick_script = conf['script_list'] != [] - - conf['cat_list'] = ListCats(default=True) - pick_cat = conf['cat_list'] != [] - - rss = {} - feeds = config.get_rss() - for feed in feeds: - rss[feed] = feeds[feed].get_dict() - filters = feeds[feed].filters() - rss[feed]['filters'] = filters - rss[feed]['filtercount'] = len(filters) - - rss[feed]['pick_cat'] = pick_cat - rss[feed]['pick_script'] = pick_script - - conf['rss'] = rss - - # Find a unique new Feed name - unum = 1 - while 'Feed'+str(unum) in feeds: - unum += 1 - conf['feed'] = 'Feed' + str(unum) - - template = Template(file=os.path.join(self.__web_dir, 'config_rss.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def upd_rss_feed(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - if kwargs.get('enable') is not None: - del kwargs['enable'] - try: - cfg = config.get_rss()[kwargs.get('feed')] - except KeyError: - cfg = None - if cfg and Strip(kwargs.get('uri')): - cfg.set_dict(kwargs) - config.save_config() - - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def toggle_rss_feed(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - try: - cfg = config.get_rss()[kwargs.get('feed')] - except KeyError: - cfg = None - if cfg: - cfg.enable.set(not cfg.enable()) - config.save_config() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def add_rss_feed(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - feed= Strip(kwargs.get('feed')) - uri = Strip(kwargs.get('uri')) - try: - cfg = config.get_rss()[feed] - except KeyError: - cfg = None - if (not cfg) and uri: - config.ConfigRSS(feed, kwargs) - # Clear out any existing reference to this feed name - # Otherwise first-run detection can fail - sabnzbd.rss.clear_feed(feed) - config.save_config() - - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def upd_rss_filter(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - try: - cfg = config.get_rss()[kwargs.get('feed')] - except KeyError: - raise dcRaiser(self.__root, kwargs) - - pp = kwargs.get('pp') - if IsNone(pp): pp = '' - script = ConvertSpecials(kwargs.get('script')) - cat = ConvertSpecials(kwargs.get('cat')) - - cfg.filters.update(int(kwargs.get('index',0)), (cat, pp, script, kwargs.get('filter_type'), \ - platform_encode(kwargs.get('filter_text')))) - config.save_config() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def pos_rss_filter(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - feed = kwargs.get('feed') - current = kwargs.get('current', 0) - new = kwargs.get('new', 0) - - try: - cfg = config.get_rss()[feed] - except KeyError: - raise dcRaiser(self.__root, kwargs) - - if current != new: - cfg.filters.move(int(current), int(new)) - config.save_config() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def del_rss_feed(self, *args, **kwargs): - msg = check_session(kwargs) - if msg: return msg - kwargs['section'] = 'rss' - kwargs['keyword'] = kwargs.get('feed') - del_from_section(kwargs) - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def del_rss_filter(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - try: - cfg = config.get_rss()[kwargs.get('feed')] - except KeyError: - raise dcRaiser(self.__root, kwargs) - - cfg.filters.delete(int(kwargs.get('index', 0))) - config.save_config() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def download_rss_feed(self, *args, **kwargs): - msg = check_session(kwargs) - if msg: return msg - if 'feed' in kwargs: - feed = kwargs['feed'] - msg = sabnzbd.rss.run_feed(feed, download=True, force=True) - if msg: - return badParameterResponse(msg) - else: - return ShowRssLog(feed, False) - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def test_rss_feed(self, *args, **kwargs): - msg = check_session(kwargs) - if msg: return msg - if 'feed' in kwargs: - feed = kwargs['feed'] - msg = sabnzbd.rss.run_feed(feed, download=False, ignoreFirst=True) - if msg: - return badParameterResponse(msg) - else: - return ShowRssLog(feed, True) - raise dcRaiser(self.__root, kwargs) - - - @cherrypy.expose - def rss_download(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - feed = kwargs.get('feed') - id = kwargs.get('id') - cat = kwargs.get('cat') - pp = kwargs.get('pp') - script = kwargs.get('script') - priority = kwargs.get('priority', NORMAL_PRIORITY) - nzbname = kwargs.get('nzbname') - if id and id.isdigit(): - sabnzbd.add_msgid(id, pp, script, cat, priority, nzbname) - elif id: - sabnzbd.add_url(id, pp, script, cat, priority, nzbname) - # Need to pass the title instead - sabnzbd.rss.flag_downloaded(feed, id) - raise dcRaiser(self.__root, kwargs) - - -#------------------------------------------------------------------------------ -_SCHED_ACTIONS = ('resume', 'pause', 'pause_all', 'shutdown', 'restart', 'speedlimit', 'pause_post', 'resume_post') - -class ConfigScheduling: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - def get_days(): - days = {} - days["*"] = T('daily') - days["1"] = T('monday') - days["2"] = T('tuesday') - days["3"] = T('wednesday') - days["4"] = T('thursday') - days["5"] = T('friday') - days["6"] = T('saturday') - days["7"] = T('sunday') - return days - - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - actions = [] - actions.extend(_SCHED_ACTIONS) - days = get_days() - conf['schedlines'] = [] - snum = 1 - conf['taskinfo'] = [] - for ev in scheduler.sort_schedules(forward=True): - line = ev[3] - conf['schedlines'].append(line) - try: - m, h, day, action = line.split(' ', 3) - except: - continue - action = action.strip() - if action in actions: - action = T("sch-" + action) - else: - try: - act, server = action.split() - except ValueError: - act = '' - if act in ('enable_server', 'disable_server'): - action = T("sch-" + act) + ' ' + server - item = (snum, h, '%02d' % int(m), days[day], action) - conf['taskinfo'].append(item) - snum += 1 - - - actions_lng = {} - for action in actions: - actions_lng[action] = T("sch-" + action) - for server in config.get_servers(): - actions.append(server) - actions_lng[server] = server - conf['actions'] = actions - conf['actions_lng'] = actions_lng - - template = Template(file=os.path.join(self.__web_dir, 'config_scheduling.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def addSchedule(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - minute = kwargs.get('minute') - hour = kwargs.get('hour') - dayofweek = kwargs.get('dayofweek') - action = kwargs.get('action') - arguments = kwargs.get('arguments') - - arguments = arguments.strip().lower() - if arguments in ('on', 'enable'): - arguments = '1' - elif arguments in ('off','disable'): - arguments = '0' - - if minute and hour and dayofweek and action: - if (action == 'speedlimit') and arguments.isdigit(): - pass - elif action in _SCHED_ACTIONS: - arguments = '' - elif action.find(':') > 0: - if arguments == '1': - arguments = action - action = 'enable_server' - else: - arguments = action - action = 'disable_server' - else: - action = None - - if action: - sched = cfg.schedules() - sched.append('%s %s %s %s %s' % - (minute, hour, dayofweek, action, arguments)) - cfg.schedules.set(sched) - - config.save_config() - scheduler.restart(force=True) - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def delSchedule(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - schedules = cfg.schedules() - line = kwargs.get('line') - if line and line in schedules: - schedules.remove(line) - cfg.schedules.set(schedules) - config.save_config() - scheduler.restart(force=True) - raise dcRaiser(self.__root, kwargs) - -#------------------------------------------------------------------------------ -class ConfigNewzbin: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - self.__bookmarks = [] - - @cherrypy.expose - def index(self, **kwargs): - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - conf['username_newzbin'] = cfg.newzbin_username() - conf['password_newzbin'] = cfg.newzbin_password.get_stars() - conf['newzbin_bookmarks'] = int(cfg.newzbin_bookmarks()) - conf['newzbin_unbookmark'] = int(cfg.newzbin_unbookmark()) - conf['bookmark_rate'] = cfg.bookmark_rate() - - conf['bookmarks_list'] = self.__bookmarks - - conf['matrix_username'] = cfg.matrix_username() - conf['matrix_apikey'] = cfg.matrix_apikey() - - template = Template(file=os.path.join(self.__web_dir, 'config_newzbin.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def saveNewzbin(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - cfg.newzbin_username.set(kwargs.get('username_newzbin')) - cfg.newzbin_password.set(kwargs.get('password_newzbin')) - cfg.newzbin_bookmarks.set(kwargs.get('newzbin_bookmarks')) - cfg.newzbin_unbookmark.set(kwargs.get('newzbin_unbookmark')) - cfg.bookmark_rate.set(kwargs.get('bookmark_rate')) - - cfg.matrix_username.set(kwargs.get('matrix_username')) - cfg.matrix_apikey.set(kwargs.get('matrix_apikey')) - - config.save_config() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def saveMatrix(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - cfg.matrix_username.set(kwargs.get('matrix_username')) - cfg.matrix_apikey.set(kwargs.get('matrix_apikey')) - - config.save_config() - raise dcRaiser(self.__root, kwargs) - - - @cherrypy.expose - def getBookmarks(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - Bookmarks.do.run() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def showBookmarks(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - self.__bookmarks = Bookmarks.do.bookmarksList() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def hideBookmarks(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - self.__bookmarks = [] - raise dcRaiser(self.__root, kwargs) - -#------------------------------------------------------------------------------ - -class ConfigCats: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - if cfg.newzbin_username() and cfg.newzbin_password(): - conf['newzbinDetails'] = True - - conf['script_list'] = ListScripts(default=True) - - categories = config.get_categories() - conf['have_cats'] = categories != {} - conf['defdir'] = cfg.complete_dir.get_path() - - - empty = { 'name':'', 'pp':'-1', 'script':'', 'dir':'', 'newzbin':'', 'priority':DEFAULT_PRIORITY } - slotinfo = [] - slotinfo.append(empty) - for cat in sorted(categories): - slot = categories[cat].get_dict() - slot['name'] = cat - slotinfo.append(slot) - conf['slotinfo'] = slotinfo - - template = Template(file=os.path.join(self.__web_dir, 'config_cat.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def delete(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - kwargs['section'] = 'categories' - kwargs['keyword'] = kwargs.get('name') - del_from_section(kwargs) - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def save(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - newname = kwargs.get('newname', '').strip() - name = kwargs.get('name') - if newname: - if name: - config.delete('categories', name) - name = newname.lower() - if kwargs.get('dir'): - kwargs['dir'] = platform_encode(kwargs['dir']) - config.ConfigCat(name, kwargs) - - config.save_config() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def init_newzbin(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - config.define_categories(force=True) - config.save_config() - raise dcRaiser(self.__root, kwargs) - - -SORT_LIST = ( \ - 'enable_tv_sorting', 'tv_sort_string', 'tv_categories', - 'enable_movie_sorting', 'movie_sort_string', 'movie_sort_extra', 'movie_extra_folder', - 'enable_date_sorting', 'date_sort_string', 'movie_categories', 'date_categories' - ) - -#------------------------------------------------------------------------------ -class ConfigSorting: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - conf['complete_dir'] = cfg.complete_dir.get_path() - - for kw in SORT_LIST: - conf[kw] = config.get_config('misc', kw)() - conf['cat_list'] = ListCats(True) - #tvSortList = [] - - template = Template(file=os.path.join(self.__web_dir, 'config_sorting.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def saveSorting(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - try: - kwargs['movie_categories'] = kwargs['movie_cat'] - except: - pass - try: - kwargs['date_categories'] = kwargs['date_cat'] - except: - pass - try: - kwargs['tv_categories'] = kwargs['tv_cat'] - except: - pass - - for kw in SORT_LIST: - item = config.get_config('misc', kw) - value = platform_encode(kwargs.get(kw)) - msg = item.set(value) - if msg: - return badParameterResponse(msg) - - config.save_config() - raise dcRaiser(self.__root, kwargs) - - -#------------------------------------------------------------------------------ - -class ConnectionInfo: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - self.__lastmail = None - - @cherrypy.expose - def index(self, **kwargs): - header, pnfo_list, bytespersec = build_header(self.__prim) - - header['logfile'] = sabnzbd.LOGFILE - header['weblogfile'] = sabnzbd.WEBLOGFILE - header['loglevel'] = str(cfg.log_level()) - - header['lastmail'] = self.__lastmail - - header['servers'] = [] - - for server in downloader.servers()[:]: - busy = [] - connected = 0 - - for nw in server.idle_threads[:]: - if nw.connected: - connected += 1 - - for nw in server.busy_threads[:]: - article = nw.article - art_name = "" - nzf_name = "" - nzo_name = "" - - if article: - nzf = article.nzf - nzo = nzf.nzo - - art_name = xml_name(article.article) - #filename field is not always present - try: - nzf_name = xml_name(nzf.get_filename()) - except: #attribute error - nzf_name = xml_name(nzf.get_subject()) - nzo_name = xml_name(nzo.get_dirname()) - - busy.append((nw.thrdnum, art_name, nzf_name, nzo_name)) - - if nw.connected: - connected += 1 - - if server.warning and not (connected or server.errormsg): - connected = unicoder(server.warning) - - if server.request and not server.info: - connected = T('server-resolving') - busy.sort() - - header['servers'].append((server.host, server.port, connected, busy, server.ssl, - server.active, server.errormsg, server.fillserver, server.optional)) - - wlist = [] - for w in sabnzbd.GUIHANDLER.content(): - w = w.replace('WARNING', Ta('warning')).replace('ERROR', Ta('error')) - wlist.append(xml_name(w)) - header['warnings'] = wlist - - template = Template(file=os.path.join(self.__web_dir, 'connection_info.tmpl'), - filter=FILTER, searchList=[header], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def disconnect(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - downloader.disconnect() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def testmail(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - logging.info("Sending testmail") - pack = {} - pack['download'] = ['action 1', 'action 2'] - pack['unpack'] = ['action 1', 'action 2'] - - self.__lastmail= emailer.endjob('Test Job', 123, 'unknown', True, - os.path.normpath(os.path.join(cfg.complete_dir.get_path(), '/unknown/Test Job')), - str(123*MEBI), pack, 'my_script', 'Line 1\nLine 2\nLine 3\n', 0) - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def showlog(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - try: - sabnzbd.LOGHANDLER.flush() - except: - pass - return cherrypy.lib.static.serve_file(sabnzbd.LOGFILE, "application/x-download", "attachment") - - @cherrypy.expose - def showweb(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - if sabnzbd.WEBLOGFILE: - return cherrypy.lib.static.serve_file(sabnzbd.WEBLOGFILE, "application/x-download", "attachment") - else: - return "Web logging is off!" - - @cherrypy.expose - def clearwarnings(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - sabnzbd.GUIHANDLER.clear() - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def change_loglevel(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - cfg.log_level.set(kwargs.get('loglevel')) - config.save_config() - - raise dcRaiser(self.__root, kwargs) - - @cherrypy.expose - def unblock_server(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - downloader.unblock(kwargs.get('server')) - # Short sleep so that UI shows new server status - time.sleep(1.0) - raise dcRaiser(self.__root, kwargs) - - -def Protected(): - return badParameterResponse("Configuration is locked") - -def badParameterResponse(msg): - """Return a html page with error message and a 'back' button - """ - return ''' - - - - SABnzbd+ %s - %s/title> -</head> -<body> - <h3>%s</h3> - %s - <br><br> - <FORM><INPUT TYPE="BUTTON" VALUE="%s" ONCLICK="history.go(-1)"></FORM> -</body> -</html> -''' % (sabnzbd.__version__, T('error'), T('badParm'), unicoder(msg), T('button-back')) - -def ShowFile(name, path): - """Return a html page listing a file and a 'back' button - """ - try: - f = open(path, "r") - msg = TRANS(f.read()) - f.close() - except: - msg = "FILE NOT FOUND\n" - - return ''' -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> -<html> -<head> - <title>%s - - -

        -

        %s

        -
        -           %s
        -           


        - - -''' % (name, T('button-back'), name, escape(msg)) - -def ShowString(name, string): - """Return a html page listing a file and a 'back' button - """ - try: - msg = TRANS(string) - except: - msg = "Encoding Error\n" - - return ''' - - - - %s - - -
        -

        %s

        -
        -           %s
        -           


        - - -''' % (xml_name(name), T('button-back'), xml_name(name), escape(unicoder(msg))) - - -def ShowOK(url): - return ''' - - - - %s - - -
        -

        - %s -

        - - -''' % (escape(url), T('button-back'), T('msg-reAdded@1') % escape(url)) - - -def _make_link(qfeed, job): - # Return downlink for a job - name = urllib.quote_plus(job['url']) - title = job['title'].encode('latin-1') - nzbname = '&nzbname=%s' % urllib.quote(sanitize_foldername(title)) - if job['cat']: - cat = '&cat=' + escape(job['cat']) - else: - cat = '' - if job['pp'] is None: - pp = '' - else: - pp = '&pp=' + escape(str(job['pp'])) - if job['script']: - script = '&script=' + escape(job['script']) - else: - script = '' - if job['prio']: - prio = '&priority=' + str(job['prio']) - - star = ' *' * int(job['status'].endswith('*')) - - title = xml_name(job['title']) - if job['url'].isdigit(): - title = '
        %s' % (job['url'], title) - - return '%s   %s%s
        ' % \ - (cfg.api_key() ,qfeed, name, cat, pp, script, prio, nzbname, T('link-download'), title, star) - - -def ShowRssLog(feed, all): - """Return a html page listing an RSS log and a 'back' button - """ - jobs = sabnzbd.rss.show_result(feed) - names = jobs.keys() - # Sort in the order the jobs came from the feed - names.sort(lambda x, y: jobs[x].get('order', 0) - jobs[y].get('order', 0)) - - qfeed = escape(feed.replace('/','%2F').replace('?', '%3F')) - - doneStr = [] - for x in names: - job = jobs[x] - if job['status'][0] == 'D': - doneStr.append('%s
        ' % xml_name(job['title'])) - - goodStr = [] - for x in names: - job = jobs[x] - if job['status'][0] == 'G': - goodStr.append(_make_link(qfeed, job)) - - badStr = [] - for x in names: - job = jobs[x] - if job['status'][0] == 'B': - badStr.append(_make_link(qfeed, job)) - - if all: - return ''' - - - - %s - - -
        - -
        -

        %s

        - %s

        - %s
        - %s -
        - %s
        - %s -
        - %s
        - %s -
        - - -''' % (escape(feed), T('button-back'), escape(feed), T('explain-rssStar'), T('rss-matched'), \ - ''.join(goodStr), T('rss-notMatched'), ''.join(badStr), T('rss-done'), ''.join(doneStr)) - else: - return ''' - - - - %s - - -
        - -
        -

        %s

        - %s
        - %s -
        - - -''' % (escape(feed), T('button-back'), escape(feed), T('rss-downloaded'), ''.join(doneStr)) - - -def build_header(prim): - try: - uptime = calc_age(sabnzbd.START) - except: - uptime = "-" - - if prim: - color = sabnzbd.WEB_COLOR - else: - color = sabnzbd.WEB_COLOR2 - if color: - color = color + '.css' - else: - color = '' - - header = { 'T': T, 'Tspec': Tspec, 'version':sabnzbd.__version__, 'paused':downloader.paused(), - 'pause_int': scheduler.pause_int(), 'paused_all': sabnzbd.PAUSED_ALL, - 'uptime':uptime, 'color_scheme':color } - speed_limit = downloader.get_limit() - if speed_limit <= 0: - speed_limit = '' - - header['helpuri'] = 'http://wiki.sabnzbd.org/' - header['diskspace1'] = "%.2f" % diskfree(cfg.download_dir.get_path()) - header['diskspace2'] = "%.2f" % diskfree(cfg.complete_dir.get_path()) - header['diskspacetotal1'] = "%.2f" % disktotal(cfg.download_dir.get_path()) - header['diskspacetotal2'] = "%.2f" % disktotal(cfg.complete_dir.get_path()) - header['loadavg'] = loadavg() - header['speedlimit'] = "%s" % speed_limit - header['restart_req'] = sabnzbd.RESTART_REQ - header['have_warnings'] = str(sabnzbd.GUIHANDLER.count()) - header['last_warning'] = sabnzbd.GUIHANDLER.last() - header['active_lang'] = cfg.language() - if prim: - header['webdir'] = sabnzbd.WEB_DIR - else: - header['webdir'] = sabnzbd.WEB_DIR2 - - header['finishaction'] = sabnzbd.QUEUECOMPLETE - header['nt'] = sabnzbd.WIN32 - header['darwin'] = sabnzbd.DARWIN - header['power_options'] = sabnzbd.WIN32 or sabnzbd.DARWIN or sabnzbd.LINUX_POWER - - header['session'] = cfg.api_key() - - bytespersec = BPSMeter.do.get_bps() - qnfo = nzbqueue.queue_info() - - bytesleft = qnfo[QNFO_BYTES_LEFT_FIELD] - bytes = qnfo[QNFO_BYTES_FIELD] - - header['kbpersec'] = "%.2f" % (bytespersec / KIBI) - header['speed'] = to_units(bytespersec, spaces=1) - header['mbleft'] = "%.2f" % (bytesleft / MEBI) - header['mb'] = "%.2f" % (bytes / MEBI) - header['sizeleft'] = format_bytes(bytesleft) - header['size'] = format_bytes(bytes) - - status = '' - if downloader.paused(): - status = 'Paused' - elif bytespersec > 0: - status = 'Downloading' - else: - status = 'Idle' - header['status'] = "%s" % status - - anfo = ArticleCache.do.cache_info() - - header['cache_art'] = str(anfo[ANFO_ARTICLE_SUM_FIELD]) - header['cache_size'] = format_bytes(anfo[ANFO_CACHE_SIZE_FIELD]) - header['cache_max'] = str(anfo[ANFO_CACHE_LIMIT_FIELD]) - - header['nzb_quota'] = '' - - if sabnzbd.NEW_VERSION: - header['new_release'], header['new_rel_url'] = sabnzbd.NEW_VERSION.split(';') - else: - header['new_release'] = '' - header['new_rel_url'] = '' - - header['timeleft'] = calc_timeleft(bytesleft, bytespersec) - - try: - datestart = datetime.datetime.now() + datetime.timedelta(seconds=bytesleft / bytespersec) - #new eta format: 16:00 Fri 07 Feb - header['eta'] = '%s' % datestart.strftime('%H:%M %a %d %b') - except: - datestart = datetime.datetime.now() - header['eta'] = T('unknown') - - return (header, qnfo[QNFO_PNFO_LIST_FIELD], bytespersec) - -def calc_timeleft(bytesleft, bps): - """ - Calculate the time left in the format HH:MM:SS - """ - try: - totalseconds = int(bytesleft / bps) - minutes, seconds = divmod(totalseconds, 60) - hours, minutes = divmod(minutes, 60) - if minutes <10: - minutes = '0%s' % minutes - if seconds <10: - seconds = '0%s' % seconds - return '%s:%s:%s' % (hours, minutes, seconds) - except: - return '0:00:00' - -def calc_age(date): - """ - Calculate the age difference between now and date. - Value is returned as either days, hours, or minutes. - """ - try: - now = datetime.datetime.now() - #age = str(now - date).split(".")[0] #old calc_age - - #time difference - dage = now-date - seconds = dage.seconds - #only one value should be returned - #if it is less than 1 day then it returns in hours, unless it is less than one hour where it returns in minutes - if dage.days: - age = '%sd' % (dage.days) - elif seconds/3600: - age = '%sh' % (seconds/3600) - else: - age = '%sm' % (seconds/60) - except: - age = "-" - - return age - -#------------------------------------------------------------------------------ -LIST_EMAIL = ( - 'email_endjob', 'email_full', - 'email_server', 'email_to', 'email_from', - 'email_account', 'email_pwd', 'email_dir', 'email_rss' - ) - -class ConfigEmail: - def __init__(self, web_dir, root, prim): - self.__root = root - self.__web_dir = web_dir - self.__prim = prim - - @cherrypy.expose - def index(self, **kwargs): - if cfg.configlock(): - return Protected() - - conf, pnfo_list, bytespersec = build_header(self.__prim) - - conf['my_home'] = sabnzbd.DIR_HOME - conf['my_lcldata'] = sabnzbd.DIR_LCLDATA - - for kw in LIST_EMAIL: - if kw == 'email_pwd': - conf[kw] = config.get_config('misc', kw).get_stars() - else: - conf[kw] = config.get_config('misc', kw)() - - template = Template(file=os.path.join(self.__web_dir, 'config_email.tmpl'), - filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) - return template.respond() - - @cherrypy.expose - def saveEmail(self, **kwargs): - msg = check_session(kwargs) - if msg: return msg - - for kw in LIST_EMAIL: - msg = config.get_config('misc', kw).set(platform_encode(kwargs.get(kw))) - if msg: - return badParameterResponse(T('error-badValue@2') % (kw, unicoder(msg))) - - config.save_config() - raise dcRaiser(self.__root, kwargs) - -def std_time(when): - # Fri, 16 Nov 2007 16:42:01 GMT +0100 - item = time.strftime('%a, %d %b %Y %H:%M:%S', time.localtime(when)) - item += " GMT %+05d" % (-time.timezone/36) - return item - - -def rss_history(url, limit=50, search=None): - url = url.replace('rss','') - - youngest = None - - rss = RSS() - rss.channel.title = "SABnzbd History" - rss.channel.description = "Overview of completed downloads" - rss.channel.link = "http://sourceforge.net/projects/sabnzbdplus/" - rss.channel.language = "en" - - items, fetched_items, max_items = build_history(limit=limit, search=search) - - for history in items: - item = Item() - - item.pubDate = std_time(history['completed']) - item.title = history['name'] - - if not youngest: - youngest = history['completed'] - elif history['completed'] < youngest: - youngest = history['completed'] - - if history['report']: - item.link = "https://www.newzbin.com/browse/post/%s/" % history['report'] - elif history['url_info']: - item.link = history['url_info'] - else: - item.link = url - - stageLine = [] - for stage in history['stage_log']: - stageLine.append("
        Stage %s
        " % stage['name']) - actions = [] - for action in stage['actions']: - actions.append("
        %s
        " % (action)) - actions.sort() - actions.reverse() - for act in actions: - stageLine.append(act) - stageLine.append("") - item.description = ''.join(stageLine) - rss.addItem(item) - - rss.channel.lastBuildDate = std_time(youngest) - rss.channel.pubDate = std_time(time.time()) - - return rss.write() - - -def format_bytes(bytes): - b = to_units(bytes) - if b == '': - return b - else: - return b + 'B' - - -def rss_warnings(): - """ Return an RSS feed with last warnings/errors - """ - rss = RSS() - rss.channel.title = "SABnzbd Warnings" - rss.channel.description = "Overview of warnings/errors" - rss.channel.link = "http://sourceforge.net/projects/sabnzbdplus/" - rss.channel.language = "en" - - for warn in sabnzbd.GUIHANDLER.content(): - item = Item() - item.title = warn - rss.addItem(item) - - rss.channel.lastBuildDate = std_time(time.time()) - rss.channel.pubDate = rss.channel.lastBuildDate - return rss.write() - - -def qstatus_data(): - """Build up the queue status as a nested object and output as a JSON object - """ - - qnfo = nzbqueue.queue_info() - pnfo_list = qnfo[QNFO_PNFO_LIST_FIELD] - - jobs = [] - bytesleftprogess = 0 - bpsnow = BPSMeter.do.get_bps() - for pnfo in pnfo_list: - filename = pnfo[PNFO_FILENAME_FIELD] - msgid = pnfo[PNFO_MSGID_FIELD] - bytesleft = pnfo[PNFO_BYTES_LEFT_FIELD] / MEBI - bytesleftprogess += pnfo[PNFO_BYTES_LEFT_FIELD] - bytes = pnfo[PNFO_BYTES_FIELD] / MEBI - nzo_id = pnfo[PNFO_NZO_ID_FIELD] - jobs.append( { "id" : nzo_id, - "mb":bytes, - "mbleft":bytesleft, - "filename":unicoder(filename), - "msgid":msgid, - "timeleft":calc_timeleft(bytesleftprogess, bpsnow) } ) - - state = "IDLE" - if downloader.paused(): - state = "PAUSED" - elif qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI > 0: - state = "DOWNLOADING" - - status = { - "state" : state, - "paused" : downloader.paused(), - "pause_int" : scheduler.pause_int(), - "kbpersec" : BPSMeter.do.get_bps() / KIBI, - "speed" : to_units(BPSMeter.do.get_bps()), - "mbleft" : qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI, - "mb" : qnfo[QNFO_BYTES_FIELD] / MEBI, - "noofslots" : len(pnfo_list), - "have_warnings" : str(sabnzbd.GUIHANDLER.count()), - "diskspace1" : diskfree(cfg.download_dir.get_path()), - "diskspace2" : diskfree(cfg.complete_dir.get_path()), - "timeleft" : calc_timeleft(qnfo[QNFO_BYTES_LEFT_FIELD], bpsnow), - "loadavg" : loadavg(), - "jobs" : jobs - } - return status - - -def build_file_list(id): - qnfo = nzbqueue.queue_info() - pnfo_list = qnfo[QNFO_PNFO_LIST_FIELD] - - jobs = [] - for pnfo in pnfo_list: - nzo_id = pnfo[PNFO_NZO_ID_FIELD] - if nzo_id == id: - finished_files = pnfo[PNFO_FINISHED_FILES_FIELD] - active_files = pnfo[PNFO_ACTIVE_FILES_FIELD] - queued_files = pnfo[PNFO_QUEUED_FILES_FIELD] - - - n = 0 - for tup in finished_files: - bytes_left, bytes, fn, date = tup - fn = xml_name(fn) - - age = calc_age(date) - - line = {'filename':fn, - 'mbleft':"%.2f" % (bytes_left / MEBI), - 'mb':"%.2f" % (bytes / MEBI), - 'bytes':"%.2f" % bytes, - 'age':age, 'id':str(n), 'status':'finished'} - jobs.append(line) - n += 1 - - for tup in active_files: - bytes_left, bytes, fn, date, nzf_id = tup - fn = xml_name(fn) - - age = calc_age(date) - - line = {'filename':fn, - 'mbleft':"%.2f" % (bytes_left / MEBI), - 'mb':"%.2f" % (bytes / MEBI), - 'bytes':"%.2f" % bytes, - 'nzf_id':nzf_id, - 'age':age, 'id':str(n), 'status':'active'} - jobs.append(line) - n += 1 - - for tup in queued_files: - _set, bytes_left, bytes, fn, date = tup - fn = xml_name(fn) - _set = xml_name(_set) - - age = calc_age(date) - - line = {'filename':fn, 'set':_set, - 'mbleft':"%.2f" % (bytes_left / MEBI), - 'mb':"%.2f" % (bytes / MEBI), - 'bytes':"%.2f" % bytes, - 'age':age, 'id':str(n), 'status':'queued'} - jobs.append(line) - n += 1 - - return jobs - - -def get_history_size(): - history_db = cherrypy.thread_data.history_db - bytes, month, week = history_db.get_history_size() - return (format_bytes(bytes), format_bytes(month), format_bytes(week)) - -def build_history(loaded=False, start=None, limit=None, verbose=False, verbose_list=None, search=None): - - if not verbose_list: - verbose_list = [] - - try: - limit = int(limit) - except: - limit = 0 - try: - start = int(start) - except: - start = 0 - - def matches_search(text, search_text): - # Replace * with .* and ' ' with . - search_text = search_text.strip().replace('*','.*').replace(' ','.*') + '.*?' - try: - re_search = re.compile(search_text, re.I) - except: - logging.error(Ta('error-regex@1'), search_text) - return False - return re_search.search(text) - - # Grab any items that are active or queued in postproc - queue = PostProcessor.do.get_queue() - - # Filter out any items that don't match the search - if search: - queue = [nzo for nzo in queue if matches_search(nzo.get_original_dirname(), search)] - - # Multi-page support for postproc items - if start > len(queue): - # On a page where we shouldn't show postproc items - queue = [] - else: - try: - if start: - if limit: - queue = queue[start:start+limit] - else: - queue = queue[start:] - except: - pass - # Remove the amount of postproc items from the db request for history items - limit -= len(queue) - - # Aquire the db instance - history_db = cherrypy.thread_data.history_db - # Fetch history items - items, fetched_items, total_items = history_db.fetch_history(start,limit,search) - - # Fetch which items should show details from the cookie - k = [] - if verbose: - details_show_all = True - else: - details_show_all = False - cookie = cherrypy.request.cookie - if cookie.has_key('history_verbosity'): - k = cookie['history_verbosity'].value - c_path = cookie['history_verbosity']['path'] - c_age = cookie['history_verbosity']['max-age'] - c_version = cookie['history_verbosity']['version'] - - if k == 'all': - details_show_all = True - k = k.split(',') - k.extend(verbose_list) - - # Reverse the queue to add items to the top (faster than insert) - items.reverse() - - # Add the postproc items to the top of the history - items = get_active_history(queue, items) - - # Unreverse the queue - items.reverse() - - for item in items: - if details_show_all: - item['show_details'] = 'True' - else: - if item['nzo_id'] in k: - item['show_details'] = 'True' - else: - item['show_details'] = '' - if item['bytes']: - item['size'] = format_bytes(item['bytes']) - else: - item['size'] = '' - if not item.has_key('loaded'): - item['loaded'] = False - - return (items, fetched_items, total_items) - - -def json_list(section, lst): - """Output a simple list as a JSON object - """ - i = 0 - d = [] - for item in lst: - c = {} - c['id'] = '%s' % i - c['name'] = item - i += 1 - d.append(c) - - return { section : d } - - -class xml_factory: - """ - Recursive xml string maker. Feed it a mixed tuple/dict/item object and will output into an xml string - Current limitations: - In Two tiered lists hardcoded name of "item": - In Three tiered lists hardcoded name of "slot": - """ - def __init__(self): - self.__text = '' - - def _tuple(self, keyw, lst): - text = [] - for item in lst: - text.append(self.run(keyw, item)) - return ''.join(text) - - def _dict(self, keyw, lst): - text = [] - for key in lst.keys(): - text.append(self.run(key, lst[key])) - if keyw: - return '<%s>%s\n' % (keyw, ''.join(text), keyw) - else: - return '' - - def _list(self, keyw, lst): - text = [] - for cat in lst: - if isinstance(cat, dict): - text.append(self._dict(plural_to_single(keyw, 'slot'), cat)) - elif isinstance(cat, list): - text.append(self._list(plural_to_single(keyw, 'list'), cat)) - elif isinstance(cat, tuple): - text.append(self._tuple(plural_to_single(keyw, 'tuple'), cat)) - else: - if not isinstance(cat, basestring): - cat = str(cat) - name = plural_to_single(keyw, 'item') - text.append('<%s>%s\n' % (name, xml_name(cat, encoding='utf-8'), name)) - if keyw: - return '<%s>%s\n' % (keyw, ''.join(text), keyw) - else: - return '' - - def run(self, keyw, lst): - if isinstance(lst, dict): - text = self._dict(keyw, lst) - elif isinstance(lst, list): - text = self._list(keyw, lst) - elif isinstance(lst, tuple): - text = self._tuple(keyw, lst) - elif keyw: - text = '<%s>%s\n' % (keyw, xml_name(lst, encoding='utf-8'), keyw) - else: - text = '' - return text - - -def build_queue(web_dir=None, root=None, verbose=False, prim=True, verboseList=None, - dictionary=None, history=False, start=None, limit=None, dummy2=None, output=None): - if output: - converter = unicoder - else: - converter = xml_name - - if not verboseList: - verboseList = [] - if dictionary: - dictn = dictionary - else: - dictn = [] - #build up header full of basic information - info, pnfo_list, bytespersec = build_header(prim) - info['isverbose'] = verbose - cookie = cherrypy.request.cookie - if cookie.has_key('queue_details'): - info['queue_details'] = str(IntConv(cookie['queue_details'].value)) - else: - info['queue_details'] = '0' - - if cfg.newzbin_username() and cfg.newzbin_password(): - info['newzbinDetails'] = True - - if cfg.refresh_rate() > 0: - info['refresh_rate'] = str(cfg.refresh_rate()) - else: - info['refresh_rate'] = '' - - datestart = datetime.datetime.now() - - info['script_list'] = ListScripts() - info['cat_list'] = ListCats() - - - n = 0 - found_active = False - running_bytes = 0 - slotinfo = [] - nzo_ids = [] - - limit = IntConv(limit) - start = IntConv(start) - - if history: - #Collect nzo's from the history that are downloaded but not finished (repairing, extracting) - slotinfo = format_history_for_queue() - #if the specified start value is greater than the amount of history items, do no include the history (used for paging the queue) - if len(slotinfo) < start: - slotinfo = [] - else: - slotinfo = [] - - info['noofslots'] = len(pnfo_list) + len(slotinfo) - - info['start'] = start - info['limit'] = limit - info['finish'] = info['start'] + info['limit'] - if info['finish'] > info['noofslots']: - info['finish'] = info['noofslots'] - - for pnfo in pnfo_list: - repair = pnfo[PNFO_REPAIR_FIELD] - unpack = pnfo[PNFO_UNPACK_FIELD] - delete = pnfo[PNFO_DELETE_FIELD] - script = pnfo[PNFO_SCRIPT_FIELD] - nzo_id = pnfo[PNFO_NZO_ID_FIELD] - cat = pnfo[PNFO_EXTRA_FIELD1] - if not cat: - cat = 'None' - filename = pnfo[PNFO_FILENAME_FIELD] - msgid = pnfo[PNFO_MSGID_FIELD] - bytesleft = pnfo[PNFO_BYTES_LEFT_FIELD] - bytes = pnfo[PNFO_BYTES_FIELD] - average_date = pnfo[PNFO_AVG_DATE_FIELD] - status = pnfo[PNFO_STATUS_FIELD] - priority = pnfo[PNFO_PRIORITY_FIELD] - mbleft = (bytesleft / MEBI) - mb = (bytes / MEBI) - if verbose or verboseList: - finished_files = pnfo[PNFO_FINISHED_FILES_FIELD] - active_files = pnfo[PNFO_ACTIVE_FILES_FIELD] - queued_files = pnfo[PNFO_QUEUED_FILES_FIELD] - - nzo_ids.append(nzo_id) - - slot = {'index':n, 'nzo_id':str(nzo_id)} - unpackopts = sabnzbd.opts_to_pp(repair, unpack, delete) - - slot['unpackopts'] = str(unpackopts) - if script: - slot['script'] = script - else: - slot['script'] = 'None' - slot['msgid'] = msgid - slot['filename'] = converter(filename) - slot['cat'] = cat - slot['mbleft'] = "%.2f" % mbleft - slot['mb'] = "%.2f" % mb - slot['size'] = format_bytes(bytes) - slot['sizeleft'] = format_bytes(bytesleft) - if not downloader.paused() and status != 'Paused' and status != 'Fetching' and not found_active: - slot['status'] = "Downloading" - found_active = True - else: - slot['status'] = "%s" % (status) - if priority == TOP_PRIORITY: - slot['priority'] = 'Force' - elif priority == HIGH_PRIORITY: - slot['priority'] = 'High' - elif priority == LOW_PRIORITY: - slot['priority'] = 'Low' - else: - slot['priority'] = 'Normal' - if mb == mbleft: - slot['percentage'] = "0" - else: - slot['percentage'] = "%s" % (int(((mb-mbleft) / mb) * 100)) - - if status == 'Paused': - slot['timeleft'] = '0:00:00' - slot['eta'] = 'unknown' - else: - running_bytes += bytesleft - slot['timeleft'] = calc_timeleft(running_bytes, bytespersec) - try: - datestart = datestart + datetime.timedelta(seconds=bytesleft / bytespersec) - #new eta format: 16:00 Fri 07 Feb - slot['eta'] = '%s' % datestart.strftime('%H:%M %a %d %b') - except: - datestart = datetime.datetime.now() - slot['eta'] = 'unknown' - - slot['avg_age'] = calc_age(average_date) - slot['verbosity'] = "" - if web_dir: - finished = [] - active = [] - queued = [] - if verbose or nzo_id in verboseList:#this will list files in the xml output, wanted yes/no? - slot['verbosity'] = "True" - for tup in finished_files: - bytes_left, bytes, fn, date = tup - fn = converter(fn) - - age = calc_age(date) - - line = {'filename':fn, - 'mbleft':"%.2f" % (bytes_left / MEBI), - 'mb':"%.2f" % (bytes / MEBI), - 'size': format_bytes(bytes), - 'sizeleft': format_bytes(bytes_left), - 'age':age} - finished.append(line) - - for tup in active_files: - bytes_left, bytes, fn, date, nzf_id = tup - fn = converter(fn) - - age = calc_age(date) - - line = {'filename':fn, - 'mbleft':"%.2f" % (bytes_left / MEBI), - 'mb':"%.2f" % (bytes / MEBI), - 'size': format_bytes(bytes), - 'sizeleft': format_bytes(bytes_left), - 'nzf_id':nzf_id, - 'age':age} - active.append(line) - - for tup in queued_files: - _set, bytes_left, bytes, fn, date = tup - fn = converter(fn) - _set = converter(_set) - - age = calc_age(date) - - line = {'filename':fn, 'set':_set, - 'mbleft':"%.2f" % (bytes_left / MEBI), - 'mb':"%.2f" % (bytes / MEBI), - 'size': format_bytes(bytes), - 'sizeleft': format_bytes(bytes_left), - 'age':age} - queued.append(line) - - slot['finished'] = finished - slot['active'] = active - slot['queued'] = queued - - - if (start <= n and n < start + limit) or not limit: - slotinfo.append(slot) - n += 1 - - if slotinfo: - info['slots'] = slotinfo - else: - info['slots'] = '' - verboseList = [] - - #Paging of the queue using limit and/or start values - if limit > 0: - try: - if start > 0: - if start > len(pnfo_list): - pnfo_list = [] - else: - end = start+limit - if start+limit > len(pnfo_list): - end = len(pnfo_list) - pnfo_list = pnfo_list[start:end] - else: - if not limit > len(pnfo_list): - pnfo_list = pnfo_list[:limit] - except: - pass - - return info, pnfo_list, bytespersec, verboseList, dictn - - - -def rss_qstatus(): - """ Return a RSS feed with the queue status - """ - qnfo = nzbqueue.queue_info() - pnfo_list = qnfo[QNFO_PNFO_LIST_FIELD] - - rss = RSS() - rss.channel.title = "SABnzbd Queue" - rss.channel.description = "Overview of current downloads" - rss.channel.link = "http://%s:%s/sabnzbd/queue" % ( \ - cfg.cherryhost(), cfg.cherryport() ) - rss.channel.language = "en" - - item = Item() - item.title = 'Total ETA: %s - Queued: %.2f MB - Speed: %.2f kB/s' % \ - ( - calc_timeleft(qnfo[QNFO_BYTES_LEFT_FIELD], BPSMeter.do.get_bps()), - qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI, - BPSMeter.do.get_bps() / KIBI - ) - rss.addItem(item) - - sum_bytesleft = 0 - for pnfo in pnfo_list: - filename = pnfo[PNFO_FILENAME_FIELD] - msgid = pnfo[PNFO_MSGID_FIELD] - bytesleft = pnfo[PNFO_BYTES_LEFT_FIELD] / MEBI - bytes = pnfo[PNFO_BYTES_FIELD] / MEBI - mbleft = (bytesleft / MEBI) - mb = (bytes / MEBI) - - - if mb == mbleft: - percentage = "0%" - else: - percentage = "%s%%" % (int(((mb-mbleft) / mb) * 100)) - - filename = xml_name(filename) - name = u'%s (%s)' % (filename, percentage) - - item = Item() - item.title = name - if msgid: - item.link = "https://newzbin.com/browse/post/%s/" % msgid - else: - item.link = "http://%s:%s/sabnzbd/history" % ( \ - cfg.cherryhost(), cfg.cherryport() ) - statusLine = [] - statusLine.append('') - #Total MB/MB left - statusLine.append('
        Remain/Total: %.2f/%.2f MB
        ' % (bytesleft, bytes)) - #ETA - sum_bytesleft += pnfo[PNFO_BYTES_LEFT_FIELD] - statusLine.append("
        ETA: %s
        " % calc_timeleft(sum_bytesleft, BPSMeter.do.get_bps())) - statusLine.append("
        Age: %s
        " % calc_age(pnfo[PNFO_AVG_DATE_FIELD])) - statusLine.append("") - item.description = ''.join(statusLine) - rss.addItem(item) - - rss.channel.lastBuildDate = std_time(time.time()) - rss.channel.pubDate = rss.channel.lastBuildDate - rss.channel.ttl = "1" - return rss.write() - - -def format_history_for_queue(): - ''' Retrieves the information on currently active history items, and formats them for displaying in the queue ''' - slotinfo = [] - history_items = get_active_history() - - for item in history_items: - slot = {'nzo_id':item['nzo_id'], - 'msgid':item['report'], 'filename':xml_name(item['name']), 'loaded':True, - 'stages':item['stage_log'], 'status':item['status'], 'bytes':item['bytes'], - 'size':item['size']} - slotinfo.append(slot) - - return slotinfo - - -def get_active_history(queue=None, items=None): - # Get the currently in progress and active history queue. - if items is None: - items = [] - if queue is None: - queue = PostProcessor.do.get_queue() - - for nzo in queue: - t = build_history_info(nzo) - item = {} - item['completed'], item['name'], item['nzb_name'], item['category'], item['pp'], item['script'], item['report'], \ - item['url'], item['status'], item['nzo_id'], item['storage'], item['path'], item['script_log'], \ - item['script_line'], item['download_time'], item['postproc_time'], item['stage_log'], \ - item['downloaded'], item['completeness'], item['fail_message'], item['url_info'], item['bytes'] = t - item['action_line'] = nzo.get_action_line() - item = unpack_history_info(item) - - item['loaded'] = True - if item['bytes']: - item['size'] = format_bytes(item['bytes']) - else: - item['size'] = '' - - # Queue display needs Unicode instead of UTF-8 - for kw in item: - if isinstance(item[kw], str): - item[kw] = item[kw].decode('utf-8') - - items.append(item) - - return items - - -def options_list(output): - return report(output, keyword='options', data= - { - 'yenc' : sabnzbd.decoder.HAVE_YENC, - 'par2' : sabnzbd.newsunpack.PAR2_COMMAND, - 'par2c' : sabnzbd.newsunpack.PAR2C_COMMAND, - 'rar' : sabnzbd.newsunpack.RAR_COMMAND, - 'zip' : sabnzbd.newsunpack.ZIP_COMMAND, - 'nice' : sabnzbd.newsunpack.NICE_COMMAND, - 'ionice' : sabnzbd.newsunpack.IONICE_COMMAND, - 'ssl' : sabnzbd.newswrapper.HAVE_SSL - }) diff --git a/main/sabnzbd/lang.py b/main/sabnzbd/lang.py deleted file mode 100644 index c229684..0000000 --- a/main/sabnzbd/lang.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.lang - Language support -""" - -# Skin-specific files cannot overrule previous texts. -# Every acronym will be prexifed with the skin name ("skin-"). -# This is required, because two skins can be active at once. - - -import os -import glob -import logging -import re -import operator - -_T = {} # Global language dictionary -_DIRS = [] # List of active (language-folder, prefix) tuples - -def T(txt): - """ Translate an acronym to natural language """ - try: - return _T[txt] - except KeyError: - # Missing text: create text from acronym with %s attached - txt, num = _get_count(txt) - return '#' + txt + '#' + ' %s'*num - - -def Ta(txt): - """ Translate acronym, return latin-1 encoding """ - return T(txt).encode('latin-1', 'replace') - - -def Tspec(txt): - """ Translate special terms """ - if txt == 'None': - return T('none') - elif txt == 'Default': - return T('default') - else: - return txt - - -def reset_language(language): - """ Process active language folders with new language """ - # First fill the new dictionary and afterwards - # replace the global one. This way there will - # always be a valid dictionary available. - global _T, _DIRS - new_T = {} - dirs = _DIRS - _DIRS = [] - for tup in dirs: - install_language(tup[0], language, tup[1], new_T) - old = _T - _T = new_T - del old - - -def install_language(path, language, prefix='', dic=None): - """ Read language file for the active language - and default language. - """ - # 'dic' parameter is for internal use by 'reset_language' only - global _DIRS - _DIRS.append((path, prefix)) - - if dic is None: - dic = _T - if language != 'us-en': - name = os.path.join(path, language+'.txt') - if os.path.exists(name): - _parse_lang_file(dic, name, prefix) - - name = os.path.join(path, 'us-en.txt') - if os.path.exists(name): - _parse_lang_file(dic, name, prefix) - - -def list_languages(path): - """ Return list of languages-choices - Each choice is a list, 0: short name, 1: long name - """ - lst = [] - for name in glob.glob(path + '/*.txt'): - lang = os.path.basename(name).replace('.txt','') - try: - fp = open(name, 'r') - except IOError: - continue - - encoding, language = _get_headers(fp) - long_name = u"%s" % language - lst.append((lang, long_name)) - fp.close() - return sorted(lst ,key=operator.itemgetter(1)) - - - -# Matches : acronym message text # comment -# | (1) |(2)| (3) | -_RE_LINE = re.compile(r'\s*(\S+)(\s*)([^#]*)') - -def _parse_lang_file(dic, name, prefix=''): - """ Parse language file and store new definitions in global dictionary - """ - try: - f = open(name, "r") - except IOError: - logging.error("Cannot open language file %s", name) - return False - - encoding, language = _get_headers(f) - logging.debug("Language file %s, encoding=%s, language=%s", - name, encoding, language) - - if prefix: - prefix += '-' - lcount = 0 - multi = False - msg = '' - for line in f.xreadlines(): - line = line.strip('\n').decode(encoding) - lcount += 1 - m = re.search(_RE_LINE, line) - if m and not m.group(1).startswith('#'): - if multi: - if msg.endswith('\\n') or msg.endswith('\\r'): - msg = msg + m.group(1) + m.group(2) + m.group(3) - else: - msg = msg + " " + m.group(1) + m.group(2) + m.group(3) - else: - key = prefix + m.group(1) - msg = m.group(3) - if msg and msg.strip().endswith("\\"): - msg = msg.strip().strip("\\") - multi = True - else: - multi = False - msg = msg.strip() - if '\\' in msg: - msg = msg.replace('\\n', '
        ').replace('\\t', '\t').replace('\\@', '#').replace('\s', ' ').replace('\\r','\r\n') - if key not in dic: - if msg.count('%s') == _get_count(key)[1]: - dic[key] = msg - else: - logging.error("[%s:%s] Incorrect message for %s, should have %s parameters", - name, lcount, key, _get_count(key)[1]) - - - f.close() - return True - - -def _get_headers(fp): - """ Return encoding and language - # -*- coding: latin-1 -*- - # English (UK) # remarks - """ - txt = fp.readline() - m = re.search(r'#\s*-\*-\s+coding:\s+(\S+)\s+-\*-', txt) - if m and m.group(1): - encoding = m.group(1) - else: - encoding = 'latin-1' - - txt = fp.readline() - m = re.search(r'#\s*([^#]+)#*', txt) - if m: - language = m.group(1).strip().decode(encoding) - else: - language = '' - - return encoding, language - - -_RE_COUNT = re.compile(r'(\S+)@(\d+)') -def _get_count(txt): - """ Return base key and counter - "CopyFile@2" --> "CopyFile", 2 - "Stop" --> "Stop", 0 - """ - m = re.search(_RE_COUNT, txt) - if m and m.group(2).isdigit(): - return m.group(1), int(m.group(2)) - else: - return txt, 0 diff --git a/main/sabnzbd/misc.py b/main/sabnzbd/misc.py deleted file mode 100644 index db2e3f5..0000000 --- a/main/sabnzbd/misc.py +++ /dev/null @@ -1,1393 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.misc - misc classes -""" - -import os -import sys -import logging -import urllib -import re -import webbrowser -import tempfile -import shutil -import threading -import subprocess -import socket -import time - -import sabnzbd -from sabnzbd.decorators import synchronized -from sabnzbd.constants import * -import sabnzbd.nzbqueue -import sabnzbd.config as config -import sabnzbd.cfg as cfg -from sabnzbd.codecs import unicoder, latin1 -from sabnzbd.lang import T, Ta - -if sabnzbd.FOUNDATION: - import Foundation - -RE_VERSION = re.compile('(\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)') -RE_UNITS = re.compile('(\d+\.*\d*)\s*([KMGTP]{0,1})', re.I) -TAB_UNITS = ('', 'K', 'M', 'G', 'T', 'P') - -PANIC_NONE = 0 -PANIC_PORT = 1 -PANIC_TEMPL = 2 -PANIC_QUEUE = 3 -PANIC_FWALL = 4 -PANIC_OTHER = 5 -PANIC_XPORT = 6 - -def safe_lower(txt): - if txt: - return txt.lower() - else: - return '' - - -#------------------------------------------------------------------------------ -def cat_to_opts(cat, pp=None, script=None, priority=None): - """ - Derive options from category, if option not already defined. - Specified options have priority over category-options - """ - if pp is None: - try: - pp = config.get_categories()[safe_lower(cat)].pp() - # Get the default pp - if pp == '': - pp = cfg.dirscan_pp() - logging.debug('Job gets options %s', pp) - except KeyError: - pp = cfg.dirscan_pp() - - if not script: - try: - script = config.get_categories()[safe_lower(cat)].script() - # Get the default script - if script == '' or safe_lower(script) == 'default': - script = cfg.dirscan_script() - logging.debug('Job gets script %s', script) - except KeyError: - script = cfg.dirscan_script() - - if priority is None or priority == DEFAULT_PRIORITY: - try: - priority = config.get_categories()[safe_lower(cat)].priority() - # Get the default priority - if priority == DEFAULT_PRIORITY: - priority = cfg.dirscan_priority() - logging.debug('Job gets priority %s', script) - except KeyError: - priority = cfg.dirscan_priority() - - return cat, pp, script, priority - - -#------------------------------------------------------------------------------ -_wildcard_to_regex = { - '\\': r'\\', - '^' : r'\^', - '$' : r'\$', - '.' : r'\.', - '[' : r'\[', - ']' : r'\]', - '(' : r'\(', - ')' : r'\)', - '+' : r'\+', - '?' : r'.' , - '|' : r'\|', - '{' : r'\{', - '}' : r'\}', - '*' : r'.*' -} -def wildcard_to_re(text): - """ Convert plain wildcard string (with '*' and '?') to regex. - """ - return ''.join([_wildcard_to_regex.get(ch, ch) for ch in text]) - -#------------------------------------------------------------------------------ -def cat_convert(cat): - """ Convert newzbin/nzbs.org category/group-name to user categories. - If no match found, but newzbin-cat equals user-cat, then return user-cat - If no match found, return None - """ - newcat = cat - found = False - - if cat and cat.lower() != 'none': - cats = config.get_categories() - for ucat in cats: - try: - newzbin = cats[ucat].newzbin() - if type(newzbin) != type([]): - newzbin = [newzbin] - except: - newzbin = [] - for name in newzbin: - if re.search('^%s$' % wildcard_to_re(name), cat, re.I): - if '.' not in name: - logging.debug('Convert newzbin/nzbs.org cat "%s" to user-cat "%s"', cat, ucat) - else: - logging.debug('Convert group "%s" to user-cat "%s"', cat, ucat) - newcat = ucat - found = True - break - if found: - break - - if not found: - for ucat in cats: - if cat.lower() == ucat.lower(): - found = True - break - - if found: - return newcat - else: - return None - - -################################################################################ -# sanitize_filename # -################################################################################ -if sabnzbd.WIN32: - CH_ILLEGAL = r'\/<>?*:|"' - CH_LEGAL = r'++{}!@-#`' -else: - CH_ILLEGAL = r'/' - CH_LEGAL = r'+' - -def sanitize_filename(name): - """ Return filename with illegal chars converted to legal ones - and with the par2 extension always in lowercase - """ - illegal = CH_ILLEGAL - legal = CH_LEGAL - - lst = [] - for ch in name.strip(): - if ch in illegal: - ch = legal[illegal.find(ch)] - lst.append(ch) - name = ''.join(lst) - - if not name: - name = 'unknown' - - name, ext = os.path.splitext(name) - lowext = ext.lower() - if lowext == '.par2' and lowext != ext: - ext = lowext - return name + ext - -FL_ILLEGAL = CH_ILLEGAL + '\x92' -FL_LEGAL = CH_LEGAL + "'" -uFL_ILLEGAL = FL_ILLEGAL.decode('latin-1') -uFL_LEGAL = FL_LEGAL.decode('latin-1') - -def sanitize_foldername(name): - """ Return foldername with dodgy chars converted to safe ones - Remove any leading and trailing dot and space characters - """ - if isinstance(name, unicode): - illegal = uFL_ILLEGAL - legal = uFL_LEGAL - else: - illegal = FL_ILLEGAL - legal = FL_LEGAL - - repl = cfg.replace_illegal() - lst = [] - for ch in name.strip(): - if ch in illegal: - if repl: - ch = legal[illegal.find(ch)] - lst.append(ch) - else: - lst.append(ch) - name = ''.join(lst) - - name = name.strip('. ') - if not name: - name = 'unknown' - - maxlen = cfg.folder_max_length() - if len(name) > maxlen: - name = name[:maxlen] - - return name - - -################################################################################ -# DirPermissions # -################################################################################ -def create_all_dirs(path, umask=False): - """ Create all required path elements and set umask on all - Return True if last elelent could be made or exists """ - result = True - if sabnzbd.WIN32: - try: - os.makedirs(path) - except: - result = False - else: - list = [] - list.extend(path.split('/')) - path = '' - for d in list: - if d: - path += '/' + d - if not os.path.exists(path): - try: - os.mkdir(path) - result = True - except: - result = False - if umask: - mask = cfg.umask() - if mask: - try: - os.chmod(path, int(mask, 8) | 0700) - except: - pass - return result - -################################################################################ -# Real_Path # -################################################################################ -def real_path(loc, path): - if not ((sabnzbd.WIN32 and len(path)>1 and path[0].isalpha() and path[1] == ':') or \ - (path and (path[0] == '/' or path[0] == '\\')) - ): - path = loc + '/' + path - return os.path.normpath(os.path.abspath(path)) - - -################################################################################ -# Create_Real_Path # -################################################################################ -def create_real_path(name, loc, path, umask=False): - if path: - my_dir = real_path(loc, path) - if not os.path.exists(my_dir): - logging.info('%s directory: %s does not exist, try to create it', name, my_dir) - if not create_all_dirs(my_dir, umask): - logging.error(Ta('error-createDir@1'), my_dir) - return (False, my_dir) - - if os.access(my_dir, os.R_OK + os.W_OK): - return (True, my_dir) - else: - logging.error(Ta('error-accessDir@2'), name, my_dir) - return (False, my_dir) - else: - return (False, "") - -################################################################################ -# get_user_shellfolders -# -# Return a dictionary with Windows Special Folders -# Read info from the registry -################################################################################ - -def get_user_shellfolders(): - import _winreg - values = {} - - # Open registry hive - try: - hive = _winreg.ConnectRegistry(None, _winreg.HKEY_CURRENT_USER) - except WindowsError: - logging.error(Ta('error-regConnect')) - return values - - # Then open the registry key where Windows stores the Shell Folder locations - try: - key = _winreg.OpenKey(hive, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders") - except WindowsError: - logging.error(Ta('error-regOpen@1'), r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders") - _winreg.CloseKey(hive) - return values - - try: - for i in range(0, _winreg.QueryInfoKey(key)[1]): - name, value, val_type = _winreg.EnumValue(key, i) - try: - values[name] = value.encode('latin-1') - except UnicodeEncodeError: - try: - # If the path name cannot be converted to latin-1 (contains high ASCII value strings) - # then try and use the short name - import win32api - # Need to make sure the path actually exists, otherwise ignore - if os.path.exists(value): - values[name] = win32api.GetShortPathName(value) - except: - # probably a pywintypes.error error such as folder does not exist - logging.error("Traceback: ", exc_info = True) - values[name] = 'c:\\' - i += 1 - _winreg.CloseKey(key) - _winreg.CloseKey(hive) - return values - except WindowsError: - # On error, return empty dict. - logging.error(Ta('error-regSpecial')) - _winreg.CloseKey(key) - _winreg.CloseKey(hive) - return {} - - -#------------------------------------------------------------------------------ -def windows_variant(): - """ Determine Windows variant - Return vista_plus, x64 - """ - from win32api import GetVersionEx - from win32con import VER_PLATFORM_WIN32_NT - import _winreg - - vista_plus = x64 = False - maj, min, buildno, plat, csd = GetVersionEx() - - if plat == VER_PLATFORM_WIN32_NT: - vista_plus = maj > 5 - if vista_plus: - # Must be done the hard way, because the Python runtime lies to us. - # This does *not* work: - # return os.environ['PROCESSOR_ARCHITECTURE'] == 'AMD64' - # because the Python runtime returns 'X86' even on an x64 system! - key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, - r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment") - for n in xrange(_winreg.QueryInfoKey(key)[1]): - name, value, val_type = _winreg.EnumValue(key, n) - if name == 'PROCESSOR_ARCHITECTURE': - x64 = value.upper() == u'AMD64' - break - _winreg.CloseKey(key) - - return vista_plus, x64 - - -#------------------------------------------------------------------------------ - -_SERVICE_KEY = 'SYSTEM\\CurrentControlSet\\services\\' -_SERVICE_PARM = 'CommandLine' - -def get_serv_parms(service): - """ Get the service command line parameters from Registry """ - import _winreg - - value = [] - try: - key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, _SERVICE_KEY + service) - for n in xrange(_winreg.QueryInfoKey(key)[1]): - name, value, val_type = _winreg.EnumValue(key, n) - if name == _SERVICE_PARM: - break - _winreg.CloseKey(key) - except WindowsError: - pass - for n in xrange(len(value)): - value[n] = latin1(value[n]) - return value - - -def set_serv_parms(service, args): - """ Set the service command line parameters in Registry """ - import _winreg - - uargs = [] - for arg in args: - uargs.append(unicoder(arg)) - - try: - key = _winreg.CreateKey(_winreg.HKEY_LOCAL_MACHINE, _SERVICE_KEY + service) - _winreg.SetValueEx(key, _SERVICE_PARM, None, _winreg.REG_MULTI_SZ, uargs) - _winreg.CloseKey(key) - except WindowsError: - return False - return True - - - -################################################################################ -# Launch a browser for various purposes -# including panic messages -# -################################################################################ -MSG_BAD_NEWS = r''' - - - Problem with %s %s - - -

        Welcome to %s %s

        -

         

        -

        -

        - %s -
        -
        %s
        - - -''' - -MSG_BAD_FWALL = r''' - SABnzbd is not compatible with some software firewalls.
        - %s
        - Sorry, but we cannot solve this incompatibility right now.
        - Please file a complaint at your firewall supplier.
        -
        -''' - -MSG_BAD_PORT = r''' - SABnzbd needs a free tcp/ip port for its internal web server.
        - Port %s on %s was tried , but it is not available.
        - Some other software uses the port or SABnzbd is already running.
        -
        - Please restart SABnzbd with a different port number.
        -
        - %s
        -     %s --server %s:%s
        -
        - If you get this error message again, please try a different number.
        -''' - -MSG_ILL_PORT = r''' - SABnzbd needs a free tcp/ip port for its internal web server.
        - Port %s on %s was tried , but the account SABnzbd has no permission to use it.
        - On Linux systems, normal users must use ports above 1023.
        -
        - Please restart SABnzbd with a different port number.
        -
        - %s
        -     %s --server %s:%s
        -
        - If you get this error message again, please try a different number.
        -''' - -MSG_BAD_QUEUE = r''' - SABnzbd detected saved data from an other SABnzbd version
        - but cannot re-use the data of the other program.

        - You may want to finish your queue first with the other program.

        - After that, start this program with the "--clean" option.
        - This will erase the current queue and history!
        - SABnzbd read the file "%s".
        -
        - %s
        -     %s --clean
        -
        -''' - -MSG_BAD_TEMPL = r''' - SABnzbd cannot find its web interface files in %s.
        - Please install the program again.
        -
        -''' - -MSG_OTHER = r''' - SABnzbd detected a fatal error:
        - %s

        - %s
        -''' - -MSG_OLD_QUEUE = r''' - SABnzbd detected a Queue and History from an older (0.4.x) release.

        - Both queue and history will be ignored and may get lost!

        - You may choose to stop SABnzbd and finish the queue with the older program.

        - Click OK to continue to SABnzbd

        -
        -''' - -def panic_message(panic, a=None, b=None): - """Create the panic message from templates - """ - if sabnzbd.WIN32: - os_str = 'Press Startkey+R and type the line (example):' - prog_path = '"%s"' % sabnzbd.MY_FULLNAME - else: - os_str = 'Open a Terminal window and type the line (example):' - prog_path = sabnzbd.MY_FULLNAME - - if panic == PANIC_PORT: - newport = int(b) + 1 - newport = "%s" % newport - msg = MSG_BAD_PORT % (b, a, os_str, prog_path, a, newport) - elif panic == PANIC_XPORT: - if int(b) < 1023: - newport = 1024 - else: - newport = int(b) + 1 - newport = "%s" % newport - msg = MSG_ILL_PORT % (b, a, os_str, prog_path, a, newport) - elif panic == PANIC_TEMPL: - msg = MSG_BAD_TEMPL % a - elif panic == PANIC_QUEUE: - msg = MSG_BAD_QUEUE % (a, os_str, prog_path) - elif panic == PANIC_FWALL: - if a: - msg = MSG_BAD_FWALL % "It is likely that you are using ZoneAlarm on Vista.
        " - else: - msg = MSG_BAD_FWALL % "
        " - else: - msg = MSG_OTHER % (a, b) - - msg = MSG_BAD_NEWS % (sabnzbd.MY_NAME, sabnzbd.__version__, sabnzbd.MY_NAME, sabnzbd.__version__, - msg, 'Program did not start!') - - if sabnzbd.WIN_SERVICE: - sabnzbd.WIN_SERVICE.ErrLogger('Panic exit', msg) - - if (not cfg.autobrowser()) or sabnzbd.DAEMON: - return - - msgfile, url = tempfile.mkstemp(suffix='.html') - os.write(msgfile, msg) - os.close(msgfile) - return url - - -def panic_fwall(vista): - launch_a_browser(panic_message(PANIC_FWALL, vista)) - -def panic_port(host, port): - launch_a_browser(panic_message(PANIC_PORT, host, port)) - -def panic_xport(host, port): - launch_a_browser(panic_message(PANIC_XPORT, host, port)) - logging.error(Ta('error-portNoAccess@1'), port) - -def panic_queue(name): - launch_a_browser(panic_message(PANIC_QUEUE, name, 0)) - -def panic_tmpl(name): - launch_a_browser(panic_message(PANIC_TEMPL, name, 0)) - -def panic_old_queue(): - msg = MSG_OLD_QUEUE - return MSG_BAD_NEWS % (sabnzbd.MY_NAME, sabnzbd.__version__, sabnzbd.MY_NAME, sabnzbd.__version__, msg, '') - -def panic(reason, remedy=""): - print "\nFatal error:\n %s\n%s" % (reason, remedy) - launch_a_browser(panic_message(PANIC_OTHER, reason, remedy)) - - -def launch_a_browser(url, force=False): - """Launch a browser pointing to the URL - """ - if not force and not cfg.autobrowser() or sabnzbd.DAEMON: - return - - logging.info("Lauching browser with %s", url) - try: - webbrowser.open(url, 2, 1) - except: - # Python 2.4 does not support parameter new=2 - try: - webbrowser.open(url, 1, 1) - except: - logging.warning(Ta('warn-noBrowser')) - logging.debug("Traceback: ", exc_info = True) - - -def error_page_401(status, message, traceback, version): - """ Custom handler for 401 error """ - return r''' - - - Access denied - - -

        - Error %s: You need to provide a valid username and password. - - -''' % status - - - -################################################################################ -# Check latest version -# -# Perform an online version check -# Syntax of online version file: -# -# -# -# -# The latter two lines are only present when a alpha/beta/rc is available. -# Formula for the version numbers (line 1 and 3). -# - ..[rc|beta|alpha] -# -# The value for a final version is assumned to be 99. -# The value for the beta/rc version is 1..98, with RC getting -# a boost of 80 and Beta of 40. -# This is done to signal alpha/beta/rc users of availability of the final -# version (which is implicitly 99). -# People will only be informed to upgrade to a higher alpha/beta/rc version, if -# they are already using an alpha/beta/rc. -# RC's are valued higher than Beta's, which are valued higher than Alpha's. -# -################################################################################ - -def convert_version(text): - """ Convert version string to numerical value and a testversion indicator """ - version = 0 - test = True - m = RE_VERSION.search(text) - if m: - version = int(m.group(1))*1000000 + int(m.group(2))*10000 + int(m.group(3))*100 - try: - if m.group(4).lower() == 'rc': - version = version + 80 - elif m.group(4).lower() == 'beta': - version = version + 40 - version = version + int(m.group(5)) - except: - version = version + 99 - test = False - return version, test - - -def check_latest_version(): - """ Do an online check for the latest version """ - if not cfg.version_check(): - return - - current, testver = convert_version(sabnzbd.__version__) - if not current: - logging.debug("Unsupported release number (%s), will not check", sabnzbd.__version__) - return - - try: - fn = urllib.urlretrieve('http://sabnzbdplus.sourceforge.net/version/latest')[0] - f = open(fn, 'r') - data = f.read() - f.close() - except: - return - - try: - latest_label = data.split()[0] - except: - latest_label = '' - try: - url = data.split()[1] - except: - url = '' - try: - latest_testlabel = data.split()[2] - except: - latest_testlabel = '' - try: - url_beta = data.split()[3] - except: - url_beta = url - - - latest, dummy = convert_version(latest_label) - latest_test, dummy = convert_version(latest_testlabel) - - logging.debug("Checked for a new release, cur= %s, latest= %s (on %s)", current, latest, url) - - if testver and current < latest: - sabnzbd.NEW_VERSION = "%s;%s" % (latest_label, url) - elif current < latest: - sabnzbd.NEW_VERSION = "%s;%s" % (latest_label, url) - elif testver and current < latest_test: - sabnzbd.NEW_VERSION = "%s;%s" % (latest_testlabel, url_beta) - - -def from_units(val): - """ Convert K/M/G/T/P notation to float - """ - val = str(val).strip().upper() - if val == "-1": - return val - m = RE_UNITS.search(val) - if m: - if m.group(2): - val = float(m.group(1)) - unit = m.group(2) - n = 0 - while unit != TAB_UNITS[n]: - val = val * 1024.0 - n = n+1 - else: - val = m.group(1) - try: - return float(val) - except: - return 0.0 - else: - return 0.0 - -def to_units(val, spaces=0): - """ Convert number to K/M/G/T/P notation - Add "spaces" if not ending in letter - """ - val = str(val).strip() - if val == "-1": - return val - n= 0 - try: - val = float(val) - except: - return '' - while (val > 1023.0) and (n < 5): - val = val / 1024.0 - n= n+1 - unit = TAB_UNITS[n] - if unit: - return "%.2f %s" % (val, unit) - else: - return "%.0f%s" % (val, ' '*spaces) - -#------------------------------------------------------------------------------ -def same_file(a, b): - """ Return True if both paths are identical """ - - if "samefile" in os.path.__dict__: - try: - return os.path.samefile(a, b) - except: - return False - else: - try: - a = os.path.normpath(os.path.abspath(a)).lower() - b = os.path.normpath(os.path.abspath(b)).lower() - return a == b - except: - return False - -#------------------------------------------------------------------------------ -def exit_sab(value): - sys.stderr.flush() - sys.stdout.flush() - sys.exit(value) - - -#------------------------------------------------------------------------------ -def notify(notificationName, message): - """ Send a notification to the OS (OSX-only) """ - if sabnzbd.FOUNDATION: - pool = Foundation.NSAutoreleasePool.alloc().init() - nc = Foundation.NSDistributedNotificationCenter.defaultCenter() - nc.postNotificationName_object_(notificationName, message) - del pool - - -#------------------------------------------------------------------------------ -def split_host(srv): - """ Split host:port notation, allowing for IPV6 """ - # Cannot use split, because IPV6 of "a:b:c:port" notation - # Split on the last ':' - mark = srv.rfind(':') - if mark < 0: - host = srv - else: - host = srv[0 : mark] - port = srv[mark+1 :] - try: - port = int(port) - except: - port = None - return (host, port) - - -#------------------------------------------------------------------------------ -# Locked directory operations - -DIR_LOCK = threading.RLock() - -@synchronized(DIR_LOCK) -def get_unique_path(dirpath, n=0, create_dir=True): - """ Determine a unique folder or filename """ - path = dirpath - if n: path = "%s.%s" % (dirpath, n) - - if not os.path.exists(path): - if create_dir: create_dirs(path) - return path - else: - return get_unique_path(dirpath, n=n+1, create_dir=create_dir) - -@synchronized(DIR_LOCK) -def get_unique_filename(path): - """ Check if path is unique. If not, add number like: "/path/name.NUM.ext". - """ - num = 1 - while os.path.exists(path): - path, fname = os.path.split(path) - name, ext = os.path.splitext(fname) - fname = "%s.%d%s" % (name, num, ext) - num += 1 - path = os.path.join(path, fname) - return path - - -@synchronized(DIR_LOCK) -def create_dirs(dirpath): - """ Create directory tree, obeying permissions """ - if not os.path.exists(dirpath): - logging.info('Creating directories: %s', dirpath) - if not create_all_dirs(dirpath, True): - logging.error(Ta('error-makeFile@1'), dirpath) - logging.debug("Traceback: ", exc_info = True) - return None - return dirpath - - -@synchronized(DIR_LOCK) -def move_to_path(path, new_path, unique=True): - """ Move a file to a new path, optionally give unique filename """ - if unique: - new_path = get_unique_path(new_path, create_dir=False) - if new_path: - logging.debug("Moving. Old path:%s new path:%s unique?:%s", - path,new_path, unique) - try: - # First try cheap rename - renamer(path, new_path) - except: - # Cannot rename, try copying - try: - if not os.path.exists(os.path.dirname(new_path)): - create_dirs(os.path.dirname(new_path)) - shutil.copyfile(path, new_path) - os.remove(path) - except: - logging.error(Ta('error-moveFile@2'), path, new_path) - logging.debug("Traceback: ", exc_info = True) - return new_path - - -@synchronized(DIR_LOCK) -def cleanup_empty_directories(path): - path = os.path.normpath(path) - while 1: - repeat = False - for root, dirs, files in os.walk(path, topdown=False): - if not dirs and not files and root != path: - try: - remove_dir(root) - repeat = True - except: - pass - if not repeat: - break - - -@synchronized(DIR_LOCK) -def get_filepath(path, nzo, filename): - """ Create unique filepath """ - # This procedure is only used by the Assembler thread - # It does no umask setting - # It uses the dir_lock for the (rare) case that the - # download_dir is equal to the complete_dir. - dirname = nzo.get_dirname() - created = nzo.get_dirname_created() - - dName = dirname - if not created: - for n in xrange(200): - dName = dirname - if n: dName += '.' + str(n) - try: - os.mkdir(os.path.join(path, dName)) - break - except: - pass - nzo.set_dirname(dName, created = True) - - fPath = os.path.join(os.path.join(path, dName), filename) - n = 0 - while True: - fullPath = fPath - if n: fullPath += '.' + str(n) - if os.path.exists(fullPath): - n = n + 1 - else: - break - - return fullPath - - -def bad_fetch(nzo, url, msg='', retry=False, archive=False): - """ Create History entry for failed URL Fetch """ - logging.error(Ta('error-urlGet@2'), latin1(url), latin1(msg)) - msg = unicoder(msg) - - pp = nzo.get_pp() - if pp: - pp = '&pp=%s' % urllib.quote(pp) - else: - pp = '' - cat = nzo.get_cat() - if cat: - cat = '&cat=%s' % urllib.quote(cat) - else: - cat = '' - script = nzo.get_script() - if script: - script = '&script=%s' % urllib.quote(script) - else: - script = '' - - nzo.set_status('Failed') - - - if url: - nzo.set_filename(url) - nzo.set_original_dirname(url) - - if retry: - nzbname = nzo.get_dirname_rename() - if nzbname: - nzbname = '&nzbname=%s' % urllib.quote(nzbname) - else: - nzbname = '' - text = T('his-retryURL1@1')+', ' + T('his-retryURL2') + '' - parms = (msg, cfg.api_key(), urllib.quote(url), pp, cat, script, nzbname) - nzo.set_fail_msg(text % parms) - else: - if archive: - msg = T('his-badArchive') - elif not '://' in url: - msg = T('his-cannotGetReport') - else: - msg = T('his-failedURL') - nzo.set_fail_msg(msg) - - sabnzbd.nzbqueue.remove_nzo(nzo.nzo_id, add_to_history=True, unload=True) - - -def on_cleanup_list(filename, skip_nzb=False): - """ Return True if a filename matches the clean-up list """ - - if cfg.cleanup_list(): - ext = os.path.splitext(filename)[1].strip().strip('.') - if sabnzbd.WIN32: ext = ext.lower() - - for k in cfg.cleanup_list(): - item = k.strip().strip('.') - if item == ext and not (skip_nzb and item == 'nzb'): - return True - return False - -def get_ext(filename): - try: - return os.path.splitext(filename)[1].lower() - except: - return '' - -def get_filename(path): - try: - return os.path.split(path)[1] - except: - return '' - -def loadavg(): - """ Return 1, 5 and 15 minute load average of host or "" if not supported - """ - if sabnzbd.WIN32 or sabnzbd.DARWIN: - return "" - try: - loadavgstr = open('/proc/loadavg', 'r').readline().strip() - except: - return "" - - data = loadavgstr.split() - try: - a1, a5, a15 = map(float, data[:3]) - return "%.2f, %.2f, %.2f" % (a1, a5, a15) - except: - return "" - - -def format_time_string(seconds, days=0): - """ Return a formatted and translated time string """ - seconds = IntConv(seconds) - completestr = [] - if days: - completestr.append('%s %s' % (days, s_returner('day', days))) - if (seconds/3600) >= 1: - completestr.append('%s %s' % (seconds/3600, s_returner('hour', (seconds/3600)))) - seconds -= (seconds/3600)*3600 - if (seconds/60) >= 1: - completestr.append('%s %s' % (seconds/60, s_returner('minute',(seconds/60)))) - seconds -= (seconds/60)*60 - if seconds > 0: - completestr.append('%s %s' % (seconds, s_returner('second', seconds))) - elif not completestr: - completestr.append('0 %s' % s_returner('second', 0)) - - p = ' '.join(completestr) - if isinstance(p, unicode): - return p.encode('latin-1') - else: - return p - -def s_returner(item, value): - if value == 1: - return T(item) - else: - return T(item + 's') - -def IntConv(value): - """Safe conversion to int""" - try: - value = int(value) - except: - value = 0 - return value - - -#------------------------------------------------------------------------------ -# Diskfree -try: - os.statvfs - import statvfs - # posix diskfree - def diskfree(_dir): - try: - s = os.statvfs(_dir) - return (s[statvfs.F_BAVAIL] * s[statvfs.F_FRSIZE]) / GIGI - except OSError: - return 0.0 - def disktotal(_dir): - try: - s = os.statvfs(_dir) - return (s[statvfs.F_BLOCKS] * s[statvfs.F_FRSIZE]) / GIGI - except OSError: - return 0.0 - -except AttributeError: - - try: - import win32api - except ImportError: - pass - # windows diskfree - def diskfree(_dir): - try: - available, disk_size, total_free = win32api.GetDiskFreeSpaceEx(_dir) - return available / GIGI - except: - return 0.0 - def disktotal(_dir): - try: - available, disk_size, total_free = win32api.GetDiskFreeSpaceEx(_dir) - return disk_size / GIGI - except: - return 0.0 - - -def create_https_certificates(ssl_cert, ssl_key): - try: - from OpenSSL import crypto - from sabnzbd.utils.certgen import createKeyPair, createCertRequest, createCertificate,\ - TYPE_RSA, serial - except: - logging.warning(Ta('warn-pyopenssl')) - return False - - # Create the CA Certificate - cakey = createKeyPair(TYPE_RSA, 1024) - careq = createCertRequest(cakey, CN='Certificate Authority') - cacert = createCertificate(careq, (careq, cakey), serial, (0, 60*60*24*365*10)) # ten years - - fname = 'server' - cname = 'SABnzbd' - pkey = createKeyPair(TYPE_RSA, 1024) - req = createCertRequest(pkey, CN=cname) - cert = createCertificate(req, (cacert, cakey), serial, (0, 60*60*24*365*10)) # ten years - - # Save the key and certificate to disk - try: - open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey)) - open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) - except: - logging.error(Ta('error-sslFiles')) - logging.debug("Traceback: ", exc_info = True) - return False - - return True - - -def find_on_path(targets): - """ Search the PATH for a program and return full path """ - if sabnzbd.WIN32: - paths = os.getenv('PATH').split(';') - else: - paths = os.getenv('PATH').split(':') - - if isinstance(targets, basestring): - targets = ( targets, ) - - for path in paths: - for target in targets: - target_path = os.path.abspath(os.path.join(path, target)) - if os.path.isfile(target_path) and os.access(target_path, os.X_OK): - return target_path - return None - - -#------------------------------------------------------------------------------ -_RE_IP4 = re.compile(r'inet\s+(addr:\s*){0,1}(\d+\.\d+\.\d+\.\d+)') -_RE_IP6 = re.compile(r'inet6\s+(addr:\s*){0,1}([0-9a-f:]+)', re.I) - -def ip_extract(): - """ Return list of IP addresses of this system """ - ips = [] - program = find_on_path('ip') - if program: - program = [program, 'a'] - else: - program = find_on_path('ifconfig') - if program: program = [program] - - if sabnzbd.WIN32 or not program: - try: - info = socket.getaddrinfo(socket.gethostname(), None) - except: - # Hostname does not resolve, use localhost - info = socket.getaddrinfo('localhost', None) - for item in info: - ips.append(item[4][0]) - else: - p = subprocess.Popen(program, shell=False, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - startupinfo=None, creationflags=0) - output = p.stdout.read() - ret = p.wait() - for line in output.split('\n'): - m = _RE_IP4.search(line) - if not (m and m.group(2)): - m = _RE_IP6.search(line) - if m and m.group(2): - ips.append(m.group(2)) - return ips - - -#------------------------------------------------------------------------------ -# Power management for Windows - -def win_hibernate(): - try: - subprocess.Popen("rundll32 powrprof.dll,SetSuspendState Hibernate") - time.sleep(10) - except: - logging.error(Ta('error-hibernate')) - logging.debug("Traceback: ", exc_info = True) - - -def win_standby(): - try: - subprocess.Popen("rundll32 powrprof.dll,SetSuspendState Standby") - time.sleep(10) - except: - logging.error(Ta('error-standby')) - logging.debug("Traceback: ", exc_info = True) - - -def win_shutdown(): - try: - import win32security - import win32api - import ntsecuritycon - - flags = ntsecuritycon.TOKEN_ADJUST_PRIVILEGES | ntsecuritycon.TOKEN_QUERY - htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags) - id = win32security.LookupPrivilegeValue(None, ntsecuritycon.SE_SHUTDOWN_NAME) - newPrivileges = [(id, ntsecuritycon.SE_PRIVILEGE_ENABLED)] - win32security.AdjustTokenPrivileges(htoken, 0, newPrivileges) - win32api.InitiateSystemShutdown("", "", 30, 1, 0) - finally: - os._exit(0) - - -#------------------------------------------------------------------------------ -# Power management for OSX - -def osx_shutdown(): - try: - subprocess.call(['osascript', '-e', 'tell app "System Events" to shut down']) - except: - logging.error(Ta('error-shutdown')) - logging.debug("Traceback: ", exc_info = True) - os._exit(0) - - -def osx_standby(): - try: - subprocess.call(['osascript', '-e','tell app "System Events" to sleep']) - time.sleep(10) - except: - logging.error(Ta('error-standby')) - logging.debug("Traceback: ", exc_info = True) - - -def osx_hibernate(): - osx_standby() - - -#------------------------------------------------------------------------------ -# Power management for linux. -# -# Requires DBus plus either HAL [1] or the more modern ConsoleKit [2] and -# DeviceKit(-power) [3]. HAL will eventually be deprecated but older systems -# might still use it. -# [1] http://people.freedesktop.org/~hughsient/temp/dbus-interface.html -# [2] http://www.freedesktop.org/software/ConsoleKit/doc/ConsoleKit.html -# [3] http://hal.freedesktop.org/docs/DeviceKit-power/ -# -# Original code was contributed by Marcel de Vries -# - -try: - import dbus - HAVE_DBUS = True -except ImportError: - HAVE_DBUS = False - - -def _get_sessionproxy(): - name = 'org.freedesktop.PowerManagement' - path = '/org/freedesktop/PowerManagement' - interface = 'org.freedesktop.PowerManagement' - try: - bus = dbus.SessionBus() - return bus.get_object(name, path), interface - except dbus.exceptions.DBusException: - return None, None - -def _get_systemproxy(method): - if method == 'ConsoleKit': - name = 'org.freedesktop.ConsoleKit' - path = '/org/freedesktop/ConsoleKit/Manager' - interface = 'org.freedesktop.ConsoleKit.Manager' - pinterface = None - elif method == 'DeviceKit': - name = 'org.freedesktop.DeviceKit.Power' - path = '/org/freedesktop/DeviceKit/Power' - interface = 'org.freedesktop.DeviceKit.Power' - pinterface = 'org.freedesktop.DBus.Properties' - try: - bus = dbus.SystemBus() - return bus.get_object(name, path), interface, pinterface - except dbus.exceptions.DBusException: - return None, None, None - - -def linux_shutdown(): - if not HAVE_DBUS: os._exit(0) - - proxy, interface = _get_sessionproxy() - if proxy: - if proxy.CanShutdown(): - proxy.Shutdown(dbus_interface=interface) - else: - proxy, interface, pinterface = _get_systemproxy('ConsoleKit') - if proxy and proxy.CanStop(dbus_interface=interface): - try: - proxy.Stop(dbus_interface=interface) - except dbus.exceptions.DBusException, msg: - logging.info('Received a DBus exception %s', latin1(msg)) - os._exit(0) - - -def linux_hibernate(): - if not HAVE_DBUS: return - - proxy, interface = _get_sessionproxy() - if proxy: - if proxy.CanHibernate(): - proxy.Hibernate(dbus_interface=interface) - else: - proxy, interface, pinterface = _get_systemproxy('DeviceKit') - if proxy and proxy.Get(interface, 'can-hibernate', dbus_interface=pinterface): - try: - proxy.Hibernate(dbus_interface=interface) - except dbus.exceptions.DBusException, msg: - logging.info('Received a DBus exception %s', latin1(msg)) - time.sleep(10) - - -def linux_standby(): - if not HAVE_DBUS: return - - proxy, interface = _get_sessionproxy() - if proxy: - if proxy.CanSuspend(): - proxy.Suspend(dbus_interface=interface) - else: - proxy, interface, pinterface = _get_systemproxy('DeviceKit') - if proxy.Get(interface, 'can-suspend', dbus_interface=pinterface): - try: - proxy.Suspend(dbus_interface=interface) - except dbus.exceptions.DBusException, msg: - logging.info('Received a DBus exception %s', latin1(msg)) - time.sleep(10) - - -#------------------------------------------------------------------------------ - -def renamer(old, new): - """ Rename file/folder with retries for Win32 """ - if sabnzbd.WIN32: - retries = 5 - while retries > 0: - try: - os.rename(old, new) - return - except WindowsError, err: - if err[0] == 32: - logging.info('Retry rename %s to %s', old, new) - retries -= 1 - else: - raise WindowsError(err) - time.sleep(3) - raise WindowsError(err) - else: - os.rename(old, new) - - -def remove_dir(path): - """ Remove directory with retries for Win32 """ - if sabnzbd.WIN32: - retries = 5 - while retries > 0: - try: - os.rmdir(path) - return - except WindowsError, err: - if err[0] == 32: - logging.info('Retry delete %s', path) - retries -= 1 - else: - raise WindowsError(err) - time.sleep(3) - raise WindowsError(err) - else: - os.rmdir(path) diff --git a/main/sabnzbd/newsunpack.py b/main/sabnzbd/newsunpack.py deleted file mode 100644 index 36c0da2..0000000 --- a/main/sabnzbd/newsunpack.py +++ /dev/null @@ -1,1224 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.newsunpack -""" - -import os -import sys -import re -import subprocess -import logging -from time import time - -import sabnzbd -from sabnzbd.codecs import TRANS, unicode2local,name_fixer, reliable_unpack_names, unicoder -from sabnzbd.utils.rarfile import RarFile -from sabnzbd.misc import format_time_string, find_on_path -import sabnzbd.cfg as cfg -from sabnzbd.lang import T, Ta - -if sabnzbd.WIN32: - try: - import win32api - from win32con import SW_HIDE - from win32process import STARTF_USESHOWWINDOW, IDLE_PRIORITY_CLASS - except ImportError: - pass -else: - # Define dummy WindowsError for non-Windows - class WindowsError(Exception): - def __init__(self, value): - self.parameter = value - def __str__(self): - return repr(self.parameter) - -# Regex globals -RAR_RE = re.compile(r'\.(?Ppart\d*\.rar|rar|s\d\d|r\d\d|\d\d\d)$', re.I) -RAR_RE_V3 = re.compile(r'\.(?Ppart\d*)$', re.I) - -LOADING_RE = re.compile(r'^Loading "(.+)"') -TARGET_RE = re.compile(r'^(?:File|Target): "(.+)" -') -EXTRACTFROM_RE = re.compile(r'^Extracting\sfrom\s(.+)') -SPLITFILE_RE = re.compile(r'\.(\d\d\d$)', re.I) -ZIP_RE = re.compile(r'\.(zip$)', re.I) -VOLPAR2_RE = re.compile(r'\.*vol[0-9]+\+[0-9]+\.par2', re.I) -FULLVOLPAR2_RE = re.compile(r'(.*[^.])(\.*vol[0-9]+\+[0-9]+\.par2)', re.I) -TS_RE = re.compile(r'\.(\d+)\.(ts$)', re.I) - -PAR2_COMMAND = None -PAR2C_COMMAND = None -RAR_COMMAND = None -NICE_COMMAND = None -ZIP_COMMAND = None -IONICE_COMMAND = None -RAR_PROBLEM = False - -def find_programs(curdir): - """Find external programs - """ - def check(path, program): - p = os.path.abspath(os.path.join(path, program)) - if os.access(p, os.X_OK): - return p - else: - return None - - if sabnzbd.DARWIN: - try: - os_version = subprocess.Popen("sw_vers -productVersion", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).stdout.read() - #par2-sl from Macpar Deluxe 4.1 is only 10.6 and later - if int(os_version.split('.')[1]) >= 6: - sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'osx/par2/par2-sl') - else: - sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'osx/par2/par2-classic') - except: - sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'osx/par2/par2-classic') - - sabnzbd.newsunpack.RAR_COMMAND = check(curdir, 'osx/unrar/unrar') - - if sabnzbd.WIN32: - if sabnzbd.WIN64: - sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'win/par2/x64/par2.exe') - sabnzbd.newsunpack.RAR_COMMAND = check(curdir, 'win/unrar/x64/UnRAR.exe') - if not sabnzbd.newsunpack.PAR2_COMMAND: - sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'win/par2/par2.exe') - if not sabnzbd.newsunpack.RAR_COMMAND: - sabnzbd.newsunpack.RAR_COMMAND = check(curdir, 'win/unrar/UnRAR.exe') - sabnzbd.newsunpack.PAR2C_COMMAND = check(curdir, 'win/par2/par2-classic.exe') - sabnzbd.newsunpack.ZIP_COMMAND = check(curdir, 'win/unzip/unzip.exe') - else: - if not sabnzbd.newsunpack.PAR2_COMMAND: - sabnzbd.newsunpack.PAR2_COMMAND = find_on_path('par2') - if not sabnzbd.newsunpack.RAR_COMMAND: - sabnzbd.newsunpack.RAR_COMMAND = find_on_path(('unrar', 'rar', 'unrar3', 'rar3',)) - sabnzbd.newsunpack.NICE_COMMAND = find_on_path('nice') - sabnzbd.newsunpack.IONICE_COMMAND = find_on_path('ionice') - sabnzbd.newsunpack.ZIP_COMMAND = find_on_path('unzip') - - if not (sabnzbd.WIN32 or sabnzbd.DARWIN): - sabnzbd.newsunpack.RAR_PROBLEM = not unrar_check(sabnzbd.newsunpack.RAR_COMMAND) - -#------------------------------------------------------------------------------ -def external_processing(extern_proc, complete_dir, filename, msgid, nicename, cat, group, status): - - command = [str(extern_proc), str(complete_dir), str(filename), \ - str(nicename), str(msgid), str(cat), str(group), str(status)] - - stup, need_shell, command, creationflags = build_command(command) - - logging.info('Running external script %s(%s, %s, %s, %s, %s, %s, %s)', \ - extern_proc, complete_dir, filename, nicename, msgid, cat, group, status) - - try: - p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - startupinfo=stup, creationflags=creationflags) - except: - logging.debug("Failed script %s, Traceback: ", extern_proc, exc_info = True) - return "Cannot run script %s\r\n" % extern_proc, -1 - - output = p.stdout.read() - ret = p.wait() - return output, ret - - -#------------------------------------------------------------------------------ -def SimpleRarExtract(rarfile, name): - """ Extract single file from rar archive, returns (retcode, data) """ - command = [sabnzbd.newsunpack.RAR_COMMAND, "p", "-inul", rarfile, name] - - stup, need_shell, command, creationflags = build_command(command) - - p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - startupinfo=stup, creationflags=creationflags) - - output = p.stdout.read() - ret = p.wait() - return ret, output - -#------------------------------------------------------------------------------ -def unpack_magic(nzo, workdir, workdir_complete, dele, joinables, zips, rars, ts, depth=0): - if depth > 5: - logging.warning('Unpack nesting too deep [%s]', nzo.get_dirname()) - return False, [] - depth += 1 - - xjoinables, xzips, xrars, xts = build_filelists(workdir, workdir_complete) - - rerun = False - newfiles = [] - error = False - - if cfg.enable_filejoin(): - new_joins = [jn for jn in xjoinables if jn not in joinables] - if new_joins: - rerun = True - logging.info('Filejoin starting on %s', workdir) - error, newf = file_join(nzo, workdir, workdir_complete, dele, new_joins) - if newf: - newfiles.extend(newf) - logging.info('Filejoin finished on %s', workdir) - nzo.set_action_line('', '') - - if cfg.enable_unrar(): - new_rars = [rar for rar in xrars if rar not in rars] - if new_rars: - rerun = True - logging.info('Unrar starting on %s', workdir) - error, newf = rar_unpack(nzo, workdir, workdir_complete, dele, new_rars) - if newf: - newfiles.extend(newf) - logging.info('Unrar finished on %s', workdir) - nzo.set_action_line('', '') - - if cfg.enable_unzip(): - new_zips = [zip for zip in xzips if zip not in zips] - if new_zips: - logging.info('Unzip starting on %s', workdir) - if unzip(nzo, workdir, workdir_complete, dele, new_zips): - error = True - logging.info('Unzip finished on %s', workdir) - nzo.set_action_line('', '') - - if cfg.enable_tsjoin(): - new_ts = [_ts for _ts in xts if _ts not in ts] - if new_ts: - rerun = True - logging.info('TS Joining starting on %s', workdir) - error, newf = file_join(nzo, workdir, workdir_complete, dele, new_ts) - if newf: - newfiles.extend(newf) - logging.info('TS Joining finished on %s', workdir) - nzo.set_action_line('', '') - - - if rerun: - z, y = unpack_magic(nzo, workdir, workdir_complete, dele, xjoinables, - xzips, xrars, xts, depth) - if z: - error = z - if y: - newfiles.extend(y) - - return error, newfiles - -#------------------------------------------------------------------------------ -# Filejoin Functions -#------------------------------------------------------------------------------ - -def match_ts(file): - match = TS_RE.search(file) - if not match: - return False, '', 0 - - num = int(match.group(1)) - try: - set = file[:match.start()] - set += '.ts' - except: - set = '' - return match, set, num - -def file_join(nzo, workdir, workdir_complete, delete, joinables): - newfiles = [] - try: - joinable_sets = {} - set = match = num = None - for joinable in joinables: - head, tail = os.path.splitext(joinable) - if tail == '.ts': - match, set, num = match_ts(joinable) - if not set: - set = head - - if set not in joinable_sets: - joinable_sets[set] = [] - joinable_sets[set].append(joinable) - - logging.debug("joinable_sets: %s", joinable_sets) - - for joinable_set in joinable_sets: - try: - expected_size = 0 - # Make sure there are no missing files in the file sequence - # Add 1 to the value before adding to take into account .000 - for i in xrange(len(joinable_sets[joinable_set])+1): - expected_size += i - logging.debug("FJN, expsize: %s", expected_size) - - # Add together the values of .001 (+1 for .000) - # To work out the actual size - real_size = 0 - for joinable in joinable_sets[joinable_set]: - head, tail = os.path.splitext(joinable) - if tail == '.ts': - match, set, num = match_ts(joinable) - real_size += num+1 - else: - real_size += int(tail[1:]) - logging.debug("FJN, realsize: %s", real_size) - - if real_size != expected_size: - msg = T('error-joinMismatch') - nzo.set_fail_msg(T('error-joinFail@1') % msg) - nzo.set_unpack_info('Filejoin', T('error-joinFail@2') % (unicoder(joinable_set), msg)) - logging.error(Ta('error-fileJoin@2'), msg, nzo.get_dirname()) - else: - joinable_sets[joinable_set].sort() - filename = joinable_set - - # Check if par2 repaired this joinable set - if os.path.exists(filename): - logging.debug("file_join(): Skipping %s, (probably) joined by par2", filename) - if delete: - i = 0 - for joinable in joinable_sets[joinable_set]: - if os.path.exists(joinable): - logging.debug("Deleting %s", joinable) - try: - os.remove(joinable) - except: - pass - path1 = joinable + ".1" - if os.path.exists(path1): - logging.debug("Deleting %s", path1) - try: - os.remove(path1) - except: - pass - i += 1 - continue - - if workdir_complete: - filename = filename.replace(workdir, workdir_complete) - - logging.debug("file_join(): Assembling %s", filename) - - joined_file = open(filename, 'ab') - - i = 0 - for joinable in joinable_sets[joinable_set]: - join_num = len(joinable_sets[joinable_set]) - perc = (100.0/join_num)*(i) - logging.debug("Processing %s", joinable) - nzo.set_action_line(T('msg-joining'), '%.0f%%' % perc) - f = open(joinable, 'rb') - joined_file.write(f.read()) - f.close() - i += 1 - if delete: - logging.debug("Deleting %s", joinable) - os.remove(joinable) - - joined_file.flush() - joined_file.close() - msg = T('msg-joinOK@2') % (unicoder(joinable_set), i) - nzo.set_unpack_info('Filejoin', msg, set=joinable_set) - newfiles.append(joinable_set) - except: - msg = sys.exc_info()[1] - nzo.set_fail_msg(T('error-joinFail@1') % msg) - nzo.set_unpack_info('Filejoin', T('error-joinFail@2') % (unicoder(joinable_set), msg)) - logging.error(Ta('error-fileJoin@2'), msg, nzo.get_dirname()) - return True, [] - - return False, newfiles - except: - msg = sys.exc_info()[1] - nzo.set_fail_msg(T('error-joinFail@1') % msg) - nzo.set_unpack_info('Filejoin', T('error-joinFail@2') % (unicoder(joinable_set), msg)) - logging.error(Ta('error-fileJoin@2'), msg, nzo.get_dirname()) - return True, [] - - -#------------------------------------------------------------------------------ -# (Un)Rar Functions -#------------------------------------------------------------------------------ - -def rar_unpack(nzo, workdir, workdir_complete, delete, rars): - errors = False - extracted_files = [] - - rar_sets = {} - for rar in rars: - rar_set = os.path.splitext(os.path.basename(rar))[0] - if RAR_RE_V3.search(rar_set): - rar_set = os.path.splitext(rar_set)[0] - if not rar_set in rar_sets: - rar_sets[rar_set] = [] - rar_sets[rar_set].append(rar) - - logging.debug('Rar_sets: %s', rar_sets) - - for rar_set in rar_sets: - # Run the RAR extractor - rar_sets[rar_set].sort(rar_sort) - - rarpath = rar_sets[rar_set][0] - - - extraction_path = workdir - if workdir_complete: - extraction_path = workdir_complete - - logging.info("Extracting rarfile %s (belonging to %s) to %s", - rarpath, rar_set, extraction_path) - - try: - newfiles, rars = RAR_Extract(rarpath, len(rar_sets[rar_set]), - nzo, rar_set, extraction_path) - success = True - except: - success = False - errors = True - msg = sys.exc_info()[1] - nzo.set_fail_msg(T('error-unpackFail@1') % msg) - setname = nzo.get_dirname() - nzo.set_unpack_info('Unpack', T('error-unpackFail@2') % (unicoder(setname), msg)) - - logging.error(Ta('error-fileUnrar@2'), msg, setname) - - if success: - logging.debug('rar_unpack(): Rars: %s', rars) - logging.debug('rar_unpack(): Newfiles: %s', newfiles) - extracted_files.extend(newfiles) - - # Delete the old files if we have to - if success and delete and newfiles: - for rar in rars: - logging.info("Deleting %s", rar) - try: - os.remove(rar) - except OSError: - logging.warning(Ta('warn-delFailed@1'), rar) - - brokenrar = '%s.1' % (rar) - - if os.path.exists(brokenrar): - logging.info("Deleting %s", brokenrar) - try: - os.remove(brokenrar) - except OSError: - logging.warning(Ta('warn-delFailed@1'), brokenrar) - - return errors, extracted_files - - -def RAR_Extract(rarfile, numrars, nzo, setname, extraction_path): - start = time() - - logging.debug("RAR_Extract(): Extractionpath: %s", - extraction_path) - - try: - zf = RarFile(rarfile) - expected_files = zf.unamelist() - zf.close() - except: - nzo.set_fail_msg(T('error-badArchive')) - nzo.set_unpack_info('Unpack', u'[%s] %s' % (unicoder(setname), T('error-badArchive')), set=setname) - - logging.info('Archive %s probably encrypted, skipping', rarfile) - return ((), ()) - - if nzo.get_password(): - password = '-p%s' % nzo.get_password() - else: - password = '-p-' - - ############################################################################ - - if sabnzbd.WIN32: - # Use all flags - command = ['%s' % RAR_COMMAND, 'x', '-idp', '-o-', '-or', '-ai', password, - '%s' % rarfile, '%s/' % extraction_path] - elif RAR_PROBLEM: - # Use only oldest options (specifically no "-or") - command = ['%s' % RAR_COMMAND, 'x', '-idp', '-o-', password, - '%s' % rarfile, '%s/' % extraction_path] - else: - # Don't use "-ai" (not needed for non-Windows) - command = ['%s' % RAR_COMMAND, 'x', '-idp', '-o-', '-or', password, - '%s' % rarfile, '%s/' % extraction_path] - - stup, need_shell, command, creationflags = build_command(command) - - p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - startupinfo=stup, creationflags=creationflags) - - proc = p.stdout - if p.stdin: - p.stdin.close() - - nzo.set_action_line(T('msg-unpacking'), '00/%02d' % (numrars)) - - # Loop over the output from rar! - curr = 0 - extracted = [] - rarfiles = [] - fail = 0 - - while 1: - line = proc.readline() - if not line: - break - - line = line.strip() - - if line.startswith('Extracting from'): - filename = TRANS((re.search(EXTRACTFROM_RE, line).group(1))) - if filename not in rarfiles: - rarfiles.append(filename) - curr += 1 - nzo.set_action_line(T('msg-unpacking'), '%02d/%02d' % (curr, numrars)) - - elif line.startswith('Cannot find volume'): - filename = os.path.basename(TRANS(line[19:])) - nzo.set_fail_msg(T('error-unpackFailed@1') % unicoder(filename)) - msg = ('[%s] '+Ta('error-unpackFailed@1')) % (setname, filename) - nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) - logging.warning(Ta('warn-cannotFind@1'), filename) - fail = 1 - - elif line.endswith('- CRC failed'): - filename = TRANS(line[:-12].strip()) - nzo.set_fail_msg(T('error-unpackCRC')) - msg = ('[%s] '+Ta('warn-crcFailed@1')) % (setname, filename) - nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) - logging.warning(Ta('warn-crcFailed@1'), setname) - fail = 1 - - elif line.startswith('Write error'): - nzo.set_fail_msg(T('error-unpackFull')) - msg = ('[%s] ' + Ta('error-unpackFull')) % setname - nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) - logging.warning(Ta('warn-writeError@1'), line[11:]) - fail = 1 - - elif line.startswith('ERROR: '): - nzo.set_fail_msg(T('error-unpackFailLog')) - logging.warning(Ta('warn-error@1'), (line[7:])) - msg = ('[%s] '+Ta('warn-error@1')) % (setname, line[7:]) - nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) - fail = 1 - - elif line.startswith('Encrypted file: CRC failed'): - filename = TRANS(line[31:-23].strip()) - nzo.set_fail_msg(T('error-unpackPassword')) - msg = ('[%s][%s] '+Ta('error-unpackPassword')) % (setname, filename) - nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) - logging.error('%s (%s)', Ta('error-unpackPassword'), filename) - fail = 1 - - else: - m = re.search(r'^(Extracting|Creating|...)\s+(.*?)\s+OK\s*$', line) - if m: - extracted.append(TRANS(m.group(2))) - - if fail: - if proc: - proc.close() - p.wait() - - return ((), ()) - - if proc: - proc.close() - p.wait() - - - if cfg.unpack_check(): - if reliable_unpack_names() and not RAR_PROBLEM: - all_found = True - # Loop through and check for the presence of all the files the archive contained - for path in expected_files: - path = unicode2local(path) - fullpath = os.path.join(extraction_path, path) - logging.debug("Checking existance of %s", fullpath) - if path.endswith('/'): - # Folder - continue - if not os.path.exists(fullpath): - # There was a missing file, show a warning - all_found = False - logging.warning(Ta('warn-MissExpectedFile@1'), path) - - if not all_found: - nzo.set_fail_msg(T('error-unpackMissing')) - logging.debug("Expecting files: %s" % expected_files) - nzo.set_unpack_info('Unpack', T('error-unpackMissing'), set=setname) - return ((), ()) - else: - logging.info('Skipping unrar file check due to unreliable file names or old unrar') - - msg = T('msg-unpackDone@2') % (str(len(extracted)), format_time_string(time() - start)) - nzo.set_unpack_info('Unpack', '[%s] %s' % (unicoder(setname), msg), set=setname) - logging.info('%s', msg) - - return (extracted, rarfiles) - -#------------------------------------------------------------------------------ -# (Un)Zip Functions -#------------------------------------------------------------------------------ - -def unzip(nzo, workdir, workdir_complete, delete, zips): - try: - i = 0 - unzip_failed = False - tms = time() - - for _zip in zips: - logging.info("Starting extract on zipfile: %s ", _zip) - nzo.set_action_line(T('msg-unpacking'), '%s' % unicoder(_zip)) - - extraction_path = workdir - if workdir_complete: - extraction_path = workdir_complete - - if ZIP_Extract(_zip, extraction_path): - unzip_failed = True - else: - i += 1 - - msg = T('msg-unzipDone@2') % (str(i), format_time_string(time() - tms)) - nzo.set_unpack_info('Unpack', msg) - - # Delete the old files if we have to - if delete and not unzip_failed: - i = 0 - - for _zip in zips: - logging.info("Deleting %s", _zip) - try: - os.remove(_zip) - i += 1 - except OSError: - logging.warning(Ta('warn-delFailed@1'), _zip) - - brokenzip = '%s.1' % (_zip) - - if os.path.exists(brokenzip): - logging.info("Deleting %s", brokenzip) - try: - os.remove(brokenzip) - i += 1 - except OSError: - logging.warning(Ta('warn-delFailed@1'), brokenzip) - - return unzip_failed - except: - msg = sys.exc_info()[1] - nzo.set_fail_msg(T('error-unpackFail@1') % msg) - logging.error(Ta('error-fileUnzip@2'), msg, nzo.get_dirname()) - return True - -def ZIP_Extract(zipfile, extraction_path): - command = ['%s' % ZIP_COMMAND, '-o', '-qq', '-Pnone', '%s' % zipfile, - '-d%s' % extraction_path] - - stup, need_shell, command, creationflags = build_command(command) - - p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - startupinfo=stup, creationflags=creationflags) - - output = p.stdout.read() - - ret = p.wait() - - return ret - -#------------------------------------------------------------------------------ -# PAR2 Functions -#------------------------------------------------------------------------------ - -def par2_repair(parfile_nzf, nzo, workdir, setname): - """ Try to repair a set, return readd or correctness """ - #set the current nzo status to "Repairing". Used in History - - parfile = os.path.join(workdir, parfile_nzf.get_filename()) - - old_dir_content = os.listdir(workdir) - used_joinables = joinables = [] - setpars = pars_of_set(workdir, setname) - result = readd = False - - if cfg.quick_check(): - nzo.set_status('QuickCheck') - nzo.set_action_line(T('msg-repair'), T('msg-QuickChecking')) - result = QuickCheck(setname, nzo) - if result: - logging.info("Quick-check for %s is OK, skipping repair", setname) - nzo.set_unpack_info('Repair', T('msg-QuickOK@1') % unicoder(setname), set=setname) - pars = setpars - - if not result: - nzo.set_status('Repairing') - result = False - readd = False - try: - nzo.set_action_line(T('msg-repair'), T('msg-startRepair')) - logging.info('Scanning "%s"', parfile) - - joinables, zips, rars, ts = build_filelists(workdir, None, check_rar=False) - - finished, readd, pars, datafiles, used_joinables = PAR_Verify(parfile, parfile_nzf, nzo, - setname, joinables) - - if finished: - result = True - logging.info('Par verify finished ok on %s!', - parfile) - - # Remove this set so we don't try to check it again - nzo.remove_parset(parfile_nzf.get_setname()) - else: - logging.info('Par verify failed on %s!', parfile) - - if not readd: - # Failed to repair -> remove this set - nzo.remove_parset(parfile_nzf.get_setname()) - return readd, False - except: - msg = sys.exc_info()[1] - nzo.set_fail_msg(T('error-repairFailed@1') % msg) - logging.error(Ta('error-filePar2@2'), msg, setname) - logging.debug("Traceback: ", exc_info = True) - return readd, result - - try: - if cfg.enable_par_cleanup(): - new_dir_content = os.listdir(workdir) - - for path in new_dir_content: - if os.path.splitext(path)[1] == '.1' and path not in old_dir_content: - try: - path = os.path.join(workdir, path) - - logging.info("Deleting %s", path) - os.remove(path) - except: - logging.warning(Ta('warn-delFailed@1'), path) - - path = os.path.join(workdir, setname + '.par2') - path2 = os.path.join(workdir, setname + '.PAR2') - - if os.path.exists(path): - try: - logging.info("Deleting %s", path) - os.remove(path) - except: - logging.warning(Ta('warn-delFailed@1'), path) - - if os.path.exists(path2): - try: - logging.info("Deleting %s", path2) - os.remove(path2) - except: - logging.warning(Ta('warn-delFailed@1'), path2) - - if os.path.exists(parfile): - try: - logging.info("Deleting %s", parfile) - os.remove(parfile) - except OSError: - logging.warning(Ta('warn-delFailed@1'), parfile) - - deletables = [] - for f in pars: - if f in setpars: - deletables.append(os.path.join(workdir, f)) - deletables.extend(used_joinables) - for filepath in deletables: - if filepath in joinables: - joinables.remove(filepath) - if os.path.exists(filepath): - logging.info("Deleting %s", filepath) - try: - os.remove(filepath) - except OSError: - logging.warning(Ta('warn-delFailed@1'), filepath) - except: - msg = sys.exc_info()[1] - nzo.set_fail_msg(T('error-repairFailed@1') % msg) - logging.error(Ta('error-repairBad@2'), msg, setname) - - return readd, result - - -def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, classic=False): - - retry_classic = False - used_joinables = [] - #set the current nzo status to "Verifying...". Used in History - nzo.set_status('Verifying') - start = time() - - classic = classic or not cfg.par2_multicore() - logging.debug('Par2-classic = %s', classic) - - if (is_new_partype(nzo, setname) and not classic) or not PAR2C_COMMAND: - if cfg.par_option(): - command = [str(PAR2_COMMAND), 'r', str(cfg.par_option().strip()), parfile] - else: - command = [str(PAR2_COMMAND), 'r', parfile] - classic = not PAR2C_COMMAND - else: - command = [str(PAR2C_COMMAND), 'r', parfile] - classic = True - - for joinable in joinables: - if setname in joinable: - command.append(joinable) - - stup, need_shell, command, creationflags = build_command(command) - - try: - p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, - startupinfo=stup, creationflags=creationflags) - - proc = p.stdout - - if p.stdin: - p.stdin.close() - - # Set up our variables - pars = [] - datafiles = [] - - linebuf = '' - finished = 0 - readd = False - - verifynum = 1 - verifytotal = 0 - verified = 0 - - # Loop over the output, whee - while 1: - char = proc.read(1) - if not char: - break - - # Line not complete yet - if char not in ('\n', '\r'): - linebuf += char - continue - - line = linebuf.strip() - linebuf = '' - - # Skip empty lines - if line == '': - continue - - # And off we go - if line.startswith('All files are correct'): - msg = T('msg-verifyOK@2') % (unicoder(setname), format_time_string(time() - start)) - nzo.set_unpack_info('Repair', msg, set=setname) - logging.info('Verified in %s, all files correct', - format_time_string(time() - start)) - finished = 1 - - elif line.startswith('Repair is required'): - msg = T('msg-repairNeeded@2') % (unicoder(setname), format_time_string(time() - start)) - nzo.set_unpack_info('Repair', msg, set=setname) - logging.info('Verified in %s, repair is required', - format_time_string(time() - start)) - start = time() - verified = 1 - - elif line.startswith('Main packet not found'): - ## Initialparfile probaly didn't decode properly, - logging.info(Ta('error-noMainPacket')) - - extrapars = parfile_nzf.get_extrapars() - - logging.info("%s", extrapars) - - ## Look for the smallest par2file - block_table = {} - for nzf in extrapars: - block_table[int(nzf.get_blocks())] = nzf - - if block_table: - nzf = block_table[min(block_table.keys())] - - logging.info("Found new par2file %s", - nzf.get_filename()) - - nzo.add_parfile(nzf) - ## mark for readd - readd = True - - elif line.startswith('You need'): - chunks = line.split() - - needed_blocks = int(chunks[2]) - - logging.info('Need to fetch %s more blocks, checking blocks', needed_blocks) - - avail_blocks = 0 - - extrapars = parfile_nzf.get_extrapars() - - block_table = {} - - for nzf in extrapars: - # Don't count extrapars that are completed already - if nzf.completed(): - continue - - blocks = int(nzf.get_blocks()) - - avail_blocks += blocks - - if blocks not in block_table: - block_table[blocks] = [] - - block_table[blocks].append(nzf) - - logging.info('%s blocks available', avail_blocks) - - - force = False - if (avail_blocks < needed_blocks) and (avail_blocks > 0): - # Tell SAB that we always have enough blocks, so that - # it will try to load all pars anyway - msg = T('error-repairBlocks@1') % str(int(needed_blocks - avail_blocks)) - nzo.set_fail_msg(msg) - msg = u'[%s] %s' % (unicoder(setname), msg) - nzo.set_unpack_info('Repair', msg, set=setname) - nzo.set_status('Failed') - needed_blocks = avail_blocks - force = True - - if avail_blocks >= needed_blocks: - added_blocks = 0 - readd = True - - while added_blocks < needed_blocks: - block_size = min(block_table.keys()) - extrapar_list = block_table[block_size] - - if extrapar_list: - nzo.add_parfile(extrapar_list.pop()) - added_blocks += block_size - - else: - block_table.pop(block_size) - - logging.info('Added %s blocks to %s', - added_blocks, nzo.get_dirname()) - - if not force: - msg = T('msg-fetchBlocks@1') % str(added_blocks) - nzo.set_status('Fetching') - nzo.set_action_line(T('msg-fetching'), msg) - - else: - msg = T('error-repairBlocks@1') % str(needed_blocks) - nzo.set_fail_msg(msg) - msg = u'[%s] %s' % (unicoder(setname), msg) - nzo.set_unpack_info('Repair', msg, set=setname) - nzo.set_status('Failed') - - - elif line.startswith('Repair is possible'): - start = time() - nzo.set_action_line(T('msg-repairing'), '%2d%%' % (0)) - - elif line.startswith('Repairing:'): - chunks = line.split() - per = float(chunks[-1][:-1]) - nzo.set_action_line(T('msg-repairing'), '%2d%%' % (per)) - nzo.set_status('Repairing') - - elif line.startswith('Repair complete'): - msg = T('msg-repairDone@2') % (unicoder(setname), format_time_string(time() - start)) - nzo.set_unpack_info('Repair', msg, set=setname) - logging.info('Repaired in %s', format_time_string(time() - start)) - finished = 1 - - elif line.startswith('File:') and line.find('data blocks from') > 0: - # Find out if a joinable file has been used for joining - for jn in joinables: - if line.find(os.path.split(jn)[1]) > 0: - used_joinables.append(jn) - break - - elif 'Could not write' in line and 'at offset 0:' in line and not classic: - # Hit a bug in par2-tbb, retry with par2-classic - retry_classic = True - - elif not verified: - if line.startswith('Verifying source files'): - nzo.set_action_line(T('msg-verifying'), '01/%02d' % verifytotal) - nzo.set_status('Verifying') - - elif line.startswith('Scanning:'): - pass - - else: - # Loading parity files - m = LOADING_RE.match(line) - if m: - pars.append(m.group(1)) - continue - - # Target files - m = TARGET_RE.match(line) - if m: - if verifytotal == 0 or verifynum < verifytotal: - verifynum += 1 - nzo.set_action_line(T('msg-verifying'), '%02d/%02d' % (verifynum, verifytotal)) - nzo.set_status('Verifying') - datafiles.append(m.group(1)) - continue - - # Verify done - m = re.match(r'There are (\d+) recoverable files', line) - if m: - verifytotal = int(m.group(1)) - - p.wait() - except WindowsError, err: - if err[0] == '87' and not classic: - # Hit a bug in par2-tbb, retry with par2-classic - retry_classic = True - else: - raise WindowsError(err) - - if retry_classic: - logging.debug('Retry PAR2-joining with par2-classic') - return PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, classic=True) - else: - return (finished, readd, pars, datafiles, used_joinables) - -#------------------------------------------------------------------------------- - -_RE_PYTHON = re.compile(r'^#!(.*/python)\s+(.*)$') - -def fix_python_script(command): - """ Implement a work-around for Python userscripts on OSX """ - try: - fp = open(command[0], 'r') - line = fp.readline(100) - fp.close() - m = _RE_PYTHON.search(line) - if m: - # Work-around for the incorrect Python paths passed - # by the OSX.app to Python scripts. - # Run the Python interpreter directly and insert the -E parameter - command.insert(0, m.group(2)) - command.insert(0, '-E') - command.insert(0, m.group(1)) - except IOError: - pass - - -def build_command(command): - if sabnzbd.DARWIN: - fix_python_script(command) - - if not sabnzbd.WIN32: - if IONICE_COMMAND and cfg.ionice().strip(): - lst = cfg.ionice().split() - lst.reverse() - for arg in lst: - command.insert(0, arg) - command.insert(0, IONICE_COMMAND) - if NICE_COMMAND and cfg.nice().strip(): - lst = cfg.nice().split() - lst.reverse() - for arg in lst: - command.insert(0, arg) - command.insert(0, NICE_COMMAND) - need_shell = False - stup = None - creationflags = 0 - - else: - need_shell = os.path.splitext(command[0])[1].lower() not in ('.exe', '.com', '.bat', '.cmd') - stup = subprocess.STARTUPINFO() - stup.dwFlags = STARTF_USESHOWWINDOW - stup.wShowWindow = SW_HIDE - creationflags = IDLE_PRIORITY_CLASS - - # Work-around for bug in Python's Popen function, - # scripts with spaces in the path don't work. - if need_shell and ' ' in command[0]: - command[0] = win32api.GetShortPathName(command[0]) - - return (stup, need_shell, command, creationflags) - -# Sort the various RAR filename formats properly :\ -def rar_sort(a, b): - aext = a.split('.')[-1] - bext = b.split('.')[-1] - - if aext == 'rar' and bext == 'rar': - return cmp(a, b) - elif aext == 'rar': - return -1 - elif bext == 'rar': - return 1 - else: - return cmp(a, b) - -# Sort the various PAR filename formats properly :\ -def par_sort(a, b): - aext = a.lower().split('.')[-1] - bext = b.lower().split('.')[-1] - - if aext == bext: - return cmp(a, b) - elif aext == 'par2': - return -1 - elif bext == 'par2': - return 1 - - -def build_filelists(workdir, workdir_complete, check_rar=True): - """ Build filelists, if workdir_complete has files, ignore workdir. - Optionally test content to establish RAR-ness - """ - joinables, zips, rars, filelist = ([], [], [], []) - - if workdir_complete: - for root, dirs, files in os.walk(workdir_complete): - for _file in files: - filelist.append(os.path.join(root, _file)) - - if workdir and not filelist: - for root, dirs, files in os.walk(workdir): - for _file in files: - filelist.append(os.path.join(root, _file)) - - if check_rar: - joinables = [f for f in filelist if SPLITFILE_RE.search(f) and not israr(f)] - else: - joinables = [f for f in filelist if SPLITFILE_RE.search(f)] - - zips = [f for f in filelist if ZIP_RE.search(f)] - - rars = [f for f in filelist if RAR_RE.search(f) and israr(f)] - - ts = [f for f in filelist if TS_RE.search(f) and f not in joinables] - - logging.debug("build_filelists(): joinables: %s", joinables) - logging.debug("build_filelists(): zips: %s", zips) - logging.debug("build_filelists(): rars: %s", rars) - logging.debug("build_filelists(): ts: %s", ts) - - return (joinables, zips, rars, ts) - -def israr(f): - logging.debug("notrar(): testing %s", f) - try: - _f = open(f, 'rb') - header = _f.read(4) - _f.close() - except: - logging.error(Ta('error-fileRead@1'), f) - return False - - if header != 'Rar!': - logging.debug("notrar(): joinable file %s", f) - return False - - return True - - -def QuickCheck(set, nzo): - """ Check all on-the-fly md5sums of a set """ - - md5pack = nzo.get_md5pack(set) - if md5pack is None: - return False - - result = False - nzf_list = nzo.get_files() - for file in md5pack: - file = name_fixer(file) - if sabnzbd.misc.on_cleanup_list(file, False): - result = True - continue - found = False - for nzf in nzf_list: - if file == name_fixer(nzf.get_filename()): - found = True - if nzf.md5sum == md5pack[file]: - logging.debug('Quick-check of file %s OK', file) - result = True - else: - logging.debug('Quick-check of file %s failed!', file) - return False # When any file fails, just stop - break - if not found: - logging.debug('Cannot Quick-check missing file %s!', file) - return False # Missing file is failure - return result - - -def pars_of_set(wdir, setname): - """ Return list of par2 files (pathless) matching the set """ - list = [] - for file in os.listdir(wdir): - m = FULLVOLPAR2_RE.search(file) - if m and m.group(1) == setname and m.group(2): - list.append(file) - return list - - -def is_new_partype(nzo, setname): - """ Determine the PAR2 program type, based on the filename encoding """ - pack = nzo.get_md5pack(setname) - if not pack: - return True - for name in pack.keys(): - try: - name.decode('utf-8') - except UnicodeDecodeError: - # Now we know it's not pure ASCII or UTF-8 - return False - return True - - -def add_s(i): - if i > 1: - return 's' - else: - return '' - - -def unrar_check(rar): - """ Return True if correct version of unrar is found """ - if rar: - try: - version = subprocess.Popen(rar, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).stdout.read() - except: - return False - m = re.search("RAR\s(\d+)\.(\d+)\s+.*Alexander Roshal", version) - if m: - return (int(m.group(1)), int(m.group(2))) >= (3, 80) - return False diff --git a/main/sabnzbd/newswrapper.py b/main/sabnzbd/newswrapper.py deleted file mode 100644 index acb8e4e..0000000 --- a/main/sabnzbd/newswrapper.py +++ /dev/null @@ -1,375 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.newswrapper -""" - -import errno -import socket -from threading import Thread -from nntplib import NNTPPermanentError -import time -import logging - -import sabnzbd -from sabnzbd.constants import * -from sabnzbd.lang import Ta - -try: - from OpenSSL import SSL - _ssl = SSL - WantReadError = _ssl.WantReadError - del SSL - HAVE_SSL = True - -except ImportError: - _ssl = None - HAVE_SSL = False - - # Dummy class so this exception is ignored by clients without ssl installed - class WantReadError(Exception): - def __init__(self, value): - self.parameter = value - def __str__(self): - return repr(self.parameter) - -import threading -_RLock = threading.RLock -del threading - -import select - - -socket.setdefaulttimeout(DEF_TIMEOUT) - - -#------------------------------------------------------------------------------ -# getaddrinfo() can be very slow. In some situations this can lead -# to delayed starts and timeouts on connections. -# Because of this, the results will be cached in the server object. - -def _retrieve_info(server): - """ Async attempt to run getaddrinfo() for specified server - """ - info = GetServerParms(server.host, server.port) - - if info is None: - server.bad_cons += server.threads - else: - server.bad_cons = 0 - (server.info, server.request) = (info, False) - sabnzbd.downloader.wakeup() - - -def request_server_info(server): - """ Launch async request to resolve server address - """ - if not server.request: - server.request = True - Thread(target=_retrieve_info, args=(server,)).start() - - -def GetServerParms(host, port): - # Make sure port is numeric (unicode input not supported) - try: - int(port) - except: - # Could do with a warning here - port = 119 - try: - # Standard IPV4 - return socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM) - except: - try: - # Try IPV6 explicitly - return socket.getaddrinfo(host, port, socket.AF_INET6, - socket.SOCK_STREAM, socket.IPPROTO_IP, socket.AI_CANONNAME) - except: - # Nothing found! - return None - - -def con(sock, host, port, sslenabled, nntp): - try: - sock.connect((host, port)) - sock.setblocking(0) - if sslenabled and _ssl: - while True: - try: - sock.do_handshake() - break - except WantReadError: - select.select([sock], [], [], 1.0) - except socket.error, e: - try: - # socket.error can either return a string or a tuple - if isinstance(e, tuple): - (_errno, strerror) = e - else: - # Are we safe to hardcode the ETIMEDOUT error? - (_errno, strerror) = (errno.ETIMEDOUT, str(e)) - e = (_errno, strerror) - #expected, do nothing - if _errno == errno.EINPROGRESS: - pass - finally: - nntp.error(e) - - except _ssl.Error, e: - nntp.error(e) - -class NNTP: - def __init__(self, host, port, info, sslenabled, nntp, user=None, password=None, block=False): - self.host = host - self.port = port - self.nntp = nntp - self.blocking = block - self.error_msg = None - if not info: - if block: - info = GetServerParms(host, port) - else: - raise socket.error(errno.EADDRNOTAVAIL, "Address not available - Check for internet or DNS problems") - - af, socktype, proto, canonname, sa = info[0] - - if sslenabled and _ssl: - # Some users benefit from SSLv2 not being capped. - ssl_type = sabnzbd.cfg.ssl_type() - if ssl_type == 'v2': - ctx = _ssl.Context(_ssl.SSLv2_METHOD) - elif ssl_type == 'v3': - ctx = _ssl.Context(_ssl.SSLv3_METHOD) - else: - ctx = _ssl.Context(_ssl.SSLv23_METHOD) - - self.sock = SSLConnection(ctx, socket.socket(af, socktype, proto)) - elif sslenabled and not _ssl: - logging.error(Ta('error-noSSL')) - self.sock = socket.socket(af, socktype, proto) - else: - self.sock = socket.socket(af, socktype, proto) - - try: - # Windows must do the connection in a seperate thread due to non-blocking issues - # If the server wants to be blocked (for testing) then use the linux route - if sabnzbd.WIN32 and not block: - Thread(target=con, args=(self.sock, self.host, self.port, sslenabled, self)).start() - else: - # if blocking (server test) only wait for 4 seconds during connect until timeout - if block: - self.sock.settimeout(10) - self.sock.connect((self.host, self.port)) - if not block: - self.sock.setblocking(0) - if sslenabled and _ssl: - while True: - try: - self.sock.do_handshake() - break - except WantReadError: - select.select([self.sock], [], [], 1.0) - - except socket.error, e: - try: - # socket.error can either return a string or a tuple - if isinstance(e, tuple): - (_errno, strerror) = e - else: - # Are we safe to hardcode the ETIMEDOUT error? - (_errno, strerror) = (errno.ETIMEDOUT, str(e)) - e = (_errno, strerror) - #expected, do nothing - if _errno == errno.EINPROGRESS: - pass - finally: - self.error(e) - - except _ssl.Error, e: - self.error(e) - - def error(self, error): - if 'SSL23_GET_SERVER_HELLO' in str(error): - error = 'This server does not allow SSL on this port' - msg = "Failed to connect: %s" % (str(error)) - msg = "%s %s@%s:%s" % (msg, self.nntp.thrdnum, self.host, self.port) - self.error_msg = msg - if self.blocking: - raise socket.error(errno.ECONNREFUSED, msg) - else: - logging.info(msg) - self.nntp.server.warning = msg - -class NewsWrapper: - def __init__(self, server, thrdnum, block=False): - self.server = server - self.thrdnum = thrdnum - self.blocking = block - - self.timeout = None - self.article = None - self.data = '' - self.lines = [] - - self.nntp = None - self.recv = None - - self.connected = False - - self.user_sent = False - self.pass_sent = False - - self.group = None - - self.user_ok = False - self.pass_ok = False - - def init_connect(self): - self.nntp = NNTP(self.server.host, self.server.port, self.server.info, self.server.ssl, self, - self.server.username, self.server.password, self.blocking) - self.recv = self.nntp.sock.recv - - self.timeout = time.time() + self.server.timeout - - def finish_connect(self): - if not self.server.username or not self.server.password: - self.connected = True - self.user_sent = True - self.user_ok = True - self.pass_sent = True - self.pass_ok = True - - if self.lines and self.lines[0][:3] == '400': - raise NNTPPermanentError(self.lines[0]) - elif not self.user_sent: - command = 'authinfo user %s\r\n' % (self.server.username) - self.nntp.sock.sendall(command) - self.user_sent = True - elif not self.user_ok: - if self.lines[0][:3] == '381': - self.user_ok = True - - if self.user_ok and not self.pass_sent: - command = 'authinfo pass %s\r\n' % (self.server.password) - self.nntp.sock.sendall(command) - self.pass_sent = True - elif self.user_ok and not self.pass_ok: - if self.lines[0][:3] != '281': - # Assume that login failed (code 481 or other) - raise NNTPPermanentError(self.lines[0]) - else: - self.connected = True - - self.timeout = time.time() + self.server.timeout - - def body(self): - self.timeout = time.time() + self.server.timeout - command = 'BODY <%s>\r\n' % (self.article.article) - self.nntp.sock.sendall(command) - - def send_group(self, group): - self.timeout = time.time() + self.server.timeout - command = 'GROUP %s\r\n' % (group) - self.nntp.sock.sendall(command) - - def recv_chunk(self, block=False): - self.timeout = time.time() + self.server.timeout - while 1: - try: - chunk = self.recv(32768) - break - except WantReadError: - # SSL connections will block until they are ready. - # Either ignore the connection until it responds - # Or wait in a loop until it responds - if block: - #time.sleep(0.0001) - continue - else: - return (0, False, True) - - self.data += chunk - new_lines = self.data.split('\r\n') - - self.data = new_lines.pop() - self.lines.extend(new_lines) - - if self.lines and self.lines[-1] == '.': - self.lines = self.lines[1:-1] - return (len(chunk), True, False) - else: - return (len(chunk), False, False) - - def soft_reset(self): - self.timeout = None - self.article = None - self.data = '' - self.lines = [] - - def hard_reset(self, wait=True, quit=True): - if self.nntp: - try: - if quit: - self.nntp.sock.sendall('QUIT\r\n') - time.sleep(0.1) - self.nntp.sock.close() - except: - pass - - self.__init__(self.server, self.thrdnum) - - # Wait before re-using this newswrapper - if wait: - # Reset due to error condition, use server timeout - self.timeout = time.time() + self.server.timeout - else: - # Reset for internal reasons, just wait 5 sec - self.timeout = time.time() + 5 - - def terminate(self, quit=False): - """ Close connection and remove nntp object """ - if self.nntp: - try: - if quit: - self.nntp.sock.sendall('QUIT\r\n') - time.sleep(0.1) - self.nntp.sock.close() - except: - pass - del self.nntp - - -class SSLConnection: - def __init__(self, *args): - self._ssl_conn = apply(_ssl.Connection, args) - self._lock = _RLock() - - for f in ('get_context', 'pending', 'send', 'write', 'recv', 'read', - 'renegotiate', 'bind', 'listen', 'connect', 'accept', - 'setblocking', 'fileno', 'shutdown', 'close', 'get_cipher_list', - 'getpeername', 'getsockname', 'getsockopt', 'setsockopt', - 'makefile', 'get_app_data', 'set_app_data', 'state_string', - 'sock_shutdown', 'get_peer_certificate', 'want_read', - 'want_write', 'set_connect_state', 'set_accept_state', - 'connect_ex', 'sendall', 'do_handshake', 'settimeout'): - exec """def %s(self, *args): - self._lock.acquire() - try: - return apply(self._ssl_conn.%s, args) - finally: - self._lock.release()\n""" % (f, f) diff --git a/main/sabnzbd/newzbin.py b/main/sabnzbd/newzbin.py deleted file mode 100644 index 13f16c9..0000000 --- a/main/sabnzbd/newzbin.py +++ /dev/null @@ -1,365 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.newzbin - newzbin.com support functions -""" - -import httplib -import urllib -import time -import logging -import re -import Queue -import socket -try: - socket.ssl - _HAVE_SSL = True -except: - _HAVE_SSL = False - -from threading import * - -import sabnzbd -from sabnzbd.constants import * -from sabnzbd.decorators import synchronized -from sabnzbd.misc import cat_to_opts, sanitize_foldername, bad_fetch, cat_convert -from sabnzbd.codecs import name_fixer -import sabnzbd.newswrapper -import sabnzbd.nzbqueue -import sabnzbd.cfg as cfg -from sabnzbd.lang import T, Ta -from sabnzbd.utils import osx - - -################################################################################ -# DirectNZB support -################################################################################ - -_gFailures = 0 -def _warn_user(msg): - """ Warn user if too many soft newzbin errors occurred - """ - global _gFailures - _gFailures += 1 - if _gFailures > 5: - logging.warning(msg) - _gFailures = 0 - else: - logging.debug(msg) - -def _access_ok(): - global _gFailures - _gFailures = 0 - - -class MSGIDGrabber(Thread): - do = None # Link to instance of thread - - """ Thread for msgid-grabber queue """ - def __init__(self): - Thread.__init__(self) - self.queue = Queue.Queue() - for tup in sabnzbd.nzbqueue.get_msgids(): - self.queue.put(tup) - self.shutdown = False - MSGIDGrabber.do = self - - def grab(self, msgid, nzo): - logging.debug("Adding msgid %s to the queue", msgid) - self.queue.put((msgid, nzo)) - - def stop(self): - # Put None on the queue to stop "run" - self.shutdown = True - self.queue.put((None, None)) - - def run(self): - """ Process the queue (including waits and retries) """ - def sleeper(delay): - for n in range(delay): - if not self.shutdown: - time.sleep(1.05) - - self.shutdown = False - msgid = None - while not self.shutdown: - if not msgid: - (msgid, nzo) = self.queue.get() - if self.shutdown or not msgid: - break - logging.debug("Popping msgid %s", msgid) - - filename, data, newzbin_cat, nzo_info = _grabnzb(msgid) - if filename and data: - filename = name_fixer(filename) - - _r, _u, _d = nzo.get_repair_opts() - pp = sabnzbd.opts_to_pp(_r, _u, _d) - script = nzo.get_script() - cat = nzo.get_cat() - if not cat: - cat = cat_convert(newzbin_cat) - - priority = nzo.get_priority() - nzbname = nzo.get_dirname_rename() - - cat, pp, script, priority = cat_to_opts(cat, pp, script, priority) - - try: - sabnzbd.nzbqueue.insert_future_nzo(nzo, filename, msgid, data, pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname, nzo_info=nzo_info) - except: - logging.error(Ta('error-nbUpdate@1'), msgid) - logging.debug("Traceback: ", exc_info = True) - sabnzbd.nzbqueue.remove_nzo(nzo.nzo_id, False) - msgid = None - else: - if filename: - sleeper(int(filename)) - else: - # Fatal error, give up on this one - bad_fetch(nzo, msgid, retry=False) - msgid = None - - osx.sendGrowlMsg(T('grwl-nzbadd-title'),filename,osx.NOTIFICATION['download']) - - # Keep some distance between the grabs - sleeper(5) - - logging.debug('Stopping MSGIDGrabber') - - -def _grabnzb(msgid): - """ Grab one msgid from newzbin """ - - nothing = (None, None, None, None) - retry = (60, None, None, None) - nzo_info = {'msgid': msgid} - - logging.info('Fetching NZB for Newzbin report #%s', msgid) - - headers = {'User-agent' : 'SABnzbd+/%s' % sabnzbd.version.__version__} - - # Connect to Newzbin - try: - if _HAVE_SSL: - conn = httplib.HTTPSConnection('www.newzbin.com') - else: - conn = httplib.HTTPConnection('www.newzbin.com') - - postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'reportid': msgid } - postdata = urllib.urlencode(postdata) - - headers['Content-type'] = 'application/x-www-form-urlencoded' - - fetchurl = '/api/dnzb/' - conn.request('POST', fetchurl, postdata, headers) - response = conn.getresponse() - - # Save debug info if we have to - data = response.read() - - except: - _warn_user('Problem accessing Newzbin server, wait 1 min.') - logging.debug("Traceback: ", exc_info = True) - return retry - - # Get the filename - rcode = response.getheader('X-DNZB-RCode') - rtext = response.getheader('X-DNZB-RText') - try: - nzo_info['more_info'] = response.getheader('X-DNZB-MoreInfo') - except: - # Only some reports will generate a moreinfo header - pass - if not (rcode or rtext): - logging.error(T('error-nbProtocol')) - return nothing - - # Official return codes: - # 200 = OK, NZB content follows - # 400 = Bad Request, please supply all parameters - # (this generally means reportid or fileid is missing; missing user/pass gets you a 401) - # 401 = Unauthorised, check username/password? - # 402 = Payment Required, not Premium - # 404 = Not Found, data doesn't exist? - # (only working for reportids, see Technical Limitations) - # 450 = Try Later, wait seconds for counter to reset - # (for an explanation of this, see DNZB Rate Limiting) - # 500 = Internal Server Error, please report to Administrator - # 503 = Service Unavailable, site is currently down - - if rcode in ('500', '503'): - _warn_user('Newzbin has a server problem (%s, %s), wait 5 min.' % (rcode, rtext)) - return retry - - _access_ok() - - if rcode == '450': - wait_re = re.compile('wait (\d+) seconds') - try: - wait = int(wait_re.findall(rtext)[0]) - except: - wait = 60 - if wait > 60: - wait = 60 - logging.info("Newzbin says we should wait for %s sec", wait) - return int(wait+1), None, None, None - - if rcode in ('402'): - logging.warning(Ta('warn-nbCredit')) - return nothing - - if rcode in ('401'): - logging.warning(Ta('warn-nbNoAuth')) - return nothing - - if rcode in ('400', '404'): - logging.error(Ta('error-nbReport@1'), msgid) - return nothing - - if rcode != '200': - logging.error(Ta('error-nbUnkownError@2'), rcode, rtext) - return nothing - - # Process data - report_name = response.getheader('X-DNZB-Name') - report_cat = response.getheader('X-DNZB-Category') - if not (report_name and report_cat): - logging.error(Ta('error-nbInfo@1'), msgid) - return nothing - - # sanitize report_name - newname = sanitize_foldername(report_name) - if len(newname) > 80: - newname = newname[0:79].strip('. ') - newname += ".nzb" - - logging.info('Successfully fetched report %s - %s (cat=%s) (%s)', msgid, report_name, report_cat, newname) - - return (newname, data, report_cat, nzo_info) - - -################################################################################ -# BookMark support -################################################################################ -BOOK_LOCK = Lock() - -class Bookmarks: - """ Get list of bookmarks from www.newzbin.com - """ - do = None # Link to instance - - def __init__(self): - self.bookmarks = sabnzbd.load_data(BOOKMARK_FILE_NAME) - if not self.bookmarks: - self.bookmarks = [] - self.__busy = False - Bookmarks.do = self - - @synchronized(BOOK_LOCK) - def run(self, delete=None): - - headers = { 'User-Agent': 'SABnzbd+/%s' % sabnzbd.__version__, } - - # Connect to Newzbin - try: - if _HAVE_SSL: - conn = httplib.HTTPSConnection('www.newzbin.com') - else: - conn = httplib.HTTPConnection('www.newzbin.com') - - if delete: - logging.debug('Trying to delete Newzbin bookmark %s', delete) - postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'action': 'delete', \ - 'reportids' : delete } - else: - logging.info('Fetching Newzbin bookmarks') - postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'action': 'fetch'} - postdata = urllib.urlencode(postdata) - - headers['Content-type'] = 'application/x-www-form-urlencoded' - - fetchurl = '/api/bookmarks/' - conn.request('POST', fetchurl, postdata, headers) - response = conn.getresponse() - except: - _warn_user('Problem accessing Newzbin server.') - logging.debug("Traceback: ", exc_info = True) - return - - data = response.read() - - # Get the status - rcode = str(response.status) - - # Official return codes: - # 200 = OK, NZB content follows - # 204 = No content - # 400 = Bad Request, please supply all parameters - # (this generally means reportid or fileid is missing; missing user/pass gets you a 401) - # 401 = Unauthorised, check username/password? - # 402 = Payment Required, not Premium - # 403 = Forbidden (incorrect auth) - # 500 = Internal Server Error, please report to Administrator - # 503 = Service Unavailable, site is currently down - - if rcode not in ('500', '503'): - _access_ok() - - if rcode == '204': - logging.debug("No bookmarks set") - elif rcode in ('401', '403'): - logging.warning(Ta('warn-nbNoAuth')) - elif rcode in ('402'): - logging.warning(Ta('warn-nbCredit')) - elif rcode in ('500', '503'): - _warn_user('Newzbin has a server problem (%s).' % rcode) - elif rcode == '200': - if delete: - if data.startswith('1'): - logging.info('Deleted newzbin bookmark %s', delete) - self.bookmarks.remove(delete) - else: - logging.warning(Ta('warn-nbNoDelBM@1'), delete) - else: - for line in data.split('\n'): - try: - msgid, size, text = line.split('\t', 2) - except: - msgid = size = text = None - if msgid and (msgid not in self.bookmarks): - self.bookmarks.append(msgid) - logging.info("Found new bookmarked msgid %s (%s)", msgid, text) - sabnzbd.add_msgid(int(msgid), None, None, priority=None) - else: - logging.error(Ta('error-nbUnkownError@1'), rcode) - - self.__busy = False - - @synchronized(BOOK_LOCK) - def save(self): - sabnzbd.save_data(self.bookmarks, BOOKMARK_FILE_NAME) - - def bookmarksList(self): - return self.bookmarks - - def del_bookmark(self, msgid): - if cfg.newzbin_unbookmark(): - msgid = str(msgid) - if msgid in self.bookmarks: - self.run(msgid) diff --git a/main/sabnzbd/nzbqueue.py b/main/sabnzbd/nzbqueue.py deleted file mode 100644 index 8374f82..0000000 --- a/main/sabnzbd/nzbqueue.py +++ /dev/null @@ -1,943 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.nzbqueue - nzb queue -""" - -import os -import logging -import time -import datetime - -import sabnzbd -from sabnzbd.trylist import TryList -from sabnzbd.nzbstuff import NzbObject -from sabnzbd.misc import panic_queue, exit_sab, sanitize_foldername, cat_to_opts -import sabnzbd.database as database -from sabnzbd.decorators import * -from sabnzbd.constants import * -import sabnzbd.cfg as cfg -from sabnzbd.articlecache import ArticleCache -import sabnzbd.downloader -from sabnzbd.assembler import Assembler -from sabnzbd.lang import T, Ta -from sabnzbd.utils import osx - - -def DeleteLog(name): - if name: - name = name.replace('.nzb', '.log') - try: - os.remove(os.path.join(os.path.dirname(sabnzbd.LOGFILE), name)) - except: - pass - -#------------------------------------------------------------------------------- - -class NzbQueue(TryList): - def __init__(self): - TryList.__init__(self) - - self.__downloaded_items = [] - - - self.__top_only = cfg.top_only() - self.__top_nzo = None - - self.__nzo_list = [] - self.__nzo_table = {} - - self.__auto_sort = cfg.auto_sort() - - nzo_ids = [] - - data = sabnzbd.load_data(QUEUE_FILE_NAME, remove = False) - - if data: - try: - queue_vers, nzo_ids, self.__downloaded_items = data - if not queue_vers == QUEUE_VERSION: - logging.error(Ta('error-qBad')) - self.__downloaded_items = [] - nzo_ids = [] - panic_queue(os.path.join(cfg.cache_dir.get_path(),QUEUE_FILE_NAME)) - exit_sab(2) - except ValueError: - logging.error(Ta('error-qCorruptFile@1'), - os.path.join(cfg.cache_dir.get_path(), QUEUE_FILE_NAME)) - - for nzo_id in nzo_ids: - nzo = sabnzbd.load_data(nzo_id, remove = False) - if nzo: - self.add(nzo, save = False) - - @synchronized(NZBQUEUE_LOCK) - def save(self): - """ Save queue """ - logging.info("Saving queue") - - nzo_ids = [] - # Aggregate nzo_ids and save each nzo - for nzo in self.__nzo_list: - nzo_ids.append(nzo.nzo_id) - sabnzbd.save_data(nzo, nzo.nzo_id) - - sabnzbd.save_data((QUEUE_VERSION, nzo_ids, - self.__downloaded_items), QUEUE_FILE_NAME) - - @synchronized(NZBQUEUE_LOCK) - def set_top_only(self, value): - self.__top_only = value - - @synchronized(NZBQUEUE_LOCK) - def generate_future(self, msg, pp=None, script=None, cat=None, url=None, priority=NORMAL_PRIORITY, nzbname=None): - """ Create and return a placeholder nzo object """ - future_nzo = NzbObject(msg, 0, pp, script, None, True, cat=cat, url=url, priority=priority, nzbname=nzbname, status="Grabbing") - self.add(future_nzo) - return future_nzo - - @synchronized(NZBQUEUE_LOCK) - def insert_future(self, future, filename, msgid, data, pp=None, script=None, cat=None, priority=NORMAL_PRIORITY, nzbname=None, nzo_info=None): - """ Refresh a placeholder nzo with an actual nzo """ - if nzo_info is None: - nzo_info = {} - nzo_id = future.nzo_id - if nzo_id in self.__nzo_table: - try: - logging.info("Regenerating item: %s", nzo_id) - r, u, d = future.get_repair_opts() - if not r is None: - pp = sabnzbd.opts_to_pp(r, u, d) - scr = future.get_script() - if scr is None: - scr = script - categ = future.get_cat() - if categ is None: - categ = cat - categ, pp, script, priority = cat_to_opts(categ, pp, script, priority) - - # Remember old priority - old_prio = future.get_priority() - - try: - future.__init__(filename, msgid, pp, scr, nzb=data, futuretype=False, cat=categ, priority=priority, nzbname=nzbname, nzo_info=nzo_info) - future.nzo_id = nzo_id - self.save() - except ValueError: - self.remove(nzo_id, False) - except TypeError: - self.remove(nzo_id, False) - - # Make sure the priority is changed now that we know the category - if old_prio != priority: - future.set_priority(None) - self.set_priority(future.nzo_id, priority) - - if self.__auto_sort: - self.sort_by_avg_age() - - self.reset_try_list() - except: - logging.error(Ta('error-qAdd@1'), nzo_id) - logging.debug("Traceback: ", exc_info = True) - self.remove(nzo_id, False) - else: - logging.info("Item %s no longer in queue, omitting", - nzo_id) - - @synchronized(NZBQUEUE_LOCK) - def change_opts(self, nzo_id, pp): - if nzo_id in self.__nzo_table: - self.__nzo_table[nzo_id].set_opts(pp) - - @synchronized(NZBQUEUE_LOCK) - def change_script(self, nzo_id, script): - if nzo_id in self.__nzo_table: - self.__nzo_table[nzo_id].set_script(script) - - @synchronized(NZBQUEUE_LOCK) - def change_cat(self, nzo_id, cat): - if nzo_id in self.__nzo_table: - self.__nzo_table[nzo_id].set_cat(cat) - - @synchronized(NZBQUEUE_LOCK) - def change_name(self, nzo_id, name): - if nzo_id in self.__nzo_table: - self.__nzo_table[nzo_id].set_name(name) - - @synchronized(NZBQUEUE_LOCK) - def get_nzo(self, nzo_id): - if nzo_id in self.__nzo_table: - return self.__nzo_table[nzo_id] - else: - return None - - @synchronized(NZBQUEUE_LOCK) - def add(self, nzo, save=True): - sabnzbd.QUEUECOMPLETEACTION_GO = False - - # Reset try_lists - nzo.reset_try_list() - self.reset_try_list() - - - if not nzo.nzo_id: - nzo.nzo_id = sabnzbd.get_new_id('nzo') - - if nzo.nzo_id: - nzo.deleted = False - priority = nzo.get_priority() - self.__nzo_table[nzo.nzo_id] = nzo - if priority == TOP_PRIORITY: - #A top priority item (usually a completed download fetching pars) - #is added to the top of the queue - self.__nzo_list.insert(0, nzo) - elif priority == LOW_PRIORITY: - self.__nzo_list.append(nzo) - else: - #for high priority we need to add the item at the bottom - #of any other high priority items above the normal priority - #for normal priority we need to add the item at the bottom - #of the normal priority items above the low priority - if self.__nzo_list: - pos = 0 - added = False - for position in self.__nzo_list: - if position.get_priority() < priority: - self.__nzo_list.insert(pos, nzo) - added=True - break - pos+=1 - if not added: - #if there are no other items classed as a lower priority - #then it will be added to the bottom of the queue - self.__nzo_list.append(nzo) - else: - #if the queue is empty then simple append the item to the bottom - self.__nzo_list.append(nzo) - if save: - self.save() - - if nzo.get_status() not in ('Fetching',): - osx.sendGrowlMsg(T('grwl-nzbadd-title'),nzo.get_filename(),osx.NOTIFICATION['download']) - - if self.__auto_sort: - self.sort_by_avg_age() - - @synchronized(NZBQUEUE_LOCK) - def remove(self, nzo_id, add_to_history = True, unload=False, save=True, cleanup=True): - if nzo_id in self.__nzo_table: - nzo = self.__nzo_table.pop(nzo_id) - nzo.deleted = True - self.__nzo_list.remove(nzo) - - if add_to_history: - # Create the history DB instance - history_db = database.get_history_handle() - # Add the nzo to the database. Only the path, script and time taken is passed - # Other information is obtained from the nzo - history_db.add_history_db(nzo, '', '', 0, '', '') - history_db.close() - - elif cleanup: - self.cleanup_nzo(nzo) - - sabnzbd.remove_data(nzo_id) - if save: - self.save() - - - @synchronized(NZBQUEUE_LOCK) - def remove_multiple(self, nzo_ids): - for nzo_id in nzo_ids: - self.remove(nzo_id, add_to_history = False, save = False) - self.save() - - @synchronized(NZBQUEUE_LOCK) - def remove_all(self): - lst = [] - for nzo_id in self.__nzo_table: - lst.append(nzo_id) - for nzo_id in lst: - nzo = self.__nzo_table.pop(nzo_id) - nzo.deleted = True - self.__nzo_list.remove(nzo) - self.cleanup_nzo(nzo) - sabnzbd.remove_data(nzo_id) - del lst - self.save() - - @synchronized(NZBQUEUE_LOCK) - def remove_nzf(self, nzo_id, nzf_id): - if nzo_id in self.__nzo_table: - nzo = self.__nzo_table[nzo_id] - nzf = nzo.get_nzf_by_id(nzf_id) - - if nzf: - post_done = nzo.remove_nzf(nzf) - if post_done: - self.remove(nzo_id, add_to_history = False) - - - @synchronized(NZBQUEUE_LOCK) - def pause_multiple_nzo(self, nzo_ids): - for nzo_id in nzo_ids: - self.pause_nzo(nzo_id) - - @synchronized(NZBQUEUE_LOCK) - def pause_nzo(self, nzo_id): - if nzo_id in self.__nzo_table: - nzo = self.__nzo_table[nzo_id] - nzo.pause_nzo() - logging.debug("Paused nzo: %s", nzo_id) - - @synchronized(NZBQUEUE_LOCK) - def resume_multiple_nzo(self, nzo_ids): - for nzo_id in nzo_ids: - self.resume_nzo(nzo_id) - - @synchronized(NZBQUEUE_LOCK) - def resume_nzo(self, nzo_id): - if nzo_id in self.__nzo_table: - nzo = self.__nzo_table[nzo_id] - nzo.resume_nzo() - logging.debug("Resumed nzo: %s", nzo_id) - - @synchronized(NZBQUEUE_LOCK) - def switch(self, item_id_1, item_id_2): - try: - # Allow an index as second parameter, easier for some skins - i = int(item_id_2) - item_id_2 = self.__nzo_list[i].nzo_id - except: - pass - try: - nzo1 = self.__nzo_table[item_id_1] - nzo2 = self.__nzo_table[item_id_2] - except KeyError: - # One or both jobs missing - return (-1, 0) - - #get the priorities of the two items - nzo1_priority = nzo1.get_priority() - nzo2_priority = nzo2.get_priority() - try: - #get the item id of the item below to use in priority changing - item_id_3 = self.__nzo_list[i+1].nzo_id - #if there is an item below the id1 and id2 then we need that too - #to determine whether to change the priority - nzo3 = self.__nzo_table[item_id_3] - nzo3_priority = nzo3.get_priority() - #if id1 is surrounded by items of a different priority then change it's pririty to match - if nzo2_priority != nzo1_priority and nzo3_priority != nzo1_priority or nzo2_priority > nzo1_priority: - nzo1.set_priority(nzo2_priority) - except: - nzo1.set_priority(nzo2_priority) - item_id_pos1 = -1 - item_id_pos2 = -1 - for i in xrange(len(self.__nzo_list)): - if item_id_1 == self.__nzo_list[i].nzo_id: - item_id_pos1 = i - elif item_id_2 == self.__nzo_list[i].nzo_id: - item_id_pos2 = i - if (item_id_pos1 > -1) and (item_id_pos2 > -1): - item = self.__nzo_list[item_id_pos1] - del self.__nzo_list[item_id_pos1] - self.__nzo_list.insert(item_id_pos2, item) - return (item_id_pos2, nzo1.get_priority()) - # If moving failed/no movement took place - return (-1, nzo1.get_priority()) - - @synchronized(NZBQUEUE_LOCK) - def get_position(self, nzb_id): - for i in xrange(len(self.__nzo_list)): - if nzb_id == self.__nzo_list[i].nzo_id: - return i - return -1 - - @synchronized(NZBQUEUE_LOCK) - def move_up_bulk(self, nzo_id, nzf_ids): - if nzo_id in self.__nzo_table: - self.__nzo_table[nzo_id].move_up_bulk(nzf_ids) - - @synchronized(NZBQUEUE_LOCK) - def move_top_bulk(self, nzo_id, nzf_ids): - if nzo_id in self.__nzo_table: - self.__nzo_table[nzo_id].move_top_bulk(nzf_ids) - - @synchronized(NZBQUEUE_LOCK) - def move_down_bulk(self, nzo_id, nzf_ids): - if nzo_id in self.__nzo_table: - self.__nzo_table[nzo_id].move_down_bulk(nzf_ids) - - @synchronized(NZBQUEUE_LOCK) - def move_bottom_bulk(self, nzo_id, nzf_ids): - if nzo_id in self.__nzo_table: - self.__nzo_table[nzo_id].move_bottom_bulk(nzf_ids) - - @synchronized(NZBQUEUE_LOCK) - def sort_by_avg_age(self, reverse=False): - logging.info("Sorting by average date...(reversed:%s)", reverse) - self.__nzo_list = sort_queue_function(self.__nzo_list, _nzo_date_cmp, reverse) - - @synchronized(NZBQUEUE_LOCK) - def sort_by_name(self, reverse=False): - logging.info("Sorting by name...(reversed:%s)", reverse) - self.__nzo_list = sort_queue_function(self.__nzo_list, _nzo_name_cmp, reverse) - - @synchronized(NZBQUEUE_LOCK) - def sort_by_size(self, reverse=False): - logging.info("Sorting by size...(reversed:%s)", reverse) - self.__nzo_list = sort_queue_function(self.__nzo_list, _nzo_size_cmp, reverse) - - - @synchronized(NZBQUEUE_LOCK) - def sort_queue(self, field, reverse=False): - if isinstance(reverse, str): - if reverse.lower() == 'desc': - reverse = True - else: - reverse = False - if reverse is None: - reverse = False - if field.lower() == 'name': - self.sort_by_name(reverse) - elif field.lower() == 'size' or field.lower() == 'bytes': - self.sort_by_size(reverse) - elif field.lower() == 'avg_age': - self.sort_by_avg_age(reverse) - else: - logging.debug("Sort: %s not recognised", field) - - - @synchronized(NZBQUEUE_LOCK) - def set_priority(self, nzo_id, priority): - """ Sets the priority on the nzo and places it in the queue at the approrioate position """ - try: - priority = int(priority) - nzo = self.__nzo_table[nzo_id] - nzo_id_pos1 = -1 - pos = -1 - - # Get the current position in the queue - for i in xrange(len(self.__nzo_list)): - if nzo_id == self.__nzo_list[i].nzo_id: - nzo_id_pos1 = i - break - - # Don't change priority and order if priority is the same as asked - if priority == self.__nzo_list[nzo_id_pos1].get_priority(): - return nzo_id_pos1 - - nzo.set_priority(priority) - - if nzo_id_pos1 != -1: - del self.__nzo_list[nzo_id_pos1] - if priority == TOP_PRIORITY: - #A top priority item (usually a completed download fetching pars) - #is added to the top of the queue - self.__nzo_list.insert(0, nzo) - pos = 0 - elif priority == LOW_PRIORITY: - pos = len(self.__nzo_list) - self.__nzo_list.append(nzo) - else: - # for high priority we need to add the item at the bottom - #of any other high priority items above the normal priority - # for normal priority we need to add the item at the bottom - #of the normal priority items above the low priority - if self.__nzo_list: - p = 0 - added = False - for position in self.__nzo_list: - if position.get_priority() < priority: - self.__nzo_list.insert(p, nzo) - pos = p - added=True - break - p+=1 - if not added: - #if there are no other items classed as a lower priority - #then it will be added to the bottom of the queue - pos = len(self.__nzo_list) - self.__nzo_list.append(nzo) - else: - #if the queue is empty then simple append the item to the bottom - self.__nzo_list.append(nzo) - pos = 0 - return pos - - except: - return -1 - - @synchronized(NZBQUEUE_LOCK) - def set_priority_multiple(self, nzo_ids, priority): - try: - n = -1 - for nzo_id in nzo_ids: - n = self.set_priority(nzo_id, priority) - return n - except: - return -1 - - @synchronized(NZBQUEUE_LOCK) - def set_original_dirname(self, nzo_id, name): - try: - if name: - nzo = self.__nzo_table[nzo_id] - name = sanitize_foldername(name) - nzo.set_original_dirname(name) - except: - pass - - @synchronized(NZBQUEUE_LOCK) - def reset_try_lists(self, nzf = None, nzo = None): - if nzf: - nzf.reset_try_list() - if nzo: - nzo.reset_try_list() - self.reset_try_list() - - @synchronized(NZBQUEUE_LOCK) - def reset_all_try_lists(self): - for nzo in self.__nzo_list: - nzo.reset_all_try_lists() - self.reset_try_list() - - - @synchronized(NZBQUEUE_LOCK) - def has_articles_for(self, server): - ''' Check whether there are any pending articles for the downloader ''' - if not self.__nzo_list: - return False - elif self.__top_only: - for nzo in self.__nzo_list: - # Ignore any items that are in a paused or grabbing state - if nzo.get_status() not in ('Paused', 'Grabbing'): - return not nzo.server_in_try_list(server) - else: - return not self.server_in_try_list(server) - - @synchronized(NZBQUEUE_LOCK) - def has_forced_items(self): - ''' Check if the queue contains any Forced - Priority items to download while paused ''' - for nzo in self.__nzo_list: - if nzo.get_priority() == TOP_PRIORITY and nzo.get_status() != 'Paused': - return True - return False - - @synchronized(NZBQUEUE_LOCK) - def get_article(self, server): - if self.__top_only: - if self.__nzo_list: - for nzo in self.__nzo_list: - if not nzo.get_status() == 'Paused': - article = nzo.get_article(server) - if article: - return article - - else: - for nzo in self.__nzo_list: - # Don't try to get an article if server is in try_list of nzo - if not nzo.server_in_try_list(server) and nzo.get_status() != 'Paused': - article = nzo.get_article(server) - if article: - return article - - # No articles for this server, block server (until reset issued) - self.add_to_try_list(server) - - @synchronized(NZBQUEUE_LOCK) - def register_article(self, article): - nzf = article.nzf - nzo = nzf.nzo - - if nzo.deleted or nzf.deleted: - logging.debug("Discarding article %s, no longer in queue", article.article) - return - - file_done, post_done, reset = nzo.remove_article(article) - - filename = nzf.get_filename() - - if reset: - self.reset_try_list() - - if file_done: - if nzo.extra3 is None or time.time() > nzo.extra3: - sabnzbd.save_data(nzo, nzo.nzo_id) - if nzo.extra4 is None: - nzo.extra3 = None - else: - nzo.extra3 = time.time() + nzo.extra4 - - _type = nzf.get_type() - - # Only start decoding if we have a filename and type - if filename and _type: - Assembler.do.process((nzo, nzf)) - - else: - logging.warning(Ta('warn-unknownEncoding@1'), filename) - - if post_done: - self.remove(nzo.nzo_id, add_to_history=False, cleanup=False) - - if not self.__nzo_list: - # Close server connections - if cfg.autodisconnect(): - sabnzbd.downloader.disconnect() - - # Sets the end-of-queue back on if disabled - # adding an nzb and re-adding for more blocks disables it - if sabnzbd.QUEUECOMPLETEACTION: - sabnzbd.QUEUECOMPLETEACTION_GO = True - - # Notify assembler to call postprocessor - Assembler.do.process((nzo, None)) - - - @synchronized(NZBQUEUE_LOCK) - def queue_info(self, for_cli = False): - bytes_left = 0 - bytes = 0 - pnfo_list = [] - for nzo in self.__nzo_list: - pnfo = nzo.gather_info(for_cli = for_cli) - if nzo.get_status() != 'Paused': - bytes += pnfo[PNFO_BYTES_FIELD] - bytes_left += pnfo[PNFO_BYTES_LEFT_FIELD] - pnfo_list.append(pnfo) - - return (bytes, bytes_left, pnfo_list) - - @synchronized(NZBQUEUE_LOCK) - def is_empty(self): - empty = True - for nzo in self.__nzo_list: - if not nzo.futuretype: - empty = False - break - return empty - - @synchronized(NZBQUEUE_LOCK) - def cleanup_nzo(self, nzo): - nzo.purge_data() - - ArticleCache.do.purge_articles(nzo.saved_articles) - - for hist_item in self.__downloaded_items: - # refresh fields & delete nzo reference - if hist_item.nzo and hist_item.nzo == nzo: - hist_item.cleanup() - logging.debug('%s cleaned up', - nzo.get_dirname()) - - @synchronized(NZBQUEUE_LOCK) - def debug(self): - return (self.__downloaded_items[:], self.__nzo_list[:], - self.__nzo_table.copy(), self.try_list[:]) - - - def get_urls(self): - """ Return list of future-types needing URL """ - lst = [] - for nzo_id in self.__nzo_table: - nzo = self.__nzo_table[nzo_id] - url = nzo.get_future() - if nzo.futuretype and url.lower().startswith('http'): - lst.append((url, nzo)) - return lst - - def get_msgids(self): - """ Return list of future-types needing msgid """ - lst = [] - for nzo_id in self.__nzo_table: - nzo = self.__nzo_table[nzo_id] - msgid = nzo.get_future() - if nzo.futuretype and (msgid.isdigit() or len(msgid)==5): - lst.append((msgid, nzo)) - return lst - - def __repr__(self): - return "" - -#------------------------------------------------------------------------------- - -def _nzo_date_cmp(nzo1, nzo2): - avg_date1 = nzo1.get_avg_date() - avg_date2 = nzo2.get_avg_date() - - if avg_date1 is None and avg_date2 is None: - return 0 - - if avg_date1 is None: - avg_date1 = datetime.datetime.now() - elif avg_date2 is None: - avg_date2 = datetime.datetime.now() - - return cmp(avg_date1, avg_date2) - -def _nzo_name_cmp(nzo1, nzo2): - return cmp(nzo1.get_filename(), nzo2.get_filename()) - -def _nzo_size_cmp(nzo1, nzo2): - return cmp(nzo1.get_bytes(), nzo2.get_bytes()) - -def sort_queue_function(nzo_list, method, reverse): - super_high_priority = [nzo for nzo in nzo_list if nzo.get_priority() == TOP_PRIORITY] - high_priority = [nzo for nzo in nzo_list if nzo.get_priority() == HIGH_PRIORITY] - normal_priority = [nzo for nzo in nzo_list if nzo.get_priority() == NORMAL_PRIORITY] - low_priority = [nzo for nzo in nzo_list if nzo.get_priority() == LOW_PRIORITY] - - super_high_priority.sort(cmp=method, reverse=reverse) - high_priority.sort(cmp=method, reverse=reverse) - normal_priority.sort(cmp=method, reverse=reverse) - low_priority.sort(cmp=method, reverse=reverse) - - new_list = super_high_priority - new_list.extend(high_priority) - new_list.extend(normal_priority) - new_list.extend(low_priority) - - # Make sure any left-over jobs enter the new list - for item in nzo_list: - if item not in new_list: - new_list.append(item) - - return new_list - - - -#------------------------------------------------------------------------------- -# NZBQ Wrappers - -__NZBQ = None # Global pointer to NzbQueue instance - -def init(): - global __NZBQ - if __NZBQ: - __NZBQ.__init__() - else: - __NZBQ = NzbQueue() - -def start(): - global __NZBQ - if __NZBQ: __NZBQ.start() - - -def stop(): - global __NZBQ - if __NZBQ: - __NZBQ.stop() - try: - __NZBQ.join() - except: - pass - -def debug(): - global __NZBQ - if __NZBQ: return __NZBQ.debug() - -def move_up_bulk(nzo_id, nzf_ids): - global __NZBQ - if __NZBQ: __NZBQ.move_up_bulk(nzo_id, nzf_ids) - -def move_top_bulk(nzo_id, nzf_ids): - global __NZBQ - if __NZBQ: __NZBQ.move_top_bulk(nzo_id, nzf_ids) - -def move_down_bulk(nzo_id, nzf_ids): - global __NZBQ - if __NZBQ: __NZBQ.move_down_bulk(nzo_id, nzf_ids) - -def move_bottom_bulk(nzo_id, nzf_ids): - global __NZBQ - if __NZBQ: __NZBQ.move_bottom_bulk(nzo_id, nzf_ids) - -def remove_nzo(nzo_id, add_to_history = True, unload=False): - global __NZBQ - if __NZBQ: __NZBQ.remove(nzo_id, add_to_history, unload) - -def remove_multiple_nzos(nzo_ids): - global __NZBQ - if __NZBQ: __NZBQ.remove_multiple(nzo_ids) - -def remove_all_nzo(): - global __NZBQ - if __NZBQ: __NZBQ.remove_all() - -def remove_nzf(nzo_id, nzf_id): - global __NZBQ - if __NZBQ: __NZBQ.remove_nzf(nzo_id, nzf_id) - -def sort_by_avg_age(reverse=False): - global __NZBQ - if __NZBQ: __NZBQ.sort_by_avg_age(reverse) - -def sort_by_name(reverse=False): - global __NZBQ - if __NZBQ: __NZBQ.sort_by_name(reverse) - -def sort_by_size(reverse=False): - global __NZBQ - if __NZBQ: __NZBQ.sort_by_size(reverse) - -def change_opts(nzo_id, pp): - global __NZBQ - if __NZBQ: __NZBQ.change_opts(nzo_id, pp) - -def change_script(nzo_id, script): - global __NZBQ - if __NZBQ: __NZBQ.change_script(nzo_id, script) - -def change_cat(nzo_id, cat): - global __NZBQ - if __NZBQ: __NZBQ.change_cat(nzo_id, cat) - -def change_name(nzo_id, name): - global __NZBQ - if __NZBQ: __NZBQ.change_name(nzo_id, name) - -def get_article(host): - global __NZBQ - if __NZBQ: return __NZBQ.get_article(host) - -def has_articles(): - global __NZBQ - if __NZBQ: return not __NZBQ.is_empty() - -def has_articles_for(server): - global __NZBQ - if __NZBQ: return __NZBQ.has_articles_for(server) - -def has_forced_items(): - global __NZBQ - if __NZBQ: return __NZBQ.has_forced_items() - -def register_article(article): - global __NZBQ - if __NZBQ: return __NZBQ.register_article(article) - -def switch(nzo_id1, nzo_id2): - global __NZBQ - if __NZBQ: - return __NZBQ.switch(nzo_id1, nzo_id2) - -def get_position(nzo_id): - global __NZBQ - if __NZBQ: - return __NZBQ.get_position(nzo_id) - -def rename_nzo(nzo_id, name): - global __NZBQ - if __NZBQ: __NZBQ.change_name(nzo_id, name) - -def history_info(): - global __NZBQ - if __NZBQ: return __NZBQ.history_info() - -def queue_info(for_cli = False): - global __NZBQ - if __NZBQ: return __NZBQ.queue_info(for_cli = for_cli) - -#def purge_history(job=None): -# global __NZBQ -# if __NZBQ: __NZBQ.purge(job) - -#def remove_multiple_history(jobs=None): -# global __NZBQ -# if __NZBQ: __NZBQ.remove_multiple_history(jobs) - -def get_msgids(): - global __NZBQ - if __NZBQ: return __NZBQ.get_msgids() - -def get_urls(): - global __NZBQ - if __NZBQ: return __NZBQ.get_urls() - -def pause_multiple_nzo(jobs): - global __NZBQ - if __NZBQ: __NZBQ.pause_multiple_nzo(jobs) - -def resume_multiple_nzo(jobs): - global __NZBQ - if __NZBQ: __NZBQ.resume_multiple_nzo(jobs) - -def cleanup_nzo(nzo): - global __NZBQ - if __NZBQ: __NZBQ.cleanup_nzo(nzo) - -def reset_try_lists(nzf = None, nzo = None): - global __NZBQ - if __NZBQ: __NZBQ.reset_try_lists(nzf, nzo) - -def reset_all_try_lists(): - global __NZBQ - if __NZBQ: __NZBQ.reset_all_try_lists() - -def save(): - global __NZBQ - if __NZBQ: __NZBQ.save() - -def generate_future(msg, pp, script, cat, url, priority, nzbname): - global __NZBQ - if __NZBQ: return __NZBQ.generate_future(msg, pp, script, cat, url, priority, nzbname) - -def set_top_only(value): - global __NZBQ - if __NZBQ: __NZBQ.set_top_only(value) - -#------------------------------------------------------------------------------- -# Synchronized wrappers - -@synchronized_CV -def add_nzo(nzo): - global __NZBQ - if __NZBQ: __NZBQ.add(nzo) - -@synchronized_CV -def insert_future_nzo(future_nzo, filename, msgid, data, pp=None, script=None, cat=None, priority=NORMAL_PRIORITY, nzbname=None, nzo_info=None): - global __NZBQ - if nzo_info is None: - nzo_info = {} - if __NZBQ: __NZBQ.insert_future(future_nzo, filename, msgid, data, pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname, nzo_info=nzo_info) - -@synchronized_CV -def set_priority(nzo_id, priority): - global __NZBQ - if __NZBQ: - return __NZBQ.set_priority(nzo_id, priority) - -@synchronized_CV -def get_nzo(nzo_id): - global __NZBQ - if __NZBQ: - return __NZBQ.get_nzo(nzo_id) - -@synchronized_CV -def set_priority_multiple(nzo_ids, priority): - global __NZBQ - if __NZBQ: return __NZBQ.set_priority_multiple(nzo_ids, priority) - -@synchronized_CV -def sort_queue(field, reverse=False): - global __NZBQ - if __NZBQ: __NZBQ.sort_queue(field, reverse) diff --git a/main/sabnzbd/nzbstuff.py b/main/sabnzbd/nzbstuff.py deleted file mode 100644 index 0907591..0000000 --- a/main/sabnzbd/nzbstuff.py +++ /dev/null @@ -1,1242 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.nzbstuff - misc -""" - -import os -import time -import re -import logging -import datetime -import xml.sax -import xml.sax.handler -import xml.sax.xmlreader -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO - -import sabnzbd -from sabnzbd.constants import * -from sabnzbd.misc import to_units, cat_to_opts, cat_convert, sanitize_foldername -import sabnzbd.cfg as cfg -from sabnzbd.trylist import TryList -from sabnzbd.lang import T, Ta -from sabnzbd.codecs import unicoder, platform_encode - -RE_NEWZBIN = re.compile(r"msgid_(\w+) (.+)(\.nzb)$", re.I) -RE_NORMAL = re.compile(r"(.+)(\.nzb)", re.I) -SUBJECT_FN_MATCHER = re.compile(r'"(.*)"') -RE_SAMPLE = re.compile(sample_match, re.I) -PROBABLY_PAR2_RE = re.compile(r'(.*)\.vol(\d*)\+(\d*)\.par2', re.I) - - -################################################################################ -# Article # -################################################################################ -class Article(TryList): - def __init__ (self, article, bytes, partnum, nzf): - TryList.__init__(self) - - self.fetcher = None - self.allow_fill_server = False - - self.article = article - self.art_id = None - self.bytes = bytes - self.partnum = partnum - self.nzf = nzf - - def get_article(self, server): - if server.fillserver and (not self.allow_fill_server) and sabnzbd.active_primaries(): - return None - - if not self.fetcher and not self.server_in_try_list(server): - self.fetcher = server - return self - - def get_art_id(self): - if not self.art_id: - self.art_id = sabnzbd.get_new_id("article") - return self.art_id - - def __getstate__(self): - odict = self.__dict__.copy() - del odict['_TryList__try_list'] - del odict['fetcher'] - return odict - - def __setstate__(self, _dict): - self.__dict__.update(_dict) - TryList.__init__(self) - self.fetcher = None - self.allow_fill_server = False - - def __repr__(self): - return "" % \ - (self.article, self.bytes, self.partnum, self.art_id) - -################################################################################ -# NzbFile # -################################################################################ -SUBJECT_FN_MATCHER = re.compile(r'"(.*)"') -class NzbFile(TryList): - def __init__(self, date, subject, article_db, bytes, nzo): - TryList.__init__(self) - - # Private - self.__date = date - self.__subject = subject - self.__filename = None - self.__type = None - - match = re.search(SUBJECT_FN_MATCHER, subject) - if match: - self.__filename = match.group(1).strip('"') - - self.__ispar2file = False - self.__vol = None - self.__blocks = None - self.__setname = None - self.__extrapars = None - - self.__initial_article = None - - self.__articles = [] - self.__decodetable = {} - - self.__bytes = bytes - self.__bytes_left = bytes - self.__article_count = 0 - - # Public - self.nzo = nzo - self.nzf_id = sabnzbd.get_new_id("nzf") - self.deleted = False - - self.valid = False - self.import_finished = False - - self.md5sum = None - - self.valid = bool(article_db) - - if self.valid and self.nzf_id: - sabnzbd.save_data(article_db, self.nzf_id) - - ## begin nzf.Mutators ##################################################### - ## excluding nzf.__try_list ############################################### - def increase_article_count(self): - self.__article_count += 1 - - def finish_import(self): - logging.info("Finishing import on %s", self.__subject) - - article_db = sabnzbd.load_data(self.nzf_id) - if article_db: - for partnum in article_db: - art_id = article_db[partnum][0] - bytes = article_db[partnum][1] - - article = Article(art_id, bytes, partnum, self) - - self.__articles.append(article) - self.__decodetable[partnum] = article - - # Look for article with lowest number - self.__initial_article = self.__decodetable[self.lowest_partnum()] - self.import_finished = True - - def remove_article(self, article): - self.__articles.remove(article) - self.__bytes_left -= article.bytes - - reset = False - if article.partnum == self.lowest_partnum() and self.__articles: - # Issue reset - self.__initial_article = None - self.reset_try_list() - reset = True - - done = True - if self.__articles: - done = False - - return (done, reset) - - def set_type(self, _type): - self.__type = _type - - def set_filename(self, filename): - self.__filename = filename - - def set_par2(self, setname, vol, blocks): - self.__ispar2file = True - self.__setname = setname - self.__vol = vol - self.__blocks = int(blocks) - - def set_extrapars(self, extrapars): - self.__extrapars = extrapars - - def remove_extrapar(self, extrapar): - self.__extrapars.remove(extrapar) - - def is_par2(self): - return self.__ispar2file - - ## end nzf.Mutators ####################################################### - ########################################################################### - def get_article_count(self): - return self.__article_count - - def get_article(self, server): - if self.__initial_article: - article = self.__initial_article.get_article(server) - if article: - return article - - else: - for article in self.__articles: - article = article.get_article(server) - if article: - return article - - self.add_to_try_list(server) - - def reset_all_try_lists(self): - for art in self.__articles: - art.reset_try_list() - self.reset_try_list() - - def bytes(self): - return self.__bytes - - def bytes_left(self): - return self.__bytes_left - - def get_subject(self): - return self.__subject - - def get_date(self): - return self.__date - - def get_filename(self): - return self.__filename - - def get_decodetable(self): - return self.__decodetable - - def get_type(self): - return self.__type - - def get_extrapars(self): - return self.__extrapars - - def get_blocks(self): - return self.__blocks - - def get_setname(self): - return self.__setname - - def completed(self): - return not bool(self.__articles) - - def lowest_partnum(self): - return min(self.__decodetable) - - def __getstate__(self): - odict = self.__dict__.copy() - del odict['_TryList__try_list'] - return odict - - def __setstate__(self, _dict): - self.__dict__.update(_dict) - TryList.__init__(self) - - def __repr__(self): - return "" % \ - (self.__filename, self.__type) - - -################################################################################ -# NzbParser # -################################################################################ -class NzbParser(xml.sax.handler.ContentHandler): - """ Forgiving parser for NZB's """ - # Accesses private variables of NzbObject instances to keep - # queue-compatibility with previous trunk versions. - # Ideally the methods of this class could be added to NzbObject, - # but this would also break compatibility. - # Hence, this solution. - def __init__ (self, nzo): - self.nzo = nzo - self.in_nzb = False - self.in_file = False - self.in_groups = False - self.in_group = False - self.in_segments = False - self.in_segment = False - self.filename = '' - self.avg_age = 0 - self.valids = 0 - self.skipped_files = 0 - self.nzf_list = [] - - def startDocument(self): - self.filter = cfg.ignore_samples() - - def startElement(self, name, attrs): - if name == 'segment' and self.in_nzb and self.in_file and self.in_segments: - try: - self.seg_bytes = int(attrs.get('bytes')) - self.article_nr = int(attrs.get('number')) - except ValueError: - return - self.article_id = [] - self.file_bytes += self.seg_bytes - self.in_segment = True - - elif name == 'segments' and self.in_nzb and self.in_file: - self.in_segments = True - - elif name == 'file' and self.in_nzb: - subject = attrs.get('subject', '') - match = re.search(SUBJECT_FN_MATCHER, subject) - if match: - self.filename = match.group(1).strip('"').strip() - else: - self.filename = subject.strip() - - if self.filter == 2 and RE_SAMPLE.search(subject): - logging.info('Skipping sample file %s', subject) - else: - self.in_file = True - if isinstance(subject, unicode): - subject = subject.encode('latin-1', 'replace') - self.fileSubject = subject - try: - self.file_date = int(attrs.get('date')) - except: - # NZB has non-standard timestamp, assume 1 - self.file_date = 1 - self.article_db = {} - self.file_bytes = 0 - - elif name == 'group' and self.in_nzb and self.in_file and self.in_groups: - self.in_group = True - self.group_name = [] - - elif name == 'groups' and self.in_nzb and self.in_file: - self.in_groups = True - self.groups = [] - - elif name == 'nzb': - self.in_nzb = True - - def characters (self, content): - if self.in_group: - self.group_name.append(content) - elif self.in_segment: - self.article_id.append(content) - - def endElement(self, name): - if name == 'group' and self.in_group: - self.groups.append(str(''.join(self.group_name))) - self.in_group = False - - elif name == 'segment' and self.in_segment: - partnum = self.article_nr - segm = str(''.join(self.article_id)) - if partnum in self.article_db: - if segm != self.article_db[partnum][0]: - logging.error(Ta('error-qDupPart@3'), - partnum, self.article_db[partnum][0], segm) - else: - logging.info("Skipping duplicate article (%s)", segm) - else: - self.article_db[partnum] = (segm, self.seg_bytes) - self.in_segment = False - - elif name == 'groups' and self.in_groups: - self.in_groups = False - - elif name == 'segments' and self.in_segments: - self.in_segments = False - - elif name == 'file' and self.in_file: - # Create an NZF - self.in_file = False - if not self.article_db: - logging.warning(Ta('warn-emptyFile@1'), self.filename) - return - tm = datetime.datetime.fromtimestamp(self.file_date) - nzf = NzbFile(tm, self.filename, self.article_db, self.file_bytes, self.nzo) - if nzf.valid and nzf.nzf_id: - logging.info('File %s added to queue', self.filename) - self.nzo._NzbObject__files.append(nzf) - self.nzo._NzbObject__files_table[nzf.nzf_id] = nzf - self.nzo._NzbObject__bytes += nzf.bytes() - self.avg_age += self.file_date - self.valids += 1 - self.nzf_list.append(nzf) - else: - logging.info('Error importing %s, skipping', self.filename) - if nzf.nzf_id: - sabnzbd.remove_data(nzf.nzf_id) - self.skipped_files += 1 - - elif name == 'nzb': - self.in_nzb = False - - def endDocument(self): - """ End of the file """ - self.nzo._NzbObject__group = self.groups - self.nzo._NzbObject__avg_date = datetime.datetime.fromtimestamp(self.avg_age / self.valids) - if self.skipped_files: - logging.warning(Ta('warn-badImport@2'), - self.skipped_files, self.nzo.get_filename()) - - def remove_files(self): - """ Remove all created NZF objects """ - for nzf in self.nzf_list: - sabnzbd.remove_data(nzf.nzf_id) - - -################################################################################ -# NzbObject # -################################################################################ - -class NzbObject(TryList): - def __init__(self, filename, msgid, pp, script, nzb = None, - futuretype = False, cat = None, url=None, - priority=NORMAL_PRIORITY, nzbname=None, status="Queued", nzo_info=None): - TryList.__init__(self) - - filename = platform_encode(filename) - nzbname = platform_encode(nzbname) - - if pp is None: - r = u = d = None - else: - r, u, d = sabnzbd.pp_to_opts(pp) - - self.__filename = filename # Original filename - if nzbname and nzb: - dirname = nzbname # Use nzbname if set and only for non-future slot - else: - dirname = filename - - # If non-future: create safe folder name stripped from ".nzb" and junk - if nzb and dirname and dirname.lower().endswith('.nzb'): - dname, ext = os.path.splitext(dirname) # Used for folder name for final unpack - if ext.lower() == '.nzb': - dirname = dname - dirname = sanitize_foldername(dirname) - dirname, password = scan_password(dirname) - - self.__dirname = dirname # Keeps track of the working folder - self.__original_dirname = dirname # TAKE NOTE: Used for folder name for final unpack - # The name is wrong, required for backward compatibility! - - self.__created = False # dirprefixes + dirname created - self.__bytes = 0 # Original bytesize - self.__bytes_downloaded = 0 # Downloaded byte - self.__repair = r # True if we want to repair this set - self.__unpack = u # True if we want to unpack this set - self.__delete = d # True if we want to delete this set - self.__script = script # External script for this set - self.__msgid = '0' # Newzbin msgid - self.__cat = cat # Newzbin category - if futuretype: - self.__url = str(url) # Either newzbin-id or URL queued (future-type only) - else: - self.__url = '' - self.__group = [] - self.__avg_date = datetime.datetime.fromtimestamp(0.0) - self.__dirprefix = [] - - self.__partable = {} # Holds one parfile-name for each set - self.__extrapars = {} # Holds the extra parfile names for all sets - self.md5packs = {} # Holds the md5pack for each set - - self.__files = [] - self.__files_table = {} - - self.__finished_files = [] - - #the current status of the nzo eg: - #Queued, Downloading, Repairing, Unpacking, Failed, Complete - self.__status = status - self.__avg_bps_freq = 0 - self.__avg_bps_total = 0 - try: - self.__priority = int(priority) - except: - self.__priority = DEFAULT_PRIORITY - - self.__dupe_table = {} - - self.saved_articles = [] - - self.nzo_id = None - - self.futuretype = futuretype - self.deleted = False - self.parsed = False - - # Store one line responses for filejoin/par2/unrar/unzip here for history display - self.action_line = '' - # Store the results from various filejoin/par2/unrar/unzip stages - self.unpack_info = {} - # Stores one line containing the last failure - self.fail_msg = '' - # Stores various info about the nzo to be - if nzo_info: - self.nzo_info = nzo_info - else: - self.nzo_info = {} - - # Temporary store for custom foldername - needs to be stored because of url/newzbin fetching - self.extra1 = nzbname - - self.extra2 = password - self.extra3 = None # Will hold earliest next save time of NZO - self.extra4 = None # Will hold save timeout for this NZO - self.extra5 = None - self.extra6 = None - - self.create_group_folder = cfg.create_group_folders() - - # Remove leading msgid_XXXX and trailing .nzb - self.__dirname, self.__msgid = SplitFileName(self.__dirname) - if msgid: - self.__msgid = msgid - - if not nzb: - # This is a slot for a future NZB, ready now - return - - # Apply conversion option to final folder, called __original_dirname - # Yeah, I know :( - if cfg.replace_dots() and ' ' not in self.__original_dirname: - logging.info('Replacing dots with spaces in %s', self.__original_dirname) - self.__original_dirname = self.__original_dirname.replace('.',' ') - if cfg.replace_spaces(): - logging.info('Replacing spaces with underscores in %s', self.__dirname) - self.__original_dirname = self.__original_dirname.replace(' ','_') - - if sabnzbd.backup_exists(filename): - # File already exists and we have no_dupes set - logging.warning(Ta('warn-skipDup@1'), filename) - raise TypeError - - # Must create a lower level XML parser because we must - # disable the reading of the DTD file from newzbin.com - # by setting "feature_external_ges" to 0. - - handler = NzbParser(self) - parser = xml.sax.make_parser() - parser.setFeature(xml.sax.handler.feature_external_ges, 0) - parser.setContentHandler(handler) - parser.setErrorHandler(xml.sax.handler.ErrorHandler()) - inpsrc = xml.sax.xmlreader.InputSource() - inpsrc.setByteStream(StringIO(nzb)) - try: - parser.parse(inpsrc) - except xml.sax.SAXParseException, err: - handler.remove_files() - logging.warning(Ta('warn-badNZB@3'), - filename, err.getMessage(), err.getLineNumber()) - raise ValueError - except Exception, err: - handler.remove_files() - logging.warning(Ta('warn-badNZB@3'), filename, err, 0) - raise ValueError - - sabnzbd.backup_nzb(filename, nzb) - - if cat is None: - for grp in self.__group: - cat = cat_convert(grp) - if cat: - break - - # Determine category and find pp/script values - self.__cat, pp, self.__script, self.__priority = cat_to_opts(cat, pp, script, self.__priority) - self.__repair, self.__unpack, self.__delete = sabnzbd.pp_to_opts(pp) - - if cfg.create_group_folders(): - self.__dirprefix.append(self.get_group()) - - if cfg.auto_sort(): - self.__files.sort(cmp=_nzf_cmp_date) - else: - self.__files.sort(cmp=_nzf_cmp_name) - - # Set nzo save-delay to 6 sec per GB with a max of 5 min - self.extra4 = min(6.0 * float(self.__bytes) / GIGI, 300.0) - - # Pause job when above size limit - limit = cfg.SIZE_LIMIT.get_int() - if limit and self.__bytes > limit: - logging.info('Job too large, forcing low prio and paused (%s)', self.__dirname) - self.pause_nzo() - self.set_priority(LOW_PRIORITY) - - - ## begin nzo.Mutators ##################################################### - ## excluding nzo.__try_list ############################################### - def check_for_dupe(self, nzf): - filename = nzf.get_filename() - - dupe = False - - if filename in self.__dupe_table: - old_nzf = self.__dupe_table[filename] - if nzf.get_article_count() <= old_nzf.get_article_count(): - dupe = True - - if not dupe: - self.__dupe_table[filename] = nzf - - return dupe - - def update_bytes(self, bytes): - self.__bytes_downloaded += bytes - - def update_avg_kbs(self, bps): - if bps: - self.__avg_bps_total += bps / 1024 - self.__avg_bps_freq += 1 - - def remove_nzf(self, nzf): - if nzf in self.__files: - self.__files.remove(nzf) - self.__finished_files.append(nzf) - nzf.deleted = True - return not bool(self.__files) - - def reset_all_try_lists(self): - for nzf in self.__files: - nzf.reset_all_try_lists() - self.reset_try_list() - - def remove_article(self, article): - nzf = article.nzf - file_done, reset = nzf.remove_article(article) - - if file_done: - self.remove_nzf(nzf) - - if reset: - self.reset_try_list() - - ## Special treatment for first part of par2 file - fn = nzf.get_filename() - if (not nzf.is_par2()) and fn and fn.strip().lower().endswith('.par2'): - if fn: - par2match = re.search(PROBABLY_PAR2_RE, fn) - ## Is a par2file and repair mode activated - if par2match and self.__repair: - head = par2match.group(1) - nzf.set_par2(par2match.group(1), - par2match.group(2), - par2match.group(3)) - ## Already got a parfile for this set? - if head in self.__partable: - nzf.set_extrapars(self.__extrapars[head]) - ## Set the smallest par2file as initialparfile - ## But only do this if our last initialparfile - ## isn't already done (e.g two small parfiles) - if nzf.get_blocks() < self.__partable[head].get_blocks() \ - and self.__partable[head] in self.__files: - self.__partable[head].reset_try_list() - self.__files.remove(self.__partable[head]) - self.__extrapars[head].append(self.__partable[head]) - self.__partable[head] = nzf - - ## This file either has more blocks, - ## or initialparfile is already decoded - else: - if not file_done: - nzf.reset_try_list() - self.__files.remove(nzf) - self.__extrapars[head].append(nzf) - ## No par2file in this set yet, set this as - ## initialparfile - else: - self.__partable[head] = nzf - self.__extrapars[head] = [] - nzf.set_extrapars(self.__extrapars[head]) - ## Is not a par2file or nothing todo - else: - pass - ## No filename in seg 1? Probably not uu or yenc encoded - ## Set subject as filename - else: - nzf.set_filename(nzf.get_subject()) - - post_done = False - if not self.__files: - post_done = True - #set the nzo status to return "Queued" - self.set_status('Queued') - self.set_download_report() - - return (file_done, post_done, reset) - - def set_opts(self, pp): - self.__repair, self.__unpack, self.__delete = sabnzbd.pp_to_opts(pp) - - def set_script(self, script): - self.__script = script - - def set_cat(self, cat): - self.__cat = cat - - def set_dirname(self, dirname, created = False): - self.__dirname = dirname - self.__created = created - - def set_filename(self, filename): - self.__filename = filename - - def get_original_dirname(self): - return self.__original_dirname - - def show_dir_name(self): - if self.extra2: - return '%s / %s' % (self.__original_dirname, self.extra2) - else: - return self.__original_dirname - - def get_password(self): - return self.extra2 - - def set_original_dirname(self, name): - self.__original_dirname = platform_encode(name.strip()) - - def set_name(self, name): - if isinstance(name, str): - name, self.extra2 = scan_password(platform_encode(name)) - self.__original_dirname = sanitize_foldername(name) - return True - return False - - def pause_nzo(self): - try: - self.__status = 'Paused' - except: - pass - - def resume_nzo(self): - try: - self.__status = 'Queued' - except: - pass - - def get_priority(self): - return self.__priority - - def set_priority(self, priority): - try: - self.__priority = priority - except: - pass - - def get_msgid(self): - return self.__msgid - - def add_parfile(self, parfile): - self.__files.append(parfile) - parfile.remove_extrapar(parfile) - - def remove_parset(self, setname): - self.__partable.pop(setname) - - def set_status(self, status): - #sets a string outputting the current status of the job, eg: - #Queued, Downloading, Repairing, Unpacking, Failed, Complete - self.__status = status - - def get_status(self): - #returns a string of the current queued status - return self.__status - - def get_nzo_id(self): - return self.nzo_id - - def get_files(self): - return self.__finished_files - - def set_download_report(self): - if self.__avg_bps_total and self.__bytes_downloaded and self.__avg_bps_freq: - #get the deltatime since the download started - avg_bps = self.__avg_bps_total / self.__avg_bps_freq - timecompleted = datetime.timedelta(seconds=self.__bytes_downloaded / (avg_bps*1024)) - - seconds = timecompleted.seconds - #find the total time including days - totaltime = (timecompleted.days/86400) + seconds - self.set_nzo_info('download_time',totaltime) - - #format the total time the download took, in days, hours, and minutes, or seconds. - complete_time = format_time_string(seconds, timecompleted.days) - - self.set_unpack_info('Download', T('msg-DownloadedIn@2') % - (complete_time, to_units(avg_bps*1024)), unique=True) - - - - def get_article(self, server): - article = None - nzf_remove_list = [] - - for nzf in self.__files: - # Don't try to get an article if server is in try_list of nzf - if not nzf.server_in_try_list(server): - if not nzf.import_finished: - nzf.finish_import() - # Still not finished? Something went wrong... - if not nzf.import_finished: - logging.error(Ta('error-qImport@1'), nzf) - nzf_remove_list.append(nzf) - continue - - article = nzf.get_article(server) - if article: - break - - for nzf in nzf_remove_list: - self.__files.remove(nzf) - - if article: - return article - else: - # No articles for this server, block for next time - self.add_to_try_list(server) - return - - def move_top_bulk(self, nzf_ids): - self.__cleanup_nzf_ids(nzf_ids) - if nzf_ids: - target = range(len(nzf_ids)) - - while 1: - self.move_up_bulk(nzf_ids, cleanup = False) - - pos_nzf_table = self.__build_pos_nzf_table(nzf_ids) - - keys = pos_nzf_table.keys() - keys.sort() - - if target == keys: - break - - def move_bottom_bulk(self, nzf_ids): - self.__cleanup_nzf_ids(nzf_ids) - if nzf_ids: - target = range(len(self.__files)-len(nzf_ids), len(self.__files)) - - while 1: - self.move_down_bulk(nzf_ids, cleanup = False) - - pos_nzf_table = self.__build_pos_nzf_table(nzf_ids) - - keys = pos_nzf_table.keys() - keys.sort() - - if target == keys: - break - - def move_up_bulk(self, nzf_ids, cleanup = True): - if cleanup: - self.__cleanup_nzf_ids(nzf_ids) - if nzf_ids: - pos_nzf_table = self.__build_pos_nzf_table(nzf_ids) - - while pos_nzf_table: - pos = min(pos_nzf_table) - nzf = pos_nzf_table.pop(pos) - - if pos > 0: - tmp_nzf = self.__files[pos-1] - if tmp_nzf.nzf_id not in nzf_ids: - self.__files[pos-1] = nzf - self.__files[pos] = tmp_nzf - - def move_down_bulk(self, nzf_ids, cleanup = True): - if cleanup: - self.__cleanup_nzf_ids(nzf_ids) - if nzf_ids: - pos_nzf_table = self.__build_pos_nzf_table(nzf_ids) - - while pos_nzf_table: - pos = max(pos_nzf_table) - nzf = pos_nzf_table.pop(pos) - - if pos < len(self.__files)-1: - tmp_nzf = self.__files[pos+1] - if tmp_nzf.nzf_id not in nzf_ids: - self.__files[pos+1] = nzf - self.__files[pos] = tmp_nzf - - ## end nzo.Mutators ####################################################### - ########################################################################### - def get_dirprefix(self): - return self.__dirprefix[:] - - #def get_group(self): - # if self.__dirprefix: - # return self.__dirprefix[0] - # else: - # return '' - - def get_bytes_downloaded(self): - return self.__bytes_downloaded - - def get_bytes(self): - return self.__bytes - - def get_partable(self): - return self.__partable.copy() - - def get_dirname(self): - return self.__dirname - - def get_dirname_rename(self): - return self.extra1 - - def get_dirname_created(self): - return self.__created - - def get_filename(self): - return self.__filename - - #def get_cat(self): - # if self.__cat: - # return self.__cat - # else: - # return '' - - def get_group(self): - if self.__group: - return self.__group[0] - else: - return None - - def purge_data(self): - for nzf in self.__files: - sabnzbd.remove_data(nzf.nzf_id) - - for _set in self.__extrapars: - for nzf in self.__extrapars[_set]: - sabnzbd.remove_data(nzf.nzf_id) - - for nzf in self.__finished_files: - sabnzbd.remove_data(nzf.nzf_id) - - def get_avg_date(self): - return self.__avg_date - - def bytes(self): - return self.__bytes - - def bytes_left(self): - bytes = 0 - for _file in self.__files: - bytes += _file.bytes_left() - return bytes - - def gather_info(self, for_cli = False): - bytes_left_all = 0 - - active_files = [] - queued_files = [] - finished_files = [] - - for _file in self.__finished_files: - bytes = _file.bytes() - filename = _file.get_filename() - if not filename: - filename = _file.get_subject() - date = _file.get_date() - if for_cli: - date = time.mktime(date.timetuple()) - finished_files.append((0, bytes, filename, date)) - - for _file in self.__files: - bytes_left = _file.bytes_left() - bytes = _file.bytes() - filename = _file.get_filename() - if not filename: - filename = _file.get_subject() - date = _file.get_date() - if for_cli: - date = time.mktime(date.timetuple()) - - bytes_left_all += bytes_left - active_files.append((bytes_left, bytes, filename, date, - _file.nzf_id)) - - for _set in self.__extrapars: - for _file in self.__extrapars[_set]: - bytes_left = _file.bytes_left() - bytes = _file.bytes() - filename = _file.get_filename() - if not filename: - filename = _file.get_subject() - date = _file.get_date() - if for_cli: - date = time.mktime(date.timetuple()) - - queued_files.append((_set, bytes_left, bytes, filename, date)) - - avg_date = self.__avg_date - if for_cli: - avg_date = time.mktime(avg_date.timetuple()) - - return (self.__repair, self.__unpack, self.__delete, self.__script, - self.nzo_id, self.show_dir_name(), {}, - self.__msgid, self.__cat, self.__url, - bytes_left_all, self.__bytes, avg_date, - finished_files, active_files, queued_files, self.__status, self.__priority) - - def get_nzf_by_id(self, nzf_id): - if nzf_id in self.__files_table: - return self.__files_table[nzf_id] - - def set_unpack_info(self, key, msg, set='', unique=False): - ''' - Builds a dictionary containing the stage name (key) and a message - If set is present, it will overwrite any other messages from the set of the same stage - If unique is present, it will only have a single line message - ''' - found = False - # Unique messages allow only one line per stage(key) - if not unique: - if not self.unpack_info.has_key(key): - self.unpack_info[key] = [] - # If set is present, look for previous message from that set and replace - if set: - set = unicoder('[%s]' % set) - for x in xrange(len(self.unpack_info[key])): - if set in self.unpack_info[key][x]: - self.unpack_info[key][x] = msg - found = True - if not found: - self.unpack_info[key].append(msg) - else: - self.unpack_info[key] = [msg] - - def get_unpack_info(self): - return self.unpack_info - - def set_action_line(self, action, msg): - if action and msg: - self.action_line = '%s: %s' % (action, msg) - else: - self.action_line = '' - - def get_action_line(self): - return self.action_line - - def set_fail_msg(self, msg): - self.fail_msg = msg - - def get_fail_msg(self): - return self.fail_msg - - def set_nzo_info(self, key, value): - self.nzo_info[key] = value - - def get_nzo_info(self): - return self.nzo_info - - def set_db_info(self, key, msg): - self.nzo_info[key] = msg - - def get_repair_opts(self): - return self.__repair, self.__unpack, self.__delete - - def get_pp(self): - if self.__repair is None: - return None - else: - return sabnzbd.opts_to_pp(self.__repair, self.__unpack, self.__delete) - - def get_script(self): - return self.__script - - def get_cat(self): - return self.__cat - - def get_future(self): - return self.__url - - def get_md5pack(self, name): - try: - return self.md5packs[name] - except: - return None - - def set_md5pack(self, name, pack): - self.md5packs[name] = pack - - def __build_pos_nzf_table(self, nzf_ids): - pos_nzf_table = {} - for nzf_id in nzf_ids: - if nzf_id in self.__files_table: - nzf = self.__files_table[nzf_id] - pos = self.__files.index(nzf) - pos_nzf_table[pos] = nzf - - return pos_nzf_table - - def __cleanup_nzf_ids(self, nzf_ids): - for nzf_id in nzf_ids[:]: - if nzf_id in self.__files_table: - if self.__files_table[nzf_id] not in self.__files: - nzf_ids.remove(nzf_id) - else: - nzf_ids.remove(nzf_id) - - def __getstate__(self): - odict = self.__dict__.copy() - del odict['_TryList__try_list'] - return odict - - def __setstate__(self, _dict): - self.__dict__.update(_dict) - TryList.__init__(self) - - def __repr__(self): - return "" % self.__filename - -#------------------------------------------------------------------------------- - -def _nzf_get_filename(nzf): - # Return filename, if the filename not set, try the - # the full subject line instead. Can produce non-ideal results - name = nzf.get_filename() - if name: - return name.lower() - else: - return nzf.get_subject().lower() - - -def _nzf_cmp_date(nzf1, nzf2): - # Compare files based on date, but give vol-par files preference - return _nzf_cmp_name(nzf1, nzf2, name=False) - - -def _nzf_cmp_name(nzf1, nzf2, name=True): - # The comparison will sort .par2 files to the top of the queue followed by .rar files, - # they will then be sorted by name. - name1 = _nzf_get_filename(nzf1) - name2 = _nzf_get_filename(nzf2) - - is_par1 = 'vol' in name1 and '.par2' in name1 - is_par2 = 'vol' in name2 and '.par2' in name2 - if is_par1 and not is_par2: - return -1 - if is_par2 and not is_par1: - return 1 - - if name: - # Prioritise .rar files above any other type of file (other than vol-par) - # Useful for nzb streaming - if '.rar' in name1 and not is_par2 and '.rar' not in name2: - return -1 - elif '.rar' in name2 and not is_par1 and '.rar' not in name1: - return 1 - - return cmp(name1, name2) - else: - # Do date comparision - return cmp(nzf1.get_date(), nzf2.get_date()) - -#------------------------------------------------------------------------------- - -################################################################################ -# SplitFileName -# -# Isolate newzbin msgid from filename and remove ".nzb" -# Return (nice-name, msg-id) -################################################################################ -def SplitFileName(name): - name = name.strip() - if name.find('://') < 0: - m = RE_NEWZBIN.match(name) - if (m): - return m.group(2).rstrip('.').strip(), m.group(1) - m = RE_NORMAL.match(name) - if (m): - return m.group(1).rstrip('.').strip(), "" - else: - return name.strip(), "" - return "", "" - else: - return name.strip(), "" - - -def format_time_string(seconds, days=0): - - try: - seconds = int(seconds) - except: - seconds = 0 - - completestr = '' - if days: - completestr += '%s day%s ' % (days, s_returner(days)) - if (seconds/3600) >= 1: - completestr += '%s hour%s ' % (seconds/3600, s_returner((seconds/3600))) - seconds -= (seconds/3600)*3600 - if (seconds/60) >= 1: - completestr += '%s minute%s ' % (seconds/60, s_returner((seconds/60))) - seconds -= (seconds/60)*60 - if seconds > 0: - completestr += '%s second%s ' % (seconds, s_returner(seconds)) - - return completestr.strip() - -def s_returner(value): - if value > 1: - return 's' - else: - return '' - - -RE_PASSWORD1 = re.compile(r'([^/\\]+)[/\\](.+)') -RE_PASSWORD2 = re.compile(r'(.+){{([^{}]+)}}$') -def scan_password(name): - """ Get password (if any) from the title - """ - if 'http://' in name or 'https://' in name: - return name, None - - m = RE_PASSWORD1.search(name) - if not m: - m = RE_PASSWORD2.search(name) - if m: - return m.group(1).strip('. '), m.group(2).strip() - else: - return name.strip('. '), None diff --git a/main/sabnzbd/postproc.py b/main/sabnzbd/postproc.py deleted file mode 100644 index 9ca8503..0000000 --- a/main/sabnzbd/postproc.py +++ /dev/null @@ -1,627 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.postproc - threaded post-processing of jobs -""" -#------------------------------------------------------------------------------ - -import os -import Queue -import logging -import sabnzbd -import urllib -import time -import re - -from sabnzbd.newsunpack import unpack_magic, par2_repair, external_processing -from threading import Thread -from sabnzbd.misc import real_path, get_unique_path, create_dirs, move_to_path, \ - get_unique_filename, \ - on_cleanup_list, renamer, remove_dir -from sabnzbd.tvsort import Sorter -from sabnzbd.constants import TOP_PRIORITY, POSTPROC_QUEUE_FILE_NAME, \ - POSTPROC_QUEUE_VERSION, sample_match -from sabnzbd.codecs import TRANS, unicoder -from sabnzbd.newzbin import Bookmarks -import sabnzbd.emailer as emailer -import sabnzbd.dirscanner as dirscanner -import sabnzbd.downloader -import sabnzbd.config as config -import sabnzbd.cfg as cfg -import sabnzbd.nzbqueue -import sabnzbd.database as database -from sabnzbd.utils import osx -from sabnzbd.lang import T, Ta - - -#------------------------------------------------------------------------------ -class PostProcessor(Thread): - do = None # Link to instance of the thread - - def __init__ (self, queue=None, history_queue=None): - Thread.__init__(self) - - # This history queue is simply used to log what active items to display in the web_ui - if history_queue: - self.history_queue = history_queue - else: - self.load() - - if self.history_queue is None: - self.history_queue = [] - - if queue: - self.queue = queue - else: - self.queue = Queue.Queue() - for nzo in self.history_queue: - self.process(nzo) - self.__stop = False - self.__paused = False - PostProcessor.do = self - - self.__busy = False # True while a job is being processed - - def save(self): - """ Save postproc queue """ - logging.info("Saving postproc queue") - sabnzbd.save_data((POSTPROC_QUEUE_VERSION, self.history_queue), POSTPROC_QUEUE_FILE_NAME) - - def load(self): - """ Save postproc queue """ - logging.info("Loading postproc queue") - data = sabnzbd.load_data(POSTPROC_QUEUE_FILE_NAME) - try: - version, history_queue = data - if POSTPROC_QUEUE_VERSION != version: - logging.warning(Ta('warn-badPPQueue@2'), POSTPROC_QUEUE_VERSION, version) - if isinstance(history_queue, list): - self.history_queue = history_queue - return True - else: - self.history_queue = [] - return False - except: - self.history_queue = [] - return False - - - def process(self, nzo): - if nzo not in self.history_queue: - self.history_queue.append(nzo) - self.queue.put(nzo) - self.save() - - def remove(self, nzo): - try: - self.history_queue.remove(nzo) - except: - nzo_id = getattr(nzo, 'nzo_id', 'unknown id') - logging.error(Ta('error-ppDelNzo'), nzo_id) - self.save() - - def stop(self): - self.queue.put(None) - self.save() - self.__stop = True - - def empty(self): - return self.queue.empty() and not self.__busy - - def get_queue(self): - return self.history_queue - - def pause(self): - self.__paused = True - - def resume(self): - self.__paused = False - - def status(self): - return self.__paused - - def run(self): - while 1: - self.__busy = False - if self.queue.empty(): HandleEmptyQueue() - - while (not self.__stop) and self.__paused: - time.sleep(5) - - ## Get a job from the queue, quit on empty job - nzo = self.queue.get() - if not nzo: break - - ## Pause downloader, if users wants that - if cfg.pause_on_post_processing(): - sabnzbd.downloader.idle_downloader() - - self.__busy = True - start = time.time() - - folder_rename = cfg.folder_rename() - - # keep track of if par2 fails - parResult = True - # keep track of any unpacking errors - unpackError = False - nzb_list = [] - # These need to be initialised incase of a crash - workdir_complete = '' - base_dir = '' - rel_path = '' - postproc_time = 0 - script_log = '' - script_line = '' - - ## Get the job flags - flagRepair, flagUnpack, flagDelete = nzo.get_repair_opts() - pp = sabnzbd.opts_to_pp(flagRepair, flagUnpack, flagDelete) - script = nzo.get_script() - group = nzo.get_group() - cat = nzo.get_cat() - priority = nzo.get_priority() - - ## Collect the par files - parTable = nzo.get_partable() - repairSets = parTable.keys() - - # Get the NZB name - filename = nzo.get_dirname() - msgid = nzo.get_msgid() - - try: - - # Get the folder containing the download result - workdir = os.path.join(cfg.download_dir.get_path(), nzo.get_dirname()) - - # if the directory has not been made, no files were assembled - if not os.path.exists(workdir): - emsg = T('warn-OutRetention') - nzo.set_fail_msg(emsg) - nzo.set_status('Failed') - # do not run unpacking or parity verification - flagRepair = flagUnpack = parResult = False - unpackError = True - - logging.info('Starting PostProcessing on %s' + \ - ' => Repair:%s, Unpack:%s, Delete:%s, Script:%s', - filename, flagRepair, flagUnpack, flagDelete, script) - osx.sendGrowlMsg("Post-processing",filename,osx.NOTIFICATION['pp']) - ## Run Stage 1: Repair - if flagRepair: - logging.info('Par2 check starting on %s', filename) - reAdd = False - if not repairSets: - logging.info("No par2 sets for %s", filename) - nzo.set_unpack_info('Repair',T('msg-noParSets@1') % unicoder(filename)) - - for _set in repairSets: - logging.info("Running repair on set %s", _set) - parfile_nzf = parTable[_set] - need_reAdd, res = par2_repair(parfile_nzf, nzo, workdir, _set) - if need_reAdd: - reAdd = True - else: - parResult = parResult and res - - if reAdd: - logging.info('Readded %s to queue', filename) - sabnzbd.QUEUECOMPLETEACTION_GO = False - nzo.set_priority(TOP_PRIORITY) - sabnzbd.nzbqueue.add_nzo(nzo) - sabnzbd.downloader.unidle_downloader() - ## Break out, further downloading needed - continue - - logging.info('Par2 check finished on %s', filename) - - mailResult = parResult - jobResult = 1 - if parResult: jobResult = 0 - - ## Check if user allows unsafe post-processing - if not cfg.safe_postproc(): - parResult = True - - ## Determine class directory - if config.get_categories(): - complete_dir = Cat2Dir(cat, cfg.complete_dir.get_path()) - elif cfg.create_group_folders(): - complete_dir = addPrefixes(cfg.complete_dir.get_path(), nzo) - complete_dir = create_dirs(complete_dir) - else: - complete_dir = cfg.complete_dir.get_path() - base_dir = os.path.normpath(complete_dir) - - ## Determine destination directory - dirname = nzo.get_original_dirname() - nzo.set_dirname(dirname) - - ## TV/Movie/Date Renaming code part 1 - detect and construct paths - file_sorter = Sorter(cat) - complete_dir = file_sorter.detect(dirname, complete_dir) - - workdir_complete = get_unique_path(os.path.join(complete_dir, dirname), create_dir=True) - if folder_rename: - tmp_workdir_complete = prefix(workdir_complete, '_UNPACK_') - try: - renamer(workdir_complete, tmp_workdir_complete) - except: - pass # On failure, just use the original name - else: - tmp_workdir_complete = workdir_complete - - newfiles = [] - ## Run Stage 2: Unpack - if flagUnpack: - if parResult: - #set the current nzo status to "Extracting...". Used in History - nzo.set_status('Extracting') - logging.info("Running unpack_magic on %s", filename) - unpackError, newfiles = unpack_magic(nzo, workdir, tmp_workdir_complete, flagDelete, (), (), (), ()) - logging.info("unpack_magic finished on %s", filename) - else: - nzo.set_unpack_info('Unpack',T('msg-noPostProc')) - - ## Move any (left-over) files to destination - nzo.set_status('Moving') - nzo.set_action_line(T('msg-moving'), '...') - for root, dirs, files in os.walk(workdir): - for _file in files: - path = os.path.join(root, _file) - new_path = path.replace(workdir, tmp_workdir_complete) - new_path = get_unique_filename(new_path) - move_to_path(path, new_path, unique=False) - - ## Remove download folder - try: - if os.path.exists(workdir): - remove_dir(workdir) - except: - logging.error(Ta('error-ppDelWorkdir@1'), workdir) - logging.debug("Traceback: ", exc_info = True) - - - ## Set permissions right - if not sabnzbd.WIN32: - perm_script(tmp_workdir_complete, cfg.umask()) - - if parResult: - ## Remove files matching the cleanup list - CleanUpList(tmp_workdir_complete, True) - - ## Check if this is an NZB-only download, if so redirect to queue - nzb_list = NzbRedirect(tmp_workdir_complete, pp, script, cat, priority=priority) - if nzb_list: - nzo.set_unpack_info('Download', T('msg-sentToQ@1') % unicoder(nzb_list)) - try: - remove_dir(tmp_workdir_complete) - except: - pass - else: - CleanUpList(tmp_workdir_complete, False) - - if not nzb_list: - ## Give destination its final name - if folder_rename: - if unpackError or not parResult: - workdir_complete = tmp_workdir_complete.replace('_UNPACK_', '_FAILED_') - workdir_complete = get_unique_path(workdir_complete, n=0, create_dir=False) - try: - renamer(tmp_workdir_complete, workdir_complete) - nzo.set_dirname(os.path.basename(workdir_complete)) - except: - logging.error(Ta('error-ppRename@2'), tmp_workdir_complete, workdir_complete) - logging.debug("Traceback: ", exc_info = True) - - if unpackError: jobResult = jobResult + 2 - - if cfg.ignore_samples() > 0: - remove_samples(workdir_complete) - - ## TV/Movie/Date Renaming code part 2 - rename and move files to parent folder - if not unpackError or parResult: - if newfiles and file_sorter.is_sortfile(): - file_sorter.rename(newfiles, workdir_complete) - workdir_complete = file_sorter.move(workdir_complete) - - ## Run the user script - fname = "" - if parResult and (not nzb_list) and cfg.script_dir.get_path() and script and script!='None' and script!='Default': - #set the current nzo status to "Ext Script...". Used in History - script_path = os.path.join(cfg.script_dir.get_path(), script) - if os.path.exists(script_path): - nzo.set_status('Running') - nzo.set_action_line(T('msg-running'), unicoder(script)) - nzo.set_unpack_info('Script', T('msg-runScript@1') % unicoder(script), unique=True) - script_log, script_ret = external_processing(script_path, workdir_complete, nzo.get_filename(), msgid, dirname, cat, group, jobResult) - script_line = get_last_line(script_log) - if script_log: - fname = nzo.get_nzo_id() - if script_line: - nzo.set_unpack_info('Script', script_line, unique=True) - else: - nzo.set_unpack_info('Script', T('msg-ranScript@1') % unicoder(script), unique=True) - else: - script = "" - script_line = "" - script_ret = 0 - - ## Email the results - if (not nzb_list) and cfg.email_endjob(): - if (cfg.email_endjob() == 1) or (cfg.email_endjob() == 2 and (unpackError or not parResult)): - emailer.endjob(dirname, msgid, cat, mailResult, workdir_complete, nzo.get_bytes_downloaded(), - nzo.get_unpack_info(), script, TRANS(script_log), script_ret) - - if fname: - # Can do this only now, otherwise it would show up in the email - if script_ret: - script_ret = 'Exit(%s) ' % script_ret - else: - script_ret = '' - if script_line: - nzo.set_unpack_info('Script','%s%s (%s)' % (script_ret, script_line, urllib.quote(fname), T('link-more')), unique=True) - else: - nzo.set_unpack_info('Script','%s%s' % (script_ret, urllib.quote(fname), T('link-viewSc')), unique=True) - - ## Remove newzbin bookmark, if any - if msgid: - Bookmarks.do.del_bookmark(msgid) - - ## Show final status in history - if parResult and not unpackError: - osx.sendGrowlMsg("Download Completed",filename,osx.NOTIFICATION['complete']) - nzo.set_status('Completed') - else: - osx.sendGrowlMsg("Download Failed",filename,osx.NOTIFICATION['complete']) - nzo.set_status('Failed') - - except: - #Cause a crash when reparing par2 sets with accents - #try: - logging.error(Ta('error-ppFailed@1'), filename) - #except: - # pass - logging.debug("Traceback: ", exc_info = True) - nzo.set_fail_msg(T('warn-PostCrash')) - osx.sendGrowlMsg("Download Failed",filename,osx.NOTIFICATION['complete']) - nzo.set_status('Failed') - - # If the folder only contains one file OR folder, have that as the path - # Be aware that series/generic/date sorting may move a single file into a folder containing other files - workdir_complete = one_file_or_folder(workdir_complete) - workdir_complete = os.path.normpath(workdir_complete) - - # Create a relative path removing the complete_dir folder or category folder - rel_path = os.path.normpath(workdir_complete).replace(base_dir, '') - - # Log the overall time taken for postprocessing - postproc_time = int(time.time() - start) - - # Create the history DB instance - history_db = database.get_history_handle() - # Add the nzo to the database. Only the path, script and time taken is passed - # Other information is obtained from the nzo - history_db.add_history_db(nzo, workdir_complete, rel_path, postproc_time, script_log, script_line) - # The connection is only used once, so close it here - history_db.close() - - ## Clean up the NZO - try: - logging.info('Cleaning up %s', filename) - sabnzbd.nzbqueue.cleanup_nzo(nzo) - except: - logging.error(Ta('error-ppCleanup@1'), nzo.get_dirname()) - logging.debug("Traceback: ", exc_info = True) - - # Remove the nzo from the history_queue list - # This list is simply used for the creation of the history in interface.py - self.remove(nzo) - - ## Allow download to proceed - sabnzbd.downloader.unidle_downloader() -#end post-processor - - -#------------------------------------------------------------------------------ - -def MakeLogFile(name, content): - """ Write 'content' to a logfile named 'name'.log """ - name = name.replace('.nzb', '.log') - path = os.path.dirname(sabnzbd.LOGFILE) - path = os.path.join(path, name) - try: - f = open(path, "w") - except: - logging.error(Ta('error-ppLogFile@1'), path) - logging.debug("Traceback: ", exc_info = True) - return "a" - f.write(content) - f.close() - return name - - -def perm_script(wdir, umask): - """ Give folder tree and its files their proper permissions """ - from os.path import join - - try: - # Make sure that user R is on - umask = int(umask, 8) | int('0400', 8) - report_errors = True - except ValueError: - # No or no valid permissions - # Use the effective permissions of the session - # Don't report errors (because the system might not support it) - umask = int('0777', 8) & (sabnzbd.ORG_UMASK ^ int('0777', 8)) - report_errors = False - - # Remove X bits for files - umask_file = umask & int('7666', 8) - - # Parse the dir/file tree and set permissions - for root, dirs, files in os.walk(wdir): - try: - os.chmod(root, umask) - except: - if report_errors: - logging.error(Ta('error-ppPermissions@1'), root) - logging.debug("Traceback: ", exc_info = True) - for name in files: - try: - os.chmod(join(root, name), umask_file) - except: - if report_errors: - logging.error(Ta('error-ppPermissions@1'), join(root, name)) - logging.debug("Traceback: ", exc_info = True) - - -def Cat2Dir(cat, defdir): - """ Lookup destination dir for category """ - ddir = defdir - if cat: - item = config.get_config('categories', cat.lower()) - if item: - ddir = item.dir() - else: - return defdir - ddir = real_path(cfg.complete_dir.get_path(), ddir) - ddir = create_dirs(ddir) - if not ddir: - ddir = defdir - return ddir - - - - -def addPrefixes(path,nzo): - dirprefix = nzo.get_dirprefix() - for _dir in dirprefix: - if not _dir: - continue - if not path: - break - basepath = os.path.basename(os.path.abspath(path)) - if _dir != basepath.lower(): - path = os.path.join(path, _dir) - return path - - -def HandleEmptyQueue(): - """ Check if empty queue calls for action """ - sabnzbd.save_state() - - if sabnzbd.QUEUECOMPLETEACTION_GO: - logging.info("Queue has finished, launching: %s (%s)", \ - sabnzbd.QUEUECOMPLETEACTION, sabnzbd.QUEUECOMPLETEARG) - if sabnzbd.QUEUECOMPLETEARG: - sabnzbd.QUEUECOMPLETEACTION(sabnzbd.QUEUECOMPLETEARG) - else: - Thread(target=sabnzbd.QUEUECOMPLETEACTION).start() - - sabnzbd.QUEUECOMPLETEACTION = None - sabnzbd.QUEUECOMPLETEARG = None - sabnzbd.QUEUECOMPLETEACTION_GO = False - - -def CleanUpList(wdir, skip_nzb): - """ Remove all files matching the cleanup list """ - - if cfg.cleanup_list(): - try: - files = os.listdir(wdir) - except: - files = () - for _file in files: - if on_cleanup_list(_file, skip_nzb): - path = os.path.join(wdir, _file) - try: - logging.info("Removing unwanted file %s", path) - os.remove(path) - except: - logging.error(Ta('error-ppDelFailed@1'), path) - logging.debug("Traceback: ", exc_info = True) - - -def prefix(path, pre): - """ Apply prefix to last part of path """ - p, d = os.path.split(path) - return os.path.join(p, pre + d) - - -def NzbRedirect(wdir, pp, script, cat, priority): - """ Check if this job contains only NZB files, - if so send to queue and remove if on CleanList - Returns list of processed NZB's - """ - list = [] - - try: - files = os.listdir(wdir) - except: - files = [] - - for file in files: - if os.path.splitext(file)[1].lower() != '.nzb': - return list - - # Process all NZB files - keep = not on_cleanup_list("x.nzb", False) - for file in files: - if file.lower().endswith('.nzb'): - dirscanner.ProcessSingleFile(file, os.path.join(wdir, file), pp, script, cat, priority=priority, keep=keep) - list.append(file) - - return list - - -def one_file_or_folder(dir): - """ If the dir only contains one file or folder, join that file/folder onto the path """ - if os.path.exists(dir) and os.path.isdir(dir): - cont = os.listdir(dir) - if len(cont) == 1: - dir = os.path.join(dir, cont[0]) - dir = one_file_or_folder(dir) - return dir - - -def get_last_line(txt): - """ Return last non-empty line of a text, trim to 150 max """ - lines = txt.split('\n') - n = len(lines) - 1 - while n >= 0 and not lines[n].strip('\r\t '): - n = n - 1 - - line = lines[n].strip('\r\t ') - if len(line) >= 150: - line = line[:147] + '...' - return line - -def remove_samples(path): - RE_SAMPLE = re.compile(sample_match, re.I) - for root, dirs, files in os.walk(path): - for _file in files: - if RE_SAMPLE.search(_file): - path = os.path.join(root, _file) - try: - logging.info("Removing unwanted sample file %s", path) - os.remove(path) - except: - logging.error(Ta('error-ppDelFailed@1'), path) - logging.debug("Traceback: ", exc_info = True) diff --git a/main/sabnzbd/rss.py b/main/sabnzbd/rss.py deleted file mode 100644 index e91f33f..0000000 --- a/main/sabnzbd/rss.py +++ /dev/null @@ -1,513 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.rss - rss client functionality -""" - -import re -import logging -import time -import threading - -import sabnzbd -from sabnzbd.constants import * -from sabnzbd.decorators import synchronized -import sabnzbd.config as config -import sabnzbd.cfg as cfg -from sabnzbd.misc import cat_convert, sanitize_foldername, wildcard_to_re -import sabnzbd.emailer as emailer -from sabnzbd.codecs import latin1, unicoder - -import sabnzbd.utils.feedparser as feedparser -from sabnzbd.lang import T, Ta - -__RSS = None # Global pointer to RSS-scanner instance - - -################################################################################ -# Wrapper functions # -################################################################################ - -def init(): - global __RSS - __RSS = RSSQueue() - -def stop(): - global __RSS - if __RSS: - __RSS.stop() - try: - __RSS.join() - except: - pass - -def del_feed(feed): - global __RSS - if __RSS: __RSS.delete(feed) - -def run_feed(feed, download, ignoreFirst=False, force=False): - global __RSS - if __RSS: return __RSS.run_feed(feed, download, ignoreFirst, force=force) - -def show_result(feed): - global __RSS - if __RSS: return __RSS.show_result(feed) - -def flag_downloaded(feed, id): - global __RSS - if __RSS: __RSS.flag_downloaded(feed, id) - -def run_method(): - global __RSS - if __RSS: - return __RSS.run() - else: - return None - -def save(): - global __RSS - if __RSS: __RSS.save() - -def clear_feed(feed): - global __RSS - if __RSS: __RSS.clear_feed(feed) - -################################################################################ - -def notdefault(item): - """ Return True if not None/"None"/"Default"/"" - """ - return bool(item) and item.lower() not in ('default', 'none') - - -def ListUris(): - """ Return list of all RSS uris """ - uris = [] - for uri in config.get_rss(): - uris.append(uri) - return uris - -def convert_filter(text): - """ Return compiled regex. - If string starts with re: it's a real regex - else quote all regex specials, replace '*' by '.*' - """ - if text[:3].lower() == 're:': - txt = text[3:] - else: - txt = wildcard_to_re(text) - try: - return re.compile(txt, re.I) - except: - logging.error(Ta('error-rssRegex@1'), text) - return None - - -LOCK = threading.RLock() -class RSSQueue: - def __init__(self): - self.jobs = {} - try: - feeds = sabnzbd.load_data(RSS_FILE_NAME, remove = False) - if type(feeds) == type({}): - for feed in feeds: - self.jobs[feed] = {} - for link in feeds[feed]: - data = feeds[feed][link] - if type(data) == type([]): - # Convert previous list-based store to dictionary - new = {} - new['status'] = data[0] - new['title'] = data[1] - new['url'] = data[2] - new['cat'] = data[3] - new['pp'] = data[4] - new['script'] = data[5] - new['time'] = data[6] - new['prio'] = str(NORMAL_PRIORITY) - self.jobs[feed][link] = new - else: - self.jobs[feed][link] = feeds[feed][link] - except IOError: - pass - # jobs is a NAME-indexed dictionary - # Each element is link-indexed dictionary - # Each element is another dictionary: - # status : 'D', 'G', 'B', 'X' (downloaded, good-match, bad-match, obsolete) - # '*' added means: from the initial batch - # title : Title - # url : URL or MsgId - # cat : category - # pp : pp - # script : script - # prio : priority - # time : timestamp (used for time-based clean-up) - # order : order in the RSS feed - - self.shutdown = False - self.__running = False - - def stop(self): - self.shutdown = True - - @synchronized(LOCK) - def run_feed(self, feed=None, download=False, ignoreFirst=False, force=False): - """ Run the query for one URI and apply filters """ - self.shutdown = False - - def dup_title(title): - title = title.lower() - for fd in self.jobs: - for lk in self.jobs[fd]: - item = self.jobs[fd][lk] - if item.get('status', ' ')[0] == 'D' and \ - item.get('title', '').lower() == title: - return True - return False - - - if not feed: - return 'No such feed' - - newlinks = [] - new_downloads = [] - - # Preparations, get options - try: - feeds = config.get_rss()[feed] - except KeyError: - logging.error(Ta('error-rssBadFeed@1'), feed) - logging.debug("Traceback: ", exc_info = True) - return T('error-rssBadFeed@1') % feed - - uri = feeds.uri() - defCat = feeds.cat() - if defCat == "": - defCat = None - defPP = feeds.pp() - defScript = feeds.script() - defPriority = feeds.priority() - - # Preparations, convert filters to regex's - regexes = [] - reTypes = [] - reCats = [] - rePPs = [] - reScripts = [] - for filter in feeds.filters(): - reCat = filter[0] - if not reCat: - reCat = None - reCats.append(reCat) - rePPs.append(filter[1]) - reScripts.append(filter[2]) - reTypes.append(filter[3]) - regexes.append(convert_filter(filter[4])) - regcount = len(regexes) - - # Set first if this is the very first scan of this URI - first = feed not in self.jobs - if first: - self.jobs[feed] = {} - - jobs = self.jobs[feed] - - first = first and ignoreFirst - - # Add sabnzbd's custom User Agent - feedparser.USER_AGENT = 'SABnzbd+/%s' % sabnzbd.version.__version__ - - # Check for nzbs.org - if 'nzbs.org/' in uri and not ('&dl=1' in uri): - uri += '&dl=1' - - # Read the RSS feed - logging.debug("Running feedparser on %s", uri) - d = feedparser.parse(uri.replace('feed://', 'http://')) - logging.debug("Done parsing %s", uri) - if not d: - logging.info(Ta('warn-failRSS@1'), uri) - return T('warn-failRSS@1') % uri - - entries = d.get('entries') - if 'bozo_exception' in d and not entries: - logging.info(Ta('warn-failRSS@2'), uri, str(d['bozo_exception'])) - return T('warn-failRSS@2') % (uri, str(d['bozo_exception'])) - if not entries: - logging.info('RSS Feed was empty: %s', uri) - return 'RSS Feed was empty' - - order = 0 - # Filter out valid new links - for entry in entries: - if self.shutdown: return - - try: - link, category = _get_link(uri, entry) - except (AttributeError, IndexError): - link = None - category = '' - logging.error('Incompatible feed %s', uri) - logging.debug("Traceback: ", exc_info = True) - return 'Incompatible feed' - - if link: - # Make sure there are no spaces in the URL - link = link.replace(' ','') - - # Make sure only latin-1 encodable characters occur - atitle = latin1(entry.title) - title = unicoder(atitle) - - newlinks.append(link) - - if cfg.no_dupes() and dup_title(title): - logging.info("Ignoring duplicate job %s", atitle) - continue - - myCat = defCat - myPP = '' - myScript = '' - #myPriority = 0 - - if (link not in jobs) or (jobs[link]['status'] in ('G', 'B', 'G*', 'B*')): - # Match this title against all filters - logging.debug('Trying title %s', atitle) - result = False - for n in xrange(regcount): - if category and reTypes[n]=='C': - found = re.search(regexes[n], category) - if not found: - logging.debug("Filter rejected on rule %d", n) - result = False - break - - found = re.search(regexes[n], title) - if reTypes[n]=='M' and not found: - logging.debug("Filter rejected on rule %d", n) - result = False - break - if found and reTypes[n]=='A': - logging.debug("Filter matched on rule %d", n) - result = True - if notdefault(reCats[n]): - myCat = reCats[n] - elif category: - myCat = cat_convert(category) - else: - myCat = defCat - if notdefault(rePPs[n]): - myPP = rePPs[n] - elif not (reCats[n] or category): - myPP = defPP - if notdefault(reScripts[n]): - myScript = reScripts[n] - elif not (notdefault(reCats[n]) or category): - myScript = defScript - #elif not rePriority[n]: - #myScript = defScript - break - if found and reTypes[n]=='R': - logging.debug("Filter rejected on rule %d", n) - result = False - break - - act = download and not first - if link in jobs: - act = act and not jobs[link]['status'].endswith('*') - act = act or force - star = first or jobs[link]['status'].endswith('*') - else: - star = first - if result: - _HandleLink(jobs, link, title, 'G', myCat, myPP, myScript, - act, star, order, priority=defPriority) - if act: - new_downloads.append(title) - else: - _HandleLink(jobs, link, title, 'B', defCat, defPP, defScript, - False, star, order, priority=defPriority) - order += 1 - - # Send email if wanted and not "forced" - if new_downloads and cfg.email_rss() and not force: - emailer.rss_mail(feed, new_downloads) - - # If links are in table for more than 4 weeks, remove - # Flag old D/B links as obsolete, so that they don't show up in Preview - now = time.time() - limit = now - 4*7*24*3600 - olds = jobs.keys() - for old in olds: - if old not in newlinks: - if jobs[old]['status'][0] in ('G', 'B'): - jobs[old]['status'] = 'X' - try: - tm = float(jobs[old]['time']) - except: - # Fix missing timestamp in older RSS_DATA.SAB file - jobs[old]['time'] = now - tm = now - if tm < limit: - logging.debug("Purging link %s", old) - del jobs[old] - - return '' - - def run(self): - """ Run all the URI's and filters """ - # Protect against second scheduler call before current - # run is completed. Cannot use LOCK, because run_feed - # already uses the LOCK. - - if not (self.__running or sabnzbd.PAUSED_ALL): - self.__running = True - active = False - feeds = config.get_rss() - for feed in feeds: - if feeds[feed].enable(): - active = True - self.run_feed(feed, download=True, ignoreFirst=True) - # Wait 30 seconds, else sites may get irritated - for x in xrange(30): - if self.shutdown: - self.__running = False - return - else: - time.sleep(1.0) - if active: - self.save() - self.__running = False - - - @synchronized(LOCK) - def show_result(self, feed): - if feed in self.jobs: - try: - return self.jobs[feed] - except: - return {} - else: - return {} - - @synchronized(LOCK) - def save(self): - sabnzbd.save_data(self.jobs, sabnzbd.RSS_FILE_NAME) - - @synchronized(LOCK) - def delete(self, feed): - if feed in self.jobs: - del self.jobs[feed] - - @synchronized(LOCK) - def flag_downloaded(self, feed, id): - if feed in self.jobs: - lst = self.jobs[feed] - for link in lst: - if lst[link].get('url', '') == id: - lst[link]['status'] = 'D' - - @synchronized(LOCK) - def clear_feed(self, feed): - # Remove any previous references to this feed name, and start fresh - if feed in self.jobs: - del self.jobs[feed] - - -RE_NEWZBIN = re.compile(r'(newz)(bin|xxx).com/browse/post/(\d+)', re.I) - -def _HandleLink(jobs, link, title, flag, cat, pp, script, download, star, order, priority=NORMAL_PRIORITY): - """ Process one link """ - if script=='': script = None - if pp=='': pp = None - - jobs[link] = {} - jobs[link]['order'] = order - nzbname = sanitize_foldername(title) - m = RE_NEWZBIN.search(link) - if m and m.group(1).lower() == 'newz' and m.group(2) and m.group(3): - if download: - jobs[link]['status'] = 'D' - jobs[link]['title'] = title - logging.info("Adding %s (%s) to queue", m.group(3), title) - sabnzbd.add_msgid(m.group(3), pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname) - else: - if star: - jobs[link]['status'] = flag + '*' - else: - jobs[link]['status'] = flag - jobs[link]['title'] = title - jobs[link]['url'] = m.group(3) - jobs[link]['cat'] = cat - jobs[link]['pp'] = pp - jobs[link]['script'] = script - jobs[link]['prio'] = str(priority) - else: - if download: - jobs[link]['status'] = 'D' - jobs[link]['title'] = title - logging.info("Adding %s (%s) to queue", link, title) - sabnzbd.add_url(link, pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname) - else: - if star: - jobs[link]['status'] = flag + '*' - else: - jobs[link]['status'] = flag - jobs[link]['title'] = title - jobs[link]['url'] = link - jobs[link]['cat'] = cat - jobs[link]['pp'] = pp - jobs[link]['script'] = script - jobs[link]['prio'] = str(priority) - - jobs[link]['time'] = time.time() - - -def _get_link(uri, entry): - """ Retrieve the post link from this entry - Returns (link, category) - """ - link = None - category = '' - uri = uri.lower() - if 'newzbin.com' in uri or 'newzxxx.com'in uri: - link = entry.link - if not (link and '/post/' in link.lower()): - # Use alternative link - link = entry.links[0].href - elif 'nzbindex.nl' in uri or 'nzbindex.com' in uri or 'animeusenet.org' in uri: - link = entry.enclosures[0]['href'] - elif 'feed.nzbclub.com' in uri: - link = entry.link - if link: - link = link.replace('nzb_view.aspx', 'nzb_download.aspx') - elif not link: - # Try standard link first - link = entry.link - if not link: - link = entry.links[0].href - - if link and 'http' in link.lower(): - try: - category = entry.category - except: - category = '' - return link, category - else: - logging.warning(Ta('warn-emptyRSS@1'), link) - return None, '' diff --git a/main/sabnzbd/scheduler.py b/main/sabnzbd/scheduler.py deleted file mode 100644 index 3bd676a..0000000 --- a/main/sabnzbd/scheduler.py +++ /dev/null @@ -1,406 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.scheduler - Event Scheduler -""" -#------------------------------------------------------------------------------ - - -import random -import logging -import time - -import sabnzbd.utils.kronos as kronos -import sabnzbd.rss as rss -from sabnzbd.newzbin import Bookmarks -import sabnzbd.downloader -import sabnzbd.misc -import sabnzbd.config as config -import sabnzbd.cfg as cfg -from sabnzbd.postproc import PostProcessor -from sabnzbd.lang import Ta - - -__SCHED = None # Global pointer to Scheduler instance - -RSSTASK_MINUTE = random.randint(0, 59) -SCHEDULE_GUARD_FLAG = False - - -def schedule_guard(): - """ Set flag for scheduler restart """ - global SCHEDULE_GUARD_FLAG - SCHEDULE_GUARD_FLAG = True - -def pp_pause(): - PostProcessor.do.pause() - -def pp_resume(): - PostProcessor.do.resume() - - -def init(): - """ Create the scheduler and set all required events - """ - global __SCHED - - reset_guardian() - __SCHED = kronos.ThreadedScheduler() - - for schedule in cfg.schedules(): - arguments = [] - argument_list = None - try: - m, h, d, action_name = schedule.split() - except: - m, h, d, action_name, argument_list = schedule.split(None, 4) - if argument_list: - arguments = argument_list.split() - - action_name = action_name.lower() - try: - m = int(m) - h = int(h) - except: - logging.warning(Ta('warn-badSched@3'), action_name, m, h) - continue - - if d.isdigit(): - d = [int(d)] - else: - d = range(1, 8) - - if action_name == 'resume': - action = scheduled_resume - arguments = [] - elif action_name == 'pause': - action = sabnzbd.downloader.pause_downloader - arguments = [] - elif action_name == 'pause_all': - action = sabnzbd.pause_all - arguments = [] - elif action_name == 'shutdown': - action = sabnzbd.shutdown_program - arguments = [] - elif action_name == 'restart': - action = sabnzbd.restart_program - arguments = [] - elif action_name == 'pause_post': - action = pp_pause - elif action_name == 'resume_post': - action = pp_resume - elif action_name == 'speedlimit' and arguments != []: - action = sabnzbd.downloader.limit_speed - elif action_name == 'enable_server' and arguments != []: - action = sabnzbd.enable_server - elif action_name == 'disable_server' and arguments != []: - action = sabnzbd.disable_server - else: - logging.warning(Ta('warn-badSchedAction@1'), action_name) - continue - - logging.debug("scheduling %s(%s) on days %s at %s:%s", action_name, arguments, d, h, m) - - __SCHED.add_daytime_task(action, action_name, d, None, (h, m), - kronos.method.sequential, arguments, None) - - # Set Guardian interval to 30 seconds - __SCHED.add_interval_task(sched_guardian, "Guardian", 15, 30, - kronos.method.sequential, None, None) - - # Set RSS check interval - interval = cfg.rss_rate() - delay = random.randint(0, interval-1) - logging.debug("Scheduling RSS interval task every %s min (delay=%s)", interval, delay) - __SCHED.add_interval_task(rss.run_method, "RSS", delay*60, interval*60, - kronos.method.sequential, None, None) - __SCHED.add_single_task(rss.run_method, 'RSS', 15, kronos.method.sequential, None, None) - - if cfg.version_check(): - # Check for new release, once per week on random time - m = random.randint(0, 59) - h = random.randint(0, 23) - d = (random.randint(1, 7), ) - - logging.debug("Scheduling VersionCheck on day %s at %s:%s", d[0], h, m) - __SCHED.add_daytime_task(sabnzbd.misc.check_latest_version, 'VerCheck', d, None, (h, m), - kronos.method.sequential, [], None) - - - if cfg.newzbin_bookmarks(): - interval = cfg.bookmark_rate() - delay = random.randint(0, interval-1) - logging.debug("Scheduling Bookmark interval task every %s min (delay=%s)", interval, delay) - __SCHED.add_interval_task(Bookmarks.do.run, 'Bookmarks', delay*60, interval*60, - kronos.method.sequential, None, None) - __SCHED.add_single_task(Bookmarks.do.run, 'Bookmarks', 20, kronos.method.sequential, None, None) - - - # Subscribe to special schedule changes - cfg.newzbin_bookmarks.callback(schedule_guard) - cfg.bookmark_rate.callback(schedule_guard) - cfg.rss_rate.callback(schedule_guard) - - -def start(): - """ Start the scheduler - """ - global __SCHED - if __SCHED: - logging.debug('Starting scheduler') - __SCHED.start() - - -def restart(force=False): - """ Stop and start scheduler - """ - global __PARMS, SCHEDULE_GUARD_FLAG - - if force: - SCHEDULE_GUARD_FLAG = True - else: - if SCHEDULE_GUARD_FLAG: - SCHEDULE_GUARD_FLAG = False - stop() - - analyse(sabnzbd.downloader.paused()) - - init() - start() - - -def stop(): - """ Stop the scheduler, destroy instance - """ - global __SCHED - if __SCHED: - logging.debug('Stopping scheduler') - __SCHED.stop() - del __SCHED - __SCHED = None - - -def abort(): - """ Emergency stop, just set the running attribute false - """ - global __SCHED - if __SCHED: - logging.debug('Terminating scheduler') - __SCHED.running = False - - -def sort_schedules(forward): - """ Sort the schedules, based on order of happening from now - forward: assume expired daily event to occur tomorrow - """ - - events = [] - now = time.localtime() - now_hm = int(now[3])*60 + int(now[4]) - now = int(now[6])*24*60 + now_hm - - for schedule in cfg.schedules(): - parms = None - try: - m, h, d, action, parms = schedule.split(None, 4) - except: - try: - m, h, d, action = schedule.split(None, 3) - except: - continue # Bad schedule, ignore - action = action.strip() - try: - then = int(h)*60 + int(m) - if d == '*': - d = int(now/(24*60)) - if forward and (then < now_hm): d = (d + 1) % 7 - else: - d = int(d)-1 - then = d*24*60 + then - except: - continue # Bad schedule, ignore - - dif = then - now - if dif < 0: dif = dif + 7*24*60 - - events.append((dif, action, parms, schedule)) - - events.sort(lambda x, y: x[0]-y[0]) - return events - - -def analyse(was_paused=False): - """ Determine what pause/resume state we would have now. - """ - paused = None - paused_all = False - pause_post = False - speedlimit = None - servers = {} - - for ev in sort_schedules(forward=False): - logging.debug('Schedule check result = %s', ev) - action = ev[1] - try: - value = ev[2] - except: - value = None - if action == 'pause': - paused = True - elif action == 'pause_all': - paused_all = True - elif action == 'resume': - paused = False - paused_all = False - elif action == 'pause_post': - pause_post = True - elif action == 'resume_post': - pause_post = False - elif action == 'speedlimit' and value!=None: - speedlimit = int(ev[2]) - elif action == 'enable_server': - try: - servers[value] = 1 - except: - logging.warning(Ta('warn-schedNoServer@1'), value) - elif action == 'disable_server': - try: - servers[value] = 0 - except: - logging.warning(Ta('warn-schedNoServer@1'), value) - - if not was_paused: - if paused_all: - sabnzbd.pause_all() - else: - sabnzbd.unpause_all() - sabnzbd.downloader.set_paused(paused or paused_all) - - if pause_post: - PostProcessor.do.pause() - else: - PostProcessor.do.resume() - if speedlimit: - sabnzbd.downloader.limit_speed(speedlimit) - for serv in servers: - try: - config.get_config('servers', serv).enable.set(servers[serv]) - except: - pass - config.save_config() - - -#------------------------------------------------------------------------------ -# Support for single shot pause (=delayed resume) - -__PAUSE_END = None # Moment when pause will end - -def scheduled_resume(): - """ Scheduled resume, only when no oneshot resume is active - """ - global __PAUSE_END - if __PAUSE_END is None: - sabnzbd.unpause_all() - - -def __oneshot_resume(when): - """ Called by delayed resume schedule - Only resumes if call comes at the planned time - """ - global __PAUSE_END - if __PAUSE_END != None and (when > __PAUSE_END-5) and (when < __PAUSE_END+55): - __PAUSE_END = None - logging.debug('Resume after pause-interval') - sabnzbd.unpause_all() - else: - logging.debug('Ignoring cancelled resume') - - -def plan_resume(interval): - """ Set a scheduled resume after the interval - """ - global __SCHED, __PAUSE_END - if interval > 0: - __PAUSE_END = time.time() + (interval * 60) - logging.debug('Schedule resume at %s', __PAUSE_END) - __SCHED.add_single_task(__oneshot_resume, '', interval*60, kronos.method.sequential, [__PAUSE_END], None) - sabnzbd.downloader.pause_downloader() - else: - __PAUSE_END = None - sabnzbd.unpause_all() - - -def pause_int(): - """ Return minutes:seconds until pause ends """ - global __PAUSE_END - if __PAUSE_END is None: - return "0" - else: - val = __PAUSE_END - time.time() - if val < 0: - sign = '-' - val = abs(val) - else: - sign = '' - min = int(val / 60L) - sec = int(val - min*60) - return "%s%d:%02d" % (sign, min, sec) - - -def pause_check(): - """ Unpause when time left is negative, compensate for missed schedule - """ - global __PAUSE_END - if __PAUSE_END is not None and (__PAUSE_END - time.time()) < 0: - __PAUSE_END = None - logging.debug('Force resume, negative timer') - sabnzbd.unpause_all() - - -#------------------------------------------------------------------------------ -def plan_server(action, parms, interval): - """ Plan to re-activate server after "interval" minutes - """ - __SCHED.add_single_task(action, '', interval*60, kronos.method.sequential, parms, None) - - -#------------------------------------------------------------------------------ -# Scheduler Guarding system -# Each check sets the guardian flag False -# Each succesful scheduled check sets the flag -# If 4 consequetive checks fail, the sheduler is assumed to have crashed - -__SCHED_GUARDIAN = False -__SCHED_GUARDIAN_CNT = 0 - -def reset_guardian(): - global __SCHED_GUARDIAN, __SCHED_GUARDIAN_CNT - __SCHED_GUARDIAN = False - __SCHED_GUARDIAN_CNT = 0 - -def sched_guardian(): - global __SCHED_GUARDIAN, __SCHED_GUARDIAN_CNT - __SCHED_GUARDIAN = True - -def sched_check(): - global __SCHED_GUARDIAN, __SCHED_GUARDIAN_CNT - if not __SCHED_GUARDIAN: - __SCHED_GUARDIAN_CNT += 1 - return __SCHED_GUARDIAN_CNT < 4 - reset_guardian() - return True diff --git a/main/sabnzbd/trylist.py b/main/sabnzbd/trylist.py deleted file mode 100644 index 8b2dad0..0000000 --- a/main/sabnzbd/trylist.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.trylist - trylist class -""" - -import logging - -from sabnzbd.decorators import synchronized - -from threading import Lock - -# TryList keeps track of which servers have been tried for -# a specific article - -TRYLIST_LOCK = Lock() -class TryList: - def __init__(self): - self.__try_list = [] - - @synchronized(TRYLIST_LOCK) - def server_in_try_list(self, server): - """ Return whether specified server has been tried """ - return (server in self.__try_list) - - @synchronized(TRYLIST_LOCK) - def add_to_try_list(self, server): - """ Register server as having been tried already """ - if server not in self.__try_list: - logging.debug("Appending %s to %s.__try_list", server, self) - self.__try_list.append(server) - - @synchronized(TRYLIST_LOCK) - def remove_from_try_list(self, server): - """ Server is no longer listed as tried """ - if server in self.__try_list: - logging.debug("Removing %s from %s.__try_list", server, self) - self.__try_list.remove(server) - - @synchronized(TRYLIST_LOCK) - def reset_try_list(self): - """ Clean the list """ - if self.__try_list: - self.__try_list = [] diff --git a/main/sabnzbd/tvsort.py b/main/sabnzbd/tvsort.py deleted file mode 100644 index 36b3f1e..0000000 --- a/main/sabnzbd/tvsort.py +++ /dev/null @@ -1,1064 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.tvsort - Sorting Functions -Series Sorting - Sorting downloads into seasons & episodes -Date sorting - Sorting downloads by a custom date matching -Generic Sorting - Sorting large files by a custom matching -""" - -import os -import logging -import re - -import sabnzbd -from sabnzbd.misc import move_to_path, cleanup_empty_directories, \ - get_unique_filename, get_ext, renamer, remove_dir -from sabnzbd.constants import series_match, date_match, year_match, sample_match -import sabnzbd.cfg as cfg -from sabnzbd.codecs import titler -from sabnzbd.lang import Ta - -RE_SAMPLE = re.compile(sample_match, re.I) -# Do not rename .vob files as they are usually DVD's -EXCLUDED_FILE_EXTS = ('.vob', '.bin') - -LOWERCASE = ('the','of','and','at','vs','a','an','but','nor','for','on',\ - 'so','yet') -UPPERCASE = ('III', 'II', 'IV') - -REPLACE_AFTER = { - '()': '', - '..': '.', - '__': '_', - ' ': ' ', - '//': '/', - ' .%ext': '.%ext' -} - -# Title() function messes up country names, so need to replace them instead -COUNTRY_REP = ('(US)', '(UK)', '(EU)', '(CA)', '(YU)', '(VE)', '(TR)', '(CH)', \ - '(SE)', '(ES)', '(KR)', '(ZA)', '(SK)', '(SG)', '(RU)', '(RO)', \ - '(PR)', '(PT)', '(PL)', '(PH)', '(PK)', '(NO)', '(NG)', '(NZ)', \ - '(NL)', '(MX)', '(MY)', '(MK)', '(KZ)', '(JP)', '(JM)', '(IT)', \ - '(IL)', '(IE)', '(IN)', '(IS)', '(HU)', '(HK)', '(HN)', '(GR)', \ - '(GH)', '(DE)', '(FR)', '(FI)', '(DK)', '(CZ)', '(HR)', '(CR)', \ - '(CO)', '(CN)', '(CL)', '(BG)', '(BR)', '(BE)', '(AT)', '(AU)', \ - '(AW)', '(AR)', '(AL)', '(AF)') - -_RE_ENDEXT = re.compile(r'\.%ext[{}]*$', re.I) - -def endswith_ext(path): - m = _RE_ENDEXT.search(path) - return m is not None - - -def move_to_parent_folder(workdir): - """ Move content of 'workdir' to 'workdir/..' possibly skipping some files - If afterwards the directory is not empty, rename it to _JUNK_folder, else remove it. - """ - skipped = False # Keep track of any skipped files - path1 = os.path.abspath(os.path.join(workdir, '..')) #move things to the folder below - - for root, dirs, files in os.walk(workdir): - for _file in files: - path = os.path.join(root, _file) - new_path = path.replace(workdir, path1) - new_path = get_unique_filename(new_path) - move_to_path(path, new_path, False) - - cleanup_empty_directories(workdir) - try: - remove_dir(workdir) - except: - pass - - return path1 - - -class Sorter: - def __init__(self, cat): - self.sorter = None - self.type = None - self.sort_file = False - self.cat = cat - - def detect(self, dirname, complete_dir): - self.sorter = SeriesSorter(dirname, complete_dir, self.cat) - if self.sorter.is_match(): - complete_dir = self.sorter.get_final_path() - self.type = 'tv' - self.sort_file = True - return complete_dir - - self.sorter = DateSorter(dirname, complete_dir, self.cat) - if self.sorter.is_match(): - complete_dir = self.sorter.get_final_path() - self.type = 'date' - self.sort_file = True - return complete_dir - - self.sorter = GenericSorter(dirname, complete_dir, self.cat) - if self.sorter.is_match(): - complete_dir = self.sorter.get_final_path() - self.type = 'movie' - self.sort_file = True - return complete_dir - - self.sort_file = False - return complete_dir - - def rename(self, newfiles, workdir_complete): - if self.sorter.should_rename(): - self.sorter.rename(newfiles, workdir_complete) - - def move(self, workdir_complete): - if self.type == 'movie': - move_to_parent = True - # check if we should leave the files inside an extra folder - if cfg.movie_extra_folders(): - #if there is a folder in the download, leave it in an extra folder - move_to_parent = not check_for_folder(workdir_complete) - if move_to_parent: - workdir_complete = move_to_parent_folder(workdir_complete) - return workdir_complete - else: - return move_to_parent_folder(workdir_complete) - - def is_sortfile(self): - return self.sort_file - -class SeriesSorter: - def __init__(self, dirname, path, cat): - self.matched = False - - self.original_dirname = dirname - self.original_path = path - self.cat = cat - self.sort_string = cfg.tv_sort_string() - self.cats = cfg.tv_categories() - self.filename_set = '' - - self.match_obj = None - self.extras = None - self.descmatch = None - - self.rename_or_not = False - - self.show_info = {} - - #Check if it is a TV show on init() - self.match() - - - def match(self): - ''' Checks the regex for a match, if so set self.match to true ''' - if cfg.enable_tv_sorting() and cfg.tv_sort_string(): - if (not self.cats) or (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats): - #First check if the show matches TV episode regular expressions. Returns regex match object - self.match_obj, self.extras = check_regexs(self.original_dirname, series_match, double=True) - if self.match_obj: - logging.debug("Found TV Show - Starting folder sort (%s)", self.original_dirname) - self.matched = True - - - def is_match(self): - ''' Returns whether there was a match or not ''' - return self.matched - - - def get_final_path(self): - # Collect and construct all the variables such as episode name, show names - if self.get_values(): - # Get the final path - path = self.construct_path() - self.final_path = os.path.join(self.original_path, path) - return self.final_path - else: - # Error Sorting - return os.path.join(self.original_path, self.original_dirname) - - - def get_multi_ep_naming(self, one, two, extras): - ''' Returns a list of unique values joined into a string and seperated by - (ex:01-02-03-04) ''' - extra_list = [one] - extra2_list = [two] - for extra in extras: - if extra not in (extra_list, extra2_list): - ep_no2 = extra.rjust(2,'0') - extra_list.append(extra) - extra2_list.append(ep_no2) - - one = '-'.join(extra_list) - two = '-'.join(extra2_list) - return (one, two) - - def get_shownames(self): - ''' Get the show name from the match object and format it ''' - # Get the formatted title and alternate title formats - self.show_info['show_name'], self.show_info['show_name_two'], self.show_info['show_name_three'] = getTitles(self.match_obj, self.original_dirname) - - - def get_seasons(self): - ''' Get the season number from the match object and format it ''' - season = self.match_obj.group(1).strip('_') # season number - - # Provide alternatve formatting (0 padding) - if season.lower() == 's': - season2 = season - else: - try: - season = str(int(season)) - except: - pass - season2 = season.rjust(2,'0') - - self.show_info['season_num'] = season - self.show_info['season_num_alt'] = season2 - - - def get_episodes(self): - ''' Get the episode numbers from the match object, format and join them ''' - ep_no = self.match_obj.group(2) # episode number - # Store the original episode number - - # Provide alternatve formatting (0 padding) - ep_no2 = ep_no.rjust(2,'0') - try: - ep_no = str(int(ep_no)) - except: - pass - - # Dual episode support - if self.extras: - ep_no, ep_no2 = self.get_multi_ep_naming(ep_no, ep_no2, self.extras) - - self.show_info['episode_num'] = ep_no - self.show_info['episode_num_alt'] = ep_no2 - - - def get_showdescriptions(self): - ''' Get the show descriptions from the match object and format them ''' - self.show_info['ep_name'], self.show_info['ep_name_two'], self.show_info['ep_name_three'] = getDescriptions(self.match_obj, self.original_dirname) - - - def get_values(self): - """ Collect and construct all the values needed for path replacement """ - try: - ## - Show Name - self.get_shownames() - - ## - Season - self.get_seasons() - - ## - Episode Number - self.get_episodes() - - ## - Episode Name - self.get_showdescriptions() - - return True - - except: - logging.error(Ta('error-tvInfo@1'), self.original_dirname) - logging.debug("Traceback: ", exc_info = True) - return False - - - def construct_path(self): - ''' Replaces the sort string with real values such as Show Name and Episode Number ''' - - sorter = self.sort_string.replace('\\', '/') - mapping = [] - - if endswith_ext(sorter): - extension = True - sorter = sorter.replace('.%ext', '') - else: - extension = False - - - # Replace Show name - mapping.append(('%sn', self.show_info['show_name'])) - mapping.append(('%s.n', self.show_info['show_name_two'])) - mapping.append(('%s_n', self.show_info['show_name_three'])) - - # Replace season number - mapping.append(('%s', self.show_info['season_num'])) - mapping.append(('%0s', self.show_info['season_num_alt'])) - - # Replace episode names - if self.show_info['ep_name']: - mapping.append(('%en', self.show_info['ep_name'])) - mapping.append(('%e.n', self.show_info['ep_name_two'])) - mapping.append(('%e_n', self.show_info['ep_name_three'])) - else: - mapping.append(('%en', '')) - mapping.append(('%e.n', '')) - mapping.append(('%e_n', '')) - - # Replace episode number - mapping.append(('%e', self.show_info['episode_num'])) - mapping.append(('%0e', self.show_info['episode_num_alt'])) - - # Make sure unsupported %desc is removed - mapping.append(('%desc', '')) - - # Replace elements - path = path_subst(sorter, mapping) - - for key, name in REPLACE_AFTER.iteritems(): - path = path.replace(key, name) - - # Lowercase all characters encased in {} - path = toLowercase(path) - - # Split the last part of the path up for the renamer - if extension: - head, tail = os.path.split(path) - self.filename_set = tail - self.rename_or_not = True - else: - head = path - - return head - - def should_rename(self): - return self.rename_or_not - - def rename(self, files, current_path): - logging.debug("Renaming Series") - renamed = None - largest = (None, None, 0) - - def to_filepath(f, current_path): - if is_full_path(f): - filepath = f.replace('_UNPACK_', '') - else: - filepath = os.path.join(current_path, f) - return filepath - - # Create a generator of filepaths, ignore sample files and excluded files (vobs ect) - filepaths = ((file, to_filepath(file, current_path)) for file in files if not RE_SAMPLE.search(file) \ - and get_ext(file) not in EXCLUDED_FILE_EXTS) - - # Find the largest existing file - for file, fp in filepaths: - # If for some reason the file no longer exists, skip - if not os.path.exists(fp): - continue - - size = os.stat(fp).st_size - f_file, f_fp, f_size = largest - if size > f_size: - largest = (file, fp, size) - - file, filepath, size = largest - # >20MB - if filepath and size > 20971520: - tmp, ext = os.path.splitext(file) - newname = "%s%s" % (self.filename_set,ext) - # Replace %fn with the original filename - newname = newname.replace('%fn',tmp) - newpath = os.path.join(current_path, newname) - if not os.path.exists(newpath): - try: - logging.debug("Rename: %s to %s", filepath,newpath) - renamer(filepath,newpath) - except: - logging.error("Failed to rename: %s to %s", current_path, newpath) - logging.debug("Traceback: ", exc_info = True) - rename_similar(current_path, file, self.filename_set) - else: - logging.debug('Current path already exists, skipping rename, %s', newpath) - else: - logging.debug('Nothing to rename, %s', files) - - -_RE_MULTIPLE = ( \ - re.compile(r'cd\W?(\d+)\W?', re.I), # .cd1.avi - re.compile(r'\w\W?([\w\d])[{}]*$', re.I), # blah1.avi blaha.avi - re.compile(r'\w\W([\w\d])\W', re.I) # blah-1-ok.avi blah-a-ok.avi -) -def check_for_multiple(files): - for regex in _RE_MULTIPLE: - matched_files = check_for_sequence(regex, files) - if matched_files: - return matched_files - return '' - - -def check_for_sequence(regex, files): - matches = {} - prefix = None - # Build up a dictionary of matches - # The key is based off the match, ie {1:'blah-part1.avi'} - for _file in files: - name, ext = os.path.splitext(_file) - match1 = regex.search(name) - if match1: - if not prefix or prefix == name[:match1.start()]: - matches[match1.group(1)] = name+ext - prefix = name[:match1.start()] - - # Don't do anything if only one or no files matched - if len(matches.keys()) < 2: - return {} - - key_prev = 0 - passed = True - alphabet = 'abcdefghijklmnopqrstuvwxyz' - - # Check the dictionary to see if the keys are in a numeric or alphabetic sequence - for akey in sorted(matches.keys()): - if akey.isdigit(): - key = int(akey) - elif akey in alphabet: - key = alphabet.find(akey) + 1 - else: - passed = False - - if passed: - if not key_prev: - key_prev = key - else: - if key_prev + 1 == key: - key_prev = key - else: - passed = False - if passed: - # convert {'b':'filename-b.avi'} to {'2', 'filename-b.avi'} - item = matches.pop(akey) - matches[str(key)] = item - - if passed: - return matches - else: - return {} - - - - -class GenericSorter: - def __init__(self, dirname, path, cat): - self.matched = False - - self.original_dirname = dirname - self.original_path = path - self.sort_string = cfg.movie_sort_string() - self.extra = cfg.movie_sort_extra() - self.cats = cfg.movie_categories() - self.cat = cat - self.filename_set = '' - - self.match_obj = None - - self.rename_or_not = False - - self.movie_info = {} - - # Check if we match the category in init() - self.match() - - - def match(self): - ''' Checks the category for a match, if so set self.match to true ''' - if cfg.enable_movie_sorting() and self.sort_string: - #First check if the show matches TV episode regular expressions. Returns regex match object - if (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats): - logging.debug("Movie Sorting - Starting folder sort (%s)", self.original_dirname) - self.matched = True - - - def is_match(self): - ''' Returns whether there was a match or not ''' - return self.matched - - - - def get_final_path(self): - # Collect and construct all the variables such as episode name, show names - if self.get_values(): - # Get the final path - path = self.construct_path() - self.final_path = os.path.join(self.original_path, path) - return self.final_path - else: - # Error Sorting - return os.path.join(self.original_path, self.original_dirname) - - def get_values(self): - """ Collect and construct all the values needed for path replacement """ - - ## - Get Year - RE_YEAR = re.compile(year_match, re.I) - year_m = RE_YEAR.search(self.original_dirname) - if year_m: - # Find the last matched date - # Keep year_m to use in getTitles - year = RE_YEAR.findall(self.original_dirname)[-1][0] - self.movie_info['year'] = year - else: - self.movie_info['year'] = '' - - ## - Get Decades - self.movie_info['decade'], self.movie_info['decade_two'] = getDecades(self.movie_info['year']) - - ## - Get Title - self.movie_info['title'], self.movie_info['title_two'], self.movie_info['title_three'] = getTitles(year_m, self.original_dirname) - - return True - - - def construct_path(self): - - sorter = self.sort_string.replace('\\', '/') - mapping = [] - - if endswith_ext(sorter): - extension = True - sorter = sorter.replace(".%ext", '') - else: - extension = False - - # Replace title - mapping.append(('%title', self.movie_info['title'])) - mapping.append(('%.title', self.movie_info['title_two'])) - mapping.append(('%_title', self.movie_info['title_three'])) - - # Replace title (short forms) - mapping.append(('%t', self.movie_info['title'])) - mapping.append(('%.t', self.movie_info['title_two'])) - mapping.append(('%_t', self.movie_info['title_three'])) - - # Replace year - mapping.append(('%y', self.movie_info['year'])) - - # Replace decades - mapping.append(('%decade', self.movie_info['decade'])) - mapping.append(('%0decade', self.movie_info['decade_two'])) - - path = path_subst(sorter, mapping) - - for key, name in REPLACE_AFTER.iteritems(): - path = path.replace(key, name) - - - # Lowercase all characters encased in {} - path = toLowercase(path) - - # Strip any extra ' ' '.' or '_' around foldernames - path = stripFolders(path) - - # Split the last part of the path up for the renamer - if extension: - head, tail = os.path.split(path) - self.filename_set = tail - self.rename_or_not = True - else: - head = path - - return head - - def should_rename(self): - return self.rename_or_not - - def rename(self, _files, current_path): - logging.debug("Renaming Generic file") - def filter_files(_file, current_path): - if is_full_path(_file): - filepath = _file.replace('_UNPACK_', '') - else: - filepath = os.path.join(current_path, _file) - if os.path.exists(filepath): - size = os.stat(filepath).st_size - if size > 314572800 and not RE_SAMPLE.search(_file) \ - and get_ext(_file) not in EXCLUDED_FILE_EXTS: - return True - return False - - renamed = False - # remove any files below 300MB from this list - files = [_file for _file in _files if filter_files(_file, current_path)] - - length = len(files) - ## Single File Handling - if length == 1: - file = files[0] - if is_full_path(file): - filepath = file.replace('_UNPACK_', '') - else: - filepath = os.path.join(current_path, file) - if os.path.exists(filepath): - tmp, ext = os.path.splitext(file) - newname = "%s%s" % (self.filename_set,ext) - newname = newname.replace('%fn',tmp) - newpath = os.path.join(current_path, newname) - try: - logging.debug("Rename: %s to %s", filepath,newpath) - renamer(filepath,newpath) - except: - logging.error(Ta('error-tvRename@2'), filepath, newpath) - logging.debug("Traceback: ", exc_info = True) - rename_similar(current_path, file, self.filename_set) - - ## Sequence File Handling - # if there is more than one extracted file check for CD1/1/A in the title - elif self.extra: - matched_files = check_for_multiple(files) - # rename files marked as in a set - if matched_files: - logging.debug("Renaming a series of generic files (%s)", matched_files) - for index, file in matched_files.iteritems(): - filepath = os.path.join(current_path, file) - tmp, ext = os.path.splitext(file) - name = '%s%s' % (self.filename_set, self.extra) - name = name.replace('%1', str(index)).replace('%fn',tmp) - name = name + ext - newpath = os.path.join(current_path, name) - try: - logging.debug("Rename: %s to %s", filepath,newpath) - renamer(filepath,newpath) - except: - logging.error(Ta('error-tvRename@2'), filepath, newpath) - logging.debug("Traceback: ", exc_info = True) - rename_similar(current_path, file, self.filename_set) - else: - logging.debug("Movie files not in sequence %s", _files) - - -class DateSorter: - def __init__(self, dirname, path, cat): - self.matched = False - - self.original_dirname = dirname - self.original_path = path - self.sort_string = cfg.date_sort_string() - self.cats = cfg.date_categories() - self.cat = cat - self.filename_set = '' - - self.match_obj = None - - self.rename_or_not = False - self.date_type = None - - self.date_info = {} - - # Check if we match the category in init() - self.match() - - - def match(self): - ''' Checks the category for a match, if so set self.matched to true ''' - if cfg.enable_date_sorting() and self.sort_string: - #First check if the show matches TV episode regular expressions. Returns regex match object - if (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats): - self.match_obj, self.date_type = checkForDate(self.original_dirname, date_match) - if self.match_obj: - logging.debug("Date Sorting - Starting folder sort (%s)", self.original_dirname) - self.matched = True - - - def is_match(self): - ''' Returns whether there was a match or not ''' - return self.matched - - - def get_final_path(self): - # Collect and construct all the variables such as episode name, show names - if self.get_values(): - # Get the final path - path = self.construct_path() - self.final_path = os.path.join(self.original_path, path) - return self.final_path - else: - # Error Sorting - return os.path.join(self.original_path, self.original_dirname) - - def get_values(self): - """ Collect and construct all the values needed for path replacement """ - - if self.date_type == 1: #2008-10-16 - self.date_info['year'] = self.match_obj.group(1) - self.date_info['month'] = self.match_obj.group(2) - self.date_info['date'] = self.match_obj.group(3) - else: #10.16.2008 - self.date_info['year'] = self.match_obj.group(3) - self.date_info['month'] = self.match_obj.group(1) - self.date_info['date'] = self.match_obj.group(2) - - self.date_info['month_two'] = self.date_info['month'].rjust(2,'0') - self.date_info['date_two'] = self.date_info['date'].rjust(2,'0') - - ## - Get Decades - self.date_info['decade'], self.date_info['decade_two'] = getDecades(self.date_info['year']) - - ## - Get Title - self.date_info['title'], self.date_info['title_two'], self.date_info['title_three'] = getTitles(self.match_obj, self.original_dirname) - - self.date_info['ep_name'], self.date_info['ep_name_two'], self.date_info['ep_name_three'] = getDescriptions(self.match_obj, self.original_dirname) - - return True - - - def construct_path(self): - - sorter = self.sort_string.replace('\\', '/') - mapping = [] - - if endswith_ext(sorter): - extension = True - sorter= sorter.replace(".%ext", '') - else: - extension = False - - # Replace title - mapping.append(('%title', self.date_info['title'])) - mapping.append(('%.title', self.date_info['title_two'])) - mapping.append(('%_title', self.date_info['title_three'])) - - mapping.append(('%t', self.date_info['title'])) - mapping.append(('%.t', self.date_info['title_two'])) - mapping.append(('%_t', self.date_info['title_three'])) - - mapping.append(('%sn', self.date_info['title'])) - mapping.append(('%s.n', self.date_info['title_two'])) - mapping.append(('%s_n', self.date_info['title_three'])) - - # Replace year - mapping.append(('%year', self.date_info['year'])) - mapping.append(('%y', self.date_info['year'])) - - if self.date_info['ep_name']: - mapping.append(('%desc', self.date_info['ep_name'])) - mapping.append(('%.desc', self.date_info['ep_name_two'])) - mapping.append(('%_desc', self.date_info['ep_name_three'])) - else: - mapping.append(('%desc', '')) - mapping.append(('%.desc', '')) - mapping.append(('%_desc', '')) - - # Replace decades - mapping.append(('%decade', self.date_info['decade'])) - mapping.append(('%0decade', self.date_info['decade_two'])) - - # Replace month - mapping.append(('%m', self.date_info['month'])) - mapping.append(('%0m', self.date_info['month_two'])) - - # Replace date - mapping.append(('%d', self.date_info['date'])) - mapping.append(('%0d', self.date_info['date_two'])) - - path = path_subst(sorter, mapping) - - for key, name in REPLACE_AFTER.iteritems(): - path = path.replace(key, name) - - # Lowercase all characters encased in {} - path = toLowercase(path) - - # Strip any extra ' ' '.' or '_' around foldernames - path = stripFolders(path) - - # Split the last part of the path up for the renamer - if extension: - head, tail = os.path.split(path) - self.filename_set = tail - self.rename_or_not = True - else: - head = path - - return head - - def should_rename(self): - return self.rename_or_not - - def rename(self, files, current_path): - logging.debug("Renaming Date file") - renamed = None - #find the master file to rename - for file in files: - if is_full_path(file): - filepath = file.replace('_UNPACK_', '') - else: - filepath = os.path.join(current_path, file) - - if os.path.exists(filepath): - size = os.stat(filepath).st_size - if size > 130000000: - if 'sample' not in file: - tmp, ext = os.path.splitext(file) - newname = "%s%s" % (self.filename_set,ext) - newname = newname.replace('%fn',tmp) - newpath = os.path.join(current_path, newname) - if not os.path.exists(newpath): - try: - logging.debug("Rename: %s to %s", filepath,newpath) - renamer(filepath,newpath) - except: - logging.error(Ta('error-tvRename@2'), current_path, newpath) - logging.debug("Traceback: ", exc_info = True) - rename_similar(current_path, file, self.filename_set) - break - - -def path_subst(path, mapping): - """ Replace the sort sting elements by real values. - Non-elements are copied literally. - path = the sort string - mapping = array of tuples that maps all elements to their values - """ - newpath = [] - plen = len(path) - n = 0 - while n < plen: - result = path[n] - if result == '%': - for key, value in mapping: - if path.startswith(key, n): - n += len(key)-1 - result = value - break - newpath.append(result) - n += 1 - return ''.join(newpath) - - -def getTitles(match, name): - ''' - The title will be the part before the match - Clean it up and title() it - - ''.title() isn't very good under python so this contains - a lot of little hacks to make it better and for more control - ''' - if match: - name = name[:match.start()] - - # Replace .US. with (US) - if cfg.tv_sort_countries() == 1: - for rep in COUNTRY_REP: - # (us) > (US) - name = replace_word(name, rep.lower(), rep) - # (Us) > (US) - name = replace_word(name, titler(rep), rep) - # .US. > (US) - dotted_country = '.%s.' % (rep.strip('()')) - name = replace_word(name, dotted_country, rep) - # Remove .US. and (US) - elif cfg.tv_sort_countries() == 2: - for rep in COUNTRY_REP: - # Remove (US) - name = replace_word(name, rep, '') - dotted_country = '.%s.' % (rep.strip('()')) - # Remove .US. - name = replace_word(name, dotted_country, '.') - - title = name.replace('.', ' ').replace('_', ' ') - title = title.strip().strip('(').strip('_').strip('-').strip().strip('_') - - title = titler(title) # title the show name so it is in a consistant letter case - - #title applied uppercase to 's Python bug? - title = title.replace("'S", "'s") - - # Replace titled country names, (Us) with (US) and so on - if cfg.tv_sort_countries() == 1: - for rep in COUNTRY_REP: - title = title.replace(titler(rep), rep) - # Remove country names, ie (Us) - elif cfg.tv_sort_countries() == 2: - for rep in COUNTRY_REP: - title = title.replace(titler(rep), '').strip() - - # Make sure some words such as 'and' or 'of' stay lowercased. - for x in LOWERCASE: - xtitled = titler(x) - title = replace_word(title, xtitled, x) - - # Make sure some words such as 'III' or 'IV' stay uppercased. - for x in UPPERCASE: - xtitled = titler(x) - title = replace_word(title, xtitled, x) - - # The title with spaces replaced by dots - dots = title.replace(" - ", "-").replace(' ','.').replace('_','.') - dots = dots.replace('(', '.').replace(')','.').replace('..','.').rstrip('.') - - # The title with spaces replaced by underscores - underscores = title.replace(' ','_').replace('.','_').replace('__','_').rstrip('_') - - return title, dots, underscores - -def replace_word(input, one, two): - ''' Regex replace on just words ''' - regex = re.compile(r'\W(%s)(\W|$)' % one, re.I) - matches = regex.findall(input) - if matches: - for m in matches: - input = input.replace(one, two) - return input - -def getDescriptions(match, name): - ''' - If present, get a description from the nzb name. - A description has to be after the matched item, seperated either - like ' - Description' or '_-_Description' - ''' - if match: - ep_name = name[match.end():] # Need to improve for multi ep support - else: - ep_name = name - RE_EPNAME = re.compile(r'_?-[_\W]', re.I) - m = RE_EPNAME.search(ep_name) - if m: - ep_name = ep_name[m.end():].strip('_').strip().strip('_').replace('.', ' ').replace('_', ' ') - ep_name2 = ep_name.replace(" - ", "-").replace(" ", ".") - ep_name3 = ep_name.replace(" ", "_") - return ep_name, ep_name2, ep_name3 - else: - return '', '', '' - - -def getDecades(year): - if year: - try: - decade = year[2:3]+'0' - decade2 = year[:3]+'0' - except: - decade = '' - decade2 = '' - else: - decade = '' - decade2 = '' - return decade, decade2 - -def check_for_folder(path): - for root, dirs, files in os.walk(path): - if dirs: - return True - return False - -_RE_LOWERCASE = re.compile(r'{([^{]*)}') -def toLowercase(path): - ''' Lowercases any characters enclosed in {} ''' - while True: - m = _RE_LOWERCASE.search(path) - if not m: - break - path = path[:m.start()] + m.group(1).lower() + path[m.end():] - - # just incase - path = path.replace('{', '') - path = path.replace('}', '') - return path - -def stripFolders(folders): - f = folders.strip('/').split('/') - - def strip_all(x): - x = x.strip().strip('_') - if sabnzbd.WIN32: - # Don't want to strip . from folders such as /.sabnzbd/ - x = x.strip('.') - x = x.strip() - return x - - return '/'.join([strip_all(x) for x in f]) - - -def rename_similar(path, file, name): - logging.debug('Renaming files similar to: %s to %s', file, name) - file_prefix, ext = os.path.splitext(file) - for root, dirs, files in os.walk(path): - for _file in files: - fpath = os.path.join(root, _file) - tmp, ext = os.path.splitext(_file) - if tmp == file_prefix: - newname = "%s%s" % (name,ext) - newname = newname.replace('%fn',tmp) - newpath = os.path.join(path, newname) - if not os.path.exists(newpath): - try: - logging.debug("Rename: %s to %s", fpath,newpath) - renamer(fpath,newpath) - except: - logging.error(Ta('error-tvSimRename@2'), path, newpath) - logging.debug("Traceback: ", exc_info = True) - - - - -def check_regexs(filename, matchers, double=False): - """ - Regular Expression match for a list of regexes - Returns the MatchObject if a match is made - This version checks for an additional match - """ - '''if double: - matcher, extramatchers = matchers - else: - matcher = matchers - extramatchers = []''' - extras = [] - for expressions in matchers: - expression, extramatchers = expressions - regex = re.compile(expression) - match1 = regex.search(filename) - if match1: - for m in extramatchers: - regex = re.compile(m) - match2 = regex.findall(filename,match1.end()) - if match2: - for match in match2: - if type(match) == type(()) and len(match) > 1: - extras.append(match[1]) - else: - extras.append(match) - break - return match1, extras - return None, None - - -def checkForDate(filename, matcher): - """ - Regular Expression match for date based files - Returns the MatchObject if a match is made - """ - match2 = None - x = 0 - if matcher: - for expression in matcher: - regex = re.compile(expression) - match1 = regex.search(filename) - x += 1 - if match1: - return match1, x - return None, 0 - -def is_full_path(file): - if file.startswith('\\') or file.startswith('/'): - return True - try: - if file[1:3] == ':\\': - return True - except: - pass - return False diff --git a/main/sabnzbd/urlgrabber.py b/main/sabnzbd/urlgrabber.py deleted file mode 100644 index e4deb79..0000000 --- a/main/sabnzbd/urlgrabber.py +++ /dev/null @@ -1,218 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2010 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.urlgrabber - Queue for grabbing NZB files from websites -""" - -import os -import time -import re -import logging -import Queue -import urllib -from threading import * - -import socket -try: - socket.ssl - _PROTOCOL = 'https' -except: - _PROTOCOL = 'http' - -import sabnzbd -import sabnzbd.misc as misc -import sabnzbd.dirscanner as dirscanner -import sabnzbd.nzbqueue as nzbqueue -import sabnzbd.cfg as cfg -from sabnzbd.lang import Ta - -#------------------------------------------------------------------------------ -_RETRIES = 10 - -class URLGrabber(Thread): - do = None # Link to instance of the thread - - def __init__(self): - Thread.__init__(self) - self.queue = Queue.Queue() - for tup in sabnzbd.nzbqueue.get_urls(): - url, nzo = tup - self.queue.put((url, nzo, _RETRIES)) - self.shutdown = False - URLGrabber.do = self - - def add(self, url, future_nzo): - """ Add an URL to the URLGrabber queue """ - self.queue.put((url, future_nzo, _RETRIES)) - - def stop(self): - logging.info('URLGrabber shutting down') - self.shutdown = True - self.queue.put((None, None, 0)) - - def run(self): - logging.info('URLGrabber starting up') - self.shutdown = False - - while not self.shutdown: - (url, future_nzo, retry_count) = self.queue.get() - if not url: - continue - - # If nzo entry deleted, give up - try: - deleted = future_nzo.deleted - except: - deleted = True - if deleted: - logging.debug('Dropping URL %s, job entry missing', url) - continue - - # Add nzbmatrix credentials if needed - url, matrix_id = _matrix_url(url) - - # _grab_url cannot reside in a function, because the tempfile - # would not survive the end of the function - logging.info('Grabbing URL %s', url) - opener = urllib.FancyURLopener({}) - opener.prompt_user_passwd = None - opener.addheaders = [] - opener.addheader('User-Agent', 'SABnzbd+/%s' % sabnzbd.version.__version__) - opener.addheader('Accept-encoding','gzip') - filename = None - msg = '' - try: - fn, header = opener.retrieve(url) - except: - fn = None - - if fn: - for tup in header.items(): - for item in tup: - if "filename=" in item: - filename = item[item.index("filename=") + 9:].strip(';').strip('"') - break - - if matrix_id: - fn, msg = _analyse_matrix(fn, matrix_id) - - # Check if the filepath is specified, if not use the msg - # as whether it should be retried (bool) - if not fn: - retry_count -= 1 - if retry_count > 0 and not msg: - logging.info('Retry URL %s', url) - self.queue.put((url, future_nzo, retry_count)) - else: - misc.bad_fetch(future_nzo, url, msg, retry=True) - continue - - if not filename: - filename = os.path.basename(url) + '.nzb' - filename = misc.sanitize_foldername(filename) - _r, _u, _d = future_nzo.get_repair_opts() - pp = sabnzbd.opts_to_pp(_r, _u, _d) - script = future_nzo.get_script() - cat = future_nzo.get_cat() - priority = future_nzo.get_priority() - nzbname = future_nzo.get_dirname_rename() - - # Check if nzb file - if os.path.splitext(filename)[1].lower() == '.nzb': - res = dirscanner.ProcessSingleFile(filename, fn, pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname) - if res == 0: - nzbqueue.remove_nzo(future_nzo.nzo_id, add_to_history=False, unload=True) - elif res == -2: - self.add(url, future_nzo) - else: - misc.bad_fetch(future_nzo, url, retry=False) - # Check if a supported archive - else: - if dirscanner.ProcessArchiveFile(filename, fn, pp, script, cat, priority=priority) == 0: - nzbqueue.remove_nzo(future_nzo.nzo_id, add_to_history=False, unload=True) - else: - # Not a supported filetype, not an nzb (text/html ect) - try: - os.remove(fn) - except: - pass - misc.bad_fetch(future_nzo, url, retry=False, archive=True) - - # Don't pound the website! - time.sleep(5.0) - - - -#------------------------------------------------------------------------------- -_RE_NZBMATRIX = re.compile(r'nzbmatrix.com/(.*)[\?&]id=(\d+)', re.I) -_RE_NZBMATRIX_USER = re.compile(r'&username=([^&=]+)', re.I) -_RE_NZBMATRIX_API = re.compile(r'&apikey=([^&=]+)', re.I) - -def _matrix_url(url): - """ Patch up the url for nzbmatrix.com """ - - matrix_id = 0 - m = _RE_NZBMATRIX.search(url) - if m: - matrix_id = m.group(2) - if not _RE_NZBMATRIX_USER.search(url) or not _RE_NZBMATRIX_API.search(url): - user = urllib.quote_plus(cfg.matrix_username()) - key = urllib.quote_plus(cfg.matrix_apikey()) - url = '%s://nzbmatrix.com/api-nzb-download.php?id=%s&username=%s&apikey=%s' % \ - (_PROTOCOL, matrix_id, user, key) - return url, matrix_id - - -_RE_MATRIX_ERR = re.compile(r'please_wait[_ ]+(\d+)', re.I) - -def _analyse_matrix(fn, matrix_id): - """ Analyse respons of nzbmatrix - """ - msg = '' - if not fn: - # No response, just retry - return (None, msg) - try: - f = open(fn, 'r') - data = f.read(40) - f.close() - except: - return (None, msg) - - # Check for an error response - if data and data.startswith('error'): - # Check if we are required to wait - if so sleep the urlgrabber - m = _RE_MATRIX_ERR.search(data) - if m: - wait = int(m.group(1)) - if wait: - logging.debug('Sleeping URL grabber %s sec', wait) - time.sleep(min(wait, 60)) - # Return, but tell the urlgrabber to retry - return (None, msg) - else: - msg = Ta('warn-matrixFail@1') % data - return (None, msg) - - if data.startswith("\$) | # Two $ signs - (?P[_a-z][_a-z0-9]*) | # $name format - {(?P[^}]*)} # ${name} format - ) - """, re.IGNORECASE | re.VERBOSE) - - def _parse_match(self, match): - # Valid name (in or out of braces): fetch value from section - key = match.group('named') or match.group('braced') - if key is not None: - value, section = self._fetch(key) - return key, value, section - # Escaped delimiter (e.g., $$): return single delimiter - if match.group('escaped') is not None: - # Return None for key and section to indicate it's time to stop - return None, self._delimiter, None - # Anything else: ignore completely, just return it unchanged - return None, match.group(), None - - -interpolation_engines = { - 'configparser': ConfigParserInterpolation, - 'template': TemplateInterpolation, -} - - - -class Section(dict): - """ - A dictionary-like object that represents a section in a config file. - - It does string interpolation if the 'interpolation' attribute - of the 'main' object is set to True. - - Interpolation is tried first from this object, then from the 'DEFAULT' - section of this object, next from the parent and its 'DEFAULT' section, - and so on until the main object is reached. - - A Section will behave like an ordered dictionary - following the - order of the ``scalars`` and ``sections`` attributes. - You can use this to change the order of members. - - Iteration follows the order: scalars, then sections. - """ - - def __init__(self, parent, depth, main, indict=None, name=None): - """ - * parent is the section above - * depth is the depth level of this section - * main is the main ConfigObj - * indict is a dictionary to initialise the section with - """ - if indict is None: - indict = {} - dict.__init__(self) - # used for nesting level *and* interpolation - self.parent = parent - # used for the interpolation attribute - self.main = main - # level of nesting depth of this Section - self.depth = depth - # purely for information - self.name = name - # - self._initialise() - # we do this explicitly so that __setitem__ is used properly - # (rather than just passing to ``dict.__init__``) - for entry, value in indict.iteritems(): - self[entry] = value - - - def _initialise(self): - # the sequence of scalar values in this Section - self.scalars = [] - # the sequence of sections in this Section - self.sections = [] - # for comments :-) - self.comments = {} - self.inline_comments = {} - # for the configspec - self.configspec = {} - self._order = [] - self._configspec_comments = {} - self._configspec_inline_comments = {} - self._cs_section_comments = {} - self._cs_section_inline_comments = {} - # for defaults - self.defaults = [] - self.default_values = {} - - - def _interpolate(self, key, value): - try: - # do we already have an interpolation engine? - engine = self._interpolation_engine - except AttributeError: - # not yet: first time running _interpolate(), so pick the engine - name = self.main.interpolation - if name == True: # note that "if name:" would be incorrect here - # backwards-compatibility: interpolation=True means use default - name = DEFAULT_INTERPOLATION - name = name.lower() # so that "Template", "template", etc. all work - class_ = interpolation_engines.get(name, None) - if class_ is None: - # invalid value for self.main.interpolation - self.main.interpolation = False - return value - else: - # save reference to engine so we don't have to do this again - engine = self._interpolation_engine = class_(self) - # let the engine do the actual work - return engine.interpolate(key, value) - - - def __getitem__(self, key): - """Fetch the item and do string interpolation.""" - val = dict.__getitem__(self, key) - if self.main.interpolation and isinstance(val, StringTypes): - return self._interpolate(key, val) - return val - - - def __setitem__(self, key, value, unrepr=False): - """ - Correctly set a value. - - Making dictionary values Section instances. - (We have to special case 'Section' instances - which are also dicts) - - Keys must be strings. - Values need only be strings (or lists of strings) if - ``main.stringify`` is set. - - `unrepr`` must be set when setting a value to a dictionary, without - creating a new sub-section. - """ - if not isinstance(key, StringTypes): - raise ValueError('The key "%s" is not a string.' % key) - - # add the comment - if not self.comments.has_key(key): - self.comments[key] = [] - self.inline_comments[key] = '' - # remove the entry from defaults - if key in self.defaults: - self.defaults.remove(key) - # - if isinstance(value, Section): - if not self.has_key(key): - self.sections.append(key) - dict.__setitem__(self, key, value) - elif isinstance(value, dict) and not unrepr: - # First create the new depth level, - # then create the section - if not self.has_key(key): - self.sections.append(key) - new_depth = self.depth + 1 - dict.__setitem__( - self, - key, - Section( - self, - new_depth, - self.main, - indict=value, - name=key)) - else: - if not self.has_key(key): - self.scalars.append(key) - if not self.main.stringify: - if isinstance(value, StringTypes): - pass - elif isinstance(value, (list, tuple)): - for entry in value: - if not isinstance(entry, StringTypes): - raise TypeError('Value is not a string "%s".' % entry) - else: - raise TypeError('Value is not a string "%s".' % value) - dict.__setitem__(self, key, value) - - - def __delitem__(self, key): - """Remove items from the sequence when deleting.""" - dict. __delitem__(self, key) - if key in self.scalars: - self.scalars.remove(key) - else: - self.sections.remove(key) - del self.comments[key] - del self.inline_comments[key] - - - def get(self, key, default=None): - """A version of ``get`` that doesn't bypass string interpolation.""" - try: - return self[key] - except KeyError: - return default - - - def update(self, indict): - """ - A version of update that uses our ``__setitem__``. - """ - for entry in indict: - self[entry] = indict[entry] - - - def pop(self, key, *args): - """ - 'D.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' - """ - val = dict.pop(self, key, *args) - if key in self.scalars: - del self.comments[key] - del self.inline_comments[key] - self.scalars.remove(key) - elif key in self.sections: - del self.comments[key] - del self.inline_comments[key] - self.sections.remove(key) - if self.main.interpolation and isinstance(val, StringTypes): - return self._interpolate(key, val) - return val - - - def popitem(self): - """Pops the first (key,val)""" - sequence = (self.scalars + self.sections) - if not sequence: - raise KeyError(": 'popitem(): dictionary is empty'") - key = sequence[0] - val = self[key] - del self[key] - return key, val - - - def clear(self): - """ - A version of clear that also affects scalars/sections - Also clears comments and configspec. - - Leaves other attributes alone : - depth/main/parent are not affected - """ - dict.clear(self) - self.scalars = [] - self.sections = [] - self.comments = {} - self.inline_comments = {} - self.configspec = {} - - - def setdefault(self, key, default=None): - """A version of setdefault that sets sequence if appropriate.""" - try: - return self[key] - except KeyError: - self[key] = default - return self[key] - - - def items(self): - """D.items() -> list of D's (key, value) pairs, as 2-tuples""" - return zip((self.scalars + self.sections), self.values()) - - - def keys(self): - """D.keys() -> list of D's keys""" - return (self.scalars + self.sections) - - - def values(self): - """D.values() -> list of D's values""" - return [self[key] for key in (self.scalars + self.sections)] - - - def iteritems(self): - """D.iteritems() -> an iterator over the (key, value) items of D""" - return iter(self.items()) - - - def iterkeys(self): - """D.iterkeys() -> an iterator over the keys of D""" - return iter((self.scalars + self.sections)) - - __iter__ = iterkeys - - - def itervalues(self): - """D.itervalues() -> an iterator over the values of D""" - return iter(self.values()) - - - def __repr__(self): - """x.__repr__() <==> repr(x)""" - return '{%s}' % ', '.join([('%s: %s' % (repr(key), repr(self[key]))) - for key in (self.scalars + self.sections)]) - - __str__ = __repr__ - __str__.__doc__ = "x.__str__() <==> str(x)" - - - # Extra methods - not in a normal dictionary - - def dict(self): - """ - Return a deepcopy of self as a dictionary. - - All members that are ``Section`` instances are recursively turned to - ordinary dictionaries - by calling their ``dict`` method. - - >>> n = a.dict() - >>> n == a - 1 - >>> n is a - 0 - """ - newdict = {} - for entry in self: - this_entry = self[entry] - if isinstance(this_entry, Section): - this_entry = this_entry.dict() - elif isinstance(this_entry, list): - # create a copy rather than a reference - this_entry = list(this_entry) - elif isinstance(this_entry, tuple): - # create a copy rather than a reference - this_entry = tuple(this_entry) - newdict[entry] = this_entry - return newdict - - - def merge(self, indict): - """ - A recursive update - useful for merging config files. - - >>> a = '''[section1] - ... option1 = True - ... [[subsection]] - ... more_options = False - ... # end of file'''.splitlines() - >>> b = '''# File is user.ini - ... [section1] - ... option1 = False - ... # end of file'''.splitlines() - >>> c1 = ConfigObj(b) - >>> c2 = ConfigObj(a) - >>> c2.merge(c1) - >>> c2 - {'section1': {'option1': 'False', 'subsection': {'more_options': 'False'}}} - """ - for key, val in indict.items(): - if (key in self and isinstance(self[key], dict) and - isinstance(val, dict)): - self[key].merge(val) - else: - self[key] = val - - - def rename(self, oldkey, newkey): - """ - Change a keyname to another, without changing position in sequence. - - Implemented so that transformations can be made on keys, - as well as on values. (used by encode and decode) - - Also renames comments. - """ - if oldkey in self.scalars: - the_list = self.scalars - elif oldkey in self.sections: - the_list = self.sections - else: - raise KeyError('Key "%s" not found.' % oldkey) - pos = the_list.index(oldkey) - # - val = self[oldkey] - dict.__delitem__(self, oldkey) - dict.__setitem__(self, newkey, val) - the_list.remove(oldkey) - the_list.insert(pos, newkey) - comm = self.comments[oldkey] - inline_comment = self.inline_comments[oldkey] - del self.comments[oldkey] - del self.inline_comments[oldkey] - self.comments[newkey] = comm - self.inline_comments[newkey] = inline_comment - - - def walk(self, function, raise_errors=True, - call_on_sections=False, **keywargs): - """ - Walk every member and call a function on the keyword and value. - - Return a dictionary of the return values - - If the function raises an exception, raise the errror - unless ``raise_errors=False``, in which case set the return value to - ``False``. - - Any unrecognised keyword arguments you pass to walk, will be pased on - to the function you pass in. - - Note: if ``call_on_sections`` is ``True`` then - on encountering a - subsection, *first* the function is called for the *whole* subsection, - and then recurses into it's members. This means your function must be - able to handle strings, dictionaries and lists. This allows you - to change the key of subsections as well as for ordinary members. The - return value when called on the whole subsection has to be discarded. - - See the encode and decode methods for examples, including functions. - - .. caution:: - - You can use ``walk`` to transform the names of members of a section - but you mustn't add or delete members. - - >>> config = '''[XXXXsection] - ... XXXXkey = XXXXvalue'''.splitlines() - >>> cfg = ConfigObj(config) - >>> cfg - {'XXXXsection': {'XXXXkey': 'XXXXvalue'}} - >>> def transform(section, key): - ... val = section[key] - ... newkey = key.replace('XXXX', 'CLIENT1') - ... section.rename(key, newkey) - ... if isinstance(val, (tuple, list, dict)): - ... pass - ... else: - ... val = val.replace('XXXX', 'CLIENT1') - ... section[newkey] = val - >>> cfg.walk(transform, call_on_sections=True) - {'CLIENT1section': {'CLIENT1key': None}} - >>> cfg - {'CLIENT1section': {'CLIENT1key': 'CLIENT1value'}} - """ - out = {} - # scalars first - for i in range(len(self.scalars)): - entry = self.scalars[i] - try: - val = function(self, entry, **keywargs) - # bound again in case name has changed - entry = self.scalars[i] - out[entry] = val - except Exception: - if raise_errors: - raise - else: - entry = self.scalars[i] - out[entry] = False - # then sections - for i in range(len(self.sections)): - entry = self.sections[i] - if call_on_sections: - try: - function(self, entry, **keywargs) - except Exception: - if raise_errors: - raise - else: - entry = self.sections[i] - out[entry] = False - # bound again in case name has changed - entry = self.sections[i] - # previous result is discarded - out[entry] = self[entry].walk( - function, - raise_errors=raise_errors, - call_on_sections=call_on_sections, - **keywargs) - return out - - - def decode(self, encoding): - """ - Decode all strings and values to unicode, using the specified encoding. - - Works with subsections and list values. - - Uses the ``walk`` method. - - Testing ``encode`` and ``decode``. - >>> m = ConfigObj(a) - >>> m.decode('ascii') - >>> def testuni(val): - ... for entry in val: - ... if not isinstance(entry, unicode): - ... print >> sys.stderr, type(entry) - ... raise AssertionError, 'decode failed.' - ... if isinstance(val[entry], dict): - ... testuni(val[entry]) - ... elif not isinstance(val[entry], unicode): - ... raise AssertionError, 'decode failed.' - >>> testuni(m) - >>> m.encode('ascii') - >>> a == m - 1 - """ - warn('use of ``decode`` is deprecated.', DeprecationWarning) - def decode(section, key, encoding=encoding, warn=True): - """ """ - val = section[key] - if isinstance(val, (list, tuple)): - newval = [] - for entry in val: - newval.append(entry.decode(encoding)) - elif isinstance(val, dict): - newval = val - else: - newval = val.decode(encoding) - newkey = key.decode(encoding) - section.rename(key, newkey) - section[newkey] = newval - # using ``call_on_sections`` allows us to modify section names - self.walk(decode, call_on_sections=True) - - - def encode(self, encoding): - """ - Encode all strings and values from unicode, - using the specified encoding. - - Works with subsections and list values. - Uses the ``walk`` method. - """ - warn('use of ``encode`` is deprecated.', DeprecationWarning) - def encode(section, key, encoding=encoding): - """ """ - val = section[key] - if isinstance(val, (list, tuple)): - newval = [] - for entry in val: - newval.append(entry.encode(encoding)) - elif isinstance(val, dict): - newval = val - else: - newval = val.encode(encoding) - newkey = key.encode(encoding) - section.rename(key, newkey) - section[newkey] = newval - self.walk(encode, call_on_sections=True) - - - def istrue(self, key): - """A deprecated version of ``as_bool``.""" - warn('use of ``istrue`` is deprecated. Use ``as_bool`` method ' - 'instead.', DeprecationWarning) - return self.as_bool(key) - - - def as_bool(self, key): - """ - Accepts a key as input. The corresponding value must be a string or - the objects (``True`` or 1) or (``False`` or 0). We allow 0 and 1 to - retain compatibility with Python 2.2. - - If the string is one of ``True``, ``On``, ``Yes``, or ``1`` it returns - ``True``. - - If the string is one of ``False``, ``Off``, ``No``, or ``0`` it returns - ``False``. - - ``as_bool`` is not case sensitive. - - Any other input will raise a ``ValueError``. - - >>> a = ConfigObj() - >>> a['a'] = 'fish' - >>> a.as_bool('a') - Traceback (most recent call last): - ValueError: Value "fish" is neither True nor False - >>> a['b'] = 'True' - >>> a.as_bool('b') - 1 - >>> a['b'] = 'off' - >>> a.as_bool('b') - 0 - """ - val = self[key] - if val == True: - return True - elif val == False: - return False - else: - try: - if not isinstance(val, StringTypes): - # TODO: Why do we raise a KeyError here? - raise KeyError() - else: - return self.main._bools[val.lower()] - except KeyError: - raise ValueError('Value "%s" is neither True nor False' % val) - - - def as_int(self, key): - """ - A convenience method which coerces the specified value to an integer. - - If the value is an invalid literal for ``int``, a ``ValueError`` will - be raised. - - >>> a = ConfigObj() - >>> a['a'] = 'fish' - >>> a.as_int('a') - Traceback (most recent call last): - ValueError: invalid literal for int(): fish - >>> a['b'] = '1' - >>> a.as_int('b') - 1 - >>> a['b'] = '3.2' - >>> a.as_int('b') - Traceback (most recent call last): - ValueError: invalid literal for int(): 3.2 - """ - return int(self[key]) - - - def as_float(self, key): - """ - A convenience method which coerces the specified value to a float. - - If the value is an invalid literal for ``float``, a ``ValueError`` will - be raised. - - >>> a = ConfigObj() - >>> a['a'] = 'fish' - >>> a.as_float('a') - Traceback (most recent call last): - ValueError: invalid literal for float(): fish - >>> a['b'] = '1' - >>> a.as_float('b') - 1.0 - >>> a['b'] = '3.2' - >>> a.as_float('b') - 3.2000000000000002 - """ - return float(self[key]) - - - def restore_default(self, key): - """ - Restore (and return) default value for the specified key. - - This method will only work for a ConfigObj that was created - with a configspec and has been validated. - - If there is no default value for this key, ``KeyError`` is raised. - """ - default = self.default_values[key] - dict.__setitem__(self, key, default) - if key not in self.defaults: - self.defaults.append(key) - return default - - - def restore_defaults(self): - """ - Recursively restore default values to all members - that have them. - - This method will only work for a ConfigObj that was created - with a configspec and has been validated. - - It doesn't delete or modify entries without default values. - """ - for key in self.default_values: - self.restore_default(key) - - for section in self.sections: - self[section].restore_defaults() - - -class ConfigObj(Section): - """An object to read, create, and write config files.""" - - _keyword = re.compile(r'''^ # line start - (\s*) # indentation - ( # keyword - (?:".*?")| # double quotes - (?:'.*?')| # single quotes - (?:[^'"=].*?) # no quotes - ) - \s*=\s* # divider - (.*) # value (including list values and comments) - $ # line end - ''', - re.VERBOSE) - - _sectionmarker = re.compile(r'''^ - (\s*) # 1: indentation - ((?:\[\s*)+) # 2: section marker open - ( # 3: section name open - (?:"\s*\S.*?\s*")| # at least one non-space with double quotes - (?:'\s*\S.*?\s*')| # at least one non-space with single quotes - (?:[^'"\s].*?) # at least one non-space unquoted - ) # section name close - ((?:\s*\])+) # 4: section marker close - \s*(\#.*)? # 5: optional comment - $''', - re.VERBOSE) - - # this regexp pulls list values out as a single string - # or single values and comments - # FIXME: this regex adds a '' to the end of comma terminated lists - # workaround in ``_handle_value`` - _valueexp = re.compile(r'''^ - (?: - (?: - ( - (?: - (?: - (?:".*?")| # double quotes - (?:'.*?')| # single quotes - (?:[^'",\#][^,\#]*?) # unquoted - ) - \s*,\s* # comma - )* # match all list items ending in a comma (if any) - ) - ( - (?:".*?")| # double quotes - (?:'.*?')| # single quotes - (?:[^'",\#\s][^,]*?)| # unquoted - (?:(? 1: - msg = "Parsing failed with several errors.\nFirst error %s" % info - error = ConfigObjError(msg) - else: - error = self._errors[0] - # set the errors attribute; it's a list of tuples: - # (error_type, message, line_number) - error.errors = self._errors - # set the config attribute - error.config = self - raise error - # delete private attributes - del self._errors - - if configspec is None: - self.configspec = None - else: - self._handle_configspec(configspec) - - - def _initialise(self, options=None): - if options is None: - options = OPTION_DEFAULTS - - # initialise a few variables - self.filename = None - self._errors = [] - self.raise_errors = options['raise_errors'] - self.interpolation = options['interpolation'] - self.list_values = options['list_values'] - self.create_empty = options['create_empty'] - self.file_error = options['file_error'] - self.stringify = options['stringify'] - self.indent_type = options['indent_type'] - self.encoding = options['encoding'] - self.default_encoding = options['default_encoding'] - self.BOM = False - self.newlines = None - self.write_empty_values = options['write_empty_values'] - self.unrepr = options['unrepr'] - - self.initial_comment = [] - self.final_comment = [] - self.configspec = {} - - # Clear section attributes as well - Section._initialise(self) - - - def __repr__(self): - return ('ConfigObj({%s})' % - ', '.join([('%s: %s' % (repr(key), repr(self[key]))) - for key in (self.scalars + self.sections)])) - - - def _handle_bom(self, infile): - """ - Handle any BOM, and decode if necessary. - - If an encoding is specified, that *must* be used - but the BOM should - still be removed (and the BOM attribute set). - - (If the encoding is wrongly specified, then a BOM for an alternative - encoding won't be discovered or removed.) - - If an encoding is not specified, UTF8 or UTF16 BOM will be detected and - removed. The BOM attribute will be set. UTF16 will be decoded to - unicode. - - NOTE: This method must not be called with an empty ``infile``. - - Specifying the *wrong* encoding is likely to cause a - ``UnicodeDecodeError``. - - ``infile`` must always be returned as a list of lines, but may be - passed in as a single string. - """ - if ((self.encoding is not None) and - (self.encoding.lower() not in BOM_LIST)): - # No need to check for a BOM - # the encoding specified doesn't have one - # just decode - return self._decode(infile, self.encoding) - - if isinstance(infile, (list, tuple)): - line = infile[0] - else: - line = infile - if self.encoding is not None: - # encoding explicitly supplied - # And it could have an associated BOM - # TODO: if encoding is just UTF16 - we ought to check for both - # TODO: big endian and little endian versions. - enc = BOM_LIST[self.encoding.lower()] - if enc == 'utf_16': - # For UTF16 we try big endian and little endian - for BOM, (encoding, final_encoding) in BOMS.items(): - if not final_encoding: - # skip UTF8 - continue - if infile.startswith(BOM): - ### BOM discovered - ##self.BOM = True - # Don't need to remove BOM - return self._decode(infile, encoding) - - # If we get this far, will *probably* raise a DecodeError - # As it doesn't appear to start with a BOM - return self._decode(infile, self.encoding) - - # Must be UTF8 - BOM = BOM_SET[enc] - if not line.startswith(BOM): - return self._decode(infile, self.encoding) - - newline = line[len(BOM):] - - # BOM removed - if isinstance(infile, (list, tuple)): - infile[0] = newline - else: - infile = newline - self.BOM = True - return self._decode(infile, self.encoding) - - # No encoding specified - so we need to check for UTF8/UTF16 - for BOM, (encoding, final_encoding) in BOMS.items(): - if not line.startswith(BOM): - continue - else: - # BOM discovered - self.encoding = final_encoding - if not final_encoding: - self.BOM = True - # UTF8 - # remove BOM - newline = line[len(BOM):] - if isinstance(infile, (list, tuple)): - infile[0] = newline - else: - infile = newline - # UTF8 - don't decode - if isinstance(infile, StringTypes): - return infile.splitlines(True) - else: - return infile - # UTF16 - have to decode - return self._decode(infile, encoding) - - # No BOM discovered and no encoding specified, just return - if isinstance(infile, StringTypes): - # infile read from a file will be a single string - return infile.splitlines(True) - return infile - - - def _a_to_u(self, aString): - """Decode ASCII strings to unicode if a self.encoding is specified.""" - if self.encoding: - return aString.decode('ascii') - else: - return aString - - - def _decode(self, infile, encoding): - """ - Decode infile to unicode. Using the specified encoding. - - if is a string, it also needs converting to a list. - """ - if isinstance(infile, StringTypes): - # can't be unicode - # NOTE: Could raise a ``UnicodeDecodeError`` - return infile.decode(encoding).splitlines(True) - for i, line in enumerate(infile): - if not isinstance(line, unicode): - # NOTE: The isinstance test here handles mixed lists of unicode/string - # NOTE: But the decode will break on any non-string values - # NOTE: Or could raise a ``UnicodeDecodeError`` - infile[i] = line.decode(encoding) - return infile - - - def _decode_element(self, line): - """Decode element to unicode if necessary.""" - if not self.encoding: - return line - if isinstance(line, str) and self.default_encoding: - return line.decode(self.default_encoding) - return line - - - def _str(self, value): - """ - Used by ``stringify`` within validate, to turn non-string values - into strings. - """ - if not isinstance(value, StringTypes): - return str(value) - else: - return value - - - def _parse(self, infile): - """Actually parse the config file.""" - temp_list_values = self.list_values - if self.unrepr: - self.list_values = False - - comment_list = [] - done_start = False - this_section = self - maxline = len(infile) - 1 - cur_index = -1 - reset_comment = False - - while cur_index < maxline: - if reset_comment: - comment_list = [] - cur_index += 1 - line = infile[cur_index] - sline = line.strip() - # do we have anything on the line ? - if not sline or sline.startswith('#'): - reset_comment = False - comment_list.append(line) - continue - - if not done_start: - # preserve initial comment - self.initial_comment = comment_list - comment_list = [] - done_start = True - - reset_comment = True - # first we check if it's a section marker - mat = self._sectionmarker.match(line) - if mat is not None: - # is a section line - (indent, sect_open, sect_name, sect_close, comment) = mat.groups() - if indent and (self.indent_type is None): - self.indent_type = indent - cur_depth = sect_open.count('[') - if cur_depth != sect_close.count(']'): - self._handle_error("Cannot compute the section depth at line %s.", - NestingError, infile, cur_index) - continue - - if cur_depth < this_section.depth: - # the new section is dropping back to a previous level - try: - parent = self._match_depth(this_section, - cur_depth).parent - except SyntaxError: - self._handle_error("Cannot compute nesting level at line %s.", - NestingError, infile, cur_index) - continue - elif cur_depth == this_section.depth: - # the new section is a sibling of the current section - parent = this_section.parent - elif cur_depth == this_section.depth + 1: - # the new section is a child the current section - parent = this_section - else: - self._handle_error("Section too nested at line %s.", - NestingError, infile, cur_index) - - sect_name = self._unquote(sect_name) - if parent.has_key(sect_name): - self._handle_error('Duplicate section name at line %s.', - DuplicateError, infile, cur_index) - continue - - # create the new section - this_section = Section( - parent, - cur_depth, - self, - name=sect_name) - parent[sect_name] = this_section - parent.inline_comments[sect_name] = comment - parent.comments[sect_name] = comment_list - continue - # - # it's not a section marker, - # so it should be a valid ``key = value`` line - mat = self._keyword.match(line) - if mat is None: - # it neither matched as a keyword - # or a section marker - self._handle_error( - 'Invalid line at line "%s".', - ParseError, infile, cur_index) - else: - # is a keyword value - # value will include any inline comment - (indent, key, value) = mat.groups() - if indent and (self.indent_type is None): - self.indent_type = indent - # check for a multiline value - if value[:3] in ['"""', "'''"]: - try: - (value, comment, cur_index) = self._multiline( - value, infile, cur_index, maxline) - except SyntaxError: - self._handle_error( - 'Parse error in value at line %s.', - ParseError, infile, cur_index) - continue - else: - if self.unrepr: - comment = '' - try: - value = unrepr(value) - except Exception, e: - if type(e) == UnknownType: - msg = 'Unknown name or type in value at line %s.' - else: - msg = 'Parse error in value at line %s.' - self._handle_error(msg, UnreprError, infile, - cur_index) - continue - else: - if self.unrepr: - comment = '' - try: - value = unrepr(value) - except Exception, e: - if isinstance(e, UnknownType): - msg = 'Unknown name or type in value at line %s.' - else: - msg = 'Parse error in value at line %s.' - self._handle_error(msg, UnreprError, infile, - cur_index) - continue - else: - # extract comment and lists - try: - (value, comment) = self._handle_value(value) - except SyntaxError: - self._handle_error( - 'Parse error in value at line %s.', - ParseError, infile, cur_index) - continue - # - key = self._unquote(key) - if this_section.has_key(key): - self._handle_error( - 'Duplicate keyword name at line %s.', - DuplicateError, infile, cur_index) - continue - # add the key. - # we set unrepr because if we have got this far we will never - # be creating a new section - this_section.__setitem__(key, value, unrepr=True) - this_section.inline_comments[key] = comment - this_section.comments[key] = comment_list - continue - # - if self.indent_type is None: - # no indentation used, set the type accordingly - self.indent_type = '' - - # preserve the final comment - if not self and not self.initial_comment: - self.initial_comment = comment_list - elif not reset_comment: - self.final_comment = comment_list - self.list_values = temp_list_values - - - def _match_depth(self, sect, depth): - """ - Given a section and a depth level, walk back through the sections - parents to see if the depth level matches a previous section. - - Return a reference to the right section, - or raise a SyntaxError. - """ - while depth < sect.depth: - if sect is sect.parent: - # we've reached the top level already - raise SyntaxError() - sect = sect.parent - if sect.depth == depth: - return sect - # shouldn't get here - raise SyntaxError() - - - def _handle_error(self, text, ErrorClass, infile, cur_index): - """ - Handle an error according to the error settings. - - Either raise the error or store it. - The error will have occured at ``cur_index`` - """ - line = infile[cur_index] - cur_index += 1 - message = text % cur_index - error = ErrorClass(message, cur_index, line) - if self.raise_errors: - # raise the error - parsing stops here - raise error - # store the error - # reraise when parsing has finished - self._errors.append(error) - - - def _unquote(self, value): - """Return an unquoted version of a value""" - if (value[0] == value[-1]) and (value[0] in ('"', "'")): - value = value[1:-1] - return value - - - def _quote(self, value, multiline=True): - """ - Return a safely quoted version of a value. - - Raise a ConfigObjError if the value cannot be safely quoted. - If multiline is ``True`` (default) then use triple quotes - if necessary. - - Don't quote values that don't need it. - Recursively quote members of a list and return a comma joined list. - Multiline is ``False`` for lists. - Obey list syntax for empty and single member lists. - - If ``list_values=False`` then the value is only quoted if it contains - a ``\n`` (is multiline) or '#'. - - If ``write_empty_values`` is set, and the value is an empty string, it - won't be quoted. - """ - if multiline and self.write_empty_values and value == '': - # Only if multiline is set, so that it is used for values not - # keys, and not values that are part of a list - return '' - - if multiline and isinstance(value, (list, tuple)): - if not value: - return ',' - elif len(value) == 1: - return self._quote(value[0], multiline=False) + ',' - return ', '.join([self._quote(val, multiline=False) - for val in value]) - if not isinstance(value, StringTypes): - if self.stringify: - value = str(value) - else: - raise TypeError('Value "%s" is not a string.' % value) - - if not value: - return '""' - - no_lists_no_quotes = not self.list_values and '\n' not in value and '#' not in value - need_triple = multiline and ((("'" in value) and ('"' in value)) or ('\n' in value )) - hash_triple_quote = multiline and not need_triple and ("'" in value) and ('"' in value) and ('#' in value) - check_for_single = (no_lists_no_quotes or not need_triple) and not hash_triple_quote - - if check_for_single: - if not self.list_values: - # we don't quote if ``list_values=False`` - quot = noquot - # for normal values either single or double quotes will do - elif '\n' in value: - # will only happen if multiline is off - e.g. '\n' in key - raise ConfigObjError('Value "%s" cannot be safely quoted.' % value) - elif ((value[0] not in wspace_plus) and - (value[-1] not in wspace_plus) and - (',' not in value)): - quot = noquot - else: - quot = self._get_single_quote(value) - else: - # if value has '\n' or "'" *and* '"', it will need triple quotes - quot = self._get_triple_quote(value) - - if quot == noquot and '#' in value and self.list_values: - quot = self._get_single_quote(value) - - return quot % value - - - def _get_single_quote(self, value): - if ("'" in value) and ('"' in value): - raise ConfigObjError('Value "%s" cannot be safely quoted.' % value) - elif '"' in value: - quot = squot - else: - quot = dquot - return quot - - - def _get_triple_quote(self, value): - if (value.find('"""') != -1) and (value.find("'''") != -1): - raise ConfigObjError('Value "%s" cannot be safely quoted.' % value) - if value.find('"""') == -1: - quot = tdquot - else: - quot = tsquot - return quot - - - def _handle_value(self, value): - """ - Given a value string, unquote, remove comment, - handle lists. (including empty and single member lists) - """ - # do we look for lists in values ? - if not self.list_values: - mat = self._nolistvalue.match(value) - if mat is None: - raise SyntaxError() - # NOTE: we don't unquote here - return mat.groups() - # - mat = self._valueexp.match(value) - if mat is None: - # the value is badly constructed, probably badly quoted, - # or an invalid list - raise SyntaxError() - (list_values, single, empty_list, comment) = mat.groups() - if (list_values == '') and (single is None): - # change this if you want to accept empty values - raise SyntaxError() - # NOTE: note there is no error handling from here if the regex - # is wrong: then incorrect values will slip through - if empty_list is not None: - # the single comma - meaning an empty list - return ([], comment) - if single is not None: - # handle empty values - if list_values and not single: - # FIXME: the '' is a workaround because our regex now matches - # '' at the end of a list if it has a trailing comma - single = None - else: - single = single or '""' - single = self._unquote(single) - if list_values == '': - # not a list value - return (single, comment) - the_list = self._listvalueexp.findall(list_values) - the_list = [self._unquote(val) for val in the_list] - if single is not None: - the_list += [single] - return (the_list, comment) - - - def _multiline(self, value, infile, cur_index, maxline): - """Extract the value, where we are in a multiline situation.""" - quot = value[:3] - newvalue = value[3:] - single_line = self._triple_quote[quot][0] - multi_line = self._triple_quote[quot][1] - mat = single_line.match(value) - if mat is not None: - retval = list(mat.groups()) - retval.append(cur_index) - return retval - elif newvalue.find(quot) != -1: - # somehow the triple quote is missing - raise SyntaxError() - # - while cur_index < maxline: - cur_index += 1 - newvalue += '\n' - line = infile[cur_index] - if line.find(quot) == -1: - newvalue += line - else: - # end of multiline, process it - break - else: - # we've got to the end of the config, oops... - raise SyntaxError() - mat = multi_line.match(line) - if mat is None: - # a badly formed line - raise SyntaxError() - (value, comment) = mat.groups() - return (newvalue + value, comment, cur_index) - - - def _handle_configspec(self, configspec): - """Parse the configspec.""" - # FIXME: Should we check that the configspec was created with the - # correct settings ? (i.e. ``list_values=False``) - if not isinstance(configspec, ConfigObj): - try: - configspec = ConfigObj(configspec, - raise_errors=True, - file_error=True, - list_values=False) - except ConfigObjError, e: - # FIXME: Should these errors have a reference - # to the already parsed ConfigObj ? - raise ConfigspecError('Parsing configspec failed: %s' % e) - except IOError, e: - raise IOError('Reading configspec failed: %s' % e) - - self._set_configspec_value(configspec, self) - - - def _set_configspec_value(self, configspec, section): - """Used to recursively set configspec values.""" - if '__many__' in configspec.sections: - section.configspec['__many__'] = configspec['__many__'] - if len(configspec.sections) > 1: - # FIXME: can we supply any useful information here ? - raise RepeatSectionError() - - if hasattr(configspec, 'initial_comment'): - section._configspec_initial_comment = configspec.initial_comment - section._configspec_final_comment = configspec.final_comment - section._configspec_encoding = configspec.encoding - section._configspec_BOM = configspec.BOM - section._configspec_newlines = configspec.newlines - section._configspec_indent_type = configspec.indent_type - - for entry in configspec.scalars: - section._configspec_comments[entry] = configspec.comments[entry] - section._configspec_inline_comments[entry] = configspec.inline_comments[entry] - section.configspec[entry] = configspec[entry] - section._order.append(entry) - - for entry in configspec.sections: - if entry == '__many__': - continue - - section._cs_section_comments[entry] = configspec.comments[entry] - section._cs_section_inline_comments[entry] = configspec.inline_comments[entry] - if not section.has_key(entry): - section[entry] = {} - self._set_configspec_value(configspec[entry], section[entry]) - - - def _handle_repeat(self, section, configspec): - """Dynamically assign configspec for repeated section.""" - try: - section_keys = configspec.sections - scalar_keys = configspec.scalars - except AttributeError: - section_keys = [entry for entry in configspec - if isinstance(configspec[entry], dict)] - scalar_keys = [entry for entry in configspec - if not isinstance(configspec[entry], dict)] - - if '__many__' in section_keys and len(section_keys) > 1: - # FIXME: can we supply any useful information here ? - raise RepeatSectionError() - - scalars = {} - sections = {} - for entry in scalar_keys: - val = configspec[entry] - scalars[entry] = val - for entry in section_keys: - val = configspec[entry] - if entry == '__many__': - scalars[entry] = val - continue - sections[entry] = val - - section.configspec = scalars - for entry in sections: - if not section.has_key(entry): - section[entry] = {} - self._handle_repeat(section[entry], sections[entry]) - - - def _write_line(self, indent_string, entry, this_entry, comment): - """Write an individual line, for the write method""" - # NOTE: the calls to self._quote here handles non-StringType values. - if not self.unrepr: - val = self._decode_element(self._quote(this_entry)) - else: - val = repr(this_entry) - return '%s%s%s%s%s' % (indent_string, - self._decode_element(self._quote(entry, multiline=False)), - self._a_to_u(' = '), - val, - self._decode_element(comment)) - - - def _write_marker(self, indent_string, depth, entry, comment): - """Write a section marker line""" - return '%s%s%s%s%s' % (indent_string, - self._a_to_u('[' * depth), - self._quote(self._decode_element(entry), multiline=False), - self._a_to_u(']' * depth), - self._decode_element(comment)) - - - def _handle_comment(self, comment): - """Deal with a comment.""" - if not comment: - return '' - start = self.indent_type - if not comment.startswith('#'): - start += self._a_to_u(' # ') - return (start + comment) - - - # Public methods - - def write(self, outfile=None, section=None): - """ - Write the current ConfigObj as a file - - tekNico: FIXME: use StringIO instead of real files - - >>> filename = a.filename - >>> a.filename = 'test.ini' - >>> a.write() - >>> a.filename = filename - >>> a == ConfigObj('test.ini', raise_errors=True) - 1 - """ - if self.indent_type is None: - # this can be true if initialised from a dictionary - self.indent_type = DEFAULT_INDENT_TYPE - - out = [] - cs = self._a_to_u('#') - csp = self._a_to_u('# ') - if section is None: - int_val = self.interpolation - self.interpolation = False - section = self - for line in self.initial_comment: - line = self._decode_element(line) - stripped_line = line.strip() - if stripped_line and not stripped_line.startswith(cs): - line = csp + line - out.append(line) - - indent_string = self.indent_type * section.depth - for entry in (section.scalars + section.sections): - if entry in section.defaults: - # don't write out default values - continue - for comment_line in section.comments[entry]: - comment_line = self._decode_element(comment_line.lstrip()) - if comment_line and not comment_line.startswith(cs): - comment_line = csp + comment_line - out.append(indent_string + comment_line) - this_entry = section[entry] - comment = self._handle_comment(section.inline_comments[entry]) - - if isinstance(this_entry, dict): - # a section - out.append(self._write_marker( - indent_string, - this_entry.depth, - entry, - comment)) - out.extend(self.write(section=this_entry)) - else: - out.append(self._write_line( - indent_string, - entry, - this_entry, - comment)) - - if section is self: - for line in self.final_comment: - line = self._decode_element(line) - stripped_line = line.strip() - if stripped_line and not stripped_line.startswith(cs): - line = csp + line - out.append(line) - self.interpolation = int_val - - if section is not self: - return out - - if (self.filename is None) and (outfile is None): - # output a list of lines - # might need to encode - # NOTE: This will *screw* UTF16, each line will start with the BOM - if self.encoding: - out = [l.encode(self.encoding) for l in out] - if (self.BOM and ((self.encoding is None) or - (BOM_LIST.get(self.encoding.lower()) == 'utf_8'))): - # Add the UTF8 BOM - if not out: - out.append('') - out[0] = BOM_UTF8 + out[0] - return out - - # Turn the list to a string, joined with correct newlines - newline = self.newlines or os.linesep - output = self._a_to_u(newline).join(out) - if self.encoding: - output = output.encode(self.encoding) - if self.BOM and ((self.encoding is None) or match_utf8(self.encoding)): - # Add the UTF8 BOM - output = BOM_UTF8 + output - - if not output.endswith(newline): - output += newline - if outfile is not None: - outfile.write(output) - else: - h = open(self.filename, 'wb') - h.write(output) - h.close() - - - def validate(self, validator, preserve_errors=False, copy=False, - section=None): - """ - Test the ConfigObj against a configspec. - - It uses the ``validator`` object from *validate.py*. - - To run ``validate`` on the current ConfigObj, call: :: - - test = config.validate(validator) - - (Normally having previously passed in the configspec when the ConfigObj - was created - you can dynamically assign a dictionary of checks to the - ``configspec`` attribute of a section though). - - It returns ``True`` if everything passes, or a dictionary of - pass/fails (True/False). If every member of a subsection passes, it - will just have the value ``True``. (It also returns ``False`` if all - members fail). - - In addition, it converts the values from strings to their native - types if their checks pass (and ``stringify`` is set). - - If ``preserve_errors`` is ``True`` (``False`` is default) then instead - of a marking a fail with a ``False``, it will preserve the actual - exception object. This can contain info about the reason for failure. - For example the ``VdtValueTooSmallError`` indicates that the value - supplied was too small. If a value (or section) is missing it will - still be marked as ``False``. - - You must have the validate module to use ``preserve_errors=True``. - - You can then use the ``flatten_errors`` function to turn your nested - results dictionary into a flattened list of failures - useful for - displaying meaningful error messages. - """ - if section is None: - if self.configspec is None: - raise ValueError('No configspec supplied.') - if preserve_errors: - # We do this once to remove a top level dependency on the validate module - # Which makes importing configobj faster - from validate import VdtMissingValue - self._vdtMissingValue = VdtMissingValue - section = self - # - spec_section = section.configspec - if copy and hasattr(section, '_configspec_initial_comment'): - section.initial_comment = section._configspec_initial_comment - section.final_comment = section._configspec_final_comment - section.encoding = section._configspec_encoding - section.BOM = section._configspec_BOM - section.newlines = section._configspec_newlines - section.indent_type = section._configspec_indent_type - - if '__many__' in section.configspec: - many = spec_section['__many__'] - # dynamically assign the configspecs - # for the sections below - for entry in section.sections: - self._handle_repeat(section[entry], many) - # - out = {} - ret_true = True - ret_false = True - order = [k for k in section._order if k in spec_section] - order += [k for k in spec_section if k not in order] - for entry in order: - if entry == '__many__': - continue - if (not entry in section.scalars) or (entry in section.defaults): - # missing entries - # or entries from defaults - missing = True - val = None - if copy and not entry in section.scalars: - # copy comments - section.comments[entry] = ( - section._configspec_comments.get(entry, [])) - section.inline_comments[entry] = ( - section._configspec_inline_comments.get(entry, '')) - # - else: - missing = False - val = section[entry] - try: - check = validator.check(spec_section[entry], - val, - missing=missing - ) - except validator.baseErrorClass, e: - if not preserve_errors or isinstance(e, self._vdtMissingValue): - out[entry] = False - else: - # preserve the error - out[entry] = e - ret_false = False - ret_true = False - else: - try: - section.default_values.pop(entry, None) - except AttributeError: - # For Python 2.2 compatibility - try: - del section.default_values[entry] - except KeyError: - pass - - if hasattr(validator, 'get_default_value'): - try: - section.default_values[entry] = validator.get_default_value(spec_section[entry]) - except KeyError: - # No default - pass - - ret_false = False - out[entry] = True - if self.stringify or missing: - # if we are doing type conversion - # or the value is a supplied default - if not self.stringify: - if isinstance(check, (list, tuple)): - # preserve lists - check = [self._str(item) for item in check] - elif missing and check is None: - # convert the None from a default to a '' - check = '' - else: - check = self._str(check) - if (check != val) or missing: - section[entry] = check - if not copy and missing and entry not in section.defaults: - section.defaults.append(entry) - # Missing sections will have been created as empty ones when the - # configspec was read. - for entry in section.sections: - # FIXME: this means DEFAULT is not copied in copy mode - if section is self and entry == 'DEFAULT': - continue - if copy: - section.comments[entry] = section._cs_section_comments.get(entry, []) - section.inline_comments[entry] = section._cs_section_inline_comments.get(entry, '') - check = self.validate(validator, preserve_errors=preserve_errors, copy=copy, section=section[entry]) - out[entry] = check - if check == False: - ret_true = False - elif check == True: - ret_false = False - else: - ret_true = False - ret_false = False - # - if ret_true: - return True - elif ret_false: - return False - return out - - - def reset(self): - """Clear ConfigObj instance and restore to 'freshly created' state.""" - self.clear() - self._initialise() - # FIXME: Should be done by '_initialise', but ConfigObj constructor (and reload) - # requires an empty dictionary - self.configspec = None - # Just to be sure ;-) - self._original_configspec = None - - - def reload(self): - """ - Reload a ConfigObj from file. - - This method raises a ``ReloadError`` if the ConfigObj doesn't have - a filename attribute pointing to a file. - """ - if not isinstance(self.filename, StringTypes): - raise ReloadError() - - filename = self.filename - current_options = {} - for entry in OPTION_DEFAULTS: - if entry == 'configspec': - continue - current_options[entry] = getattr(self, entry) - - configspec = self._original_configspec - current_options['configspec'] = configspec - - self.clear() - self._initialise(current_options) - self._load(filename, configspec) - - - -class SimpleVal(object): - """ - A simple validator. - Can be used to check that all members expected are present. - - To use it, provide a configspec with all your members in (the value given - will be ignored). Pass an instance of ``SimpleVal`` to the ``validate`` - method of your ``ConfigObj``. ``validate`` will return ``True`` if all - members are present, or a dictionary with True/False meaning - present/missing. (Whole missing sections will be replaced with ``False``) - """ - - def __init__(self): - self.baseErrorClass = ConfigObjError - - def check(self, check, member, missing=False): - """A dummy check method, always returns the value unchanged.""" - if missing: - raise self.baseErrorClass() - return member - - -# Check / processing functions for options -def flatten_errors(cfg, res, levels=None, results=None): - """ - An example function that will turn a nested dictionary of results - (as returned by ``ConfigObj.validate``) into a flat list. - - ``cfg`` is the ConfigObj instance being checked, ``res`` is the results - dictionary returned by ``validate``. - - (This is a recursive function, so you shouldn't use the ``levels`` or - ``results`` arguments - they are used by the function. - - Returns a list of keys that failed. Each member of the list is a tuple : - :: - - ([list of sections...], key, result) - - If ``validate`` was called with ``preserve_errors=False`` (the default) - then ``result`` will always be ``False``. - - *list of sections* is a flattened list of sections that the key was found - in. - - If the section was missing then key will be ``None``. - - If the value (or section) was missing then ``result`` will be ``False``. - - If ``validate`` was called with ``preserve_errors=True`` and a value - was present, but failed the check, then ``result`` will be the exception - object returned. You can use this as a string that describes the failure. - - For example *The value "3" is of the wrong type*. - - >>> import validate - >>> vtor = validate.Validator() - >>> my_ini = ''' - ... option1 = True - ... [section1] - ... option1 = True - ... [section2] - ... another_option = Probably - ... [section3] - ... another_option = True - ... [[section3b]] - ... value = 3 - ... value2 = a - ... value3 = 11 - ... ''' - >>> my_cfg = ''' - ... option1 = boolean() - ... option2 = boolean() - ... option3 = boolean(default=Bad_value) - ... [section1] - ... option1 = boolean() - ... option2 = boolean() - ... option3 = boolean(default=Bad_value) - ... [section2] - ... another_option = boolean() - ... [section3] - ... another_option = boolean() - ... [[section3b]] - ... value = integer - ... value2 = integer - ... value3 = integer(0, 10) - ... [[[section3b-sub]]] - ... value = string - ... [section4] - ... another_option = boolean() - ... ''' - >>> cs = my_cfg.split('\\n') - >>> ini = my_ini.split('\\n') - >>> cfg = ConfigObj(ini, configspec=cs) - >>> res = cfg.validate(vtor, preserve_errors=True) - >>> errors = [] - >>> for entry in flatten_errors(cfg, res): - ... section_list, key, error = entry - ... section_list.insert(0, '[root]') - ... if key is not None: - ... section_list.append(key) - ... else: - ... section_list.append('[missing]') - ... section_string = ', '.join(section_list) - ... errors.append((section_string, ' = ', error)) - >>> errors.sort() - >>> for entry in errors: - ... print entry[0], entry[1], (entry[2] or 0) - [root], option2 = 0 - [root], option3 = the value "Bad_value" is of the wrong type. - [root], section1, option2 = 0 - [root], section1, option3 = the value "Bad_value" is of the wrong type. - [root], section2, another_option = the value "Probably" is of the wrong type. - [root], section3, section3b, section3b-sub, [missing] = 0 - [root], section3, section3b, value2 = the value "a" is of the wrong type. - [root], section3, section3b, value3 = the value "11" is too big. - [root], section4, [missing] = 0 - """ - if levels is None: - # first time called - levels = [] - results = [] - if res is True: - return results - if res is False: - results.append((levels[:], None, False)) - if levels: - levels.pop() - return results - for (key, val) in res.items(): - if val == True: - continue - if isinstance(cfg.get(key), dict): - # Go down one level - levels.append(key) - flatten_errors(cfg[key], val, levels, results) - continue - results.append((levels[:], key, val)) - # - # Go up one level - if levels: - levels.pop() - # - return results - - -"""*A programming language is a medium of expression.* - Paul Graham""" diff --git a/main/sabnzbd/utils/feedparser.py b/main/sabnzbd/utils/feedparser.py deleted file mode 100644 index bb802df..0000000 --- a/main/sabnzbd/utils/feedparser.py +++ /dev/null @@ -1,2858 +0,0 @@ -#!/usr/bin/env python -"""Universal feed parser - -Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds - -Visit http://feedparser.org/ for the latest version -Visit http://feedparser.org/docs/ for the latest documentation - -Required: Python 2.1 or later -Recommended: Python 2.3 or later -Recommended: CJKCodecs and iconv_codec -""" - -__version__ = "4.1"# + "$Revision: 1.92 $"[11:15] + "-cvs" -__license__ = """Copyright (c) 2002-2006, Mark Pilgrim, All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE.""" -__author__ = "Mark Pilgrim " -__contributors__ = ["Jason Diamond ", - "John Beimler ", - "Fazal Majid ", - "Aaron Swartz ", - "Kevin Marks "] -_debug = 0 - -# HTTP "User-Agent" header to send to servers when downloading feeds. -# If you are embedding feedparser in a larger application, you should -# change this to your application name and URL. -USER_AGENT = "UniversalFeedParser/%s +http://feedparser.org/" % __version__ - -# HTTP "Accept" header to send to servers when downloading feeds. If you don't -# want to send an Accept header, set this to None. -ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1" - -# List of preferred XML parsers, by SAX driver name. These will be tried first, -# but if they're not installed, Python will keep searching through its own list -# of pre-installed parsers until it finds one that supports everything we need. -PREFERRED_XML_PARSERS = ["drv_libxml2"] - -# If you want feedparser to automatically run HTML markup through HTML Tidy, set -# this to 1. Requires mxTidy -# or utidylib . -TIDY_MARKUP = 0 - -# List of Python interfaces for HTML Tidy, in order of preference. Only useful -# if TIDY_MARKUP = 1 -PREFERRED_TIDY_INTERFACES = ["uTidy", "mxTidy"] - -# ---------- required modules (should come with any Python distribution) ---------- -import sgmllib, re, sys, copy, urlparse, time, rfc822, types, cgi, urllib, urllib2 -try: - from cStringIO import StringIO as _StringIO -except: - from StringIO import StringIO as _StringIO - -# ---------- optional modules (feedparser will work without these, but with reduced functionality) ---------- - -# gzip is included with most Python distributions, but may not be available if you compiled your own -try: - import gzip -except: - gzip = None -try: - import zlib -except: - zlib = None - -# If a real XML parser is available, feedparser will attempt to use it. feedparser has -# been tested with the built-in SAX parser, PyXML, and libxml2. On platforms where the -# Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some -# versions of FreeBSD), feedparser will quietly fall back on regex-based parsing. -try: - import xml.sax - xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers - from xml.sax.saxutils import escape as _xmlescape - _XML_AVAILABLE = 1 -except: - _XML_AVAILABLE = 0 - def _xmlescape(data): - data = data.replace('&', '&') - data = data.replace('>', '>') - data = data.replace('<', '<') - return data - -# base64 support for Atom feeds that contain embedded binary data -try: - import base64, binascii -except: - base64 = binascii = None - -# cjkcodecs and iconv_codec provide support for more character encodings. -# Both are available from http://cjkpython.i18n.org/ -try: - import cjkcodecs.aliases -except: - pass -try: - import iconv_codec -except: - pass - -# chardet library auto-detects character encodings -# Download from http://chardet.feedparser.org/ -try: - import chardet - if _debug: - import chardet.constants - chardet.constants._debug = 1 -except: - chardet = None - -# ---------- don't touch these ---------- -class ThingsNobodyCaresAboutButMe(Exception): pass -class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass -class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass -class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass -class UndeclaredNamespace(Exception): pass - -sgmllib.tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') -sgmllib.special = re.compile('' % (tag, ''.join([' %s="%s"' % t for t in attrs])), escape=0) - - # match namespaces - if tag.find(':') <> -1: - prefix, suffix = tag.split(':', 1) - else: - prefix, suffix = '', tag - prefix = self.namespacemap.get(prefix, prefix) - if prefix: - prefix = prefix + '_' - - # special hack for better tracking of empty textinput/image elements in illformed feeds - if (not prefix) and tag not in ('title', 'link', 'description', 'name'): - self.intextinput = 0 - if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'): - self.inimage = 0 - - # call special handler (if defined) or default handler - methodname = '_start_' + prefix + suffix - try: - method = getattr(self, methodname) - return method(attrsD) - except AttributeError: - return self.push(prefix + suffix, 1) - - def unknown_endtag(self, tag): - if _debug: sys.stderr.write('end %s\n' % tag) - # match namespaces - if tag.find(':') <> -1: - prefix, suffix = tag.split(':', 1) - else: - prefix, suffix = '', tag - prefix = self.namespacemap.get(prefix, prefix) - if prefix: - prefix = prefix + '_' - - # call special handler (if defined) or default handler - methodname = '_end_' + prefix + suffix - try: - method = getattr(self, methodname) - method() - except AttributeError: - self.pop(prefix + suffix) - - # track inline content - if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): - # element declared itself as escaped markup, but it isn't really - self.contentparams['type'] = 'application/xhtml+xml' - if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': - tag = tag.split(':')[-1] - self.handle_data('' % tag, escape=0) - - # track xml:base and xml:lang going out of scope - if self.basestack: - self.basestack.pop() - if self.basestack and self.basestack[-1]: - self.baseuri = self.basestack[-1] - if self.langstack: - self.langstack.pop() - if self.langstack: # and (self.langstack[-1] is not None): - self.lang = self.langstack[-1] - - def handle_charref(self, ref): - # called for each character reference, e.g. for ' ', ref will be '160' - if not self.elementstack: return - ref = ref.lower() - if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'): - text = '&#%s;' % ref - else: - if ref[0] == 'x': - c = int(ref[1:], 16) - else: - c = int(ref) - text = unichr(c).encode('utf-8') - self.elementstack[-1][2].append(text) - - def handle_entityref(self, ref): - # called for each entity reference, e.g. for '©', ref will be 'copy' - if not self.elementstack: return - if _debug: sys.stderr.write('entering handle_entityref with %s\n' % ref) - if ref in ('lt', 'gt', 'quot', 'amp', 'apos'): - text = '&%s;' % ref - else: - # entity resolution graciously donated by Aaron Swartz - def name2cp(k): - import htmlentitydefs - if hasattr(htmlentitydefs, 'name2codepoint'): # requires Python 2.3 - return htmlentitydefs.name2codepoint[k] - k = htmlentitydefs.entitydefs[k] - if k.startswith('&#') and k.endswith(';'): - return int(k[2:-1]) # not in latin-1 - return ord(k) - try: name2cp(ref) - except KeyError: text = '&%s;' % ref - else: text = unichr(name2cp(ref)).encode('utf-8') - self.elementstack[-1][2].append(text) - - def handle_data(self, text, escape=1): - # called for each block of plain text, i.e. outside of any tag and - # not containing any character or entity references - if not self.elementstack: return - if escape and self.contentparams.get('type') == 'application/xhtml+xml': - text = _xmlescape(text) - self.elementstack[-1][2].append(text) - - def handle_comment(self, text): - # called for each comment, e.g. - pass - - def handle_pi(self, text): - # called for each processing instruction, e.g. - pass - - def handle_decl(self, text): - pass - - def parse_declaration(self, i): - # override internal declaration handler to handle CDATA blocks - if _debug: sys.stderr.write('entering parse_declaration\n') - if self.rawdata[i:i+9] == '', i) - if k == -1: k = len(self.rawdata) - self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0) - return k+3 - else: - k = self.rawdata.find('>', i) - return k+1 - - def mapContentType(self, contentType): - contentType = contentType.lower() - if contentType == 'text': - contentType = 'text/plain' - elif contentType == 'html': - contentType = 'text/html' - elif contentType == 'xhtml': - contentType = 'application/xhtml+xml' - return contentType - - def trackNamespace(self, prefix, uri): - loweruri = uri.lower() - if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/') and not self.version: - self.version = 'rss090' - if loweruri == 'http://purl.org/rss/1.0/' and not self.version: - self.version = 'rss10' - if loweruri == 'http://www.w3.org/2005/atom' and not self.version: - self.version = 'atom10' - if loweruri.find('backend.userland.com/rss') <> -1: - # match any backend.userland.com namespace - uri = 'http://backend.userland.com/rss' - loweruri = uri - if self._matchnamespaces.has_key(loweruri): - self.namespacemap[prefix] = self._matchnamespaces[loweruri] - self.namespacesInUse[self._matchnamespaces[loweruri]] = uri - else: - self.namespacesInUse[prefix or ''] = uri - - def resolveURI(self, uri): - return _urljoin(self.baseuri or '', uri) - - def decodeEntities(self, element, data): - return data - - def push(self, element, expectingText): - self.elementstack.append([element, expectingText, []]) - - def pop(self, element, stripWhitespace=1): - if not self.elementstack: return - if self.elementstack[-1][0] != element: return - - element, expectingText, pieces = self.elementstack.pop() - output = ''.join(pieces) - if stripWhitespace: - output = output.strip() - if not expectingText: return output - - # decode base64 content - if base64 and self.contentparams.get('base64', 0): - try: - output = base64.decodestring(output) - except binascii.Error: - pass - except binascii.Incomplete: - pass - - # resolve relative URIs - if (element in self.can_be_relative_uri) and output: - output = self.resolveURI(output) - - # decode entities within embedded markup - if not self.contentparams.get('base64', 0): - output = self.decodeEntities(element, output) - - # remove temporary cruft from contentparams - try: - del self.contentparams['mode'] - except KeyError: - pass - try: - del self.contentparams['base64'] - except KeyError: - pass - - # resolve relative URIs within embedded markup - if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: - if element in self.can_contain_relative_uris: - output = _resolveRelativeURIs(output, self.baseuri, self.encoding) - - # sanitize embedded markup - if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: - if element in self.can_contain_dangerous_markup: - output = _sanitizeHTML(output, self.encoding) - - if self.encoding and type(output) != type(u''): - try: - output = unicode(output, self.encoding) - except: - pass - - # categories/tags/keywords/whatever are handled in _end_category - if element == 'category': - return output - - # store output in appropriate place(s) - if self.inentry and not self.insource: - if element == 'content': - self.entries[-1].setdefault(element, []) - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - self.entries[-1][element].append(contentparams) - elif element == 'link': - self.entries[-1][element] = output - if output: - self.entries[-1]['links'][-1]['href'] = output - else: - if element == 'description': - element = 'summary' - self.entries[-1][element] = output - if self.incontent: - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - self.entries[-1][element + '_detail'] = contentparams - elif (self.infeed or self.insource) and (not self.intextinput) and (not self.inimage): - context = self._getContext() - if element == 'description': - element = 'subtitle' - context[element] = output - if element == 'link': - context['links'][-1]['href'] = output - elif self.incontent: - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - context[element + '_detail'] = contentparams - return output - - def pushContent(self, tag, attrsD, defaultContentType, expectingText): - self.incontent += 1 - self.contentparams = FeedParserDict({ - 'type': self.mapContentType(attrsD.get('type', defaultContentType)), - 'language': self.lang, - 'base': self.baseuri}) - self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams) - self.push(tag, expectingText) - - def popContent(self, tag): - value = self.pop(tag) - self.incontent -= 1 - self.contentparams.clear() - return value - - def _mapToStandardPrefix(self, name): - colonpos = name.find(':') - if colonpos <> -1: - prefix = name[:colonpos] - suffix = name[colonpos+1:] - prefix = self.namespacemap.get(prefix, prefix) - name = prefix + ':' + suffix - return name - - def _getAttribute(self, attrsD, name): - return attrsD.get(self._mapToStandardPrefix(name)) - - def _isBase64(self, attrsD, contentparams): - if attrsD.get('mode', '') == 'base64': - return 1 - if self.contentparams['type'].startswith('text/'): - return 0 - if self.contentparams['type'].endswith('+xml'): - return 0 - if self.contentparams['type'].endswith('/xml'): - return 0 - return 1 - - def _itsAnHrefDamnIt(self, attrsD): - href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None))) - if href: - try: - del attrsD['url'] - except KeyError: - pass - try: - del attrsD['uri'] - except KeyError: - pass - attrsD['href'] = href - return attrsD - - def _save(self, key, value): - context = self._getContext() - context.setdefault(key, value) - - def _start_rss(self, attrsD): - versionmap = {'0.91': 'rss091u', - '0.92': 'rss092', - '0.93': 'rss093', - '0.94': 'rss094'} - if not self.version: - attr_version = attrsD.get('version', '') - version = versionmap.get(attr_version) - if version: - self.version = version - elif attr_version.startswith('2.'): - self.version = 'rss20' - else: - self.version = 'rss' - - def _start_dlhottitles(self, attrsD): - self.version = 'hotrss' - - def _start_channel(self, attrsD): - self.infeed = 1 - self._cdf_common(attrsD) - _start_feedinfo = _start_channel - - def _cdf_common(self, attrsD): - if attrsD.has_key('lastmod'): - self._start_modified({}) - self.elementstack[-1][-1] = attrsD['lastmod'] - self._end_modified() - if attrsD.has_key('href'): - self._start_link({}) - self.elementstack[-1][-1] = attrsD['href'] - self._end_link() - - def _start_feed(self, attrsD): - self.infeed = 1 - versionmap = {'0.1': 'atom01', - '0.2': 'atom02', - '0.3': 'atom03'} - if not self.version: - attr_version = attrsD.get('version') - version = versionmap.get(attr_version) - if version: - self.version = version - else: - self.version = 'atom' - - def _end_channel(self): - self.infeed = 0 - _end_feed = _end_channel - - def _start_image(self, attrsD): - self.inimage = 1 - self.push('image', 0) - context = self._getContext() - context.setdefault('image', FeedParserDict()) - - def _end_image(self): - self.pop('image') - self.inimage = 0 - - def _start_textinput(self, attrsD): - self.intextinput = 1 - self.push('textinput', 0) - context = self._getContext() - context.setdefault('textinput', FeedParserDict()) - _start_textInput = _start_textinput - - def _end_textinput(self): - self.pop('textinput') - self.intextinput = 0 - _end_textInput = _end_textinput - - def _start_author(self, attrsD): - self.inauthor = 1 - self.push('author', 1) - _start_managingeditor = _start_author - _start_dc_author = _start_author - _start_dc_creator = _start_author - _start_itunes_author = _start_author - - def _end_author(self): - self.pop('author') - self.inauthor = 0 - self._sync_author_detail() - _end_managingeditor = _end_author - _end_dc_author = _end_author - _end_dc_creator = _end_author - _end_itunes_author = _end_author - - def _start_itunes_owner(self, attrsD): - self.inpublisher = 1 - self.push('publisher', 0) - - def _end_itunes_owner(self): - self.pop('publisher') - self.inpublisher = 0 - self._sync_author_detail('publisher') - - def _start_contributor(self, attrsD): - self.incontributor = 1 - context = self._getContext() - context.setdefault('contributors', []) - context['contributors'].append(FeedParserDict()) - self.push('contributor', 0) - - def _end_contributor(self): - self.pop('contributor') - self.incontributor = 0 - - def _start_dc_contributor(self, attrsD): - self.incontributor = 1 - context = self._getContext() - context.setdefault('contributors', []) - context['contributors'].append(FeedParserDict()) - self.push('name', 0) - - def _end_dc_contributor(self): - self._end_name() - self.incontributor = 0 - - def _start_name(self, attrsD): - self.push('name', 0) - _start_itunes_name = _start_name - - def _end_name(self): - value = self.pop('name') - if self.inpublisher: - self._save_author('name', value, 'publisher') - elif self.inauthor: - self._save_author('name', value) - elif self.incontributor: - self._save_contributor('name', value) - elif self.intextinput: - context = self._getContext() - context['textinput']['name'] = value - _end_itunes_name = _end_name - - def _start_width(self, attrsD): - self.push('width', 0) - - def _end_width(self): - value = self.pop('width') - try: - value = int(value) - except: - value = 0 - if self.inimage: - context = self._getContext() - context['image']['width'] = value - - def _start_height(self, attrsD): - self.push('height', 0) - - def _end_height(self): - value = self.pop('height') - try: - value = int(value) - except: - value = 0 - if self.inimage: - context = self._getContext() - context['image']['height'] = value - - def _start_url(self, attrsD): - self.push('href', 1) - _start_homepage = _start_url - _start_uri = _start_url - - def _end_url(self): - value = self.pop('href') - if self.inauthor: - self._save_author('href', value) - elif self.incontributor: - self._save_contributor('href', value) - elif self.inimage: - context = self._getContext() - context['image']['href'] = value - elif self.intextinput: - context = self._getContext() - context['textinput']['link'] = value - _end_homepage = _end_url - _end_uri = _end_url - - def _start_email(self, attrsD): - self.push('email', 0) - _start_itunes_email = _start_email - - def _end_email(self): - value = self.pop('email') - if self.inpublisher: - self._save_author('email', value, 'publisher') - elif self.inauthor: - self._save_author('email', value) - elif self.incontributor: - self._save_contributor('email', value) - _end_itunes_email = _end_email - - def _getContext(self): - if self.insource: - context = self.sourcedata - elif self.inentry: - context = self.entries[-1] - else: - context = self.feeddata - return context - - def _save_author(self, key, value, prefix='author'): - context = self._getContext() - context.setdefault(prefix + '_detail', FeedParserDict()) - context[prefix + '_detail'][key] = value - self._sync_author_detail() - - def _save_contributor(self, key, value): - context = self._getContext() - context.setdefault('contributors', [FeedParserDict()]) - context['contributors'][-1][key] = value - - def _sync_author_detail(self, key='author'): - context = self._getContext() - detail = context.get('%s_detail' % key) - if detail: - name = detail.get('name') - email = detail.get('email') - if name and email: - context[key] = '%s (%s)' % (name, email) - elif name: - context[key] = name - elif email: - context[key] = email - else: - author = context.get(key) - if not author: return - emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))''', author) - if not emailmatch: return - email = emailmatch.group(0) - # probably a better way to do the following, but it passes all the tests - author = author.replace(email, '') - author = author.replace('()', '') - author = author.strip() - if author and (author[0] == '('): - author = author[1:] - if author and (author[-1] == ')'): - author = author[:-1] - author = author.strip() - context.setdefault('%s_detail' % key, FeedParserDict()) - context['%s_detail' % key]['name'] = author - context['%s_detail' % key]['email'] = email - - def _start_subtitle(self, attrsD): - self.pushContent('subtitle', attrsD, 'text/plain', 1) - _start_tagline = _start_subtitle - _start_itunes_subtitle = _start_subtitle - - def _end_subtitle(self): - self.popContent('subtitle') - _end_tagline = _end_subtitle - _end_itunes_subtitle = _end_subtitle - - def _start_rights(self, attrsD): - self.pushContent('rights', attrsD, 'text/plain', 1) - _start_dc_rights = _start_rights - _start_copyright = _start_rights - - def _end_rights(self): - self.popContent('rights') - _end_dc_rights = _end_rights - _end_copyright = _end_rights - - def _start_item(self, attrsD): - self.entries.append(FeedParserDict()) - self.push('item', 0) - self.inentry = 1 - self.guidislink = 0 - id = self._getAttribute(attrsD, 'rdf:about') - if id: - context = self._getContext() - context['id'] = id - self._cdf_common(attrsD) - _start_entry = _start_item - _start_product = _start_item - - def _end_item(self): - self.pop('item') - self.inentry = 0 - _end_entry = _end_item - - def _start_dc_language(self, attrsD): - self.push('language', 1) - _start_language = _start_dc_language - - def _end_dc_language(self): - self.lang = self.pop('language') - _end_language = _end_dc_language - - def _start_dc_publisher(self, attrsD): - self.push('publisher', 1) - _start_webmaster = _start_dc_publisher - - def _end_dc_publisher(self): - self.pop('publisher') - self._sync_author_detail('publisher') - _end_webmaster = _end_dc_publisher - - def _start_published(self, attrsD): - self.push('published', 1) - _start_dcterms_issued = _start_published - _start_issued = _start_published - - def _end_published(self): - value = self.pop('published') - self._save('published_parsed', _parse_date(value)) - _end_dcterms_issued = _end_published - _end_issued = _end_published - - def _start_updated(self, attrsD): - self.push('updated', 1) - _start_modified = _start_updated - _start_dcterms_modified = _start_updated - _start_pubdate = _start_updated - _start_dc_date = _start_updated - - def _end_updated(self): - value = self.pop('updated') - parsed_value = _parse_date(value) - self._save('updated_parsed', parsed_value) - _end_modified = _end_updated - _end_dcterms_modified = _end_updated - _end_pubdate = _end_updated - _end_dc_date = _end_updated - - def _start_created(self, attrsD): - self.push('created', 1) - _start_dcterms_created = _start_created - - def _end_created(self): - value = self.pop('created') - self._save('created_parsed', _parse_date(value)) - _end_dcterms_created = _end_created - - def _start_expirationdate(self, attrsD): - self.push('expired', 1) - - def _end_expirationdate(self): - self._save('expired_parsed', _parse_date(self.pop('expired'))) - - def _start_cc_license(self, attrsD): - self.push('license', 1) - value = self._getAttribute(attrsD, 'rdf:resource') - if value: - self.elementstack[-1][2].append(value) - self.pop('license') - - def _start_creativecommons_license(self, attrsD): - self.push('license', 1) - - def _end_creativecommons_license(self): - self.pop('license') - - def _addTag(self, term, scheme, label): - context = self._getContext() - tags = context.setdefault('tags', []) - if (not term) and (not scheme) and (not label): return - value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label}) - if value not in tags: - tags.append(FeedParserDict({'term': term, 'scheme': scheme, 'label': label})) - - def _start_category(self, attrsD): - if _debug: sys.stderr.write('entering _start_category with %s\n' % repr(attrsD)) - term = attrsD.get('term') - scheme = attrsD.get('scheme', attrsD.get('domain')) - label = attrsD.get('label') - self._addTag(term, scheme, label) - self.push('category', 1) - _start_dc_subject = _start_category - _start_keywords = _start_category - - def _end_itunes_keywords(self): - for term in self.pop('itunes_keywords').split(): - self._addTag(term, 'http://www.itunes.com/', None) - - def _start_itunes_category(self, attrsD): - self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None) - self.push('category', 1) - - def _end_category(self): - value = self.pop('category') - if not value: return - context = self._getContext() - tags = context['tags'] - if value and len(tags) and not tags[-1]['term']: - tags[-1]['term'] = value - else: - self._addTag(value, None, None) - _end_dc_subject = _end_category - _end_keywords = _end_category - _end_itunes_category = _end_category - - def _start_cloud(self, attrsD): - self._getContext()['cloud'] = FeedParserDict(attrsD) - - def _start_link(self, attrsD): - attrsD.setdefault('rel', 'alternate') - attrsD.setdefault('type', 'text/html') - attrsD = self._itsAnHrefDamnIt(attrsD) - if attrsD.has_key('href'): - attrsD['href'] = self.resolveURI(attrsD['href']) - expectingText = self.infeed or self.inentry or self.insource - context = self._getContext() - context.setdefault('links', []) - context['links'].append(FeedParserDict(attrsD)) - if attrsD['rel'] == 'enclosure': - self._start_enclosure(attrsD) - if attrsD.has_key('href'): - expectingText = 0 - if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): - context['link'] = attrsD['href'] - else: - self.push('link', expectingText) - _start_producturl = _start_link - - def _end_link(self): - value = self.pop('link') - context = self._getContext() - if self.intextinput: - context['textinput']['link'] = value - if self.inimage: - context['image']['link'] = value - _end_producturl = _end_link - - def _start_guid(self, attrsD): - self.guidislink = (attrsD.get('ispermalink', 'true') == 'true') - self.push('id', 1) - - def _end_guid(self): - value = self.pop('id') - self._save('guidislink', self.guidislink and not self._getContext().has_key('link')) - if self.guidislink: - # guid acts as link, but only if 'ispermalink' is not present or is 'true', - # and only if the item doesn't already have a link element - self._save('link', value) - - def _start_title(self, attrsD): - self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) - _start_dc_title = _start_title - _start_media_title = _start_title - - def _end_title(self): - value = self.popContent('title') - context = self._getContext() - if self.intextinput: - context['textinput']['title'] = value - elif self.inimage: - context['image']['title'] = value - _end_dc_title = _end_title - _end_media_title = _end_title - - def _start_description(self, attrsD): - context = self._getContext() - if context.has_key('summary'): - self._summaryKey = 'content' - self._start_content(attrsD) - else: - self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource) - - def _start_abstract(self, attrsD): - self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) - - def _end_description(self): - if self._summaryKey == 'content': - self._end_content() - else: - value = self.popContent('description') - context = self._getContext() - if self.intextinput: - context['textinput']['description'] = value - elif self.inimage: - context['image']['description'] = value - self._summaryKey = None - _end_abstract = _end_description - - def _start_info(self, attrsD): - self.pushContent('info', attrsD, 'text/plain', 1) - _start_feedburner_browserfriendly = _start_info - - def _end_info(self): - self.popContent('info') - _end_feedburner_browserfriendly = _end_info - - def _start_generator(self, attrsD): - if attrsD: - attrsD = self._itsAnHrefDamnIt(attrsD) - if attrsD.has_key('href'): - attrsD['href'] = self.resolveURI(attrsD['href']) - self._getContext()['generator_detail'] = FeedParserDict(attrsD) - self.push('generator', 1) - - def _end_generator(self): - value = self.pop('generator') - context = self._getContext() - if context.has_key('generator_detail'): - context['generator_detail']['name'] = value - - def _start_admin_generatoragent(self, attrsD): - self.push('generator', 1) - value = self._getAttribute(attrsD, 'rdf:resource') - if value: - self.elementstack[-1][2].append(value) - self.pop('generator') - self._getContext()['generator_detail'] = FeedParserDict({'href': value}) - - def _start_admin_errorreportsto(self, attrsD): - self.push('errorreportsto', 1) - value = self._getAttribute(attrsD, 'rdf:resource') - if value: - self.elementstack[-1][2].append(value) - self.pop('errorreportsto') - - def _start_summary(self, attrsD): - context = self._getContext() - if context.has_key('summary'): - self._summaryKey = 'content' - self._start_content(attrsD) - else: - self._summaryKey = 'summary' - self.pushContent(self._summaryKey, attrsD, 'text/plain', 1) - _start_itunes_summary = _start_summary - - def _end_summary(self): - if self._summaryKey == 'content': - self._end_content() - else: - self.popContent(self._summaryKey or 'summary') - self._summaryKey = None - _end_itunes_summary = _end_summary - - def _start_enclosure(self, attrsD): - attrsD = self._itsAnHrefDamnIt(attrsD) - self._getContext().setdefault('enclosures', []).append(FeedParserDict(attrsD)) - href = attrsD.get('href') - if href: - context = self._getContext() - if not context.get('id'): - context['id'] = href - - def _start_source(self, attrsD): - self.insource = 1 - - def _end_source(self): - self.insource = 0 - self._getContext()['source'] = copy.deepcopy(self.sourcedata) - self.sourcedata.clear() - - def _start_content(self, attrsD): - self.pushContent('content', attrsD, 'text/plain', 1) - src = attrsD.get('src') - if src: - self.contentparams['src'] = src - self.push('content', 1) - - def _start_prodlink(self, attrsD): - self.pushContent('content', attrsD, 'text/html', 1) - - def _start_body(self, attrsD): - self.pushContent('content', attrsD, 'application/xhtml+xml', 1) - _start_xhtml_body = _start_body - - def _start_content_encoded(self, attrsD): - self.pushContent('content', attrsD, 'text/html', 1) - _start_fullitem = _start_content_encoded - - def _end_content(self): - copyToDescription = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types) - value = self.popContent('content') - if copyToDescription: - self._save('description', value) - _end_body = _end_content - _end_xhtml_body = _end_content - _end_content_encoded = _end_content - _end_fullitem = _end_content - _end_prodlink = _end_content - - def _start_itunes_image(self, attrsD): - self.push('itunes_image', 0) - self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')}) - _start_itunes_link = _start_itunes_image - - def _end_itunes_block(self): - value = self.pop('itunes_block', 0) - self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0 - - def _end_itunes_explicit(self): - value = self.pop('itunes_explicit', 0) - self._getContext()['itunes_explicit'] = (value == 'yes') and 1 or 0 - -if _XML_AVAILABLE: - class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler): - def __init__(self, baseuri, baselang, encoding): - if _debug: sys.stderr.write('trying StrictFeedParser\n') - xml.sax.handler.ContentHandler.__init__(self) - _FeedParserMixin.__init__(self, baseuri, baselang, encoding) - self.bozo = 0 - self.exc = None - - def startPrefixMapping(self, prefix, uri): - self.trackNamespace(prefix, uri) - - def startElementNS(self, name, qname, attrs): - namespace, localname = name - lowernamespace = str(namespace or '').lower() - if lowernamespace.find('backend.userland.com/rss') <> -1: - # match any backend.userland.com namespace - namespace = 'http://backend.userland.com/rss' - lowernamespace = namespace - if qname and qname.find(':') > 0: - givenprefix = qname.split(':')[0] - else: - givenprefix = None - prefix = self._matchnamespaces.get(lowernamespace, givenprefix) - if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and not self.namespacesInUse.has_key(givenprefix): - raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix - if prefix: - localname = prefix + ':' + localname - localname = str(localname).lower() - if _debug: sys.stderr.write('startElementNS: qname = %s, namespace = %s, givenprefix = %s, prefix = %s, attrs = %s, localname = %s\n' % (qname, namespace, givenprefix, prefix, attrs.items(), localname)) - - # qname implementation is horribly broken in Python 2.1 (it - # doesn't report any), and slightly broken in Python 2.2 (it - # doesn't report the xml: namespace). So we match up namespaces - # with a known list first, and then possibly override them with - # the qnames the SAX parser gives us (if indeed it gives us any - # at all). Thanks to MatejC for helping me test this and - # tirelessly telling me that it didn't work yet. - attrsD = {} - for (namespace, attrlocalname), attrvalue in attrs._attrs.items(): - lowernamespace = (namespace or '').lower() - prefix = self._matchnamespaces.get(lowernamespace, '') - if prefix: - attrlocalname = prefix + ':' + attrlocalname - attrsD[str(attrlocalname).lower()] = attrvalue - for qname in attrs.getQNames(): - attrsD[str(qname).lower()] = attrs.getValueByQName(qname) - self.unknown_starttag(localname, attrsD.items()) - - def characters(self, text): - self.handle_data(text) - - def endElementNS(self, name, qname): - namespace, localname = name - lowernamespace = str(namespace or '').lower() - if qname and qname.find(':') > 0: - givenprefix = qname.split(':')[0] - else: - givenprefix = '' - prefix = self._matchnamespaces.get(lowernamespace, givenprefix) - if prefix: - localname = prefix + ':' + localname - localname = str(localname).lower() - self.unknown_endtag(localname) - - def error(self, exc): - self.bozo = 1 - self.exc = exc - - def fatalError(self, exc): - self.error(exc) - raise exc - -class _BaseHTMLProcessor(sgmllib.SGMLParser): - elements_no_end_tag = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', - 'img', 'input', 'isindex', 'link', 'meta', 'param'] - - def __init__(self, encoding): - self.encoding = encoding - if _debug: sys.stderr.write('entering BaseHTMLProcessor, encoding=%s\n' % self.encoding) - sgmllib.SGMLParser.__init__(self) - - def reset(self): - self.pieces = [] - sgmllib.SGMLParser.reset(self) - - def _shorttag_replace(self, match): - tag = match.group(1) - if tag in self.elements_no_end_tag: - return '<' + tag + ' />' - else: - return '<' + tag + '>' - - def feed(self, data): - data = re.compile(r'', self._shorttag_replace, data) # bug [ 1399464 ] Bad regexp for _shorttag_replace - data = re.sub(r'<([^<\s]+?)\s*/>', self._shorttag_replace, data) - data = data.replace(''', "'") - data = data.replace('"', '"') - if self.encoding and type(data) == type(u''): - data = data.encode(self.encoding) - sgmllib.SGMLParser.feed(self, data) - - def normalize_attrs(self, attrs): - # utility method to be called by descendants - attrs = [(k.lower(), v) for k, v in attrs] - attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] - return attrs - - def unknown_starttag(self, tag, attrs): - # called for each start tag - # attrs is a list of (attr, value) tuples - # e.g. for
        , tag='pre', attrs=[('class', 'screen')]
        -        if _debug: sys.stderr.write('_BaseHTMLProcessor, unknown_starttag, tag=%s\n' % tag)
        -        uattrs = []
        -        # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds
        -        for key, value in attrs:
        -            if type(value) != type(u''):
        -                value = unicode(value, self.encoding)
        -            uattrs.append((unicode(key, self.encoding), value))
        -        strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]).encode(self.encoding)
        -        if tag in self.elements_no_end_tag:
        -            self.pieces.append('<%(tag)s%(strattrs)s />' % locals())
        -        else:
        -            self.pieces.append('<%(tag)s%(strattrs)s>' % locals())
        -
        -    def unknown_endtag(self, tag):
        -        # called for each end tag, e.g. for 
        , tag will be 'pre' - # Reconstruct the original end tag. - if tag not in self.elements_no_end_tag: - self.pieces.append("" % locals()) - - def handle_charref(self, ref): - # called for each character reference, e.g. for ' ', ref will be '160' - # Reconstruct the original character reference. - self.pieces.append('&#%(ref)s;' % locals()) - - def handle_entityref(self, ref): - # called for each entity reference, e.g. for '©', ref will be 'copy' - # Reconstruct the original entity reference. - self.pieces.append('&%(ref)s;' % locals()) - - def handle_data(self, text): - # called for each block of plain text, i.e. outside of any tag and - # not containing any character or entity references - # Store the original text verbatim. - if _debug: sys.stderr.write('_BaseHTMLProcessor, handle_text, text=%s\n' % text) - self.pieces.append(text) - - def handle_comment(self, text): - # called for each HTML comment, e.g. - # Reconstruct the original comment. - self.pieces.append('' % locals()) - - def handle_pi(self, text): - # called for each processing instruction, e.g. - # Reconstruct original processing instruction. - self.pieces.append('' % locals()) - - def handle_decl(self, text): - # called for the DOCTYPE, if present, e.g. - # - # Reconstruct original DOCTYPE - self.pieces.append('' % locals()) - - _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match - def _scan_name(self, i, declstartpos): - rawdata = self.rawdata - n = len(rawdata) - if i == n: - return None, -1 - m = self._new_declname_match(rawdata, i) - if m: - s = m.group() - name = s.strip() - if (i + len(s)) == n: - return None, -1 # end of buffer - return name.lower(), m.end() - else: - self.handle_data(rawdata) -# self.updatepos(declstartpos, i) - return None, -1 - - def output(self): - '''Return processed HTML as a single string''' - return ''.join([str(p) for p in self.pieces]) - -class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor): - def __init__(self, baseuri, baselang, encoding): - sgmllib.SGMLParser.__init__(self) - _FeedParserMixin.__init__(self, baseuri, baselang, encoding) - - def decodeEntities(self, element, data): - data = data.replace('<', '<') - data = data.replace('<', '<') - data = data.replace('>', '>') - data = data.replace('>', '>') - data = data.replace('&', '&') - data = data.replace('&', '&') - data = data.replace('"', '"') - data = data.replace('"', '"') - data = data.replace(''', ''') - data = data.replace(''', ''') - if self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): - data = data.replace('<', '<') - data = data.replace('>', '>') - data = data.replace('&', '&') - data = data.replace('"', '"') - data = data.replace(''', "'") - return data - -class _RelativeURIResolver(_BaseHTMLProcessor): - relative_uris = [('a', 'href'), - ('applet', 'codebase'), - ('area', 'href'), - ('blockquote', 'cite'), - ('body', 'background'), - ('del', 'cite'), - ('form', 'action'), - ('frame', 'longdesc'), - ('frame', 'src'), - ('iframe', 'longdesc'), - ('iframe', 'src'), - ('head', 'profile'), - ('img', 'longdesc'), - ('img', 'src'), - ('img', 'usemap'), - ('input', 'src'), - ('input', 'usemap'), - ('ins', 'cite'), - ('link', 'href'), - ('object', 'classid'), - ('object', 'codebase'), - ('object', 'data'), - ('object', 'usemap'), - ('q', 'cite'), - ('script', 'src')] - - def __init__(self, baseuri, encoding): - _BaseHTMLProcessor.__init__(self, encoding) - self.baseuri = baseuri - - def resolveURI(self, uri): - return _urljoin(self.baseuri, uri) - - def unknown_starttag(self, tag, attrs): - attrs = self.normalize_attrs(attrs) - attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] - _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) - -def _resolveRelativeURIs(htmlSource, baseURI, encoding): - if _debug: sys.stderr.write('entering _resolveRelativeURIs\n') - p = _RelativeURIResolver(baseURI, encoding) - p.feed(htmlSource) - return p.output() - -class _HTMLSanitizer(_BaseHTMLProcessor): - acceptable_elements = ['a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', - 'blockquote', 'br', 'button', 'caption', 'center', 'cite', 'code', 'col', - 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', - 'font', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', - 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', 'ol', 'optgroup', - 'option', 'p', 'pre', 'q', 's', 'samp', 'select', 'small', 'span', 'strike', - 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', - 'thead', 'tr', 'tt', 'u', 'ul', 'var'] - - acceptable_attributes = ['abbr', 'accept', 'accept-charset', 'accesskey', - 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', - 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'clear', 'cols', - 'colspan', 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', - 'enctype', 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', - 'id', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', - 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', - 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', - 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title', 'type', - 'usemap', 'valign', 'value', 'vspace', 'width'] - - unacceptable_elements_with_end_tag = ['script', 'applet'] - - def reset(self): - _BaseHTMLProcessor.reset(self) - self.unacceptablestack = 0 - - def unknown_starttag(self, tag, attrs): - if not tag in self.acceptable_elements: - if tag in self.unacceptable_elements_with_end_tag: - self.unacceptablestack += 1 - return - attrs = self.normalize_attrs(attrs) - attrs = [(key, value) for key, value in attrs if key in self.acceptable_attributes] - _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) - - def unknown_endtag(self, tag): - if not tag in self.acceptable_elements: - if tag in self.unacceptable_elements_with_end_tag: - self.unacceptablestack -= 1 - return - _BaseHTMLProcessor.unknown_endtag(self, tag) - - def handle_pi(self, text): - pass - - def handle_decl(self, text): - pass - - def handle_data(self, text): - if not self.unacceptablestack: - _BaseHTMLProcessor.handle_data(self, text) - -def _sanitizeHTML(htmlSource, encoding): - p = _HTMLSanitizer(encoding) - p.feed(htmlSource) - data = p.output() - if TIDY_MARKUP: - # loop through list of preferred Tidy interfaces looking for one that's installed, - # then set up a common _tidy function to wrap the interface-specific API. - _tidy = None - for tidy_interface in PREFERRED_TIDY_INTERFACES: - try: - if tidy_interface == "uTidy": - from tidy import parseString as _utidy - def _tidy(data, **kwargs): - return str(_utidy(data, **kwargs)) - break - elif tidy_interface == "mxTidy": - from mx.Tidy import Tidy as _mxtidy - def _tidy(data, **kwargs): - nerrors, nwarnings, data, errordata = _mxtidy.tidy(data, **kwargs) - return data - break - except: - pass - if _tidy: - utf8 = type(data) == type(u'') - if utf8: - data = data.encode('utf-8') - data = _tidy(data, output_xhtml=1, numeric_entities=1, wrap=0, char_encoding="utf8") - if utf8: - data = unicode(data, 'utf-8') - if data.count(''): - data = data.split('>', 1)[1] - if data.count('= '2.3.3' - assert base64 != None - user, passw = base64.decodestring(req.headers['Authorization'].split(' ')[1]).split(':') - realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0] - self.add_password(realm, host, user, passw) - retry = self.http_error_auth_reqed('www-authenticate', host, req, headers) - self.reset_retry_count() - return retry - except: - return self.http_error_default(req, fp, code, msg, headers) - -def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers): - """URL, filename, or string --> stream - - This function lets you define parsers that take any input source - (URL, pathname to local or network file, or actual data as a string) - and deal with it in a uniform manner. Returned object is guaranteed - to have all the basic stdio read methods (read, readline, readlines). - Just .close() the object when you're done with it. - - If the etag argument is supplied, it will be used as the value of an - If-None-Match request header. - - If the modified argument is supplied, it must be a tuple of 9 integers - as returned by gmtime() in the standard Python time module. This MUST - be in GMT (Greenwich Mean Time). The formatted date/time will be used - as the value of an If-Modified-Since request header. - - If the agent argument is supplied, it will be used as the value of a - User-Agent request header. - - If the referrer argument is supplied, it will be used as the value of a - Referer[sic] request header. - - If handlers is supplied, it is a list of handlers used to build a - urllib2 opener. - """ - - if hasattr(url_file_stream_or_string, 'read'): - return url_file_stream_or_string - - if url_file_stream_or_string == '-': - return sys.stdin - - if urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp'): - if not agent: - agent = USER_AGENT - # test for inline user:password for basic auth - auth = None - if base64: - urltype, rest = urllib.splittype(url_file_stream_or_string) - realhost, rest = urllib.splithost(rest) - if realhost: - user_passwd, realhost = urllib.splituser(realhost) - if user_passwd: - url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest) - auth = base64.encodestring(user_passwd).strip() - # try to open with urllib2 (to use optional headers) - request = urllib2.Request(url_file_stream_or_string) - request.add_header('User-Agent', agent) - if etag: - request.add_header('If-None-Match', etag) - if modified: - # format into an RFC 1123-compliant timestamp. We can't use - # time.strftime() since the %a and %b directives can be affected - # by the current locale, but RFC 2616 states that dates must be - # in English. - short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] - months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5])) - if referrer: - request.add_header('Referer', referrer) - if gzip and zlib: - request.add_header('Accept-encoding', 'gzip, deflate') - elif gzip: - request.add_header('Accept-encoding', 'gzip') - elif zlib: - request.add_header('Accept-encoding', 'deflate') - else: - request.add_header('Accept-encoding', '') - if auth: - request.add_header('Authorization', 'Basic %s' % auth) - if ACCEPT_HEADER: - request.add_header('Accept', ACCEPT_HEADER) - request.add_header('A-IM', 'feed') # RFC 3229 support - opener = apply(urllib2.build_opener, tuple([_FeedURLHandler()] + handlers)) - opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent - try: - return opener.open(request) - finally: - opener.close() # JohnD - - # try to open with native open function (if url_file_stream_or_string is a filename) - try: - return open(url_file_stream_or_string) - except: - pass - - # treat url_file_stream_or_string as string - return _StringIO(str(url_file_stream_or_string)) - -_date_handlers = [] -def registerDateHandler(func): - '''Register a date handler function (takes string, returns 9-tuple date in GMT)''' - _date_handlers.insert(0, func) - -# ISO-8601 date parsing routines written by Fazal Majid. -# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601 -# parser is beyond the scope of feedparser and would be a worthwhile addition -# to the Python library. -# A single regular expression cannot parse ISO 8601 date formats into groups -# as the standard is highly irregular (for instance is 030104 2003-01-04 or -# 0301-04-01), so we use templates instead. -# Please note the order in templates is significant because we need a -# greedy match. -_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-MM', 'YYYY-?OOO', - 'YY-?MM-?DD', 'YY-?OOO', 'YYYY', - '-YY-?MM', '-OOO', '-YY', - '--MM-?DD', '--MM', - '---DD', - 'CC', ''] -_iso8601_re = [ - tmpl.replace( - 'YYYY', r'(?P\d{4})').replace( - 'YY', r'(?P\d\d)').replace( - 'MM', r'(?P[01]\d)').replace( - 'DD', r'(?P[0123]\d)').replace( - 'OOO', r'(?P[0123]\d\d)').replace( - 'CC', r'(?P\d\d$)') - + r'(T?(?P\d{2}):(?P\d{2})' - + r'(:(?P\d{2}))?' - + r'(?P[+-](?P\d{2})(:(?P\d{2}))?|Z)?)?' - for tmpl in _iso8601_tmpl] -del tmpl -_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re] -del regex -def _parse_date_iso8601(dateString): - '''Parse a variety of ISO-8601-compatible formats like 20040105''' - m = None - for _iso8601_match in _iso8601_matches: - m = _iso8601_match(dateString) - if m: break - if not m: return - if m.span() == (0, 0): return - params = m.groupdict() - ordinal = params.get('ordinal', 0) - if ordinal: - ordinal = int(ordinal) - else: - ordinal = 0 - year = params.get('year', '--') - if not year or year == '--': - year = time.gmtime()[0] - elif len(year) == 2: - # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993 - year = 100 * int(time.gmtime()[0] / 100) + int(year) - else: - year = int(year) - month = params.get('month', '-') - if not month or month == '-': - # ordinals are NOT normalized by mktime, we simulate them - # by setting month=1, day=ordinal - if ordinal: - month = 1 - else: - month = time.gmtime()[1] - month = int(month) - day = params.get('day', 0) - if not day: - # see above - if ordinal: - day = ordinal - elif params.get('century', 0) or \ - params.get('year', 0) or params.get('month', 0): - day = 1 - else: - day = time.gmtime()[2] - else: - day = int(day) - # special case of the century - is the first year of the 21st century - # 2000 or 2001 ? The debate goes on... - if 'century' in params.keys(): - year = (int(params['century']) - 1) * 100 + 1 - # in ISO 8601 most fields are optional - for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: - if not params.get(field, None): - params[field] = 0 - hour = int(params.get('hour', 0)) - minute = int(params.get('minute', 0)) - second = int(params.get('second', 0)) - # weekday is normalized by mktime(), we can ignore it - weekday = 0 - # daylight savings is complex, but not needed for feedparser's purposes - # as time zones, if specified, include mention of whether it is active - # (e.g. PST vs. PDT, CET). Using -1 is implementation-dependent and - # and most implementations have DST bugs - daylight_savings_flag = 0 - tm = [year, month, day, hour, minute, second, weekday, - ordinal, daylight_savings_flag] - # ISO 8601 time zone adjustments - tz = params.get('tz') - if tz and tz != 'Z': - if tz[0] == '-': - tm[3] += int(params.get('tzhour', 0)) - tm[4] += int(params.get('tzmin', 0)) - elif tz[0] == '+': - tm[3] -= int(params.get('tzhour', 0)) - tm[4] -= int(params.get('tzmin', 0)) - else: - return None - # Python's time.mktime() is a wrapper around the ANSI C mktime(3c) - # which is guaranteed to normalize d/m/y/h/m/s. - # Many implementations have bugs, but we'll pretend they don't. - return time.localtime(time.mktime(tm)) -registerDateHandler(_parse_date_iso8601) - -# 8-bit date handling routines written by ytrewq1. -_korean_year = u'\ub144' # b3e2 in euc-kr -_korean_month = u'\uc6d4' # bff9 in euc-kr -_korean_day = u'\uc77c' # c0cf in euc-kr -_korean_am = u'\uc624\uc804' # bfc0 c0fc in euc-kr -_korean_pm = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr - -_korean_onblog_date_re = \ - re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ - (_korean_year, _korean_month, _korean_day)) -_korean_nate_date_re = \ - re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ - (_korean_am, _korean_pm)) -def _parse_date_onblog(dateString): - '''Parse a string according to the OnBlog 8-bit date format''' - m = _korean_onblog_date_re.match(dateString) - if not m: return - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ - {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ - 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ - 'zonediff': '+09:00'} - if _debug: sys.stderr.write('OnBlog date parsed as: %s\n' % w3dtfdate) - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_onblog) - -def _parse_date_nate(dateString): - '''Parse a string according to the Nate 8-bit date format''' - m = _korean_nate_date_re.match(dateString) - if not m: return - hour = int(m.group(5)) - ampm = m.group(4) - if (ampm == _korean_pm): - hour += 12 - hour = str(hour) - if len(hour) == 1: - hour = '0' + hour - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ - {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ - 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\ - 'zonediff': '+09:00'} - if _debug: sys.stderr.write('Nate date parsed as: %s\n' % w3dtfdate) - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_nate) - -_mssql_date_re = \ - re.compile('(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})(\.\d+)?') -def _parse_date_mssql(dateString): - '''Parse a string according to the MS SQL date format''' - m = _mssql_date_re.match(dateString) - if not m: return - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ - {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ - 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ - 'zonediff': '+09:00'} - if _debug: sys.stderr.write('MS SQL date parsed as: %s\n' % w3dtfdate) - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_mssql) - -# Unicode strings for Greek date strings -_greek_months = \ - { \ - u'\u0399\u03b1\u03bd': u'Jan', # c9e1ed in iso-8859-7 - u'\u03a6\u03b5\u03b2': u'Feb', # d6e5e2 in iso-8859-7 - u'\u039c\u03ac\u03ce': u'Mar', # ccdcfe in iso-8859-7 - u'\u039c\u03b1\u03ce': u'Mar', # cce1fe in iso-8859-7 - u'\u0391\u03c0\u03c1': u'Apr', # c1f0f1 in iso-8859-7 - u'\u039c\u03ac\u03b9': u'May', # ccdce9 in iso-8859-7 - u'\u039c\u03b1\u03ca': u'May', # cce1fa in iso-8859-7 - u'\u039c\u03b1\u03b9': u'May', # cce1e9 in iso-8859-7 - u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7 - u'\u0399\u03bf\u03bd': u'Jun', # c9efed in iso-8859-7 - u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7 - u'\u0399\u03bf\u03bb': u'Jul', # c9f9eb in iso-8859-7 - u'\u0391\u03cd\u03b3': u'Aug', # c1fde3 in iso-8859-7 - u'\u0391\u03c5\u03b3': u'Aug', # c1f5e3 in iso-8859-7 - u'\u03a3\u03b5\u03c0': u'Sep', # d3e5f0 in iso-8859-7 - u'\u039f\u03ba\u03c4': u'Oct', # cfeaf4 in iso-8859-7 - u'\u039d\u03bf\u03ad': u'Nov', # cdefdd in iso-8859-7 - u'\u039d\u03bf\u03b5': u'Nov', # cdefe5 in iso-8859-7 - u'\u0394\u03b5\u03ba': u'Dec', # c4e5ea in iso-8859-7 - } - -_greek_wdays = \ - { \ - u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7 - u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7 - u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7 - u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7 - u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7 - u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7 - u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7 - } - -_greek_date_format_re = \ - re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') - -def _parse_date_greek(dateString): - '''Parse a string according to a Greek 8-bit date format.''' - m = _greek_date_format_re.match(dateString) - if not m: return - try: - wday = _greek_wdays[m.group(1)] - month = _greek_months[m.group(3)] - except: - return - rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \ - {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\ - 'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\ - 'zonediff': m.group(8)} - if _debug: sys.stderr.write('Greek date parsed as: %s\n' % rfc822date) - return _parse_date_rfc822(rfc822date) -registerDateHandler(_parse_date_greek) - -# Unicode strings for Hungarian date strings -_hungarian_months = \ - { \ - u'janu\u00e1r': u'01', # e1 in iso-8859-2 - u'febru\u00e1ri': u'02', # e1 in iso-8859-2 - u'm\u00e1rcius': u'03', # e1 in iso-8859-2 - u'\u00e1prilis': u'04', # e1 in iso-8859-2 - u'm\u00e1ujus': u'05', # e1 in iso-8859-2 - u'j\u00fanius': u'06', # fa in iso-8859-2 - u'j\u00falius': u'07', # fa in iso-8859-2 - u'augusztus': u'08', - u'szeptember': u'09', - u'okt\u00f3ber': u'10', # f3 in iso-8859-2 - u'november': u'11', - u'december': u'12', - } - -_hungarian_date_format_re = \ - re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') - -def _parse_date_hungarian(dateString): - '''Parse a string according to a Hungarian 8-bit date format.''' - m = _hungarian_date_format_re.match(dateString) - if not m: return - try: - month = _hungarian_months[m.group(2)] - day = m.group(3) - if len(day) == 1: - day = '0' + day - hour = m.group(4) - if len(hour) == 1: - hour = '0' + hour - except: - return - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \ - {'year': m.group(1), 'month': month, 'day': day,\ - 'hour': hour, 'minute': m.group(5),\ - 'zonediff': m.group(6)} - if _debug: sys.stderr.write('Hungarian date parsed as: %s\n' % w3dtfdate) - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_hungarian) - -# W3DTF-style date parsing adapted from PyXML xml.utils.iso8601, written by -# Drake and licensed under the Python license. Removed all range checking -# for month, day, hour, minute, and second, since mktime will normalize -# these later -def _parse_date_w3dtf(dateString): - def __extract_date(m): - year = int(m.group('year')) - if year < 100: - year = 100 * int(time.gmtime()[0] / 100) + int(year) - if year < 1000: - return 0, 0, 0 - julian = m.group('julian') - if julian: - julian = int(julian) - month = julian / 30 + 1 - day = julian % 30 + 1 - jday = None - while jday != julian: - t = time.mktime((year, month, day, 0, 0, 0, 0, 0, 0)) - jday = time.gmtime(t)[-2] - diff = abs(jday - julian) - if jday > julian: - if diff < day: - day = day - diff - else: - month = month - 1 - day = 31 - elif jday < julian: - if day + diff < 28: - day = day + diff - else: - month = month + 1 - return year, month, day - month = m.group('month') - day = 1 - if month is None: - month = 1 - else: - month = int(month) - day = m.group('day') - if day: - day = int(day) - else: - day = 1 - return year, month, day - - def __extract_time(m): - if not m: - return 0, 0, 0 - hours = m.group('hours') - if not hours: - return 0, 0, 0 - hours = int(hours) - minutes = int(m.group('minutes')) - seconds = m.group('seconds') - if seconds: - seconds = int(seconds) - else: - seconds = 0 - return hours, minutes, seconds - - def __extract_tzd(m): - '''Return the Time Zone Designator as an offset in seconds from UTC.''' - if not m: - return 0 - tzd = m.group('tzd') - if not tzd: - return 0 - if tzd == 'Z': - return 0 - hours = int(m.group('tzdhours')) - minutes = m.group('tzdminutes') - if minutes: - minutes = int(minutes) - else: - minutes = 0 - offset = (hours*60 + minutes) * 60 - if tzd[0] == '+': - return -offset - return offset - - __date_re = ('(?P\d\d\d\d)' - '(?:(?P-|)' - '(?:(?P\d\d\d)' - '|(?P\d\d)(?:(?P=dsep)(?P\d\d))?))?') - __tzd_re = '(?P[-+](?P\d\d)(?::?(?P\d\d))|Z)' - __tzd_rx = re.compile(__tzd_re) - __time_re = ('(?P\d\d)(?P:|)(?P\d\d)' - '(?:(?P=tsep)(?P\d\d(?:[.,]\d+)?))?' - + __tzd_re) - __datetime_re = '%s(?:T%s)?' % (__date_re, __time_re) - __datetime_rx = re.compile(__datetime_re) - m = __datetime_rx.match(dateString) - if (m is None) or (m.group() != dateString): return - gmt = __extract_date(m) + __extract_time(m) + (0, 0, 0) - if gmt[0] == 0: return - return time.gmtime(time.mktime(gmt) + __extract_tzd(m) - time.timezone) -registerDateHandler(_parse_date_w3dtf) - -def _parse_date_rfc822(dateString): - '''Parse an RFC822, RFC1123, RFC2822, or asctime-style date''' - data = dateString.split() - if data[0][-1] in (',', '.') or data[0].lower() in rfc822._daynames: - del data[0] - if len(data) == 4: - s = data[3] - i = s.find('+') - if i > 0: - data[3:] = [s[:i], s[i+1:]] - else: - data.append('') - dateString = " ".join(data) - if len(data) < 5: - dateString += ' 00:00:00 GMT' - tm = rfc822.parsedate_tz(dateString) - if tm: - return time.gmtime(rfc822.mktime_tz(tm)) -# rfc822.py defines several time zones, but we define some extra ones. -# 'ET' is equivalent to 'EST', etc. -_additional_timezones = {'AT': -400, 'ET': -500, 'CT': -600, 'MT': -700, 'PT': -800} -rfc822._timezones.update(_additional_timezones) -registerDateHandler(_parse_date_rfc822) - -def _parse_date(dateString): - '''Parses a variety of date formats into a 9-tuple in GMT''' - for handler in _date_handlers: - try: - date9tuple = handler(dateString) - if not date9tuple: continue - if len(date9tuple) != 9: - if _debug: sys.stderr.write('date handler function must return 9-tuple\n') - raise ValueError - map(int, date9tuple) - return date9tuple - except Exception, e: - if _debug: sys.stderr.write('%s raised %s\n' % (handler.__name__, repr(e))) - pass - return None - -def _getCharacterEncoding(http_headers, xml_data): - '''Get the character encoding of the XML document - - http_headers is a dictionary - xml_data is a raw string (not Unicode) - - This is so much trickier than it sounds, it's not even funny. - According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type - is application/xml, application/*+xml, - application/xml-external-parsed-entity, or application/xml-dtd, - the encoding given in the charset parameter of the HTTP Content-Type - takes precedence over the encoding given in the XML prefix within the - document, and defaults to 'utf-8' if neither are specified. But, if - the HTTP Content-Type is text/xml, text/*+xml, or - text/xml-external-parsed-entity, the encoding given in the XML prefix - within the document is ALWAYS IGNORED and only the encoding given in - the charset parameter of the HTTP Content-Type header should be - respected, and it defaults to 'us-ascii' if not specified. - - Furthermore, discussion on the atom-syntax mailing list with the - author of RFC 3023 leads me to the conclusion that any document - served with a Content-Type of text/* and no charset parameter - must be treated as us-ascii. (We now do this.) And also that it - must always be flagged as non-well-formed. (We now do this too.) - - If Content-Type is unspecified (input was local file or non-HTTP source) - or unrecognized (server just got it totally wrong), then go by the - encoding given in the XML prefix of the document and default to - 'iso-8859-1' as per the HTTP specification (RFC 2616). - - Then, assuming we didn't find a character encoding in the HTTP headers - (and the HTTP Content-type allowed us to look in the body), we need - to sniff the first few bytes of the XML data and try to determine - whether the encoding is ASCII-compatible. Section F of the XML - specification shows the way here: - http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info - - If the sniffed encoding is not ASCII-compatible, we need to make it - ASCII compatible so that we can sniff further into the XML declaration - to find the encoding attribute, which will tell us the true encoding. - - Of course, none of this guarantees that we will be able to parse the - feed in the declared character encoding (assuming it was declared - correctly, which many are not). CJKCodecs and iconv_codec help a lot; - you should definitely install them if you can. - http://cjkpython.i18n.org/ - ''' - - def _parseHTTPContentType(content_type): - '''takes HTTP Content-Type header and returns (content type, charset) - - If no charset is specified, returns (content type, '') - If no content type is specified, returns ('', '') - Both return parameters are guaranteed to be lowercase strings - ''' - content_type = content_type or '' - content_type, params = cgi.parse_header(content_type) - return content_type, params.get('charset', '').replace("'", '') - - sniffed_xml_encoding = '' - xml_encoding = '' - true_encoding = '' - http_content_type, http_encoding = _parseHTTPContentType(http_headers.get('content-type')) - # Must sniff for non-ASCII-compatible character encodings before - # searching for XML declaration. This heuristic is defined in - # section F of the XML specification: - # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info - try: - if xml_data[:4] == '\x4c\x6f\xa7\x94': - # EBCDIC - xml_data = _ebcdic_to_ascii(xml_data) - elif xml_data[:4] == '\x00\x3c\x00\x3f': - # UTF-16BE - sniffed_xml_encoding = 'utf-16be' - xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') - elif (len(xml_data) >= 4) and (xml_data[:2] == '\xfe\xff') and (xml_data[2:4] != '\x00\x00'): - # UTF-16BE with BOM - sniffed_xml_encoding = 'utf-16be' - xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') - elif xml_data[:4] == '\x3c\x00\x3f\x00': - # UTF-16LE - sniffed_xml_encoding = 'utf-16le' - xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') - elif (len(xml_data) >= 4) and (xml_data[:2] == '\xff\xfe') and (xml_data[2:4] != '\x00\x00'): - # UTF-16LE with BOM - sniffed_xml_encoding = 'utf-16le' - xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') - elif xml_data[:4] == '\x00\x00\x00\x3c': - # UTF-32BE - sniffed_xml_encoding = 'utf-32be' - xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') - elif xml_data[:4] == '\x3c\x00\x00\x00': - # UTF-32LE - sniffed_xml_encoding = 'utf-32le' - xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') - elif xml_data[:4] == '\x00\x00\xfe\xff': - # UTF-32BE with BOM - sniffed_xml_encoding = 'utf-32be' - xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') - elif xml_data[:4] == '\xff\xfe\x00\x00': - # UTF-32LE with BOM - sniffed_xml_encoding = 'utf-32le' - xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') - elif xml_data[:3] == '\xef\xbb\xbf': - # UTF-8 with BOM - sniffed_xml_encoding = 'utf-8' - xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') - else: - # ASCII-compatible - pass - xml_encoding_match = re.compile('^<\?.*encoding=[\'"](.*?)[\'"].*\?>').match(xml_data) - except: - xml_encoding_match = None - if xml_encoding_match: - xml_encoding = xml_encoding_match.groups()[0].lower() - if sniffed_xml_encoding and (xml_encoding in ('iso-10646-ucs-2', 'ucs-2', 'csunicode', 'iso-10646-ucs-4', 'ucs-4', 'csucs4', 'utf-16', 'utf-32', 'utf_16', 'utf_32', 'utf16', 'u16')): - xml_encoding = sniffed_xml_encoding - acceptable_content_type = 0 - application_content_types = ('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity') - text_content_types = ('text/xml', 'text/xml-external-parsed-entity') - if (http_content_type in application_content_types) or \ - (http_content_type.startswith('application/') and http_content_type.endswith('+xml')): - acceptable_content_type = 1 - true_encoding = http_encoding or xml_encoding or 'utf-8' - elif (http_content_type in text_content_types) or \ - (http_content_type.startswith('text/')) and http_content_type.endswith('+xml'): - acceptable_content_type = 1 - true_encoding = http_encoding or 'us-ascii' - elif http_content_type.startswith('text/'): - true_encoding = http_encoding or 'us-ascii' - elif http_headers and (not http_headers.has_key('content-type')): - true_encoding = xml_encoding or 'iso-8859-1' - else: - true_encoding = xml_encoding or 'utf-8' - return true_encoding, http_encoding, xml_encoding, sniffed_xml_encoding, acceptable_content_type - -def _toUTF8(data, encoding): - '''Changes an XML data stream on the fly to specify a new encoding - - data is a raw sequence of bytes (not Unicode) that is presumed to be in %encoding already - encoding is a string recognized by encodings.aliases - ''' - if _debug: sys.stderr.write('entering _toUTF8, trying encoding %s\n' % encoding) - # strip Byte Order Mark (if present) - if (len(data) >= 4) and (data[:2] == '\xfe\xff') and (data[2:4] != '\x00\x00'): - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-16be': - sys.stderr.write('trying utf-16be instead\n') - encoding = 'utf-16be' - data = data[2:] - elif (len(data) >= 4) and (data[:2] == '\xff\xfe') and (data[2:4] != '\x00\x00'): - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-16le': - sys.stderr.write('trying utf-16le instead\n') - encoding = 'utf-16le' - data = data[2:] - elif data[:3] == '\xef\xbb\xbf': - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-8': - sys.stderr.write('trying utf-8 instead\n') - encoding = 'utf-8' - data = data[3:] - elif data[:4] == '\x00\x00\xfe\xff': - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-32be': - sys.stderr.write('trying utf-32be instead\n') - encoding = 'utf-32be' - data = data[4:] - elif data[:4] == '\xff\xfe\x00\x00': - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-32le': - sys.stderr.write('trying utf-32le instead\n') - encoding = 'utf-32le' - data = data[4:] - newdata = unicode(data, encoding) - if _debug: sys.stderr.write('successfully converted %s data to unicode\n' % encoding) - declmatch = re.compile('^<\?xml[^>]*?>') - newdecl = '''''' - if declmatch.search(newdata): - newdata = declmatch.sub(newdecl, newdata) - else: - newdata = newdecl + u'\n' + newdata - return newdata.encode('utf-8') - -def _stripDoctype(data): - '''Strips DOCTYPE from XML document, returns (rss_version, stripped_data) - - rss_version may be 'rss091n' or None - stripped_data is the same XML document, minus the DOCTYPE - ''' - entity_pattern = re.compile(r']*?)>', re.MULTILINE) - data = entity_pattern.sub('', data) - doctype_pattern = re.compile(r']*?)>', re.MULTILINE) - doctype_results = doctype_pattern.findall(data) - doctype = doctype_results and doctype_results[0] or '' - if doctype.lower().count('netscape'): - version = 'rss091n' - else: - version = None - data = doctype_pattern.sub('', data) - return version, data - -def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=[]): - '''Parse a feed from a URL, file, stream, or string''' - result = FeedParserDict() - result['feed'] = FeedParserDict() - result['entries'] = [] - if _XML_AVAILABLE: - result['bozo'] = 0 - if type(handlers) == types.InstanceType: - handlers = [handlers] - try: - f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers) - data = f.read() - except Exception, e: - result['bozo'] = 1 - result['bozo_exception'] = e - data = '' - f = None - - # if feed is gzip-compressed, decompress it - if f and data and hasattr(f, 'headers'): - if gzip and f.headers.get('content-encoding', '') == 'gzip': - try: - data = gzip.GzipFile(fileobj=_StringIO(data)).read() - except Exception, e: - # Some feeds claim to be gzipped but they're not, so - # we get garbage. Ideally, we should re-request the - # feed without the 'Accept-encoding: gzip' header, - # but we don't. - result['bozo'] = 1 - result['bozo_exception'] = e - data = '' - elif zlib and f.headers.get('content-encoding', '') == 'deflate': - try: - data = zlib.decompress(data, -zlib.MAX_WBITS) - except Exception, e: - result['bozo'] = 1 - result['bozo_exception'] = e - data = '' - - # save HTTP headers - if hasattr(f, 'info'): - info = f.info() - result['etag'] = info.getheader('ETag') - last_modified = info.getheader('Last-Modified') - if last_modified: - result['modified'] = _parse_date(last_modified) - if hasattr(f, 'url'): - result['href'] = f.url - result['status'] = 200 - if hasattr(f, 'status'): - result['status'] = f.status - if hasattr(f, 'headers'): - result['headers'] = f.headers.dict - if hasattr(f, 'close'): - f.close() - - # there are four encodings to keep track of: - # - http_encoding is the encoding declared in the Content-Type HTTP header - # - xml_encoding is the encoding declared in the ; changed -# project name -#2.5 - 7/25/2003 - MAP - changed to Python license (all contributors agree); -# removed unnecessary urllib code -- urllib2 should always be available anyway; -# return actual url, status, and full HTTP headers (as result['url'], -# result['status'], and result['headers']) if parsing a remote feed over HTTP -- -# this should pass all the HTTP tests at ; -# added the latest namespace-of-the-week for RSS 2.0 -#2.5.1 - 7/26/2003 - RMK - clear opener.addheaders so we only send our custom -# User-Agent (otherwise urllib2 sends two, which confuses some servers) -#2.5.2 - 7/28/2003 - MAP - entity-decode inline xml properly; added support for -# inline and as used in some RSS 2.0 feeds -#2.5.3 - 8/6/2003 - TvdV - patch to track whether we're inside an image or -# textInput, and also to return the character encoding (if specified) -#2.6 - 1/1/2004 - MAP - dc:author support (MarekK); fixed bug tracking -# nested divs within content (JohnD); fixed missing sys import (JohanS); -# fixed regular expression to capture XML character encoding (Andrei); -# added support for Atom 0.3-style links; fixed bug with textInput tracking; -# added support for cloud (MartijnP); added support for multiple -# category/dc:subject (MartijnP); normalize content model: 'description' gets -# description (which can come from description, summary, or full content if no -# description), 'content' gets dict of base/language/type/value (which can come -# from content:encoded, xhtml:body, content, or fullitem); -# fixed bug matching arbitrary Userland namespaces; added xml:base and xml:lang -# tracking; fixed bug tracking unknown tags; fixed bug tracking content when -# element is not in default namespace (like Pocketsoap feed); -# resolve relative URLs in link, guid, docs, url, comments, wfw:comment, -# wfw:commentRSS; resolve relative URLs within embedded HTML markup in -# description, xhtml:body, content, content:encoded, title, subtitle, -# summary, info, tagline, and copyright; added support for pingback and -# trackback namespaces -#2.7 - 1/5/2004 - MAP - really added support for trackback and pingback -# namespaces, as opposed to 2.6 when I said I did but didn't really; -# sanitize HTML markup within some elements; added mxTidy support (if -# installed) to tidy HTML markup within some elements; fixed indentation -# bug in _parse_date (FazalM); use socket.setdefaulttimeout if available -# (FazalM); universal date parsing and normalization (FazalM): 'created', modified', -# 'issued' are parsed into 9-tuple date format and stored in 'created_parsed', -# 'modified_parsed', and 'issued_parsed'; 'date' is duplicated in 'modified' -# and vice-versa; 'date_parsed' is duplicated in 'modified_parsed' and vice-versa -#2.7.1 - 1/9/2004 - MAP - fixed bug handling " and '. fixed memory -# leak not closing url opener (JohnD); added dc:publisher support (MarekK); -# added admin:errorReportsTo support (MarekK); Python 2.1 dict support (MarekK) -#2.7.4 - 1/14/2004 - MAP - added workaround for improperly formed
        tags in -# encoded HTML (skadz); fixed unicode handling in normalize_attrs (ChrisL); -# fixed relative URI processing for guid (skadz); added ICBM support; added -# base64 support -#2.7.5 - 1/15/2004 - MAP - added workaround for malformed DOCTYPE (seen on many -# blogspot.com sites); added _debug variable -#2.7.6 - 1/16/2004 - MAP - fixed bug with StringIO importing -#3.0b3 - 1/23/2004 - MAP - parse entire feed with real XML parser (if available); -# added several new supported namespaces; fixed bug tracking naked markup in -# description; added support for enclosure; added support for source; re-added -# support for cloud which got dropped somehow; added support for expirationDate -#3.0b4 - 1/26/2004 - MAP - fixed xml:lang inheritance; fixed multiple bugs tracking -# xml:base URI, one for documents that don't define one explicitly and one for -# documents that define an outer and an inner xml:base that goes out of scope -# before the end of the document -#3.0b5 - 1/26/2004 - MAP - fixed bug parsing multiple links at feed level -#3.0b6 - 1/27/2004 - MAP - added feed type and version detection, result['version'] -# will be one of SUPPORTED_VERSIONS.keys() or empty string if unrecognized; -# added support for creativeCommons:license and cc:license; added support for -# full Atom content model in title, tagline, info, copyright, summary; fixed bug -# with gzip encoding (not always telling server we support it when we do) -#3.0b7 - 1/28/2004 - MAP - support Atom-style author element in author_detail -# (dictionary of 'name', 'url', 'email'); map author to author_detail if author -# contains name + email address -#3.0b8 - 1/28/2004 - MAP - added support for contributor -#3.0b9 - 1/29/2004 - MAP - fixed check for presence of dict function; added -# support for summary -#3.0b10 - 1/31/2004 - MAP - incorporated ISO-8601 date parsing routines from -# xml.util.iso8601 -#3.0b11 - 2/2/2004 - MAP - added 'rights' to list of elements that can contain -# dangerous markup; fiddled with decodeEntities (not right); liberalized -# date parsing even further -#3.0b12 - 2/6/2004 - MAP - fiddled with decodeEntities (still not right); -# added support to Atom 0.2 subtitle; added support for Atom content model -# in copyright; better sanitizing of dangerous HTML elements with end tags -# (script, frameset) -#3.0b13 - 2/8/2004 - MAP - better handling of empty HTML tags (br, hr, img, -# etc.) in embedded markup, in either HTML or XHTML form (
        ,
        ,
        ) -#3.0b14 - 2/8/2004 - MAP - fixed CDATA handling in non-wellformed feeds under -# Python 2.1 -#3.0b15 - 2/11/2004 - MAP - fixed bug resolving relative links in wfw:commentRSS; -# fixed bug capturing author and contributor URL; fixed bug resolving relative -# links in author and contributor URL; fixed bug resolvin relative links in -# generator URL; added support for recognizing RSS 1.0; passed Simon Fell's -# namespace tests, and included them permanently in the test suite with his -# permission; fixed namespace handling under Python 2.1 -#3.0b16 - 2/12/2004 - MAP - fixed support for RSS 0.90 (broken in b15) -#3.0b17 - 2/13/2004 - MAP - determine character encoding as per RFC 3023 -#3.0b18 - 2/17/2004 - MAP - always map description to summary_detail (Andrei); -# use libxml2 (if available) -#3.0b19 - 3/15/2004 - MAP - fixed bug exploding author information when author -# name was in parentheses; removed ultra-problematic mxTidy support; patch to -# workaround crash in PyXML/expat when encountering invalid entities -# (MarkMoraes); support for textinput/textInput -#3.0b20 - 4/7/2004 - MAP - added CDF support -#3.0b21 - 4/14/2004 - MAP - added Hot RSS support -#3.0b22 - 4/19/2004 - MAP - changed 'channel' to 'feed', 'item' to 'entries' in -# results dict; changed results dict to allow getting values with results.key -# as well as results[key]; work around embedded illformed HTML with half -# a DOCTYPE; work around malformed Content-Type header; if character encoding -# is wrong, try several common ones before falling back to regexes (if this -# works, bozo_exception is set to CharacterEncodingOverride); fixed character -# encoding issues in BaseHTMLProcessor by tracking encoding and converting -# from Unicode to raw strings before feeding data to sgmllib.SGMLParser; -# convert each value in results to Unicode (if possible), even if using -# regex-based parsing -#3.0b23 - 4/21/2004 - MAP - fixed UnicodeDecodeError for feeds that contain -# high-bit characters in attributes in embedded HTML in description (thanks -# Thijs van de Vossen); moved guid, date, and date_parsed to mapped keys in -# FeedParserDict; tweaked FeedParserDict.has_key to return True if asking -# about a mapped key -#3.0fc1 - 4/23/2004 - MAP - made results.entries[0].links[0] and -# results.entries[0].enclosures[0] into FeedParserDict; fixed typo that could -# cause the same encoding to be tried twice (even if it failed the first time); -# fixed DOCTYPE stripping when DOCTYPE contained entity declarations; -# better textinput and image tracking in illformed RSS 1.0 feeds -#3.0fc2 - 5/10/2004 - MAP - added and passed Sam's amp tests; added and passed -# my blink tag tests -#3.0fc3 - 6/18/2004 - MAP - fixed bug in _changeEncodingDeclaration that -# failed to parse utf-16 encoded feeds; made source into a FeedParserDict; -# duplicate admin:generatorAgent/@rdf:resource in generator_detail.url; -# added support for image; refactored parse() fallback logic to try other -# encodings if SAX parsing fails (previously it would only try other encodings -# if re-encoding failed); remove unichr madness in normalize_attrs now that -# we're properly tracking encoding in and out of BaseHTMLProcessor; set -# feed.language from root-level xml:lang; set entry.id from rdf:about; -# send Accept header -#3.0 - 6/21/2004 - MAP - don't try iso-8859-1 (can't distinguish between -# iso-8859-1 and windows-1252 anyway, and most incorrectly marked feeds are -# windows-1252); fixed regression that could cause the same encoding to be -# tried twice (even if it failed the first time) -#3.0.1 - 6/22/2004 - MAP - default to us-ascii for all text/* content types; -# recover from malformed content-type header parameter with no equals sign -# ('text/xml; charset:iso-8859-1') -#3.1 - 6/28/2004 - MAP - added and passed tests for converting HTML entities -# to Unicode equivalents in illformed feeds (aaronsw); added and -# passed tests for converting character entities to Unicode equivalents -# in illformed feeds (aaronsw); test for valid parsers when setting -# XML_AVAILABLE; make version and encoding available when server returns -# a 304; add handlers parameter to pass arbitrary urllib2 handlers (like -# digest auth or proxy support); add code to parse username/password -# out of url and send as basic authentication; expose downloading-related -# exceptions in bozo_exception (aaronsw); added __contains__ method to -# FeedParserDict (aaronsw); added publisher_detail (aaronsw) -#3.2 - 7/3/2004 - MAP - use cjkcodecs and iconv_codec if available; always -# convert feed to UTF-8 before passing to XML parser; completely revamped -# logic for determining character encoding and attempting XML parsing -# (much faster); increased default timeout to 20 seconds; test for presence -# of Location header on redirects; added tests for many alternate character -# encodings; support various EBCDIC encodings; support UTF-16BE and -# UTF16-LE with or without a BOM; support UTF-8 with a BOM; support -# UTF-32BE and UTF-32LE with or without a BOM; fixed crashing bug if no -# XML parsers are available; added support for 'Content-encoding: deflate'; -# send blank 'Accept-encoding: ' header if neither gzip nor zlib modules -# are available -#3.3 - 7/15/2004 - MAP - optimize EBCDIC to ASCII conversion; fix obscure -# problem tracking xml:base and xml:lang if element declares it, child -# doesn't, first grandchild redeclares it, and second grandchild doesn't; -# refactored date parsing; defined public registerDateHandler so callers -# can add support for additional date formats at runtime; added support -# for OnBlog, Nate, MSSQL, Greek, and Hungarian dates (ytrewq1); added -# zopeCompatibilityHack() which turns FeedParserDict into a regular -# dictionary, required for Zope compatibility, and also makes command- -# line debugging easier because pprint module formats real dictionaries -# better than dictionary-like objects; added NonXMLContentType exception, -# which is stored in bozo_exception when a feed is served with a non-XML -# media type such as 'text/plain'; respect Content-Language as default -# language if not xml:lang is present; cloud dict is now FeedParserDict; -# generator dict is now FeedParserDict; better tracking of xml:lang, -# including support for xml:lang='' to unset the current language; -# recognize RSS 1.0 feeds even when RSS 1.0 namespace is not the default -# namespace; don't overwrite final status on redirects (scenarios: -# redirecting to a URL that returns 304, redirecting to a URL that -# redirects to another URL with a different type of redirect); add -# support for HTTP 303 redirects -#4.0 - MAP - support for relative URIs in xml:base attribute; fixed -# encoding issue with mxTidy (phopkins); preliminary support for RFC 3229; -# support for Atom 1.0; support for iTunes extensions; new 'tags' for -# categories/keywords/etc. as array of dict -# {'term': term, 'scheme': scheme, 'label': label} to match Atom 1.0 -# terminology; parse RFC 822-style dates with no time; lots of other -# bug fixes -#4.1 - MAP - removed socket timeout; added support for chardet library diff --git a/main/sabnzbd/utils/json.py b/main/sabnzbd/utils/json.py deleted file mode 100644 index 28c4594..0000000 --- a/main/sabnzbd/utils/json.py +++ /dev/null @@ -1,94 +0,0 @@ -import string -import types - -## json.py implements a JSON (http://json.org) reader and writer. -## Copyright (C) 2005 Patrick D. Logan -## Contact mailto:patrickdlogan@stardecisions.com -## -## 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -## Remark by ShyPike: removed the decoding of JSON, -## because it's not used by SABnzbd+ -## The full source package can be obtained from: -## http://sourceforge.net/projects/json-py - -class WriteException(Exception): - pass - -class JsonWriter(object): - - def _append(self, s): - self._results.append(s) - - def write(self, obj, escaped_forward_slash=False): - self._escaped_forward_slash = escaped_forward_slash - self._results = [] - self._write(obj) - return "".join(self._results) - - def _write(self, obj): - ty = type(obj) - if ty is types.DictType: - n = len(obj) - self._append("{") - for k, v in obj.items(): - self._write(k) - self._append(":") - self._write(v) - n = n - 1 - if n > 0: - self._append(",") - self._append("}") - elif ty is types.ListType or ty is types.TupleType: - n = len(obj) - self._append("[") - for item in obj: - self._write(item) - n = n - 1 - if n > 0: - self._append(",") - self._append("]") - elif ty is types.StringType or ty is types.UnicodeType: - self._append('"') - if ty is types.UnicodeType: - obj = obj.encode('utf-8', 'replace') - else: - try: - obj.decode('utf-8') - except: - obj = obj.decode('latin-1').encode('utf-8', 'replace') - obj = obj.replace('\\', r'\\') - if self._escaped_forward_slash: - obj = obj.replace('/', r'\/') - obj = obj.replace('"', r'\"') - obj = obj.replace('\b', r'\b') - obj = obj.replace('\f', r'\f') - obj = obj.replace('\n', r'\n') - obj = obj.replace('\r', r'\r') - obj = obj.replace('\t', r'\t') - self._append(obj) - self._append('"') - elif ty is types.IntType or ty is types.LongType: - self._append(str(obj)) - elif ty is types.FloatType: - self._append("%f" % obj) - elif obj is True: - self._append("true") - elif obj is False: - self._append("false") - elif obj is None: - self._append("null") - else: - raise WriteException, "Cannot write in JSON: %s" % repr(obj) diff --git a/main/sabnzbd/utils/kronos.py b/main/sabnzbd/utils/kronos.py deleted file mode 100644 index 79ac945..0000000 --- a/main/sabnzbd/utils/kronos.py +++ /dev/null @@ -1,579 +0,0 @@ -#!/usr/bin/python -"""Module that provides a cron-like task scheduler. - -This task scheduler is designed to be used from inside your own program. -You can schedule Python functions to be called at specific intervals or -days. It uses the standard 'sched' module for the actual task scheduling, -but provides much more: - -* repeated tasks (at intervals, or on specific days) -* error handling (exceptions in tasks don't kill the scheduler) -* optional to run scheduler in its own thread or separate process -* optional to run a task in its own thread or separate process - -If the threading module is available, you can use the various Threaded -variants of the scheduler and associated tasks. If threading is not -available, you could still use the forked variants. If fork is also -not available, all processing is done in a single process, sequentially. - -There are three Scheduler classes: - - Scheduler ThreadedScheduler ForkedScheduler - -You usually add new tasks to a scheduler using the add_interval_task or -add_daytime_task methods, with the appropriate processmethod argument -to select sequential, threaded or forked processing. NOTE: it is impossible -to add new tasks to a ForkedScheduler, after the scheduler has been started! -For more control you can use one of the following Task classes -and use schedule_task or schedule_task_abs: - - IntervalTask ThreadedIntervalTask ForkedIntervalTask - SingleTask ThreadedSingleTask ForkedSingleTask - WeekdayTask ThreadedWeekdayTask ForkedWeekdayTask - MonthdayTask ThreadedMonthdayTask ForkedMonthdayTask - -Kronos is the Greek God of Time. - -Kronos scheduler (c) Irmen de Jong. -This version has been extracted from the Turbogears source repository -and slightly changed to be completely stand-alone again. Also some fixes -have been made to make it work on Python 2.6 (sched module changes). -The version in Turbogears is based on the original stand-alone Kronos. -This is open-source software, released under the MIT Software License: -http://www.opensource.org/licenses/mit-license.php - -""" - -__version__="2.0" - -__all__ = [ - "DayTaskRescheduler", - "ForkedIntervalTask", - "ForkedMonthdayTask", - "ForkedScheduler", - "ForkedSingleTask", - "ForkedTaskMixin", - "ForkedWeekdayTask", - "IntervalTask", - "MonthdayTask", - "Scheduler", - "SingleTask", - "Task", - "ThreadedIntervalTask", - "ThreadedMonthdayTask", - "ThreadedScheduler", - "ThreadedSingleTask", - "ThreadedTaskMixin", - "ThreadedWeekdayTask", - "WeekdayTask", - "add_interval_task", - "add_monthday_task", - "add_single_task", - "add_weekday_task", - "cancel", - "method", -] - -import os -import sys -import sched -import time -import traceback -import weakref - -class method: - sequential="sequential" - forked="forked" - threaded="threaded" - -class Scheduler: - """The Scheduler itself.""" - - def __init__(self): - self.running=True - self.sched = sched.scheduler(time.time, self.__delayfunc) - - def __delayfunc(self, delay): - # This delay function is basically a time.sleep() that is - # divided up, so that we can check the self.running flag while delaying. - # there is an additional check in here to ensure that the top item of - # the queue hasn't changed - if delay<10: - time.sleep(delay) - else: - toptime = self._getqueuetoptime() - endtime = time.time() + delay - period = 5 - stoptime = endtime - period - while self.running and stoptime > time.time() and \ - self._getqueuetoptime() == toptime: - time.sleep(period) - if not self.running or self._getqueuetoptime() != toptime: - return - now = time.time() - if endtime > now: - time.sleep(endtime - now) - - def _acquire_lock(self): - pass - - def _release_lock(self): - pass - - def add_interval_task(self, action, taskname, initialdelay, interval, - processmethod, args, kw): - """Add a new Interval Task to the schedule. - - A very short initialdelay or one of zero cannot be honored, you will - see a slight delay before the task is first executed. This is because - the scheduler needs to pick it up in its loop. - - """ - if initialdelay < 0 or interval < 1: - raise ValueError("Delay or interval must be >0") - # Select the correct IntervalTask class. Not all types may be available! - if processmethod == method.sequential: - TaskClass = IntervalTask - elif processmethod == method.threaded: - TaskClass = ThreadedIntervalTask - elif processmethod == method.forked: - TaskClass = ForkedIntervalTask - else: - raise ValueError("Invalid processmethod") - if not args: - args = [] - if not kw: - kw = {} - task = TaskClass(taskname, interval, action, args, kw) - self.schedule_task(task, initialdelay) - return task - - def add_single_task(self, action, taskname, initialdelay, processmethod, - args, kw): - """Add a new task to the scheduler that will only be executed once.""" - if initialdelay < 0: - raise ValueError("Delay must be >0") - # Select the correct SingleTask class. Not all types may be available! - if processmethod == method.sequential: - TaskClass = SingleTask - elif processmethod == method.threaded: - TaskClass = ThreadedSingleTask - elif processmethod == method.forked: - TaskClass = ForkedSingleTask - else: - raise ValueError("Invalid processmethod") - if not args: - args = [] - if not kw: - kw = {} - task = TaskClass(taskname, action, args, kw) - self.schedule_task(task, initialdelay) - return task - - def add_daytime_task(self, action, taskname, weekdays, monthdays, timeonday, - processmethod, args, kw): - """Add a new Day Task (Weekday or Monthday) to the schedule.""" - if weekdays and monthdays: - raise ValueError("You can only specify weekdays or monthdays, " - "not both") - if not args: - args = [] - if not kw: - kw = {} - if weekdays: - # Select the correct WeekdayTask class. - # Not all types may be available! - if processmethod == method.sequential: - TaskClass = WeekdayTask - elif processmethod == method.threaded: - TaskClass = ThreadedWeekdayTask - elif processmethod == method.forked: - TaskClass = ForkedWeekdayTask - else: - raise ValueError("Invalid processmethod") - task=TaskClass(taskname, weekdays, timeonday, action, args, kw) - if monthdays: - # Select the correct MonthdayTask class. - # Not all types may be available! - if processmethod == method.sequential: - TaskClass = MonthdayTask - elif processmethod == method.threaded: - TaskClass = ThreadedMonthdayTask - elif processmethod == method.forked: - TaskClass = ForkedMonthdayTask - else: - raise ValueError("Invalid processmethod") - task=TaskClass(taskname, monthdays, timeonday, action, args, kw) - firsttime=task.get_schedule_time(True) - self.schedule_task_abs(task, firsttime) - return task - - def schedule_task(self, task, delay): - """Add a new task to the scheduler with the given delay (seconds). - - Low-level method for internal use. - - """ - if self.running: - # lock the sched queue, if needed - self._acquire_lock() - try: - task.event = self.sched.enter(delay, 0, task, - (weakref.ref(self),) ) - finally: - self._release_lock() - else: - task.event = self.sched.enter(delay, 0, task, - (weakref.ref(self),) ) - - def schedule_task_abs(self, task, abstime): - """Add a new task to the scheduler for the given absolute time value. - - Low-level method for internal use. - - """ - if self.running: - # lock the sched queue, if needed - self._acquire_lock() - try: - task.event = self.sched.enterabs(abstime, 0, task, - (weakref.ref(self),) ) - finally: - self._release_lock() - else: - task.event = self.sched.enterabs(abstime, 0, task, - (weakref.ref(self),) ) - - def start(self): - """Start the scheduler.""" - self._run() - - def stop(self): - """Remove all pending tasks and stop the Scheduler.""" - self.running = False - self._clearschedqueue() - - def cancel(self, task): - """Cancel given scheduled task.""" - self.sched.cancel(task.event) - - if sys.version_info>=(2,6): - # code for sched module of python 2.6+ - def _getqueuetoptime(self): - return self.sched._queue[0].time - def _clearschedqueue(self): - self.sched._queue[:] = [] - else: - # code for sched module of python 2.5 and older - def _getqueuetoptime(self): - return self.sched.queue[0][0] - def _clearschedqueue(self): - self.sched.queue[:] = [] - - def _run(self): - # Low-level run method to do the actual scheduling loop. - while self.running: - try: - self.sched.run() - except Exception,x: - print >>sys.stderr, "ERROR DURING SCHEDULER EXECUTION",x - print >>sys.stderr, "".join( - traceback.format_exception(*sys.exc_info())) - print >>sys.stderr, "-" * 20 - # queue is empty; sleep a short while before checking again - if self.running: - time.sleep(5) - - -class Task: - """Abstract base class of all scheduler tasks""" - - def __init__(self, name, action, args, kw): - """This is an abstract class!""" - self.name=name - self.action=action - self.args=args - self.kw=kw - - def __call__(self, schedulerref): - """Execute the task action in the scheduler's thread.""" - try: - self.execute() - except Exception,x: - self.handle_exception(x) - self.reschedule(schedulerref()) - - def reschedule(self, scheduler): - """This method should be defined in one of the sub classes!""" - raise NotImplementedError("You're using the abstract base class 'Task'," - " use a concrete class instead") - - def execute(self): - """Execute the actual task.""" - self.action(*self.args, **self.kw) - - 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 - - -class SingleTask(Task): - """A task that only runs once.""" - - def reschedule(self, scheduler): - pass - - -class IntervalTask(Task): - """A repeated task that occurs at certain intervals (in seconds).""" - - def __init__(self, name, interval, action, args=None, kw=None): - Task.__init__(self, name, action, args, kw) - self.interval = interval - - def reschedule(self, scheduler): - """Reschedule this task according to its interval (in seconds).""" - scheduler.schedule_task(self, self.interval) - - -class DayTaskRescheduler: - """A mixin class that contains the reschedule logic for the DayTasks.""" - - def __init__(self, timeonday): - self.timeonday = timeonday - - def get_schedule_time(self, today): - """Calculate the time value at which this task is to be scheduled.""" - now = list(time.localtime()) - if today: - # schedule for today. let's see if that is still possible - if (now[3], now[4]) >= self.timeonday: - # too bad, it will be tomorrow - now[2] += 1 - else: - # tomorrow - now[2] += 1 - # set new time on day (hour,minute) - now[3], now[4] = self.timeonday - # seconds - now[5] = 0 - return time.mktime(now) - - def reschedule(self, scheduler): - """Reschedule this task according to the daytime for the task. - - The task is scheduled for tomorrow, for the given daytime. - - """ - # (The execute method in the concrete Task classes will check - # if the current day is a day on which the task must run). - abstime = self.get_schedule_time(False) - scheduler.schedule_task_abs(self, abstime) - - -class WeekdayTask(DayTaskRescheduler, Task): - """A task that is called at specific days in a week (1-7), at a fixed time - on the day. - - """ - - def __init__(self, name, weekdays, timeonday, action, args=None, kw=None): - if type(timeonday) not in (list, tuple) or len(timeonday) != 2: - raise TypeError("timeonday must be a 2-tuple (hour,minute)") - if type(weekdays) not in (list, tuple): - raise TypeError("weekdays must be a sequence of weekday numbers " - "1-7 (1 is Monday)") - DayTaskRescheduler.__init__(self, timeonday) - Task.__init__(self, name, action, args, kw) - self.days = weekdays - - def execute(self): - # This is called every day, at the correct time. We only need to - # check if we should run this task today (this day of the week). - weekday = time.localtime().tm_wday + 1 - if weekday in self.days: - self.action(*self.args, **self.kw) - - -class MonthdayTask(DayTaskRescheduler, Task): - """A task that is called at specific days in a month (1-31), at a fixed - time on the day. - - """ - - def __init__(self, name, monthdays, timeonday, action, args=None, kw=None): - if type(timeonday) not in (list, tuple) or len(timeonday) != 2: - raise TypeError("timeonday must be a 2-tuple (hour,minute)") - if type(monthdays) not in (list, tuple): - raise TypeError("monthdays must be a sequence of monthdays numbers " - "1-31") - DayTaskRescheduler.__init__(self, timeonday) - Task.__init__(self, name, action, args, kw) - self.days = monthdays - - def execute(self): - # This is called every day, at the correct time. We only need to - # check if we should run this task today (this day of the month). - if time.localtime().tm_mday in self.days: - self.action(*self.args, **self.kw) - - -try: - import threading - - class ThreadedScheduler(Scheduler): - """A Scheduler that runs in its own thread.""" - - def __init__(self): - Scheduler.__init__(self) - # we require a lock around the task queue - self._lock = threading.Lock() - - def start(self): - """Splice off a thread in which the scheduler will run.""" - self.thread = threading.Thread(target=self._run) - self.thread.setDaemon(True) - self.thread.start() - - def stop(self): - """Stop the scheduler and wait for the thread to finish.""" - Scheduler.stop(self) - try: - self.thread.join() - except AttributeError: - pass - - def _acquire_lock(self): - """Lock the thread's task queue.""" - self._lock.acquire() - - def _release_lock(self): - """Release the lock on th ethread's task queue.""" - self._lock.release() - - - class ThreadedTaskMixin: - """A mixin class to make a Task execute in a separate thread.""" - - def __call__(self, schedulerref): - """Execute the task action in its own thread.""" - threading.Thread(target=self.threadedcall).start() - self.reschedule(schedulerref()) - - def threadedcall(self): - # This method is run within its own thread, so we have to - # do the execute() call and exception handling here. - try: - self.execute() - except Exception,x: - self.handle_exception(x) - - class ThreadedIntervalTask(ThreadedTaskMixin, IntervalTask): - """Interval Task that executes in its own thread.""" - pass - - class ThreadedSingleTask(ThreadedTaskMixin, SingleTask): - """Single Task that executes in its own thread.""" - pass - - class ThreadedWeekdayTask(ThreadedTaskMixin, WeekdayTask): - """Weekday Task that executes in its own thread.""" - pass - - class ThreadedMonthdayTask(ThreadedTaskMixin, MonthdayTask): - """Monthday Task that executes in its own thread.""" - pass - -except ImportError: - # threading is not available - pass - - -if hasattr(os, "fork"): - import signal - - class ForkedScheduler(Scheduler): - """A Scheduler that runs in its own forked process.""" - - def __del__(self): - if hasattr(self, "childpid"): - os.kill(self.childpid, signal.SIGKILL) - - def start(self): - """Fork off a new process in which the scheduler will run.""" - pid = os.fork() - if pid == 0: - # we are the child - signal.signal(signal.SIGUSR1, self.signalhandler) - self._run() - os._exit(0) - else: - # we are the parent - self.childpid = pid - # can no longer insert in the scheduler queue - del self.sched - - def stop(self): - """Stop the scheduler and wait for the process to finish.""" - os.kill(self.childpid, signal.SIGUSR1) - os.waitpid(self.childpid, 0) - - def signalhandler(self, sig, stack): - Scheduler.stop(self) - - - class ForkedTaskMixin: - """A mixin class to make a Task execute in a separate process.""" - - def __call__(self, schedulerref): - """Execute the task action in its own process.""" - pid = os.fork() - if pid == 0: - # we are the child - try: - self.execute() - except Exception,x: - self.handle_exception(x) - os._exit(0) - else: - # we are the parent - self.reschedule(schedulerref()) - - - class ForkedIntervalTask(ForkedTaskMixin, IntervalTask): - """Interval Task that executes in its own process.""" - pass - - class ForkedSingleTask(ForkedTaskMixin, SingleTask): - """Single Task that executes in its own process.""" - pass - - class ForkedWeekdayTask(ForkedTaskMixin, WeekdayTask): - """Weekday Task that executes in its own process.""" - pass - - class ForkedMonthdayTask(ForkedTaskMixin, MonthdayTask): - """Monthday Task that executes in its own process.""" - pass - - - -if __name__=="__main__": - def testaction(arg): - print ">>>TASK",arg,"sleeping 3 seconds" - time.sleep(3) - print "<<>> elem_quote('hello') - 'hello' - >>> elem_quote('hello', nonquote=False) - '"hello"' - >>> elem_quote('"hello"') - '\\'"hello"\\'' - >>> elem_quote(3) - Traceback (most recent call last): - TypeError: Can only quote strings. "3" - >>> elem_quote(3, stringify=True) - '3' - >>> elem_quote('hello', encoding='ascii') - u'hello' - >>> elem_quote('\\n') - Traceback (most recent call last): - QuoteError: Multiline values can't be quoted. - " - " - """ - if not isinstance(member, basestring): - if stringify: - member = str(member) - else: - # FIXME: is this the appropriate error message ? - raise TypeError('Can only quote strings. "%s"' % str(member)) - if encoding and isinstance(member, str): - # from string to unicode - member = unicode(member, encoding) - if '\n' in member: - raise QuoteError('Multiline values can\'t be quoted.\n"%s"' % str(member)) - # - if nonquote and badchars.match(member) is not None: - return member - # this ordering of tests determines which quote character will be used in - # preference - here we have \" first... - elif member.find('"') == -1: - return '"%s"' % member - # but we will use either... which may not suit some people - elif member.find("'") == -1: - return "'%s'" % member - else: - raise QuoteError('Value can\'t be quoted : "%s"' % member) - -def unquote(inline, fullquote=True, retain=False): - """ - Unquote a value. - - If the value isn't quoted it returns the value. - - If the value is badly quoted it raises ``UnQuoteError``. - - If retain is ``True`` (default is ``False``) then the quotes are left - around the value (but leading or trailing whitespace will have been - removed). - - If fullquote is ``False`` (default is ``True``) then unquote will only - unquote the first part of the ``inline``. If there is anything after the - quoted element, this will be returned as well (instead of raising an - error). - - In this case the return value is ``(value, rest)``. - - >>> unquote('hello') - 'hello' - >>> unquote('"hello"') - 'hello' - >>> unquote('"hello') - Traceback (most recent call last): - UnQuoteError: Value is badly quoted: ""hello" - >>> unquote('"hello" fish') - Traceback (most recent call last): - UnQuoteError: Value is badly quoted: ""hello" fish" - >>> unquote("'hello'", retain=True) - "'hello'" - >>> unquote('"hello" fish', fullquote=False) - ('hello', ' fish') - """ - mat = inquotes.match(inline) - if mat is None: - if inline.strip()[0] not in '\'\"': # not quoted - return inline - else: - # badly quoted - raise UnQuoteError('Value is badly quoted: "%s"' % inline) - quoted, rest = mat.groups() - if fullquote and rest.strip(): - # badly quoted - raise UnQuoteError('Value is badly quoted: "%s"' % inline) - if not retain: - quoted = quoted[1:-1] - if not fullquote: - return quoted, rest - else: - return quoted - -def quote_escape(value, lf='&mjf-lf;', quot='&mjf-quot;'): - """ - Escape a string so that it can safely be quoted. You should use this if the - value to be quoted *may* contain line-feeds or both single quotes and double - quotes. - - If the value contains ``\n`` then it will be escaped using ``lf``. By - default this is ``&mjf-lf;``. - - If the value contains single quotes *and* double quotes, then all double - quotes will be escaped using ``quot``. By default this is ``&mjf-quot;``. - - >>> quote_escape('hello') - 'hello' - >>> quote_escape('hello\\n') - 'hello&mjf-lf;' - >>> quote_escape('hello"') - 'hello"' - >>> quote_escape('hello"\\'') - "hello&mjf-quot;'" - >>> quote_escape('hello"\\'\\n', '&fish;', '&wobble;') - "hello&wobble;'&fish;" - """ - if '\n' in value: - value = value.replace('\n', lf) - if '\'' in value and '\"' in value: - value = value.replace('"', quot) - return value - -def quote_unescape(value, lf='&mjf-lf;', quot='&mjf-quot;'): - """ - Unescape a string escaped by ``quote_escape``. - - If it was escaped using anything other than the defaults for ``lf`` and - ``quot`` you must pass them to this function. - - >>> quote_unescape("hello&wobble;'&fish;", '&fish;', '&wobble;') - 'hello"\\'\\n' - >>> quote_unescape('hello') - 'hello' - >>> quote_unescape('hello&mjf-lf;') - 'hello\\n' - >>> quote_unescape("'hello'") - "'hello'" - >>> quote_unescape('hello"') - 'hello"' - >>> quote_unescape("hello&mjf-quot;'") - 'hello"\\'' - >>> quote_unescape("hello&wobble;'&fish;", '&fish;', '&wobble;') - 'hello"\\'\\n' - """ - return value.replace(lf, '\n').replace(quot, '"') - -def simplelist(inline): - """ - Parse a string to a list. - - A simple regex that extracts quoted items from a list. - - It retains quotes around elements. (So unquote each element) - - >>> simplelist('''hello, goodbye, 'title', "name", "I can't"''') - ['hello', 'goodbye', "'title'", '"name"', '"I can\\'t"'] - - FIXME: This doesn't work fully (allows some badly formed lists): - e.g. - >>> simplelist('hello, fish, "wobble" bottom hooray') - ['hello', 'fish', '"wobble"', 'bottom hooray'] - """ - return paramfinder.findall(inline) - -############################################## -# LineParser - a multi purpose line parser -# handles lines with comma seperated values on it, followed by a comment -# correctly handles quoting -# *and* can handle nested lists - marked between '[...]' or '(...)' -# See the docstring for how this works -# by default it returns a (list, comment) tuple ! -# There are several keyword arguments that control how LineParser works. - -class LineParser(object): - """An object to parse nested lists from strings.""" - - liststart = { '[' : ']', '(' : ')' } - quotes = ['\'', '"'] - - def __init__(self, options=None, **keywargs): - """Initialise the LineParser.""" - self.reset(options, **keywargs) - - def reset(self, options=None, **keywargs): - """Reset the parser with the specified options.""" - if options is None: - options = {} - options.update(keywargs) - # - defaults = { - 'recursive': True, - 'comment': True, - 'retain': False, - 'force_list': False, - 'csv': False - } - defaults.update(options) - if defaults['csv']: - defaults.update({ - 'recursive': False, - 'force_list': True, - 'comment': False, - }) - # check all the options are valid - for entry in defaults.keys(): - if entry not in ['comment', - 'retain', - 'csv', - 'recursive', - 'force_list']: - raise TypeError, ("'%s' is an invalid keyword argument for " - "this function" % entry) - # - self.recursive = defaults['recursive'] - self.comment = defaults['comment'] - self.retain = defaults['retain'] - self.force_list = defaults['force_list'] - - def feed(self, inline, endchar=None): - """ - Parse a single line (or fragment). - - Uses the options set in the parser object. - - Can parse lists - including nested lists. (If ``recursive`` is - ``False`` then nested lists will cause a ``BadLineError``). - - Return value depends on options. - - If ``comment`` is ``False`` it returns ``outvalue`` - - If ``comment`` is ``True`` it returns ``(outvalue, comment)``. (Even if - comment is just ``''``). - - If ``force_list`` is ``False`` then ``outvalue`` may be a list or a - single item. - - If ``force_list`` is ``True`` then ``outvalue`` will always be a list - - even if it has just one member. - - List syntax : - - * Comma separated lines ``a, b, c, d`` - * Lists can optionally be between square or ordinary brackets - - ``[a, b, c, d]`` - - ``(a, b, c, d)`` - * Nested lists *must* be between brackets - ``a, [a, b, c, d], c`` - * A single element list can be shown by a trailing quote - ``a,`` - * An empty list is shown by ``()`` or ``[]`` - - Elements can be quoted with single or double quotes (but can't contain - both). - - The line can optionally end with a comment (preeded by a '#'). - This depends on the ``comment`` attribute. - - If the line is badly built then this method will raise one of : :: - - CommentError, BadLineError, UnQuoteError - - Using the ``csv`` option is the same as setting : :: - - 'recursive': False - 'force_list': True - 'comment': False - """ - # preserve the original line - # for error messages - if endchar is None: - self.origline = inline - inline = inline.lstrip() - # - outlist = [] - comma_needed = False - found_comma = False - while inline: - # NOTE: this sort of operation would be quicker - # with lists - but then can't use regexes - thischar = inline[0] - if thischar == '#': - # reached a comment - # end of the line... - break - # - if thischar == endchar: - return outlist, inline[1:] - # - if comma_needed: - if thischar == ',': - inline = inline[1:].lstrip() - comma_needed = False - found_comma = True - continue - raise BadLineError('Line is badly built :\n%s' % self.origline) - # - try: - # the character that marks the end of the list - listend = self.liststart[thischar] - except KeyError: - pass - else: - if not self.recursive and endchar is not None: - raise BadLineError('Line is badly built :\n%s' % self.origline) - newlist, inline = self.feed(inline[1:], endchar=listend) - outlist.append(newlist) - inline = inline.lstrip() - comma_needed = True - continue - # - if thischar in self.quotes: - # this might raise an error - # FIXME: trap the error and raise a more appropriate one ? - element, inline = unquote(inline, fullquote=False, - retain=self.retain) - inline = inline.lstrip() - outlist.append(element) - comma_needed = True - continue - # - # must be an unquoted element - mat = unquoted.match(inline) - if mat is not None: - # FIXME: if the regex was better we wouldn't need an rstrip - element = mat.group(1).rstrip() - # group 2 will be ``None`` if we reach the end of the line - inline = mat.group(2) or '' - outlist.append(element) - comma_needed = True - continue - # or it's a badly built line - raise BadLineError('Line is badly built :\n%s' % self.origline) - # - # if we've been called recursively - # we shouldn't have got this far - if endchar is not None: - raise BadLineError('Line is badly built :\n%s' % self.origline) - # - if not found_comma: - # if we didn't find a comma - # the value could be a nested list - if outlist: - outlist = outlist[0] - else: - outlist = '' - if self.force_list and not isinstance(outlist, list): - if outlist: - outlist = [outlist] - else: - outlist = [] - if not self.comment: - if inline: - raise CommentError('Comment not allowed :\n%s' % self.origline) - return outlist - return outlist, inline - -def lineparse(inline, options=None, **keywargs): - """ - A compatibility function that mimics the old lineparse. - - Also more convenient for single line use. - - Note: It still uses the new ``LineParser`` - and so takes the same - keyword arguments as that. - - >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' # a comment''') - (['hello', 'goodbye', "I can't do that", 'You "can" !'], '# a comment') - >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' # a comment''', comment=False) - Traceback (most recent call last): - CommentError: Comment not allowed : - "hello", 'goodbye', "I can't do that", 'You "can" !' # a comment - >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' # a comment''', recursive=False) - (['hello', 'goodbye', "I can't do that", 'You "can" !'], '# a comment') - >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' # a comment''', csv=True) - Traceback (most recent call last): - CommentError: Comment not allowed : - "hello", 'goodbye', "I can't do that", 'You "can" !' # a comment - >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' ''', comment=False) - ['hello', 'goodbye', "I can't do that", 'You "can" !'] - >>> lineparse('') - ('', '') - >>> lineparse('', force_list=True) - ([], '') - >>> lineparse('[]') - ([], '') - >>> lineparse('()') - ([], '') - >>> lineparse('()', force_list=True) - ([], '') - >>> lineparse('1,') - (['1'], '') - >>> lineparse('"Yo"') - ('Yo', '') - >>> lineparse('"Yo"', force_list=True) - (['Yo'], '') - >>> lineparse('''h, i, j, (h, i, ['hello', "f"], [], ([]),), k''') - (['h', 'i', 'j', ['h', 'i', ['hello', 'f'], [], [[]]], 'k'], '') - >>> lineparse('''h, i, j, (h, i, ['hello', "f"], [], ([]),), k''', recursive=False) - Traceback (most recent call last): - BadLineError: Line is badly built : - h, i, j, (h, i, ['hello', "f"], [], ([]),), k - >>> lineparse('fish#dog') - ('fish', '#dog') - >>> lineparse('"fish"#dog') - ('fish', '#dog') - >>> lineparse('(((())))') - ([[[[]]]], '') - >>> lineparse('((((,))))') - Traceback (most recent call last): - BadLineError: Line is badly built : - ((((,)))) - >>> lineparse('hi, ()') - (['hi', []], '') - >>> lineparse('"hello", "",') - (['hello', ''], '') - >>> lineparse('"hello", ,') - Traceback (most recent call last): - BadLineError: Line is badly built : - "hello", , - >>> lineparse('"hello", ["hi", ""], ""') - (['hello', ['hi', ''], ''], '') - >>> lineparse('''"member 1", "member 2", ["nest 1", ("nest 2", 'nest 2b', ['nest 3', 'value'], nest 2c), nest1b]''') - (['member 1', 'member 2', ['nest 1', ['nest 2', 'nest 2b', ['nest 3', 'value'], 'nest 2c'], 'nest1b']], '') - >>> lineparse('''"member 1", "member 2", ["nest 1", ("nest 2", 'nest 2b', ['nest 3', 'value'], nest 2c), nest1b]]''') - Traceback (most recent call last): - BadLineError: Line is badly built : - "member 1", "member 2", ["nest 1", ("nest 2", 'nest 2b', ['nest 3', 'value'], nest 2c), nest1b]] - """ - p = LineParser(options, **keywargs) - return p.feed(inline) - -############################################################################ -# a couple of functions to help build lists - -def list_stringify(inlist): - """ - Recursively rebuilds a list - making sure all the members are strings. - - Can take any iterable or a sequence as the argument and always - returns a list. - - Useful before writing out lists. - - Used by makelist if stringify is set. - - Uses the ``str`` function for stringification. - - Every element will be a string or a unicode object. - - Doesn't handle decoding strings into unicode objects (or vice-versa). - - >>> list_stringify([2, 2, 2, 2, (3, 3, 2.9)]) - ['2', '2', '2', '2', ['3', '3', '2.9']] - >>> list_stringify(None) - Traceback (most recent call last): - TypeError: 'NoneType' object is not iterable - >>> list_stringify([]) - [] - - FIXME: can receive any iterable - e.g. a sequence - >>> list_stringify('') - [] - >>> list_stringify('Hello There') - ['H', 'e', 'l', 'l', 'o', ' ', 'T', 'h', 'e', 'r', 'e'] - """ - outlist = [] - for item in inlist: - if not isinstance(item, (tuple, list)): - if not isinstance(item, basestring): - item = str(item) - else: - item = list_stringify(item) - outlist.append(item) - return outlist - - -def makelist(inlist, listchar='', stringify=False, escape=False, encoding=None): - """ - Given a list - turn it into a string that represents that list. (Suitable - for parsing by ``LineParser``). - - listchar should be ``'['``, ``'('`` or ``''``. This is the type of bracket - used to enclose the list. (``''`` meaning no bracket of course). - - If you have nested lists and listchar is ``''``, makelist will - automatically use ``'['`` for the nested lists. - - If stringify is ``True`` (default is ``False``) makelist will stringify the - inlist first (using ``list_stringify``). - - If ``escape`` is ``True`` (default is ``False``) makelist will call - ``quote_escape`` on each element before passing them to ``elem_quote`` to - be quoted. - - If encoding keyword is not ``None``, all strings are decoded to unicode - with the specified encoding. Each item will then be a unicode object - instead of a string. - - >>> makelist([]) - '[]' - >>> makelist(['a', 'b', 'I can\\'t do it', 'Yes you "can" !']) - 'a, b, "I can\\'t do it", \\'Yes you "can" !\\'' - >>> makelist([3, 4, 5, [6, 7, 8]], stringify=True) - '3, 4, 5, [6, 7, 8]' - >>> makelist([3, 4, 5, [6, 7, 8]]) - Traceback (most recent call last): - TypeError: Can only quote strings. "3" - >>> makelist(['a', 'b', 'c', ('d', 'e'), ('f', 'g')], listchar='(') - '(a, b, c, (d, e), (f, g))' - >>> makelist(['hi\\n', 'Quote "heck\\''], escape=True) - 'hi&mjf-lf;, "Quote &mjf-quot;heck\\'"' - >>> makelist(['a', 'b', 'c', ('d', 'e'), ('f', 'g')], encoding='UTF8') - u'a, b, c, [d, e], [f, g]' - """ - if stringify: - inlist = list_stringify(inlist) - listdict = {'[' : '[%s]', '(' : '(%s)', '' : '%s'} - outline = [] - # this makes '[' the default for empty or single value lists - if len(inlist) < 2: - listchar = listchar or '[' - for item in inlist: - if not isinstance(item, (list, tuple)): - if escape: - item = quote_escape(item) - outline.append(elem_quote(item, encoding=encoding)) - else: - # recursive for nested lists - outline.append(makelist(item, listchar or '[', - stringify, escape, encoding)) - return listdict[listchar] % (', '.join(outline)) - -############################################################################ -# CSV functions -# csvread, csvwrite - -def csvread(infile): - """ - Given an infile as an iterable, return the CSV as a list of lists. - - infile can be an open file object or a list of lines. - - If any of the lines are badly built then a ``CSVError`` will be raised. - This has a ``csv`` attribute - which is a reference to the parsed CSV. - Every line that couldn't be parsed will have ``[]`` for it's entry. - - The error *also* has an ``errors`` attribute. This is a list of all the - errors raised. Error in this will have an ``index`` attribute, which is the - line number, and a ``line`` attribute - which is the actual line that - caused the error. - - Example of usage : - - .. raw:: html - - {+coloring} - - handle = open(filename) - # remove the trailing '\n' from each line - the_file = [line.rstrip('\n') for line in handle.readlines()] - csv = csvread(the_file) - - {-coloring} - - >>> a = '''"object 1", 'object 2', object 3 - ... test 1 , "test 2" ,'test 3' - ... 'obj 1',obj 2,"obj 3"''' - >>> csvread(a.splitlines()) - [['object 1', 'object 2', 'object 3'], ['test 1', 'test 2', 'test 3'], ['obj 1', 'obj 2', 'obj 3']] - >>> csvread(['object 1,']) - [['object 1']] - >>> try: - ... csvread(['object 1, "hello', 'object 1, # a comment in a csv ?']) - ... except CSVError, e: - ... for entry in e.errors: - ... print entry.index, entry - 0 Value is badly quoted: ""hello" - 1 Comment not allowed : - object 1, # a comment in a csv ? - """ - out_csv = [] - errors = [] - index = -1 - p = LineParser(csv=True) - for line in infile: - index += 1 - try: - values = p.feed(line) - except ListQuoteError, e: - values = [] - e.line = line - e.index = index - errors.append(e) - # - out_csv.append(values) - # - if errors: - e = CSVError("Parsing CSV failed. See 'errors' attribute.") - e.csv = out_csv - e.errors = errors - raise e - return out_csv - -def csvwrite(inlist, stringify=False): - """ - Given a list of lists it turns each entry into a line in a CSV. - (Given a list of lists it returns a list of strings). - - The lines will *not* be ``\n`` terminated. - - Set stringify to ``True`` (default is ``False``) to convert entries to - strings before creating the line. - - If stringify is ``False`` then any non string value will raise a - ``TypeError``. - - Every member will be quoted using ``elem_quote``, but no escaping is done. - - Example of usage : - - .. raw:: html - - {+coloring} - - # escape each entry in each line (optional) - for index in range(len(the_list)): - the_list[index] = [quote_escape(val) for val in the_list[index]] - # - the_file = csvwrite(the_list) - # add a '\n' to each line - ready to write to file - the_file = [line + '\n' for line in the_file] - - {-coloring} - - >>> csvwrite([['object 1', 'object 2', 'object 3'], ['test 1', 'test 2', 'test 3'], ['obj 1', 'obj 2', 'obj 3']]) - ['"object 1", "object 2", "object 3"', '"test 1", "test 2", "test 3"', '"obj 1", "obj 2", "obj 3"'] - >>> csvwrite([[3, 3, 3]]) - Traceback (most recent call last): - TypeError: Can only quote strings. "3" - >>> csvwrite([[3, 3, 3]], True) - ['3, 3, 3'] - """ - out_list = [] - for entry in inlist: - if stringify: - new_entry = [] - for val in entry: - if not isinstance(val, basestring): - val = str(val) - new_entry.append(val) - entry = new_entry - this_line = ', '.join([elem_quote(val) for val in entry]) - out_list.append(this_line) - return out_list - -############################################################################ - -def _test(): - import doctest - doctest.testmod() - -if __name__ == "__main__": - _test() - - -""" -ISSUES/TODO -=========== - -Fix bug in simplelist - -Triple quote multiline values ? - -Doesn't allow Python style string escaping (but has '&mjf-quot;' and '&mjf-lf;'). - -Uses both \' and \" as quotes and sometimes doesn't quote at all - see -elem_quote - may not *always* be compatible with other programs. - -Allow space seperated lists ? e.g. 10 5 100 20 - -Lineparser could create tuples. - -Allow ',' as an empty list ? - -CHANGELOG -========= - -2005/08/28 - Version 1.4.0 --------------------------- - -* Greater use of regular expressions for added speed -* Re-implemented ``lineparse`` as the ``LineParser`` object -* Added doctests -* Custom exceptions -* Changed the behaviour of ``csvread`` and ``csvwrite`` -* Removed the CSV ``compare`` function and the ``uncomment`` function -* Only ``'#'`` allowed for comments -* ``elem_quote`` raises exceptions -* Changed behaviour of ``unquote`` -* Added ``quote_escape`` and ``quote_unescape`` -* Removed the ``uni_conv`` option in the CSV functions - -.. note:: - - These changes are quite extensive. If any of them cause you problems then - let me know. I can provide a workaround in the next release. - -2005/06/01 Version 1.3.0 -Fixed bug in lineparse handling of empty list members. - Thnks to bug report and fix by Par Pandit -The 'unquote' function is now regex based. - (bugfix it now doesn't return a tuple if fullquote is 0) -Added the simplelist regex/function. -elem_quote and uncomment use a regex for clarity and speed. -Added a bunch of asserts to the tests. - -2005/03/07 Version 1.2.1 -makelist improved - better handling of empty or single member lists - -2005/02/23 Version 1.2.0 -Added uncomment for ConfigObj 3.3.0 -Optimised unquote - not a character by character search any more. -lineparse does full '&mjf..;' escape conversions - even when unquote isn't used -makelist and elem_quote takes an 'encoding' keyword for string members to be used to decode strigns to unicode -optimised makelist (including a minor bugfix) -Change to lineparse - it wouldn't allow '[' or '(' inside elements unless they were quoted. - -2004/12/04 Version 1.1.2 -Changed the license (*again* - now OSI compatible). -Empty values are now quoted by elem_quote. - -30-08-04 Version 1.1.1 -Removed the unicode hammer in csvread. -Improved docs. - -16-08-04 Version 1.1.0 -Added handling for non-string elements in elem_quote (optional). -Replaced some old += with lists and ''.join() for speed improvements... -Using basestring and hasattr('__getitem__') tests instead of isinstance(list) and str in a couple of places. -Changed license text. -Made the tests useful. - -19-06-04 Version 1.0.0 -Seems to work ok. A worthy successor to listparse and csv_s - although not as elegant as it could be. - -""" diff --git a/main/sabnzbd/utils/osx.py b/main/sabnzbd/utils/osx.py deleted file mode 100644 index 985e3df..0000000 --- a/main/sabnzbd/utils/osx.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -#""" -#TO FIX : Translations are not working with this implementation -# Growl Registration may only be done once per run ? -# Registration is made too early, the language module has not read the text file yet -#from sabnzbd.lang import T -#NOTIFICATION = {'startup':'grwl-notif-startup','download':'grwl-notif-dl','pp':'grwl-notif-pp','other':'grwl-notif-other'} -NOTIFICATION = {'startup':'1. On Startup/Shutdown','download':'2. On adding NZB','pp':'3. On post-processing','complete':'4. On download terminated','other':'5. Other Messages'} - -try: - import Growl - import os.path - import logging - - if os.path.isfile('sabnzbdplus.icns'): - nIcon = Growl.Image.imageFromPath('sabnzbdplus.icns') - elif os.path.isfile('osx/resources/sabnzbdplus.icns'): - nIcon = Growl.Image.imageFromPath('osx/resources/sabnzbdplus.icns') - else: - nIcon = Growl.Image.imageWithIconForApplication('Terminal') - - def sendGrowlMsg(nTitle , nMsg, nType=NOTIFICATION['other']): - gnotifier = SABGrowlNotifier(applicationIcon=nIcon) - gnotifier.register() - #TO FIX - #gnotifier.notify(T(nType), nTitle, nMsg) - gnotifier.notify(nType, nTitle, nMsg) - - class SABGrowlNotifier(Growl.GrowlNotifier): - applicationName = "SABnzbd" - #TO FIX - #notifications = [T(notification) for notification in NOTIFICATION.values()] - notifications = NOTIFICATION.values() - -except ImportError: - def sendGrowlMsg(nTitle , nMsg, nType): - pass diff --git a/main/sabnzbd/utils/rarfile.py b/main/sabnzbd/utils/rarfile.py deleted file mode 100644 index 8bd913d..0000000 --- a/main/sabnzbd/utils/rarfile.py +++ /dev/null @@ -1,522 +0,0 @@ -# rarfile.py -# -# Copyright (c) 2005 Marko Kreen -# -# Improved by ShyPike 2008-08-11: -# - use tempfile.mkstemp() instead of the unsafe os.tempnam() -# - Improve compatibility with Python's ZipFile support: -# - Always use Unix separators '/' in pathnames (ascii & unicode) -# - Foldernames must always end with a '/' (ascii & unicode) -# - Use CP850 as default codepage -# - Convert ASCII filenames to Python's default 'latin-1' encoding -# -# Optimized to fit in SABnzbd: -# - No extract hack (not needed for just rarred NZB files). -# - Use "SimpleRarExtract" function of newsunpack.py -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -import os, re -from struct import pack, unpack -from binascii import crc32 -from cStringIO import StringIO -import tempfile -import logging -import sabnzbd - -# whether to speed up decompression by using tmp archive -_use_extract_hack = 0 - -# -# rar constants -# - -RAR_ID = "Rar!\x1a\x07\x00" - -# block types -RAR_BLOCK_MARK = 0x72 # r -RAR_BLOCK_MAIN = 0x73 # s -RAR_BLOCK_FILE = 0x74 # t -RAR_BLOCK_OLD_COMMENT = 0x75 # u -RAR_BLOCK_OLD_EXTRA = 0x76 # v -RAR_BLOCK_OLD_SUB = 0x77 # w -RAR_BLOCK_OLD_RECOVERY = 0x78 # x -RAR_BLOCK_OLD_AUTH = 0x79 # y -RAR_BLOCK_SUB = 0x7a # z -RAR_BLOCK_ENDARC = 0x7b # { - -# main header flags -RAR_MAIN_VOLUME = 0x0001 -RAR_MAIN_COMMENT = 0x0002 -RAR_MAIN_LOCK = 0x0004 -RAR_MAIN_SOLID = 0x0008 -RAR_MAIN_NEWNUMBERING = 0x0010 -RAR_MAIN_AUTH = 0x0020 -RAR_MAIN_RECOVERY = 0x0040 -RAR_MAIN_PASSWORD = 0x0080 -RAR_MAIN_FIRSTVOLUME = 0x0100 - -# file header flags -RAR_FILE_SPLIT_BEFORE = 0x0001 -RAR_FILE_SPLIT_AFTER = 0x0002 -RAR_FILE_PASSWORD = 0x0004 -RAR_FILE_COMMENT = 0x0008 -RAR_FILE_SOLID = 0x0010 -RAR_FILE_DICTMASK = 0x00e0 -RAR_FILE_DICT64 = 0x0000 -RAR_FILE_DICT128 = 0x0020 -RAR_FILE_DICT256 = 0x0040 -RAR_FILE_DICT512 = 0x0060 -RAR_FILE_DICT1024 = 0x0080 -RAR_FILE_DICT2048 = 0x00a0 -RAR_FILE_DICT4096 = 0x00c0 -RAR_FILE_DIRECTORY = 0x00e0 -RAR_FILE_LARGE = 0x0100 -RAR_FILE_UNICODE = 0x0200 -RAR_FILE_SALT = 0x0400 -RAR_FILE_VERSION = 0x0800 -RAR_FILE_EXTTIME = 0x1000 -RAR_FILE_EXTFLAGS = 0x2000 - -RAR_ENDARC_NEXT_VOLUME = 0x0001 -RAR_ENDARC_DATACRC = 0x0002 -RAR_ENDARC_REVSPACE = 0x0004 - -# flags common to all blocks -RAR_SKIP_IF_UNKNOWN = 0x4000 -RAR_LONG_BLOCK = 0x8000 - -# Host OS types -RAR_OS_MSDOS = 0 -RAR_OS_OS2 = 1 -RAR_OS_WIN32 = 2 -RAR_OS_UNIX = 3 - -# -# Public interface -# -def is_rarfile(fn): - '''Check quickly whether file is rar archive.''' - try: - buf = open(fn, "rb").read(len(RAR_ID)) - return buf == RAR_ID - except: - return False - -class RarInfo: - '''An entry in rar archive.''' - - def isdir(self): - '''Returns True if the entry is a directory.''' - if self.type == RAR_BLOCK_FILE: - return (self.flags & RAR_FILE_DIRECTORY) == RAR_FILE_DIRECTORY - return False - -class RarFile: - '''Rar archive handling.''' - def __init__(self, rarfile, mode="r", charset='cp850', info_callback=None): - self.rarfile = rarfile - self.charset = charset - - self.info_list = [] - self.is_solid = 0 - self.uses_newnumbering = 0 - self.uses_volumes = 0 - self.info_callback = info_callback - self.got_mainhdr = 0 - file, ext = os.path.splitext(rarfile) - if 'r' in ext: - self._gen_volname = self._gen_oldvol - else: - self._gen_volname = self._gen_newvol - - if mode != "r": - raise Exception("Only mode=r supported") - - self._parse() - - def namelist(self): - '''Return list of filenames in rar''' - res = [] - for f in self.info_list: - res.append(f.filename) - return res - - def unamelist(self): - '''Return list of unicode filenames in rar''' - res = [] - for f in self.info_list: - res.append(f.unicode_filename) - return res - - def infolist(self): - '''Return rar entries.''' - return self.info_list - - def getinfo(self, fname): - '''Return RarInfo for fname.''' - if type(fname) == type(u''): - target = fname.replace(u'\\', u'/') - for f in self.info_list: - if f.unicode_filename.endswith(u'/') and not target.endswith(u'/'): - if (target+u'/') == f.unicode_filename: - return f - else: - if target == f.unicode_filename: - return f - else: - target = fname.replace('\\', '/') - for f in self.info_list: - if f.filename.endswith('/') and not target.endswith('/'): - if (target+'/') == f.filename: - return f - else: - if target == f.filename: - return f - - def read(self, fname): - '''Return decompressed data.''' - inf = self.getinfo(fname) - if not inf: - raise Exception("No such file") - - if inf.isdir(): - raise Exception("No data in directory") - - if inf.compress_type == 0x30: - res = self._extract_clear(inf) - elif _use_extract_hack and not self.is_solid and not self.uses_volumes: - res = self._extract_hack(inf) - else: - res = self._extract_unrar(self.rarfile, inf) - return res - - def close(self): - pass - - def printdir(self): - for f in self.info_list: - print f.filename - - # store entry - def _process_entry(self, item): - # RAR_BLOCK_NEWSUB has files too: CMT, RR - if item.type == RAR_BLOCK_FILE: - # use only first part - if (item.flags & RAR_FILE_SPLIT_BEFORE) == 0: - # Always use Unix separators - item.filename = item.filename.replace('\\', '/') - item.unicode_filename = item.unicode_filename.replace(u'\\', u'/') - # Folder items must end with '/' - if (item.flags & RAR_FILE_DIRECTORY) == RAR_FILE_DIRECTORY: - item.filename += '/' - item.unicode_filename += u'/' - self.info_list.append(item) - - if self.info_callback: - self.info_callback(item) - - # read rar - def _parse(self): - fd = open(self.rarfile, "rb") - id = fd.read(len(RAR_ID)) - if id != RAR_ID: - raise Exception("Not a Rar") - - volume = 0 # first vol (.rar) is 0 - more_vols = 0 - while 1: - h = self._parse_header(fd) - if not h: - if more_vols: - volume += 1 - fd = open(self._gen_volname(volume), "rb") - more_vols = 0 - if fd: - continue - break - h.volume = volume - - if h.type == RAR_BLOCK_MAIN and not self.got_mainhdr: - if h.flags & RAR_MAIN_NEWNUMBERING: - self.uses_newnumbering = 1 - self._gen_volname = self._gen_newvol - self.uses_volumes = h.flags & RAR_MAIN_VOLUME - self.is_solid = h.flags & RAR_MAIN_SOLID - self.got_mainhdr = 1 - elif h.type == RAR_BLOCK_ENDARC: - more_vols = h.flags & RAR_ENDARC_NEXT_VOLUME - - # store it - self._process_entry(h) - - # skip data - if h.add_size > 0: - fd.seek(h.add_size, 1) - - def _parse_header(self, fd): - h = self._parse_block_header(fd) - if h and (h.type == RAR_BLOCK_FILE or h.type == RAR_BLOCK_SUB): - self._parse_file_header(h) - return h - - # common header - def _parse_block_header(self, fd): - HDRLEN = 7 - h = RarInfo() - h.header_offset = fd.tell() - buf = fd.read(HDRLEN) - if not buf: - return None - - t = unpack(" HDRLEN: - h.data = fd.read(h.header_size - HDRLEN) - else: - h.data = "" - h.file_offset = fd.tell() - - if h.flags & RAR_LONG_BLOCK: - h.add_size = unpack("> 5 - min = stamp & 0x3F; stamp = stamp >> 6 - hr = stamp & 0x1F; stamp = stamp >> 5 - day = stamp & 0x1F; stamp = stamp >> 5 - mon = stamp & 0x0F; stamp = stamp >> 4 - yr = (stamp & 0x7F) + 1980 - return (yr, mon, day, hr, min, sec) - - # new-style volume name - def _gen_newvol(self, volume): - # allow % in filenames - fn = self.rarfile.replace("%", "%%") - - m = re.search(r"([0-9][0-9]*)[^0-9]*$", fn) - if not m: - raise Exception("Cannot construct volume name") - n1 = m.start(1) - n2 = m.end(1) - fmt = "%%0%dd" % (n2 - n1) - volfmt = fn[:n1] + fmt + fn[n2:] - return volfmt % (volume + 1) - - # old-style volume naming - def _gen_oldvol(self, volume): - if volume == 0: return self.rarfile - i = self.rarfile.rfind(".") - base = self.rarfile[:i] - if volume <= 100: - ext = ".r%02d" % (volume - 1) - else: - ext = ".s%02d" % (volume - 101) - return base + ext - - # read uncompressed file - def _extract_clear(self, inf): - volume = inf.volume - buf = "" - cur = None - while 1: - f = open(self._gen_volname(volume), "rb") - if not cur: - f.seek(inf.header_offset) - - while 1: - cur = self._parse_header(f) - if cur.type in (RAR_BLOCK_MARK, RAR_BLOCK_MAIN): - if cur.add_size: - f.seek(cur.add_size, 1) - continue - if cur.filename == inf.filename: - buf += f.read(cur.add_size) - break - - raise Exception("file not found?") - - # no more parts? - if (cur.flags & RAR_FILE_SPLIT_AFTER) == 0: - break - - volume += 1 - - return buf - - # put file compressed data into temporary .rar archive, and run - # unrar on that, thus avoiding unrar going over whole archive - def _extract_hack(self, inf): - BSIZE = 32*1024 - - size = inf.compress_size + inf.header_size - rf = open(self.rarfile, "rb") - rf.seek(inf.header_offset) - tmpf, tmpname = tempfile.mkstemp(suffix='.rar', text=False) - - # create main header: crc, type, flags, size, res1, res2 - mh = pack(" 0: - if size > BSIZE: - buf = rf.read(BSIZE) - else: - buf = rf.read(size) - os.write(tmpf, buf) - size -= len(buf) - os.close(tmpf) - - buf = self._extract_unrar(tmpname, inf) - os.unlink(tmpname) - return buf - - # extract using unrar - def _extract_unrar(self, rarfile, inf): - fn = inf.filename - if sabnzbd.WIN32: - # Windows unrar wants '\', not '/' - fn = fn.replace("/", "\\") - else: - # shell escapes for Unix/OSX - fn = fn.replace("`", "\\`") - fn = fn.replace('"', '\\"') - fn = fn.replace("$", "\\$") - - err, buf = sabnzbd.SimpleRarExtract(rarfile, fn) - if err > 0: - raise Exception("Error reading file") - return buf - -class _UnicodeFilename: - def __init__(self, name, encdata): - self.std_name = name - self.encdata = encdata - self.pos = self.encpos = 0 - self.buf = StringIO() - - def enc_byte(self): - c = self.encdata[self.encpos] - self.encpos += 1 - return ord(c) - - def std_byte(self): - return ord(self.std_name[self.pos]) - - def put(self, lo, hi): - self.buf.write(chr(lo) + chr(hi)) - self.pos += 1 - - def decode(self): - hi = self.enc_byte() - flagbits = 0 - while self.encpos < len(self.encdata): - if flagbits == 0: - flags = self.enc_byte() - flagbits = 8 - flagbits -= 2 - t = (flags >> flagbits) & 3 - if t == 0: - self.put(self.enc_byte(), 0) - elif t == 1: - self.put(self.enc_byte(), hi) - elif t == 2: - self.put(self.enc_byte(), self.enc_byte()) - else: - n = self.enc_byte() - if n & 0x80: - c = self.enc_byte() - for i in range((n & 0x7f) + 2): - lo = (self.std_byte() + c) & 0xFF - self.put(lo, hi) - else: - for i in range(n + 2): - self.put(self.std_byte(), 0) - return self.buf.getvalue().decode("utf-16le", "replace") - diff --git a/main/sabnzbd/utils/rsslib.py b/main/sabnzbd/utils/rsslib.py deleted file mode 100644 index 19e5629..0000000 --- a/main/sabnzbd/utils/rsslib.py +++ /dev/null @@ -1,340 +0,0 @@ -#"""RSS 2.0 Generator -# -#This library encapsulates the generation of an RSS (2.0) feed -# -# -#You may freely use this code in any way you can think of. -#""" -import xml.sax.saxutils - -#------------------------------------------------------------------------------ -def encode_for_xml(unicode_data, encoding='ascii'): - """ - Encode unicode_data for use as XML or HTML, with characters outside - of the encoding converted to XML numeric character references. - """ - try: - return unicode_data.encode(encoding, 'xmlcharrefreplace') - except ValueError: - # ValueError is raised if there are unencodable chars in the - # data and the 'xmlcharrefreplace' error handler is not found. - # Pre-2.3 Python doesn't support the 'xmlcharrefreplace' error - # handler, so we'll emulate it. - return _xmlcharref_encode(unicode_data, encoding) - -def _xmlcharref_encode(unicode_data, encoding): - """Emulate Python 2.3's 'xmlcharrefreplace' encoding error handler.""" - chars = [] - # Step through the unicode_data string one character at a time in - # order to catch unencodable characters: - for char in unicode_data: - try: - chars.append(char.encode(encoding, 'strict')) - except UnicodeError: - chars.append('&#%i;' % ord(char)) - return ''.join(chars) - - - -class RSS: -# """ -# RSS -# -# This class encapsulates the creation of an RSS 2.0 feed -# -# The RSS2.0 spec can be found here: -# http://blogs.law.harvard.edu/tech/rss -# -# -# RSS validator : http://rss.scripting.com -# -# -# The generation of an RSS feed is simple, the following is a -# sample: -# from rsslib import RSS, Item, Namespace -# rss = RSS() -# rss.channel.link = "http://channel.com" -# rss.channel.title = "my channel title" -# rss.channel.description = "my channel description" -# -# ns = Namespace( "foobar", "http://foobar.baz" ) -# rss.channel.namespaces.append( ns ) -# -# item = Item() -# item.link = "http://link.com" -# item.description = "my link description" -# item.title ="my item title" -# item.nsItems[ns.name + ":foo"] = "bar" -# rss.channel.items.append( item ) -# -# item = Item() -# item.link = "http://link2.com" -# item.description = "my link2 description" -# item.title ="my item2 title" -# item.nsItems[ns.name +":foo"] = "foo bar baz" -# rss.channel.items.append( item ) -# -# print rss.write() -# -# output: -# -# -# -# my channel title -# http://channel.com -# my channel description -# -# my item title -# http://link.com -# my link description -# bar -# -# -# my item2 title -# http://link2.com -# my link2 description -# foo bar baz -# -# -# -# -# -# author: cmallory /a t/ berserk /dot/ o r g -# """ - def __init__(self): - self.channel = Channel() - self.version = "2.0" - self.contents = None - -# if __name__ == "__main__" : -# from rsslib import RSS, Item, Namespace -# rss = RSS() -# rss.channel.link = "http://channel.com" -# rss.channel.title = "my channel title" -# rss.channel.description = "my channel description" -# -# ns = Namespace( "foobar", "http://foobar.baz" ) -# rss.addNamespace( ns ) -# -# item = Item() -# item.link = "http://link.com" -# item.description = "my link description" -# item.title ="my item title" -# -# item.enclosure.url = "http://enclosure.url.com" -# item.enclosure.length = 12345 -# item.enclosure.type = "audio/mpeg" -# -# item.nsItems[ns.name + ":foo"] = "bar" -# rss.addItem( item ) -# -# item = Item() -# item.link = "http://link2.com" -# item.description = "my link2 description" -# item.title ="my item2 title" -# item.nsItems[ns.name +":foo"] = "foo bar baz" -# rss.addItem( item ) -# -# print rss.write() - - - #Write out the rss document - def write( self ): - - self.contents = "\n" - #contents += "\n" - - self.contents += " element - def generateChannel( self ): - contents = "" - if ( self.channel.initialized() ): - contents += "\n" - contents += self.optionalWrite("title", self.channel.title ); - contents += self.optionalWrite("link", self.channel.link ); - contents += self.optionalWrite("description", self.channel.description ); - - contents += self.optionalWrite("language", self.channel.language ); - contents += self.optionalWrite("copyright", self.channel.copyright ); - contents += self.optionalWrite("category", self.channel.category ); - contents += self.optionalWrite("managingEditor", self.channel.managingEditor ); - contents += self.optionalWrite("webMaster", self.channel.webMaster ); - contents += self.optionalWrite("pubDate", self.channel.pubDate ); - contents += self.optionalWrite("lastBuildDate", self.channel.lastBuildDate ); - contents += self.optionalWrite("docs", self.channel.docs ); - contents += self.optionalWrite("cloud", self.channel.cloud ); - contents += self.optionalWrite("ttl", self.channel.ttl ); - contents += self.optionalWrite("generator", self.channel.generator ); - contents += self.optionalWrite("image", self.channel.image ); - contents += self.optionalWrite("rating", self.channel.rating ); - contents += self.optionalWrite("textInput", self.channel.textInput ); - contents += self.optionalWrite("skipHours", self.channel.skipHours ); - contents += self.optionalWrite("skipDays", self.channel.skipDays ); - - contents += "\n" + self.generateItems() + "\n" - else : - contents = "[Channel not properly initialized. " - contents +="A required field is not set.(title/link/description]" - - return contents - - #Generates all items within a channel - def generateItems( self ): - c = "" - for i in self.channel.items : - - c += "" - - c += self.optionalWrite("title", i.title); - c += self.optionalWrite("link", i.link ); - c += self.optionalWrite("description", i.description); - c += self.optionalWrite("author", i.author ); - c += self.optionalWrite("pubDate", str(i.pubDate) ) - c += self.optionalWrite("category", i.category ) - c += self.optionalWrite("comments", i.comments ) - c += self.optionalWrite("guid", i.guid ) - c += self.optionalWrite("source", i.source ) - - if ( i.enclosure.url != "" ): - c+= "\n" - - for k in i.nsItems.keys(): - c += self.optionalWrite( k , i.nsItems[ k ] ) - - c += "\n\n" - - return c - - - def addNamespace( self, ns ): - if ( self.channel.namespaces is not None ): - self.channel.namespaces.append( ns ) - - def addItem( self, item ): - if ( self.channel is not None): - self.channel.items.append( item ) - - - def optionalWrite( self, key, val ): - if ( val is not None and val != "" ): - return "<" + key + ">" + encode_for_xml(xml.sax.saxutils.escape(val)) + "\n" - else: - return "" - - -#Namespace -class Namespace: - def __init__( self, name, url ): - self.url = url - self.name = name - - -class Channel: -# """ -# Channel -# -# (http://blogs.law.harvard.edu/tech/rss) -# -# This object represents an RSS channel (as of ver2.0) -# """ - - def __init__( self ): - # - # Required Fields - # - self.title= None - self.link= None - self.description= None - # - # Optional Fields - # - self.language = "" - self.copyright = "" - self.managingEditor = "" - self.webMaster = "" - self.pubDate = "" - self.lastBuildDate = "" - self.category = "" - self.generator = "" - self.docs = "" - self.cloud = "" - self.ttl = "" - self.image = "" - self.rating = "" - self.textInput = "" - self.skipHours = "" - self.skipDays = "" - - self.items = [] - self.namespaces = [] - - def initialized( self ): - return self.title is not None and self.link is not None and self.description is not None - -class Item: -# """ -# Item -# -# http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt -# -# A channel may contain any number of <item>s. An item may -# represent a "story" -- much like a story in a newspaper or magazine; -# if so its description is a synopsis of the story, and the link -# points to the full story. An item may also be complete in itself, -# if so, the description contains the text (entity-encoded HTML is -# allowed; see examples), and the link and title may be omitted. -# All elements of an item are optional, however at least one of -# title or description must be present. -# """ - def __init__( self ): - - self.title = "" - self.link = "" - self.description = "" - self.author = "" - self.category = "" - self.comments = "" - self.enclosure = "" - self.guid = "" - self.pubDate = "" - self.source = "" - self.enclosure = Enclosure() - - self.nsItems = {} - - -class Enclosure: - -# """ -# Enclosure -# -# sub-element of -# -# is an optional sub-element of . -# -# It has three required attributes: -# -# url: says where the enclosure is located, -# length: says how big it is in bytes, and -# type: says what its type is, a standard MIME type. -# -# The url must be an http url. -# -# Example: -# -# """ - def __init__(self): - self.url = "" - self.length = 0 - self.type = "" - diff --git a/main/sabnzbd/utils/servertests.py b/main/sabnzbd/utils/servertests.py deleted file mode 100644 index 99b43cc..0000000 --- a/main/sabnzbd/utils/servertests.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.utils.servertests - Debugging server connections. Currently only NNTP server tests are done. -""" - -import socket -import sys - -from sabnzbd.newswrapper import NewsWrapper -from sabnzbd.downloader import Server, clues_login, clues_too_many -from sabnzbd.config import get_servers -from sabnzbd.codecs import xml_name -from sabnzbd.interface import IntConv -from sabnzbd.lang import T - -def test_nntp_server_dict(kwargs): - # Grab the host/port/user/pass/connections/ssl - host = kwargs.get('host', '').strip() - if not host: - return False, T('srv-noHost') - username = kwargs.get('username', '').strip() - password = kwargs.get('password', '').strip() - connections = IntConv(kwargs.get('connections', 0)) - if not connections: - return False, T('srv-noConnections') - ssl = IntConv(kwargs.get('ssl', 0)) - port = IntConv(kwargs.get('port', 0)) - if not port: - if ssl: - port = 563 - else: - port = 119 - - - return test_nntp_server(host, port, username=username, \ - password=password, ssl=ssl) - - -def test_nntp_server(host, port, username=None, password=None, ssl=None): - ''' Will connect (blocking) to the nttp server and report back any errors ''' - timeout = 4.0 - if '*' in password and not password.strip('*'): - # If the password is masked, try retrieving it from the config - servers = get_servers() - got_pass = False - for server in servers: - if host in server: - srv = servers[server] - password = srv.password() - got_pass = True - if not got_pass: - return False, T('srv-starredPass') - try: - s = Server(-1, host, port, timeout, 1, 0, ssl, username, password) - except: - return False, T('srv-invalidDetails') - - try: - nw = NewsWrapper(s, -1, block=True) - nw.init_connect() - while not nw.connected: - nw.lines = [] - nw.recv_chunk(block=True) - nw.finish_connect() - - except socket.timeout, e: - if port != 119 and not ssl: - return False, T('srv-timedoutSSL') - else: - return False, T('srv-timedout') - except socket.error, e: - return False, xml_name(str(e)) - - except: - return False, xml_name(str(sys.exc_info()[1])) - - - if not username or not password: - nw.nntp.sock.sendall('ARTICLE test\r\n') - try: - nw.lines = [] - nw.recv_chunk(block=True) - except: - return False, xml_name(str(sys.exc_info()[1])) - - # Could do with making a function for return codes to be used by downloader - code = nw.lines[0][:3] - - if code == '480': - return False, T('srv-noAuth') - - elif code == '100' or code.startswith('2') or code.startswith('4'): - return True, T('srv-success') - - elif code == '502' or clues_login(nw.lines[0]): - return False, T('srv-failedAuth') - - elif clues_too_many(nw.lines[0]): - return False, T('srv-tooManyConnections') - - else: - return False, T('srv-generalFail@1') % xml_name(nw.lines[0]) - - # Close the connection - nw.terminate(quit=True) diff --git a/main/sabnzbd/utils/ssmtplib.py b/main/sabnzbd/utils/ssmtplib.py deleted file mode 100644 index fc17bba..0000000 --- a/main/sabnzbd/utils/ssmtplib.py +++ /dev/null @@ -1,159 +0,0 @@ -"""SMTP over SSL client. - -Public class: SMTP_SSL -Public errors: SMTPSSLException -""" - -# Author: Matt Butcher , Feb. 2007 -# License: MIT License (or, at your option, the GPL, v.2 or later as posted at -# http://gnu.org). -## -## Begin License -# -# Copyright (c) 2007 M Butcher -# -# 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. -## -##End License -# -# This is just a minor modification to the smtplib code by Dragon De Monsyn. -import smtplib, socket - -__version__ = "1.00" - -__all__ = ['SMTPSSLException', 'SMTP_SSL'] - -SSMTP_PORT = 465 - -class SMTPSSLException(smtplib.SMTPException): - """Base class for exceptions resulting from SSL negotiation.""" - -class SMTP_SSL (smtplib.SMTP): - """This class provides SSL access to an SMTP server. - SMTP over SSL typical listens on port 465. Unlike StartTLS, SMTP over SSL - makes an SSL connection before doing a helo/ehlo. All transactions, then, - are done over an encrypted channel. - - This class is a simple subclass of the smtplib.SMTP class that comes with - Python. It overrides the connect() method to use an SSL socket, and it - overrides the starttles() function to throw an error (you can't do - starttls within an SSL session). - """ - certfile = None - keyfile = None - - def __init__(self, host='', port=0, local_hostname=None, keyfile=None, certfile=None): - """Initialize a new SSL SMTP object. - - If specified, `host' is the name of the remote host to which this object - will connect. If specified, `port' specifies the port (on `host') to - which this object will connect. `local_hostname' is the name of the - localhost. By default, the value of socket.getfqdn() is used. - - An SMTPConnectError is raised if the SMTP host does not respond - correctly. - - An SMTPSSLError is raised if SSL negotiation fails. - - Warning: This object uses socket.ssl(), which does not do client-side - verification of the server's cert. - """ - self.certfile = certfile - self.keyfile = keyfile - smtplib.SMTP.__init__(self, host, port, local_hostname) - - def connect(self, host='localhost', port=0): - """Connect to an SMTP server using SSL. - - `host' is localhost by default. Port will be set to 465 (the default - SSL SMTP port) if no port is specified. - - If the host name ends with a colon (`:') followed by a number, - that suffix will be stripped off and the - number interpreted as the port number to use. This will override the - `port' parameter. - - Note: This method is automatically invoked by __init__, if a host is - specified during instantiation. - """ - # MB: Most of this (Except for the socket connection code) is from - # the SMTP.connect() method. I changed only the bare minimum for the - # sake of compatibility. - if not port and (host.find(':') == host.rfind(':')): - i = host.rfind(':') - if i >= 0: - host, port = host[:i], host[i+1:] - try: port = int(port) - except ValueError: - raise socket.error, "nonnumeric port" - if not port: port = SSMTP_PORT - if self.debuglevel > 0: print>>stderr, 'connect:', (host, port) - msg = "getaddrinfo returns an empty list" - self.sock = None - for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - try: - self.sock = socket.socket(af, socktype, proto) - if self.debuglevel > 0: print>>stderr, 'connect:', (host, port) - self.sock.connect(sa) - # MB: Make the SSL connection. - sslobj = socket.ssl(self.sock, self.keyfile, self.certfile) - except socket.error, msg: - if self.debuglevel > 0: - print>>stderr, 'connect fail:', (host, port) - if self.sock: - self.sock.close() - self.sock = None - continue - break - if not self.sock: - raise socket.error, msg - - # MB: Now set up fake socket and fake file classes. - # Thanks to the design of smtplib, this is all we need to do - # to get SSL working with all other methods. - self.sock = smtplib.SSLFakeSocket(self.sock, sslobj) - self.file = smtplib.SSLFakeFile(sslobj); - - (code, msg) = self.getreply() - if self.debuglevel > 0: print>>stderr, "connect:", msg - return (code, msg) - - def setkeyfile(self, keyfile): - """Set the absolute path to a file containing a private key. - - This method will only be effective if it is called before connect(). - - This key will be used to make the SSL connection.""" - self.keyfile = keyfile - - def setcertfile(self, certfile): - """Set the absolute path to a file containing a x.509 certificate. - - This method will only be effective if it is called before connect(). - - This certificate will be used to make the SSL connection.""" - self.certfile = certfile - - def starttls(self, keyfile = None, certfile = None): - """Raises an exception. - You cannot do StartTLS inside of an ssl session. Calling starttls() will - return an SMTPSSLException""" - raise SMTPSSLException, "Cannot perform StartTLS within SSL session." - diff --git a/main/sabnzbd/utils/upload.py b/main/sabnzbd/utils/upload.py deleted file mode 100644 index d593b41..0000000 --- a/main/sabnzbd/utils/upload.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.utils.upload - File assosiation functions for adding nzb files to sabnzbd -""" - -import urllib2 -import urllib -import logging -import os -import sabnzbd.cfg as cfg -from sabnzbd.misc import get_ext, get_filename -from sabnzbd.dirscanner import ProcessArchiveFile, ProcessSingleFile - -def upload_file(url, fp): - """ Function for uploading nzbs to a running sabnzbd instance """ - try: - fp = urllib.quote_plus(fp) - pp = cfg.dirscan_pp() - script = cfg.dirscan_script() - priority = cfg.dirscan_priority() - url = '%sapi?mode=addlocalfile&name=%s&pp=%s&script=%s&priority=%s' % (url, fp, pp, script, priority) - username = cfg.username() - password = cfg.password() - apikey = cfg.api_key() - if username and password: - url = '%s&ma_username=%s&ma_password=%s' % (url, username, password) - if apikey: - url = '%s&apikey=%s' % (url, apikey) - u = urllib2.urlopen(url) - except: - logging.error("Failed to upload file: %s", fp) - logging.debug("Traceback: ", exc_info = True) - - -def add_local(f): - """ Function for easily adding nzb/zip/rar/nzb.gz to sabnzbd """ - if os.path.exists(f): - fn = get_filename(f) - if fn: - pp = cfg.dirscan_pp() - script = cfg.dirscan_script() - priority = cfg.dirscan_priority() - if get_ext(fn) in ('.zip','.rar', '.gz'): - ProcessArchiveFile(fn, f, pp=pp, script=script, priority=priority, keep=True) - elif get_ext(fn) in ('.nzb'): - ProcessSingleFile(fn, f, pp=pp, script=script, priority=priority, keep=True) - else: - logging.error("Filename not found: %s", f) - else: - logging.error("File not found: %s", f) \ No newline at end of file diff --git a/main/sabnzbd/version.py b/main/sabnzbd/version.py deleted file mode 100644 index 980850c..0000000 --- a/main/sabnzbd/version.py +++ /dev/null @@ -1,8 +0,0 @@ -# This file will be patched by setup.py -# The __version__ should be set to the branch name -# (e.g. "trunk" or "0.4.x") - -# You MUST use double quotes (so " and not ') - -__version__ = "trunk" -__baseline__ = "unknown" diff --git a/main/sabnzbd/wizard.py b/main/sabnzbd/wizard.py deleted file mode 100644 index 816bff7..0000000 --- a/main/sabnzbd/wizard.py +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/python -OO -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -""" -sabnzbd.wizard - Wizard Webinterface -""" - -import os -import cherrypy -from Cheetah.Template import Template - -import sabnzbd -from sabnzbd.constants import * -from sabnzbd.lang import T, list_languages, reset_language -from sabnzbd.utils.servertests import test_nntp_server_dict -import sabnzbd.interface -import sabnzbd.config as config -import sabnzbd.cfg as cfg - -#------------------------------------------------------------------------------ -class Wizard: - def __init__(self, web_dir, root, prim): - self.__root = root - # Get the path for the folder named wizard - self.__web_dir = sabnzbd.WIZARD_DIR - self.__prim = prim - self.info = {'webdir': sabnzbd.WIZARD_DIR, - 'steps':5, 'version':sabnzbd.__version__, - 'T': T} - - @cherrypy.expose - def index(self, **kwargs): - - info = self.info.copy() - info['num'] = '' - info['number'] = 0 - info['lang'] = cfg.language() - info['languages'] = list_languages(sabnzbd.DIR_LANGUAGE) - - if not os.path.exists(self.__web_dir): - # If the wizard folder does not exist, simply load the normal page - raise cherrypy.HTTPRedirect('') - else: - template = Template(file=os.path.join(self.__web_dir, 'index.html'), - searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) - return template.respond() - - @cherrypy.expose - def one(self, **kwargs): - # Handle special options - language = kwargs.get('lang') - if language and language != cfg.language(): - cfg.language.set(language) - reset_language(language) - - info = self.info.copy() - info['num'] = '» %s' % T('wizard-step-one') - info['number'] = 1 - info['skin'] = cfg.web_dir().lower() - - template = Template(file=os.path.join(self.__web_dir, 'one.html'), - searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) - return template.respond() - - @cherrypy.expose - def two(self, **kwargs): - # Save skin setting - if kwargs: - if 'skin' in kwargs: - sabnzbd.interface.change_web_dir(kwargs['skin']) - - info = self.info.copy() - info['num'] = '» %s' % T('wizard-step-two') - info['number'] = 2 - - host = cfg.cherryhost() - info['host'] = host - # Allow special operation if host is not one of the defaults - if host not in ('localhost','0.0.0.0'): - info['custom_host'] = True - else: - info['custom_host'] = False - - if sabnzbd.newswrapper.HAVE_SSL: - info['have_ssl'] = True - else: - info['have_ssl'] = False - - info['enable_https'] = cfg.enable_https() - info['autobrowser'] = cfg.autobrowser() - info['web_user'] = cfg.username() - info['web_pass'] = cfg.password() - - template = Template(file=os.path.join(self.__web_dir, 'two.html'), - searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) - return template.respond() - - @cherrypy.expose - def three(self, **kwargs): - # Save access/autobrowser/autostart - if kwargs: - if 'access' in kwargs: - cfg.cherryhost.set(kwargs['access']) - cfg.enable_https.set(kwargs.get('enable_https',0)) - cfg.autobrowser.set(kwargs.get('autobrowser',0)) - cfg.username.set(kwargs.get('web_user', '')) - cfg.password.set(kwargs.get('web_pass', '')) - if not cfg.username() or not cfg.password(): - sabnzbd.interface.set_auth(cherrypy.config) - info = self.info.copy() - info['num'] = '» %s' % T('wizard-step-three') - info['number'] = 3 - info['session'] = cfg.api_key() - - servers = config.get_servers() - if not servers: - info['host'] = '' - info['port'] = '' - info['username'] = '' - info['password'] = '' - info['connections'] = '' - info['ssl'] = 0 - else: - for server in servers: - # If there are multiple servers, just use the first enabled one - s = servers[server] - info['host'] = s.host() - info['port'] = s.port() - info['username'] = s.username() - info['password'] = s.password.get_stars() - info['connections'] = s.connections() - info['ssl'] = s.ssl() - if s.enable(): - break - template = Template(file=os.path.join(self.__web_dir, 'three.html'), - searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) - return template.respond() - - @cherrypy.expose - def four(self, **kwargs): - # Save server details - if kwargs: - kwargs['enable'] = 1 - sabnzbd.interface.handle_server(kwargs) - - info = self.info.copy() - info['num'] = '» %s' % T('wizard-step-four') - info['number'] = 4 - info['newzbin_user'] = cfg.newzbin_username() - info['newzbin_pass'] = cfg.newzbin_password.get_stars() - info['newzbin_bookmarks'] = cfg.newzbin_bookmarks() - info['matrix_user'] = cfg.matrix_username() - info['matrix_apikey'] = cfg.matrix_apikey() - template = Template(file=os.path.join(self.__web_dir, 'four.html'), - searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) - return template.respond() - - @cherrypy.expose - def five(self, **kwargs): - # Save server details - if kwargs: - if 'newzbin_user' in kwargs and 'newzbin_pass' in kwargs: - cfg.newzbin_username.set(kwargs.get('newzbin_user','')) - cfg.newzbin_password.set(kwargs.get('newzbin_pass','')) - cfg.newzbin_bookmarks.set(kwargs.get('newzbin_bookmarks', '0')) - if 'matrix_user' in kwargs and 'matrix_apikey' in kwargs: - cfg.matrix_username.set(kwargs.get('matrix_user','')) - cfg.matrix_apikey.set(kwargs.get('matrix_apikey','')) - - config.save_config() - - info = self.info.copy() - info['num'] = '» %s' % T('wizard-step-five') - info['number'] = 5 - info['helpuri'] = 'http://wiki.sabnzbd.org/' - info['session'] = cfg.api_key() - - info['access_url'], info['urls'] = self.get_access_info() - - template = Template(file=os.path.join(self.__web_dir, 'five.html'), - searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) - return template.respond() - - def get_access_info(self): - ''' Build up a list of url's that sabnzbd can be accessed from ''' - # Access_url is used to provide the user a link to sabnzbd depending on the host - access_uri = 'localhost' - cherryhost = cfg.cherryhost() - - if cherryhost == '0.0.0.0': - import socket - host = socket.gethostname() - socks = [host] - # Grab a list of all ips for the hostname - addresses = socket.getaddrinfo(host, None) - for addr in addresses: - address = addr[4][0] - # Filter out ipv6 addresses (should not be allowed) - if ':' not in address and address not in socks: - socks.append(address) - if cherrypy.request.headers.has_key('host'): - host = cherrypy.request.headers['host'] - host = host.rsplit(':')[0] - access_uri = host - socks.insert(0, host) - else: - socks.insert(0, 'localhost') - - elif cherryhost == '::': - import socket - host = socket.gethostname() - socks = [host] - # Grab a list of all ips for the hostname - addresses = socket.getaddrinfo(host, None) - for addr in addresses: - address = addr[4][0] - # Only ipv6 addresses will work - if ':' in address: - address = '[%s]' % address - if address not in socks: - socks.append(address) - if cherrypy.request.headers.has_key('host'): - host = cherrypy.request.headers['host'] - host = host.rsplit(':')[0] - access_uri = host - socks.insert(0, host) - else: - socks.insert(0, 'localhost') - - elif not cherryhost: - import socket - socks = [socket.gethostname()] - access_uri = socket.gethostname() - else: - socks = [cherryhost] - access_uri = cherryhost - - urls = [] - for sock in socks: - if sock: - if cfg.enable_https(): - url = 'https://%s:%s/sabnzbd/' % (sock, cfg.https_port()) - else: - url = 'http://%s:%s/sabnzbd/' % (sock, cfg.cherryport()) - - urls.append(url) - - if cfg.enable_https(): - access_url = 'https://%s:%s/sabnzbd/' % (access_uri, cfg.https_port()) - else: - access_url = 'http://%s:%s/sabnzbd/' % (access_uri, cfg.cherryport()) - - return access_url, urls - - @cherrypy.expose - def servertest(self, **kwargs): - result, msg = test_nntp_server_dict(kwargs) - return msg diff --git a/main/setup.py b/main/setup.py deleted file mode 100644 index 1bb82ce..0000000 --- a/main/setup.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/python -# -# Copyright 2008-2009 The SABnzbd-Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Installer diff --git a/main/win/nsis/Include/registerExtension.nsh b/main/win/nsis/Include/registerExtension.nsh deleted file mode 100644 index 720eefd..0000000 --- a/main/win/nsis/Include/registerExtension.nsh +++ /dev/null @@ -1,71 +0,0 @@ -!define registerExtension "!insertmacro registerExtension" -!define unregisterExtension "!insertmacro unregisterExtension" -!define SHCNE_ASSOCCHANGED 0x8000000 -!define SHCNF_IDLIST 0 - -; Source = http://nsis.sourceforge.net/File_Association -; Patched for SABnzbd by swi-tch - -!macro registerExtension icon executable extension description - Push "${icon}" ; "full path to icon.ico" - Push "${executable}" ; "full path to my.exe" - Push "${extension}" ; ".mkv" - Push "${description}" ; "MKV File" - Call registerExtension -!macroend - -; back up old value of .opt -Function registerExtension -!define Index "Line${__LINE__}" - pop $R0 ; ext name - pop $R1 - pop $R2 - pop $R3 - push $1 - push $0 - DeleteRegKey HKEY_CURRENT_USER "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$R1" - ReadRegStr $1 HKCR $R1 "" - StrCmp $1 "" "${Index}-NoBackup" - StrCmp $1 "OptionsFile" "${Index}-NoBackup" - WriteRegStr HKCR $R1 "backup_val" $1 -"${Index}-NoBackup:" - WriteRegStr HKCR $R1 "" $R0 - ReadRegStr $0 HKCR $R0 "" - StrCmp $0 "" 0 "${Index}-Skip" - WriteRegStr HKCR $R0 "" $R0 - WriteRegStr HKCR "$R0\shell" "" "open" - WriteRegStr HKCR "$R0\DefaultIcon" "" "$R3,0" -"${Index}-Skip:" - WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' - WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" - WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' - pop $0 - pop $1 -!undef Index -System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)' -FunctionEnd - -!macro unregisterExtension extension description - Push "${extension}" ; ".mkv" - Push "${description}" ; "MKV File" - Call un.unregisterExtension -!macroend - -Function un.unregisterExtension - pop $R1 ; description - pop $R0 ; extension -!define Index "Line${__LINE__}" - ReadRegStr $1 HKCR $R0 "" - StrCmp $1 $R1 0 "${Index}-NoOwn" ; only do this if we own it - ReadRegStr $1 HKCR $R0 "backup_val" - StrCmp $1 "" 0 "${Index}-Restore" ; if backup="" then delete the whole key - DeleteRegKey HKCR $R0 - Goto "${Index}-NoOwn" -"${Index}-Restore:" - WriteRegStr HKCR $R0 "" $1 - DeleteRegValue HKCR $R0 "backup_val" - DeleteRegKey HKCR $R1 ;Delete key with association name settings -"${Index}-NoOwn:" -!undef Index -System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)' -FunctionEnd \ No newline at end of file diff --git a/main/win/nsis/Plugins/KillProc.dll b/main/win/nsis/Plugins/KillProc.dll deleted file mode 100644 index 9b34748a6b62959aeea45aa22b85fcdc27ca0ca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25088 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 E2Q$Nb4FCWD diff --git a/main/win/nsis/Plugins/KillProc.txt b/main/win/nsis/Plugins/KillProc.txt deleted file mode 100644 index c4f72cf..0000000 --- a/main/win/nsis/Plugins/KillProc.txt +++ /dev/null @@ -1,64 +0,0 @@ -KillProc Plugin for NSIS (2006-12-16) -===================================== - -This plugin is intended for searching and killing processes. -Usefull if you want to kill all running instances of a certain application. - - -Functions ---------- - -KillProc::FindProcesses - Enumerate all running instances of the specified process -KillProc::KillProcesses - Kills all running instances of the specified process - - -Parameters ----------- - -$0: Specifies the name of the process to be killed (e.g. "foo.exe") - - -Return Values -------------- - -$0: The number of processes found/killed -$1: The number of processes that could not be killed (-1 indicates serious problems) - - -Example -------- - -Section - StrCpy $0 "foo.exe" - DetailPrint "Searching for processes called '$0'" - KillProc::FindProcesses - StrCmp $1 "-1" wooops - DetailPrint "-> Found $0 processes" - - StrCmp $0 "0" completed - Sleep 1500 - - StrCpy $0 "foo.exe" - DetailPrint "Killing all processes called '$0'" - KillProc::KillProcesses - StrCmp $1 "-1" wooops - DetailPrint "-> Killed $0 processes, faild to kill $1 processes" - - Goto completed - - wooops: - DetailPrint "-> Error: Something went wrong :-(" - Abort - - completed: - DetailPrint "Everything went okay :-D" -SectionEnd - - -Credits -------- - -Written by MuldeR (http://mulder.at.gg/) - -More information at: -http://forum.doom9.org/showthread.php?p=902927#post902927 diff --git a/main/win/par2/COPYING b/main/win/par2/COPYING deleted file mode 100755 index d60c31a..0000000 --- a/main/win/par2/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/main/win/par2/README_FIRST.txt b/main/win/par2/README_FIRST.txt deleted file mode 100755 index 8a8cad4..0000000 --- a/main/win/par2/README_FIRST.txt +++ /dev/null @@ -1,917 +0,0 @@ -=== Table of contents === - ---- Introduction --- ---- About the NVIDIA CUDA version --- ---- Installing the pre-built Windows (32-bit) version --- ---- Installing the pre-built Mac OS X version --- ---- Installing the pre-built Linux version --- ---- Installing the pre-built FreeBSD version --- ---- Building and installing on UNIX type systems --- ---- Building and installing on Mac OS X systems --- ---- Building and installing on Windows operating systems --- ---- Building and installing on FreeBSD --- ---- Technical Details --- ---- Version History --- - -=== Table of contents === - - - ---- Introduction --- - - -This is a concurrent (multithreaded) version of par2cmdline 0.4, a utility to -create and repair data files using Reed Solomon coding. par2 parity archives -are commonly used on Usenet postings to allow corrupted postings to be -repaired instead of needing the original poster to repost the corrupted -file(s). - -For more information about par2, go to this web site: - -http://parchive.sourceforge.net/ - -The original version of par2cmdline 0.4 was downloaded from: - -http://sourceforge.net/projects/parchive - - -This version has been modified to utilise the Intel Threading Building Blocks -library, which enables it to process files concurrently instead of the -original version's serial processing. Computers with more than one CPU or core -such as those using Intel Core Duo, Intel Core Duo 2, or AMD Athlon X2 CPUs -can now create or repair par2 archives much quicker than the original version. -For example, dual core machines can achieve near-double performance when -creating or repairing. - -The Intel Threading Building Blocks library is obtained from: - -http://osstbb.intel.com/ - - -The licensing of this source code has not been modified: it is still published -under the GPLv2 (or later), and the COPYING file is included in this -distribution as per the GPL. - - -To download the source code or some operating system builds of the -concurrent version of par2cmdline 0.4, go to: - -http://www.chuchusoft.com/par2_tbb - - ---- About the NVIDIA CUDA version --- - - -*** The NVIDIA CUDA version should be considered experimental. *** - -There is no guarantee that the NVIDIA CUDA version will perform correctly. Even -though it has been tested on test data and correctly worked on those files, it may -not work on your files since the GPU program is new and may have unknown bugs in -it. Caveat emptor. - -The NVIDIA CUDA version of the par2 program has been modified to utilise NVIDIA -CUDA 2.0 technology, which enables it to process data using the processor (GPU) on -certain video cards. Most of the processing is still performed by the computer's -CPU but some will be offloaded to the video card's GPU. The amount of offloading -depends on how much speed/power the GPU has. After processing all of the data for -par2 creation or par2 repair, the program will display, as a percentage, how much -of the processing was done by the GPU (or whether the GPU was not available for -use). - -There are two factors which determine how much processing the GPU can provide: - - (1) the amount of video card memory. Some of the memory will be used for the video - display, and this is partly determined by the operating system. For example, if - the OS/video-driver performs drawing acceleration using extra video memory, less - memory is available for CUDA use. For example, on a 128MB video card running - Mac OS X 10.5, only about 22MB was available for use by CUDA applications. If - the parity data totals more than 22MB, only a portion of that data can be - processed by the GPU. Of course this is only an example and your system will - probably have a different amount of memory available for CUDA use. - Because of OS use, it is recommended that for Mac OS X, a video card with at - least 256MB of video memory is recommended. For Windows XP, a video card of at - least 128MB is recommended, and for Windows Vista, at least 256MB is recommended. - - (2) the video card's speed, which depends on both the GPU's speed and the video - memory's bandwidth. For the GPU, its speed depends on both its clock rate and - the number of stream processors it has. For example, a GeForce 8600 GT has 32 - stream processors compared to a 9800 GTX which has 128 stream processors. - Memory bandwidth depends on both how wide the data path is between the GPU - and its memory (for example, a 64-bit wide data bus will transfer data half - as quickly as a 128-bit wide data bus), as well as the clock rate of the - video memory - the higher the clock rate, the faster the GPU can move data - from/to the video memory and this in turn affects how fast it processes data. - -Hardware requirements: - - Requires a "Compute Capability 1.1" device, which is any 200 series GeForce card, - any 9 series GeForce card, and most 8 series GeForce card EXCEPT for the first - generation cards such as the 8800 Ultra, 8800 GTX, 8800 GTS, and certain Tesla - and Quadro cards: search the web for "Compute Capability 1.0" devices. 1.0-only - devices are not capable of being used. Cards such as the 8400, 8500, 8600, - 8800 GS, 8800 GT, 8800M GTS (mobile), and 8800M GTX (mobile) are capable of - being used. - - Mobile variants will also work, for example, 8600 refers to both the desktop and - mobile versions such as 8600 GT (desktop) and 8600M GT (mobile). - -Software requirements: - - The CUDA runtime/toolkit may need to be downloaded and installed by you because NVIDIA do - not permit redistribution of it with third party executables. If you need to install the - runtime, please search for "NVIDIA CUDA toolkit" in your favourite search engine. - - On Windows, it appears that the CUDA runtime/toolkit ships with recent video card driver - software from NVIDIA. You can verify this by checking for it at this path: - "C:\Windows\system32\nvcuda.dll". - - On Mac OS X 10.5, check for the driver at this path: "/System/Library/Extensions/CUDA.kext", - and for the runtime library at this path: "/usr/local/cuda/lib/libcudart.dylib". Mac OS X - users will probably need to download and install the CUDA runtime/toolkit. You should be - aware that the default install options for the CUDA runtime/toolkit does *not* install the - required CUDA driver, so it needs to be installed by performing a *custom* install of the - runtime/toolkit: be sure to check the checkbox for "CUDA.kext". - -Limitations: - - [1] only available as a 32-bit executable for Windows XP and later, and Intel Mac OS X - 10.5.2 and later. Due to time constraints, other systems such as GNU/Linux are not - available at this time. You are most welcome to modify/build/test it for other - systems if you feel up to the challenge :) - - [2] "low end" GPUs are "slow", ie, they do not contribute to much of the processing. - For example, to create 128MB (256 blocks of 524288 bytes) of parity data on a - 128MB 8600M GT in a Core 2 Duo 2.2GHz machine, about 2% of the workload was - offloaded to the GPU. For the same 128MB of parity data, a 256MB 8600M GT in a - Core 2 Duo 2.4GHz machine offloaded about 5% of the workload to the GPU (mainly - because having more memory allowed more data to be processed on the video card). - - It is expected that "high end" video cards will have even higher GPU offloading, - but without access to such a video card (yes, some of us can't splurge on that - top-of-the-line video card!), it's mere speculation as to what sort of performance - will occur. :) Maybe someone will send an email with some answers :) - - [3] sometimes the CUDA runtime reports little or no available memory on the video card - for use by programs, which will result in this version not being able to use the - GPU for processing. This problem is probably related to video display acceleration - by the OS, in which case, closing windows and/or applications will probably free - up video memory. It may, however, require a reboot to reset the video card (you - should do this only as a last resort). - -Licensing: - - The source code for the CUDA-specific parts of the par2cmdline-0.4 program is provided - and released under the GPLv2, which is believed to be compatible with NVIDIA's licensing - of the sample source code/libraries in the CUDA SDK, from which the par2 processing - code is based on (but IANAL). - -Building: - - If you're interested in building this version, you will need to set up the following - development environment(s): - - Mac OS X: - - 10.5.2 or later - - Xcode 3.0 or later installed - - TBB 2.1 or later installed - - NVIDIA CUDA 2.0 toolkit installed, including the driver by performing a custom install. - The following assumes it is installed into "/usr/local/cuda". - - NVIDIA CUDA 2.0 SDK installed. The following assumes it is installed into "/Developer/CUDA". - - Windows: - - XPSP2 or later - - Visual C++ Express 2005 installed - - Visual C++ Express 2008 installed - - TBB 2.1 or later installed - - NVIDIA CUDA 2.0 toolkit installed. The following assumes it is installed into "C:\CUDA". - - NVIDIA CUDA 2.0 SDK installed. The following assumes it is installed into - "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK" . - - The following build instructions assume that you have already successfully built the non-CUDA - version of the par2 program. If you haven't done so, it is strongly recommended you do so first, - so that any issues relating to the non-CUDA version are fixed before you try building the CUDA - version (which has its own set of possible build issues). - - Mac building: - - copy the par2_cuda folder into /Developer/CUDA/projects - - open a Terminal window, cd to /Developer/CUDA/projects/par2_cuda - - enter 'make' to build the par2_cuda static library - - cd to your folder. Enter 'configure gpgpu=cuda && make' to build the - par2 program. If it fails to compile, check your Makefile for incorrect paths, fix, try - building again, etc. If it fails to link, check your Makefile for incorrect paths, fix, try - building again, etc. When the par2 program is linked, it will assume that the - libcudart.dylib library is in "/usr/local/cuda/lib". - - copy the libtbb.dylib file into the folder (or wherever you built the par2 - executable) - - run the program. If it fails to run, make sure "/usr/local/cuda/lib/libcudart.dylib" exists. - - if it fails to find any GPU resources for processing, check that you have installed the - runtime correctly including the custom installing of the CUDA driver (which should be at - "/System/Library/Extensions/CUDA.kext"). - - Windows building: - - copy the par2_cuda folder into "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects" - - open the "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects\par2_cuda_lib.vcproj" - file using Visual C++ Express 2005 - - build the 'release' configuration (ignore the warnings about import linkage mismatches - they - are due to TBB's requirement of the DLL version of the CRT whereas CUDA programs are supposed - to link to the static version of the CRT - this causes the mismatch but won't cause crashes or - malfunctions). - - open the par2.vcproj file in the folder using Visual C++ Express 2008 - - build the 'releaseCUDA' configuration - - copy the tbb.dll file into the ReleaseCUDA folder in the folder - - run the program. If it fails to run, make sure cudart.dll is in the %PATH% environment variable - (there should be an entry for "C:\cuda\bin"). - - if it fails to find any GPU resources for processing, check that you have installed the - runtime correctly. - -*** Just to repeat, the NVIDIA CUDA version should be considered experimental. *** - - ---- Installing the pre-built Windows version (32-bit or 64-bit) --- - - -The Windows version is distributed as an executable (par2.exe) which has -built into it (i.e., statically linked) the Intel Threading Building Blocks -2.2 library, built from the tbb22_20090809oss_src.tar.gz distribution. The -Windows version no longer requires a specific version of the C runtime -library because the par2.exe executable is now built by statically linking -with the C runtime library. - -To install, copy the par2.exe file and then invoke it from the command line. - -To uninstall, delete the par2.exe file along with any files from the -distribution folder. - - ---- Installing the pre-built Mac OS X version --- - - -The Mac version is an universal build of the concurrent version -of par2cmdline 0.4 for Mac OS X 10.4 (32-bit binaries) and 10.5 (64-bit -binaries). In other words, the par2 executable file contains both a 32-bit -x86 and a 64-bit x86_64 build of the par2 sources. -It is distributed as an executable (par2) along with the required Intel -Threading Building Blocks 2.2 library (libtbb.dylib). The libtbb.dylib file -is also universal (32-bit and 64-bit versions for x86/x86_64 are inside it). - -To install, place the par2 and libtbb.dylib files in a folder and -invoke them from the command line. - -To uninstall, delete the par2 and libtbb.dylib files along with any -files from the distribution folder. - - ---- Installing the pre-built Linux version --- - - -The Linux versions are a 32-bit i386 and 64-bit x86_64 build of the -concurrent version of par2cmdline 0.4 for GNU/Linux kernel version 2.6 -with GCC 4. It is distributed as an executable (par2) along with the -required Intel Threading Building Blocks 2.2 library (libtbb.so and -libtbb.so.2). There are separate distributions for the 32-bit and -64-bit versions. - -To install, place the par2, libtbb.so and libtbb.so.2 files in a -folder and invoke them from the command line. - -To uninstall, delete the par2, libtbb.so and libtbb.so.2 files along -with any files from the distribution folder. - - ---- Installing the pre-built FreeBSD version --- - - -Both the 32-bit and 64-bit binaries were built using RELEASE 7.0 of FreeBSD. -It is distributed as an executable (par2) along with the required Intel -Threading Building Blocks 2.2 library (libtbb.so). There are separate -distributions for the 32-bit and 64-bit versions. - -To install: copy libtbb.so to /usr/local/lib, copy par2 to a convenient -location, eg, /usr/local/bin, then remove the distribution directory. You -will need superuser permission to copy files to the /usr/local area. - -To uninstall, delete the par2 and libtbb.so files along with any -files from the distribution folder. - - ---- Building and installing on UNIX type systems --- - - -For UNIX or similar systems, the included configure script should be used to -generate a makefile which is then built with a Make utility. Before using -them however, you may need to modify the configure scripts as detailed below. - -Because this version depends on the Intel Threading Building Blocks library, -you will need to tell the build system where the headers and libraries are in -order to compile and link the program. There are 2 ways to do this: use the -tbbvars.sh script included in TBB to add the appropriate environment variables, -or manually modify the Makefile to use the appropriate paths. The tbbvars.sh -file is in the tbboss_src/build directory. To manually modify the -Makefile: - - In `Makefile.am', for Darwin/Mac OS X, change the AM_CXXFLAGS line to: - -AM_CXXFLAGS = -Wall -I../tbb22_20090809oss_src/include -gfull -O3 -fvisibility=hidden -fvisibility-inlines-hidden - - or for other POSIX systems, change the AM_CXXFLAGS line to: - -AM_CXXFLAGS = -Wall -I../tbb22_20090809oss_src/include - -and modify the path to wherever your extracted Intel TBB files are. Note that it -should point at the `include' directory inside the main tbb directory. - -For linking, the file `Makefile.am' has this line: - -LDADD = -lstdc++ -ltbb -L. - -thus the tbb library is already added to the list of libraries to link against. -You will need to have libtbb.a (or libtbb.dylib or libtbb.so etc.) in your -library path (usually /usr/lib). - -Alternatively, if the TBB library is not in a standard library directory (or -on the linker's list of library paths) then add a library path so the linker -can link to the TBB: - -LDADD = -lstdc++ -ltbb -L - -For example: - -LDADD = -lstdc++ -ltbb -L. - -The Mac OS X distribution of this project is built using a relative-path -for the dynamic library. Please see the next section for more information. - -The GNU/Linux distribution of this project is built using a relative-path -for the dynamic library (by passing the "-R $ORIGIN" option to the linker). - - ---- Building and installing on Mac OS X systems --- - - -The Mac version is an universal build of the concurrent version -of par2cmdline 0.4 for Mac OS X 10.4 (32-bit binaries) and 10.5 (64-bit -binaries). In other words, the par2 executable file contains both a 32-bit -x86 and a 64-bit x86_64 build of the par2 sources. -It is distributed as an executable (par2) along with the required Intel -Threading Building Blocks 2.2 library (libtbb.dylib). The libtbb.dylib file -is also universal (32-bit and 64-bit versions for x86/x86_64 are inside it). - -The par2 32-bit executable is built for 10.4, and the 64-bit executable is -built for 10.5, which are then symbol stripped and combined using the lipo -tool. The 64-bit executable needs to be built for 10.5 because the 10.4 -build of the 64-bit executable was found to (1) cause the "fat" executable -to crash when it was run under 10.5, and (2) not be able to correctly read -par2 files when those files resided on a SMB server (ie, a shared folder on -a Windows computer). Combining the mixed-OS executables solves both of these -problems (see the 20080116 version release notes below for details). - -The libtbb.dylib file is built from the TBB 2.2 tbb22_20090809oss_src.tar.gz -distribution. It was built for the x86 and x86_64 architectures -and will therefore run on all Macs that support 10.4 or 10.5. - -Normally, the libtbb.dylib file is built so that for a client program to use -it, it would usually have to be placed in /usr/lib, which would therefore -require administrator privileges to install it onto a Mac OS X system. The -version included in this distribution does not require that it be installed, -and is therefore usable "out of the box". To implement this change, the -macos.gcc.inc file was modified with this line: - -LIB_LINK_FLAGS = -dynamiclib -Wl,-install_name,@executable_path/$@ - -Other required changes are: - -ifeq (intel64,$(arch)) - CPLUS_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 - LINK_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 - LIB_LINK_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 -endif - -ifeq (ia32,$(arch)) - CPLUS = g++-4.0 - C_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 - CPLUS_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 - LINK_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 - LIB_LINK_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 -endif - -To build the executables, configure needs to be invoked in a particular manner for both x86 and x64 builds: - -cd /build - -../configure --build=i686-apple-darwin10.2.0 --host=i686-apple-darwin10.2.0 CXX=g++-4.0 && sed -e 's/CXXFLAGS = -g -O2/CXXFLAGS = #-g -O2/' Makefile > Makefile.tmp && mv Makefile.tmp Makefile && make && strip par2 && mv par2 par2-x86 && make clean - -../configure --build=i686-apple-darwin10.2.0 --host=x86_64-apple-darwin10.2.0 && sed -e 's/CXXFLAGS = -g -O2/CXXFLAGS = #-g -O2/' Makefile > Makefile.tmp && mv Makefile.tmp Makefile && make && strip par2 && mv par2 par2-x86_64 && make clean - -The par2 executable has been symbol stripped (using the 'strip' command line -tool). - - ---- Building and installing on Windows operating systems --- - - -This modified version has been built and tested on Windows XP SP2 using Visual -Studio/C++ 2010 beta 2. It statically links with both the TBB and the C runtime -library and the included project and makefiles are set up for that. - -For Windows, the project file for Visual Studio 2010 has been included. Open -the project file in Visual Studio and go to the project properties window. -For the C/C++ include paths, make sure the path to where you extracted the -Intel TBB files is correct. Similarly for the linker paths. - -To build the 32-bit version, download the source tarball from the website and -open the sln/vcproj project files in the win32 directory with Visual C++ 2010. -You will also need to build the TBB in a modified manner so that it statically -links against the C runtime library and it itself is linked as a static library, -instead of as a DLL. To do this, use the modified TBB makefiles in the -windows-tbb directory. To use the TBB makefile, you'll need to use GNU make, -which can be built from its source tarsal. - -To build the 64-bit version, install the "Windows 2003 Server R2" version -of the platform SDK and open a command line window for a 64-bit Windows XP -build environment (in the Platform SDK program group in the Start Menu). You -can also use any non-Express version of Visual C++. -Change the directory to the par2cmdline-0.4-tbb- directory. Move or -copy the Makefile in the win64 directory to its parent (ie, to the -par2cmdline-0.4-tbb- directory). Then invoke the 'nmake' command to -build the binary. The result should be an executable file named -par2_win64.exe in the par2cmdline-0.4-tbb- directory. This can -then be renamed to par2.exe if so desired. As for the 32-bit version, you -will need to build the TBB in a modified manner. More details are in the -win64 Makefile. - - - ---- Building and installing on FreeBSD --- - - -Instructions: - -[1] build and install TBB -- extract TBB from the source archive. -- on a command line, execute: - - cp -r /include/tbb /usr/local/include - cd && /usr/local/bin/gmake - # change the next line to match your machine's configuration: - cp /build/FreeBSD_em64t_gcc_cc4.1.0_kernel7.0_release/libtbb.so /usr/local/lib - -[2] build and install par2cmdline-0.4-tbb -- extract and build par2cmdline-0.4-tbb using tar, ./configure, and make -- copy built binary to where you want to install it (eg, /usr/local/bin) - -[3] cleanup -- remove and par2cmdline-0.4-tbb source directories - - ---- Technical Details --- - - -All source code modifications have been isolated to blocks that have this form: - -#if WANT_CONCURRENT - - - -#else - - - -#endif - -to make it easier to see what was modified and how it was done. - -The technique used to modify the original code was: - -[1] add timing code to instrument/document the places where concurrency would be of - benefit. The CTimeInterval class was used to time sections of the code. -[2] decide which functions to make concurrent, based on the timing information - obtained in step [1]. -[3] for each function to make concurrent, study it and its sub-functions for - concurrent access problems (shared data points) -[4] read the Intel TBB tutorials and reference manual to learn how to use the - library to convert serial code to concurrent code - -It was then decided to apply concurrency to: - -- loading of recovery packets (par2 files), which necessitated changes to some member - variables in par2repairer.h: - - sourcefilemap [LoadDescriptionPacket, LoadVerificationPacket] - - recoverypacketmap [LoadRecoveryPacket] - - mainpacket [LoadMainPacket] - - creatorpacket [LoadCreatorPacket] - They were changed to use concurrent-safe containers/wrappers. To handle concurrent - access to pointer-based member variables, the pointers are wrapped in atomic - wrappers. tbb::atomic does not have operator-> which is needed to deference - the wrapped pointers so a sub-class of tbb::atomic was created, named - atomic_ptr. For maps and vectors, tbb's concurrent_hash_map and concurrent_vector - were used. - Because DiskFileMap needed to be accessed concurrently, a concurrent version of it - was created (class ConcurrentDiskFileMap) -- source file verification -- repairing data blocks - -In the original version, progress information was written to cout (stdout) in a serial -manner, but the concurrent version would produce garbled overlapping output unless -output was made concurrent-safe. This was achieved in two ways: for simple infrequent -output routines, a simple mutex was used to gate access to cout to only one thread at -a time. For frequent use of cout, such as during the repair process, an atomic integer -variable was used to gate access, but *without* blocking a thread that would have -otherwise been blocked if a mutex had been used instead. The code used is: - - if (0 == cout_in_use.compare_and_swap(outputendindex, 0)) { // <= this version doesn't block - only need 1 thread to write to cout - cout << "Processing: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush; - cout_in_use = 0; - } - -Initially cout_in_use is set to zero so that the first thread to put its value of -outputendindex into cout_in_use will get a zero back from cout_in_use.compare_and_swap() -and therefore enter the 'true block' of the 'if' statement. Other threads that then try -to put their value of outputendindex into cout_in_use while the first thread is still -using cout will fail to do so and so they will skip the 'true block' but they won't block. - -For par2 creation, similar modifications were made to the source code that also allowed -concurrent processing to occur. - -To convert from serial to concurrent operation, for() loops were changed to using Intel -TBB parallel_for() calls, with a functor object (callback) supplied to provide the body -of the parallel for loop. To access member variable in the body of the parallel loop, -new member functions were added so that the functor's operator() could dispatch into the -original object to do the for loop body's processing. - -It should be noted that there are two notable parts of the program that could not be -made concurrent: (1) file verification involves computing MD5 hashes for the entire file -but computing the hash is an inherently serial computation, and (2) computing the Reed- -Solomon matrix for use in creation or repair involves matrix multiplication over a Galois -field, which is also an inherently serial computation and so it too could not be made into -a concurrent operation. - -Nevertheless, the majority of the program's execution time is spent either repairing the -lost data, or in creating the redundancy information for later repair, and both of these -operations were able to be made concurrent with a near twice speedup on the dual core -machines that the concurrent version was tested on. - -Note that it is important that the computer has sufficient memory (1) to allow the caching -of data and (2) to avoid virtual memory swapping, otherwise the creation or repair process -will become I/O bound instead of CPU bound. Computers with 1 to 2GB of RAM should have -enough memory to not be I/O bound when creating or repairing parity/data files. - - ---- Version History --- - - -The changes in the 20100203 version are: - -- modified Makefile.am to use "ARCH_SCALAR" instead of "ARCH" to avoid a FreeBSD name clash -- fixed a 64-bit-only bug in reedsolomon-x86_64-mmx.s where a size of 8 bytes caused a segfault -(forgot to test for zero like the reedsolomon-i686-mmx.s file does); this bug only manifests in -the 64-bit Mac, 64-bit Linux and 64-bit FreeBSD versions; reproduced by creating/repairing a -file of exactly 16384 bytes -- updated to Intel TBB 2.2 (tbb22_20090809oss) -- the Mac build no longer includes the PowerPC variants (I don't use a PowerPC Mac anymore) -- the 32-bit and 64-bit Windows builds of both par2 and the TBB library are now statically -linked against the C runtime library to avoid the problem of requiring the installation of -the correct CRT library (DLL). As well, par2 is statically linked against the TBB library -to allow just one executable file to be installed (i.e., just par2.exe). - -The changes in the 20090203 version are: - -- fixed a bug which affected the Linux and Mac versions whereby repairs would fail if -the file being repaired was short or had one or two bad blocks (because the async write -to the file's last byte was failing). -- on Windows, the program now stores directory paths in par2 files using '/' as the path -separator instead of '\' (as per the Par 2.0 specification document). Note: directory -paths are stored only when the '-d' switch is used. -- merged the sources from the CPU-only and CPU/GPU versions so that both versions now -build from the same set of source files using different 'configure' options (Mac, Linux, -FreeBSD) or project files (Windows). See above for building instructions. - -The changes in the 20081009 version are: - -- added support for NVIDIA CUDA 2.0 technology, which allows the GPU on the video card to - be used to perform some of the processing workload in addition to the CPU on the mainboard. - See the "--- About the NVIDIA CUDA version ---" section in this file for limitations, - requirements, build instructions, licensing, and more information. - -The changes in the 20081005 version are: - -- asynchronous reading of a large number of small files would sometimes not complete which - caused the program to hang. Fixed by reverting to synchronous reading (most of the benefit - of async I/O is from async writing so this change does not affect overall performance). -- some operating systems have limits on the number of open files which was easily exceeded - when a large number of small files are being processed for par2 creation or for repair. - Fixed by closing the source files as soon as they are no longer needed to be opened (which - is determined by counting how many data blocks the file provides for creation/repair). - -The changes in the 20080919 version are: - -- added more information to a few of the error messages to make it easier to specify - block counts, etc. when using the -d option. -- redundancy can now be specified using floating point values instead of integral values, - eg, 8.5% instead of 8% or 9%. -- added the -0 option to create dummy par2 files. This was done so that the actual size - of the par2 files can be quickly determined. For example, suppose you wish to fill up - a CD-R's or DVD-R's remaining empty space with par2 files of the files filling up the - disc, then by using the -0 option, you can quickly work out whether the par2 files - will fit and by how much, which in turn allows you to maximize the use of the remaining - empty space (you would alter the block count number and/or size so that the optimal - number of blocks are created to fill up the remaining space). To determine how much - CD-R or DVD-R space you have to fill, find out how many blocks your blank disc has - (using a burning program such as ImgBurn [Windows]) and how many blocks your data - would occupy when burned (using an image creation program such as mkisofs [all - platforms] which has a handy -print-size option). ImgBurn [Windows] can also tell - you how many blocks you have for filling if you use its 'build' command. - WARNING: be careful when using this command that you don't burn the dummy par2 files - that it creates because they don't have any valid data in them. Remember, they are - created only to determine the actual size of the real par2 files that would be - created if you had not used the -0 option. -- added MMX-based code from Paul Houle's phpar2_12src version of par2cmdline-0.4. As - a result, the repair and creation of par2 files using x86 or x86_64 MMX code is about - 20% faster than the scalar version in singlethreaded testing. Multithreaded testing - showed no noticable improvement (ie, YMMV). The scalar version is used if your CPU - is not MMX capable. MMX CPUs: Intel Pentium II and later, AMD Athlon64 and later. -- added asynchronous I/O for platforms that support such I/O: Mac OS X, Windows, - GNU/Linux. This results in a small (~1-5%) improvement in throughput, especially for - repairing. Unfortunately, using async I/O causes a crash under FreeBSD, so the - pre-built binaries are built to only use synchronous I/O. -- first release of 32-bit and 64-bit PowerPC binaries for Mac OS X. The 32-bit version - requires at least 10.4, and the 64-bit version requires at least 10.5. The 64-bit - version is UNTESTED (because of lack of access to a G5 Mac). -- first release of a 64-bit x86_64 binary for GNU/Linux. Tested under the 64-bit - version of Gentoo 2008.0. -- the 64-bit Windows binary is built using the tbb20_20080408oss release of the TBB; - the Mac, GNU/Linux, FreeBSD and 32-bit Windows binaries are built using the - tbb21_009oss release of the TBB. The tbb21_009oss release does not support the - VC7.1 runtime libraries on Win64 so it was necessary to fallback to a previous - version for the Windows 64-bit binary. - -The changes in the 20080420 version are: - -- added the -t0 option to allow verification to be done serially but still perform - repair concurrently, and for creation, MD5 checksumming will be done serially - and par2 data creation will be done concurrently. The default is to perform - all operations concurrently, so if you want the new behaviour, you will need to - manually specify -t0 on the command line or build your own custom version of - the executable. -- if the realpath() API returned NULL, the par2 files created would end up with - the name of the first file in the list of files to create par2 files for. Fixed. -- no longer includes duplicate file names in the list of files to create redundancy - data for (which would otherwise bloat the .par2 files) -- now displays the instruction set being executed -- updated to use the tbb20_017oss_src.tar.gz version of the Intel TBB library. - -The changes in the 20080203 version are: - -- the Linux version wasn't working because it was not built correctly: the - reedsolomon-inner-i386-posix.s was using an incorrect include directive. Fixed. - *** WARNING *** - A consequence of this error is that par2 files created with the 20080116 Linux - binary contain incorrect repair data and therefore cannot be used to repair - data files. The par2 files will need to be created again using either the - 20071128 build of the Linux binary or this build of it. - *** WARNING *** -- tweaked the Makefile and par2cmdline.h to allow for building under FreeBSD. -- first release of 32-bit and 64-bit binaries for FreeBSD (built under RELEASE 6.2). -- updated to use the 20080115 version of the Intel TBB library. - -The changes in the 20080116 version are: - -- the initial processing (creation) and verification (repair) of target files - is now performed serially because of complaints that concurrent processing - was causing disk thrashing. Since this part of the program's operation is - mostly I/O bound, the change back to serial processing is a reasonable change. -- full paths are now only displayed when a -d parameter is given to the - program, otherwise the original behavior of displaying just the file name - now occurs. -- Unicode support was added. This requires some explanation. - - Windows version: previous versions processed file names and directory - paths using the default code page for non-Unicode programs, which is - typically whatever the current locale setting is. In other words, - file names that had characters that could not be represented in the - default code page ended up being mangled by the program, resulting - in .par2 files which contained mangled file names (directory names - also suffered mangling). Such .par2 files could not be used on other - computers unless they also used the same code page, which for POSIX - systems is very unlikely. The correct solution is to store and retrieve - all file names and directory paths using a Unicode representation. - To keep some backward compatibility, the names should be stored in - an 8-bit-per-character format (so that older .par2 files can still - be processed by the program), so decomposed (a.k.a. composite) UTF-8 - was chosen as the canonical file name encoding for the storage of - file names and directory paths in .par2 files. - To implement this change, the Windows version now takes all file - names from the operating system as precomposed UTF-16 and converts - them to decomposed UTF-8 strings which are stored in memory and - in .par2 files. If the operating system needs to use the string, - it is converted back into precomposed UTF-16 and then passed to - the OS for use. - - POSIX version: it is assumed that the operating system will deliver - and accept decomposed (a.k.a. composite) UTF-8 characters to/from - the program so no conversion is performed. Darwin / Mac OS X is - one such system that passes and accepts UTF-8 character strings, so - the Mac OS X version of the program works correctly with .par2 - files containing Unicode file names. If the operating system - does not deliver nor accept decomposed UTF-8 character strings, - this version (and previous versions) will not create .par2 files - that contain Unicode file names or directory paths, and which - will cause mangled file/directory names when used on other - operating systems. - - Summary: - [1] for .par2 files created on Windows using a version of - this program prior to this version and which contain non-ASCII - characters (characters outside the range of 0 - 127 (0x00 - 0x7F) - in numeric value, this program will be able to use such files - but will probably complain about missing files or will create - repaired files using the wrong file name or directory path, ie, - file name mangling will occur. - [2] for .par2 files created on UTF-8 based operating systems - using a prior version of this program, this version will be - able to correctly use such files (ie, the changes made to the - program should not cause any change in behavior, and no file - name mangling will occur). - [3] for .par2 files created on non-UTF-8 based operating systems - using a prior version of this program, this version will be - able to use such files but file name mangling will occur. - [4] for .par2 files created on UTF-8 based operating systems - using this version of this program, file name mangling will - not occur. - [5] for .par2 files created on non-UTF-8 based operating systems - using this version of this program, file name mangling will - occur. - -- split up the reedsolomon-inner.s file so that it builds - correctly under Darwin and other POSIX systems. -- changed the way the pre-built Mac OS X version is built because - the 64-bit version built under 10.4 (1) crashes when it is run - under 10.5, and (2) does not read par2 files when the files - reside on a SMB server (ie, a shared folder on a Windows - computer) because 10.4's SMB client software appears to - incorrectly service 64-bit client programs. These problems only - occurred with the 64-bit version; the 32-bit version works - correctly. - - To solve both of these problems, the pre-built executable is now - released containing both a 32-bit executable built under 10.4 - and a 64-bit executable built under 10.5. When run under 10.4, - the 64-bit executable does not execute because it is linked - against the 10.5 system libraries, so under 10.4, only the - 32-bit executable is executed, which solves problem (2). When - run under 10.5 on a 64-bit x86 computer, the 64-bit executable - executes, which solves problem (1), and because 10.5's SMB - client correctly services 64-bit client programs, problem (2) - is solved. - -The changes in the 20071128 version are: - -- if par2 was asked to verify/repair with just a single .par2 file, it would - crash. Fixed. -- built for GNU/Linux using the Gentoo distribution (i386 version). -- updated to use the 20071030 version of the Intel TBB library. - -The changes in the 20071121 version are: - -- changed several concurrent loops from using TBB's parallel_for to - parallel_while so that files will be processed in a sequential (but - still concurrent/threaded) manner. For example, 100 files were - previously processed on dual core machines as: - Thread 1: file 1, file 2, file 3, ..., file 50 - Thread 2: file 50, file 51, file 52, ..., file 100 - which caused hard disk head thrashing. Now the threads will - process the files from file 1 to file 100 on a - first-come-first-served basis. -- limited the rate at which cout was called to at most 10 times per - second. -- when building for i386 using GCC, this version will now build - with an assembler version of the inner Reed-Solomon loop because - the code generated by GCC was not as fast/small as the Visual - C++ version. Doing this should bring the GCC-built (POSIX) - version's speed up to that of the Visual C++ (Windows) version. -- for canonicalising paths on POSIX systems, the program will now - try to use the realpath() API, if it's available, instead of the - fragile code in the original version. -- on POSIX systems, attempting to use a parameter of "-d." for par2 - creation would cause the program to fail because it was not - resolving a partial path to a canonical full path. Fixed. - -The changes in the 20071022 version are: - -- synchronised the sources with the version of par2cmdline in the CVS at -- built against the 20070927 version of the Intel TBB -- tweaked the inner loop of the Reed Solomon code so that the compiler - will produce faster/better/smaller code (which may or may not speed up - the program). -- added support for creating and repairing data files in directory trees - via the new -d command line switch. - - The original modifications for this were done by Pacer: - - - - This version defaults to the original behaviour of par2cmdline: if no - -d switch is provided then the data files are expected to be in the same - directory that the .par2 files are in. - - Providing a -d switch will change the way that par2cmdline behaves as follows. - For par2 creation, any file inside the provided will have - its sub-path stored in the par2 files. For par2 repair, files for - verification/repair will be searched for inside the provided . - - Example: - - in /users/home/vincent/pictures/ there is - 2007_01_vacation_fiji - 01.jpg - 02.jpg - 03.jpg - 04.jpg - 2007_03_business_trip_usa - 01.jpg - 02.jpg - 2007_06_wedding - 01.jpg - 02.jpg - 03.jpg - 04.jpg - 05.jpg - 06.jpg - - Using the command: - -./par2 c -d/users/home/vincent/pictures/ /users/home/vincent/pictures.par2 /users/home/vincent/pictures - - will create par2 files in /users/home/vincent containing sub-paths such as: - - 2007_01_vacation_fiji/01.jpg - 2007_01_vacation_fiji/02.jpg - 2007_01_vacation_fiji/03.jpg - 2007_01_vacation_fiji/04.jpg - 2007_03_business_trip_usa/01.jpg - 2007_03_business_trip_usa/02.jpg - 2007_06_wedding/01.jpg - etc. etc. - - If you later try to repair the files which are now in /users/home/joe/pictures, - you would use the command: - - ./par2 r -d/users/home/joe/pictures/ /users/home/joe/pictures.par2 - - The par2 file could be anywhere on your disk: as long as the -d - switch specifies the root of the files, the verification/repair will occur correctly. - - Notes: - - [1] the directory given to -d does not need to have a trailing '/' character. - [2] on Windows, either / or \ can be used. - [3] partial paths can be used. For example, if the current directory is - /users/home/vincent, then this be used instead of the above command: - - ./par2 c -dpictures pictures.par2 pictures - - [4] if a directory has spaces or other characters that need escaping from the - shell then the use of double quotes is recommended. For example: - - ./par2 c "-dpicture collection" "picture collection.par2" "picture collection" - - -The changes in the 20070927 version are: - -- applied a fix for a bug reported by user 'shenhanc' in -Par2CreatorSourceFile.cpp where a loop variable would not get -incremented when silent output was requested. - -The changes in the 20070926 version are: - -- fixed an integer overflow bug in Par2CreatorSourceFile.cpp which resulted -in incorrect MD5 hashes being stored in par2 files when they were created -from source files that were larger than or equal to 4GB in size. This bug -affected all 32-bit builds of the program. It did not affect the 64-bit -builds on those platforms where sizeof(size_t) == 8. - -The changes in the 20070924 version are: - -- the original par2cmdline-0.4 sources were not able to process files -larger than 2GB on the Win32 platform because diskfile.cpp used the -stat() function which only returns a signed 32-bit number on Win32. -This was changed to use _stati64() which returns a proper 64-bit file -size. Note that the FAT32 file system from the Windows 95 era does not -support files larger than 1 GB so this change is really applicable only -to files on NTFS disks - the default file system on Windows 2000/XP/Vista. - -The changes in the 20070831 version are: - -- modified to utilise Intel TBB 2.0. - - - -Vincent Tan. -February 03, 2010. - -// -// Modifications for concurrent processing, Unicode support, and hierarchial -// directory support are Copyright (c) 2007-2010 Vincent Tan. -// Search for "#if WANT_CONCURRENT" for concurrent code. -// Concurrent processing utilises Intel Thread Building Blocks 2.2, -// Copyright (c) 2007-2009 Intel Corp. -// diff --git a/main/win/par2/par2-classic.exe b/main/win/par2/par2-classic.exe deleted file mode 100644 index 62e8ef74c155ad9fb45082a66f3e53c5a81340f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229376 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

        U_z}U#4Wdrd75v3{H(;1zDtK*`fI;u6 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 diff --git a/main/win/par2/x64/COPYING b/main/win/par2/x64/COPYING deleted file mode 100755 index d60c31a..0000000 --- a/main/win/par2/x64/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/main/win/par2/x64/README_FIRST.txt b/main/win/par2/x64/README_FIRST.txt deleted file mode 100755 index 8a8cad4..0000000 --- a/main/win/par2/x64/README_FIRST.txt +++ /dev/null @@ -1,917 +0,0 @@ -=== Table of contents === - ---- Introduction --- ---- About the NVIDIA CUDA version --- ---- Installing the pre-built Windows (32-bit) version --- ---- Installing the pre-built Mac OS X version --- ---- Installing the pre-built Linux version --- ---- Installing the pre-built FreeBSD version --- ---- Building and installing on UNIX type systems --- ---- Building and installing on Mac OS X systems --- ---- Building and installing on Windows operating systems --- ---- Building and installing on FreeBSD --- ---- Technical Details --- ---- Version History --- - -=== Table of contents === - - - ---- Introduction --- - - -This is a concurrent (multithreaded) version of par2cmdline 0.4, a utility to -create and repair data files using Reed Solomon coding. par2 parity archives -are commonly used on Usenet postings to allow corrupted postings to be -repaired instead of needing the original poster to repost the corrupted -file(s). - -For more information about par2, go to this web site: - -http://parchive.sourceforge.net/ - -The original version of par2cmdline 0.4 was downloaded from: - -http://sourceforge.net/projects/parchive - - -This version has been modified to utilise the Intel Threading Building Blocks -library, which enables it to process files concurrently instead of the -original version's serial processing. Computers with more than one CPU or core -such as those using Intel Core Duo, Intel Core Duo 2, or AMD Athlon X2 CPUs -can now create or repair par2 archives much quicker than the original version. -For example, dual core machines can achieve near-double performance when -creating or repairing. - -The Intel Threading Building Blocks library is obtained from: - -http://osstbb.intel.com/ - - -The licensing of this source code has not been modified: it is still published -under the GPLv2 (or later), and the COPYING file is included in this -distribution as per the GPL. - - -To download the source code or some operating system builds of the -concurrent version of par2cmdline 0.4, go to: - -http://www.chuchusoft.com/par2_tbb - - ---- About the NVIDIA CUDA version --- - - -*** The NVIDIA CUDA version should be considered experimental. *** - -There is no guarantee that the NVIDIA CUDA version will perform correctly. Even -though it has been tested on test data and correctly worked on those files, it may -not work on your files since the GPU program is new and may have unknown bugs in -it. Caveat emptor. - -The NVIDIA CUDA version of the par2 program has been modified to utilise NVIDIA -CUDA 2.0 technology, which enables it to process data using the processor (GPU) on -certain video cards. Most of the processing is still performed by the computer's -CPU but some will be offloaded to the video card's GPU. The amount of offloading -depends on how much speed/power the GPU has. After processing all of the data for -par2 creation or par2 repair, the program will display, as a percentage, how much -of the processing was done by the GPU (or whether the GPU was not available for -use). - -There are two factors which determine how much processing the GPU can provide: - - (1) the amount of video card memory. Some of the memory will be used for the video - display, and this is partly determined by the operating system. For example, if - the OS/video-driver performs drawing acceleration using extra video memory, less - memory is available for CUDA use. For example, on a 128MB video card running - Mac OS X 10.5, only about 22MB was available for use by CUDA applications. If - the parity data totals more than 22MB, only a portion of that data can be - processed by the GPU. Of course this is only an example and your system will - probably have a different amount of memory available for CUDA use. - Because of OS use, it is recommended that for Mac OS X, a video card with at - least 256MB of video memory is recommended. For Windows XP, a video card of at - least 128MB is recommended, and for Windows Vista, at least 256MB is recommended. - - (2) the video card's speed, which depends on both the GPU's speed and the video - memory's bandwidth. For the GPU, its speed depends on both its clock rate and - the number of stream processors it has. For example, a GeForce 8600 GT has 32 - stream processors compared to a 9800 GTX which has 128 stream processors. - Memory bandwidth depends on both how wide the data path is between the GPU - and its memory (for example, a 64-bit wide data bus will transfer data half - as quickly as a 128-bit wide data bus), as well as the clock rate of the - video memory - the higher the clock rate, the faster the GPU can move data - from/to the video memory and this in turn affects how fast it processes data. - -Hardware requirements: - - Requires a "Compute Capability 1.1" device, which is any 200 series GeForce card, - any 9 series GeForce card, and most 8 series GeForce card EXCEPT for the first - generation cards such as the 8800 Ultra, 8800 GTX, 8800 GTS, and certain Tesla - and Quadro cards: search the web for "Compute Capability 1.0" devices. 1.0-only - devices are not capable of being used. Cards such as the 8400, 8500, 8600, - 8800 GS, 8800 GT, 8800M GTS (mobile), and 8800M GTX (mobile) are capable of - being used. - - Mobile variants will also work, for example, 8600 refers to both the desktop and - mobile versions such as 8600 GT (desktop) and 8600M GT (mobile). - -Software requirements: - - The CUDA runtime/toolkit may need to be downloaded and installed by you because NVIDIA do - not permit redistribution of it with third party executables. If you need to install the - runtime, please search for "NVIDIA CUDA toolkit" in your favourite search engine. - - On Windows, it appears that the CUDA runtime/toolkit ships with recent video card driver - software from NVIDIA. You can verify this by checking for it at this path: - "C:\Windows\system32\nvcuda.dll". - - On Mac OS X 10.5, check for the driver at this path: "/System/Library/Extensions/CUDA.kext", - and for the runtime library at this path: "/usr/local/cuda/lib/libcudart.dylib". Mac OS X - users will probably need to download and install the CUDA runtime/toolkit. You should be - aware that the default install options for the CUDA runtime/toolkit does *not* install the - required CUDA driver, so it needs to be installed by performing a *custom* install of the - runtime/toolkit: be sure to check the checkbox for "CUDA.kext". - -Limitations: - - [1] only available as a 32-bit executable for Windows XP and later, and Intel Mac OS X - 10.5.2 and later. Due to time constraints, other systems such as GNU/Linux are not - available at this time. You are most welcome to modify/build/test it for other - systems if you feel up to the challenge :) - - [2] "low end" GPUs are "slow", ie, they do not contribute to much of the processing. - For example, to create 128MB (256 blocks of 524288 bytes) of parity data on a - 128MB 8600M GT in a Core 2 Duo 2.2GHz machine, about 2% of the workload was - offloaded to the GPU. For the same 128MB of parity data, a 256MB 8600M GT in a - Core 2 Duo 2.4GHz machine offloaded about 5% of the workload to the GPU (mainly - because having more memory allowed more data to be processed on the video card). - - It is expected that "high end" video cards will have even higher GPU offloading, - but without access to such a video card (yes, some of us can't splurge on that - top-of-the-line video card!), it's mere speculation as to what sort of performance - will occur. :) Maybe someone will send an email with some answers :) - - [3] sometimes the CUDA runtime reports little or no available memory on the video card - for use by programs, which will result in this version not being able to use the - GPU for processing. This problem is probably related to video display acceleration - by the OS, in which case, closing windows and/or applications will probably free - up video memory. It may, however, require a reboot to reset the video card (you - should do this only as a last resort). - -Licensing: - - The source code for the CUDA-specific parts of the par2cmdline-0.4 program is provided - and released under the GPLv2, which is believed to be compatible with NVIDIA's licensing - of the sample source code/libraries in the CUDA SDK, from which the par2 processing - code is based on (but IANAL). - -Building: - - If you're interested in building this version, you will need to set up the following - development environment(s): - - Mac OS X: - - 10.5.2 or later - - Xcode 3.0 or later installed - - TBB 2.1 or later installed - - NVIDIA CUDA 2.0 toolkit installed, including the driver by performing a custom install. - The following assumes it is installed into "/usr/local/cuda". - - NVIDIA CUDA 2.0 SDK installed. The following assumes it is installed into "/Developer/CUDA". - - Windows: - - XPSP2 or later - - Visual C++ Express 2005 installed - - Visual C++ Express 2008 installed - - TBB 2.1 or later installed - - NVIDIA CUDA 2.0 toolkit installed. The following assumes it is installed into "C:\CUDA". - - NVIDIA CUDA 2.0 SDK installed. The following assumes it is installed into - "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK" . - - The following build instructions assume that you have already successfully built the non-CUDA - version of the par2 program. If you haven't done so, it is strongly recommended you do so first, - so that any issues relating to the non-CUDA version are fixed before you try building the CUDA - version (which has its own set of possible build issues). - - Mac building: - - copy the par2_cuda folder into /Developer/CUDA/projects - - open a Terminal window, cd to /Developer/CUDA/projects/par2_cuda - - enter 'make' to build the par2_cuda static library - - cd to your folder. Enter 'configure gpgpu=cuda && make' to build the - par2 program. If it fails to compile, check your Makefile for incorrect paths, fix, try - building again, etc. If it fails to link, check your Makefile for incorrect paths, fix, try - building again, etc. When the par2 program is linked, it will assume that the - libcudart.dylib library is in "/usr/local/cuda/lib". - - copy the libtbb.dylib file into the folder (or wherever you built the par2 - executable) - - run the program. If it fails to run, make sure "/usr/local/cuda/lib/libcudart.dylib" exists. - - if it fails to find any GPU resources for processing, check that you have installed the - runtime correctly including the custom installing of the CUDA driver (which should be at - "/System/Library/Extensions/CUDA.kext"). - - Windows building: - - copy the par2_cuda folder into "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects" - - open the "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects\par2_cuda_lib.vcproj" - file using Visual C++ Express 2005 - - build the 'release' configuration (ignore the warnings about import linkage mismatches - they - are due to TBB's requirement of the DLL version of the CRT whereas CUDA programs are supposed - to link to the static version of the CRT - this causes the mismatch but won't cause crashes or - malfunctions). - - open the par2.vcproj file in the folder using Visual C++ Express 2008 - - build the 'releaseCUDA' configuration - - copy the tbb.dll file into the ReleaseCUDA folder in the folder - - run the program. If it fails to run, make sure cudart.dll is in the %PATH% environment variable - (there should be an entry for "C:\cuda\bin"). - - if it fails to find any GPU resources for processing, check that you have installed the - runtime correctly. - -*** Just to repeat, the NVIDIA CUDA version should be considered experimental. *** - - ---- Installing the pre-built Windows version (32-bit or 64-bit) --- - - -The Windows version is distributed as an executable (par2.exe) which has -built into it (i.e., statically linked) the Intel Threading Building Blocks -2.2 library, built from the tbb22_20090809oss_src.tar.gz distribution. The -Windows version no longer requires a specific version of the C runtime -library because the par2.exe executable is now built by statically linking -with the C runtime library. - -To install, copy the par2.exe file and then invoke it from the command line. - -To uninstall, delete the par2.exe file along with any files from the -distribution folder. - - ---- Installing the pre-built Mac OS X version --- - - -The Mac version is an universal build of the concurrent version -of par2cmdline 0.4 for Mac OS X 10.4 (32-bit binaries) and 10.5 (64-bit -binaries). In other words, the par2 executable file contains both a 32-bit -x86 and a 64-bit x86_64 build of the par2 sources. -It is distributed as an executable (par2) along with the required Intel -Threading Building Blocks 2.2 library (libtbb.dylib). The libtbb.dylib file -is also universal (32-bit and 64-bit versions for x86/x86_64 are inside it). - -To install, place the par2 and libtbb.dylib files in a folder and -invoke them from the command line. - -To uninstall, delete the par2 and libtbb.dylib files along with any -files from the distribution folder. - - ---- Installing the pre-built Linux version --- - - -The Linux versions are a 32-bit i386 and 64-bit x86_64 build of the -concurrent version of par2cmdline 0.4 for GNU/Linux kernel version 2.6 -with GCC 4. It is distributed as an executable (par2) along with the -required Intel Threading Building Blocks 2.2 library (libtbb.so and -libtbb.so.2). There are separate distributions for the 32-bit and -64-bit versions. - -To install, place the par2, libtbb.so and libtbb.so.2 files in a -folder and invoke them from the command line. - -To uninstall, delete the par2, libtbb.so and libtbb.so.2 files along -with any files from the distribution folder. - - ---- Installing the pre-built FreeBSD version --- - - -Both the 32-bit and 64-bit binaries were built using RELEASE 7.0 of FreeBSD. -It is distributed as an executable (par2) along with the required Intel -Threading Building Blocks 2.2 library (libtbb.so). There are separate -distributions for the 32-bit and 64-bit versions. - -To install: copy libtbb.so to /usr/local/lib, copy par2 to a convenient -location, eg, /usr/local/bin, then remove the distribution directory. You -will need superuser permission to copy files to the /usr/local area. - -To uninstall, delete the par2 and libtbb.so files along with any -files from the distribution folder. - - ---- Building and installing on UNIX type systems --- - - -For UNIX or similar systems, the included configure script should be used to -generate a makefile which is then built with a Make utility. Before using -them however, you may need to modify the configure scripts as detailed below. - -Because this version depends on the Intel Threading Building Blocks library, -you will need to tell the build system where the headers and libraries are in -order to compile and link the program. There are 2 ways to do this: use the -tbbvars.sh script included in TBB to add the appropriate environment variables, -or manually modify the Makefile to use the appropriate paths. The tbbvars.sh -file is in the tbboss_src/build directory. To manually modify the -Makefile: - - In `Makefile.am', for Darwin/Mac OS X, change the AM_CXXFLAGS line to: - -AM_CXXFLAGS = -Wall -I../tbb22_20090809oss_src/include -gfull -O3 -fvisibility=hidden -fvisibility-inlines-hidden - - or for other POSIX systems, change the AM_CXXFLAGS line to: - -AM_CXXFLAGS = -Wall -I../tbb22_20090809oss_src/include - -and modify the path to wherever your extracted Intel TBB files are. Note that it -should point at the `include' directory inside the main tbb directory. - -For linking, the file `Makefile.am' has this line: - -LDADD = -lstdc++ -ltbb -L. - -thus the tbb library is already added to the list of libraries to link against. -You will need to have libtbb.a (or libtbb.dylib or libtbb.so etc.) in your -library path (usually /usr/lib). - -Alternatively, if the TBB library is not in a standard library directory (or -on the linker's list of library paths) then add a library path so the linker -can link to the TBB: - -LDADD = -lstdc++ -ltbb -L - -For example: - -LDADD = -lstdc++ -ltbb -L. - -The Mac OS X distribution of this project is built using a relative-path -for the dynamic library. Please see the next section for more information. - -The GNU/Linux distribution of this project is built using a relative-path -for the dynamic library (by passing the "-R $ORIGIN" option to the linker). - - ---- Building and installing on Mac OS X systems --- - - -The Mac version is an universal build of the concurrent version -of par2cmdline 0.4 for Mac OS X 10.4 (32-bit binaries) and 10.5 (64-bit -binaries). In other words, the par2 executable file contains both a 32-bit -x86 and a 64-bit x86_64 build of the par2 sources. -It is distributed as an executable (par2) along with the required Intel -Threading Building Blocks 2.2 library (libtbb.dylib). The libtbb.dylib file -is also universal (32-bit and 64-bit versions for x86/x86_64 are inside it). - -The par2 32-bit executable is built for 10.4, and the 64-bit executable is -built for 10.5, which are then symbol stripped and combined using the lipo -tool. The 64-bit executable needs to be built for 10.5 because the 10.4 -build of the 64-bit executable was found to (1) cause the "fat" executable -to crash when it was run under 10.5, and (2) not be able to correctly read -par2 files when those files resided on a SMB server (ie, a shared folder on -a Windows computer). Combining the mixed-OS executables solves both of these -problems (see the 20080116 version release notes below for details). - -The libtbb.dylib file is built from the TBB 2.2 tbb22_20090809oss_src.tar.gz -distribution. It was built for the x86 and x86_64 architectures -and will therefore run on all Macs that support 10.4 or 10.5. - -Normally, the libtbb.dylib file is built so that for a client program to use -it, it would usually have to be placed in /usr/lib, which would therefore -require administrator privileges to install it onto a Mac OS X system. The -version included in this distribution does not require that it be installed, -and is therefore usable "out of the box". To implement this change, the -macos.gcc.inc file was modified with this line: - -LIB_LINK_FLAGS = -dynamiclib -Wl,-install_name,@executable_path/$@ - -Other required changes are: - -ifeq (intel64,$(arch)) - CPLUS_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 - LINK_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 - LIB_LINK_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 -endif - -ifeq (ia32,$(arch)) - CPLUS = g++-4.0 - C_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 - CPLUS_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 - LINK_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 - LIB_LINK_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 -endif - -To build the executables, configure needs to be invoked in a particular manner for both x86 and x64 builds: - -cd /build - -../configure --build=i686-apple-darwin10.2.0 --host=i686-apple-darwin10.2.0 CXX=g++-4.0 && sed -e 's/CXXFLAGS = -g -O2/CXXFLAGS = #-g -O2/' Makefile > Makefile.tmp && mv Makefile.tmp Makefile && make && strip par2 && mv par2 par2-x86 && make clean - -../configure --build=i686-apple-darwin10.2.0 --host=x86_64-apple-darwin10.2.0 && sed -e 's/CXXFLAGS = -g -O2/CXXFLAGS = #-g -O2/' Makefile > Makefile.tmp && mv Makefile.tmp Makefile && make && strip par2 && mv par2 par2-x86_64 && make clean - -The par2 executable has been symbol stripped (using the 'strip' command line -tool). - - ---- Building and installing on Windows operating systems --- - - -This modified version has been built and tested on Windows XP SP2 using Visual -Studio/C++ 2010 beta 2. It statically links with both the TBB and the C runtime -library and the included project and makefiles are set up for that. - -For Windows, the project file for Visual Studio 2010 has been included. Open -the project file in Visual Studio and go to the project properties window. -For the C/C++ include paths, make sure the path to where you extracted the -Intel TBB files is correct. Similarly for the linker paths. - -To build the 32-bit version, download the source tarball from the website and -open the sln/vcproj project files in the win32 directory with Visual C++ 2010. -You will also need to build the TBB in a modified manner so that it statically -links against the C runtime library and it itself is linked as a static library, -instead of as a DLL. To do this, use the modified TBB makefiles in the -windows-tbb directory. To use the TBB makefile, you'll need to use GNU make, -which can be built from its source tarsal. - -To build the 64-bit version, install the "Windows 2003 Server R2" version -of the platform SDK and open a command line window for a 64-bit Windows XP -build environment (in the Platform SDK program group in the Start Menu). You -can also use any non-Express version of Visual C++. -Change the directory to the par2cmdline-0.4-tbb- directory. Move or -copy the Makefile in the win64 directory to its parent (ie, to the -par2cmdline-0.4-tbb- directory). Then invoke the 'nmake' command to -build the binary. The result should be an executable file named -par2_win64.exe in the par2cmdline-0.4-tbb- directory. This can -then be renamed to par2.exe if so desired. As for the 32-bit version, you -will need to build the TBB in a modified manner. More details are in the -win64 Makefile. - - - ---- Building and installing on FreeBSD --- - - -Instructions: - -[1] build and install TBB -- extract TBB from the source archive. -- on a command line, execute: - - cp -r /include/tbb /usr/local/include - cd && /usr/local/bin/gmake - # change the next line to match your machine's configuration: - cp /build/FreeBSD_em64t_gcc_cc4.1.0_kernel7.0_release/libtbb.so /usr/local/lib - -[2] build and install par2cmdline-0.4-tbb -- extract and build par2cmdline-0.4-tbb using tar, ./configure, and make -- copy built binary to where you want to install it (eg, /usr/local/bin) - -[3] cleanup -- remove and par2cmdline-0.4-tbb source directories - - ---- Technical Details --- - - -All source code modifications have been isolated to blocks that have this form: - -#if WANT_CONCURRENT - - - -#else - - - -#endif - -to make it easier to see what was modified and how it was done. - -The technique used to modify the original code was: - -[1] add timing code to instrument/document the places where concurrency would be of - benefit. The CTimeInterval class was used to time sections of the code. -[2] decide which functions to make concurrent, based on the timing information - obtained in step [1]. -[3] for each function to make concurrent, study it and its sub-functions for - concurrent access problems (shared data points) -[4] read the Intel TBB tutorials and reference manual to learn how to use the - library to convert serial code to concurrent code - -It was then decided to apply concurrency to: - -- loading of recovery packets (par2 files), which necessitated changes to some member - variables in par2repairer.h: - - sourcefilemap [LoadDescriptionPacket, LoadVerificationPacket] - - recoverypacketmap [LoadRecoveryPacket] - - mainpacket [LoadMainPacket] - - creatorpacket [LoadCreatorPacket] - They were changed to use concurrent-safe containers/wrappers. To handle concurrent - access to pointer-based member variables, the pointers are wrapped in atomic - wrappers. tbb::atomic does not have operator-> which is needed to deference - the wrapped pointers so a sub-class of tbb::atomic was created, named - atomic_ptr. For maps and vectors, tbb's concurrent_hash_map and concurrent_vector - were used. - Because DiskFileMap needed to be accessed concurrently, a concurrent version of it - was created (class ConcurrentDiskFileMap) -- source file verification -- repairing data blocks - -In the original version, progress information was written to cout (stdout) in a serial -manner, but the concurrent version would produce garbled overlapping output unless -output was made concurrent-safe. This was achieved in two ways: for simple infrequent -output routines, a simple mutex was used to gate access to cout to only one thread at -a time. For frequent use of cout, such as during the repair process, an atomic integer -variable was used to gate access, but *without* blocking a thread that would have -otherwise been blocked if a mutex had been used instead. The code used is: - - if (0 == cout_in_use.compare_and_swap(outputendindex, 0)) { // <= this version doesn't block - only need 1 thread to write to cout - cout << "Processing: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush; - cout_in_use = 0; - } - -Initially cout_in_use is set to zero so that the first thread to put its value of -outputendindex into cout_in_use will get a zero back from cout_in_use.compare_and_swap() -and therefore enter the 'true block' of the 'if' statement. Other threads that then try -to put their value of outputendindex into cout_in_use while the first thread is still -using cout will fail to do so and so they will skip the 'true block' but they won't block. - -For par2 creation, similar modifications were made to the source code that also allowed -concurrent processing to occur. - -To convert from serial to concurrent operation, for() loops were changed to using Intel -TBB parallel_for() calls, with a functor object (callback) supplied to provide the body -of the parallel for loop. To access member variable in the body of the parallel loop, -new member functions were added so that the functor's operator() could dispatch into the -original object to do the for loop body's processing. - -It should be noted that there are two notable parts of the program that could not be -made concurrent: (1) file verification involves computing MD5 hashes for the entire file -but computing the hash is an inherently serial computation, and (2) computing the Reed- -Solomon matrix for use in creation or repair involves matrix multiplication over a Galois -field, which is also an inherently serial computation and so it too could not be made into -a concurrent operation. - -Nevertheless, the majority of the program's execution time is spent either repairing the -lost data, or in creating the redundancy information for later repair, and both of these -operations were able to be made concurrent with a near twice speedup on the dual core -machines that the concurrent version was tested on. - -Note that it is important that the computer has sufficient memory (1) to allow the caching -of data and (2) to avoid virtual memory swapping, otherwise the creation or repair process -will become I/O bound instead of CPU bound. Computers with 1 to 2GB of RAM should have -enough memory to not be I/O bound when creating or repairing parity/data files. - - ---- Version History --- - - -The changes in the 20100203 version are: - -- modified Makefile.am to use "ARCH_SCALAR" instead of "ARCH" to avoid a FreeBSD name clash -- fixed a 64-bit-only bug in reedsolomon-x86_64-mmx.s where a size of 8 bytes caused a segfault -(forgot to test for zero like the reedsolomon-i686-mmx.s file does); this bug only manifests in -the 64-bit Mac, 64-bit Linux and 64-bit FreeBSD versions; reproduced by creating/repairing a -file of exactly 16384 bytes -- updated to Intel TBB 2.2 (tbb22_20090809oss) -- the Mac build no longer includes the PowerPC variants (I don't use a PowerPC Mac anymore) -- the 32-bit and 64-bit Windows builds of both par2 and the TBB library are now statically -linked against the C runtime library to avoid the problem of requiring the installation of -the correct CRT library (DLL). As well, par2 is statically linked against the TBB library -to allow just one executable file to be installed (i.e., just par2.exe). - -The changes in the 20090203 version are: - -- fixed a bug which affected the Linux and Mac versions whereby repairs would fail if -the file being repaired was short or had one or two bad blocks (because the async write -to the file's last byte was failing). -- on Windows, the program now stores directory paths in par2 files using '/' as the path -separator instead of '\' (as per the Par 2.0 specification document). Note: directory -paths are stored only when the '-d' switch is used. -- merged the sources from the CPU-only and CPU/GPU versions so that both versions now -build from the same set of source files using different 'configure' options (Mac, Linux, -FreeBSD) or project files (Windows). See above for building instructions. - -The changes in the 20081009 version are: - -- added support for NVIDIA CUDA 2.0 technology, which allows the GPU on the video card to - be used to perform some of the processing workload in addition to the CPU on the mainboard. - See the "--- About the NVIDIA CUDA version ---" section in this file for limitations, - requirements, build instructions, licensing, and more information. - -The changes in the 20081005 version are: - -- asynchronous reading of a large number of small files would sometimes not complete which - caused the program to hang. Fixed by reverting to synchronous reading (most of the benefit - of async I/O is from async writing so this change does not affect overall performance). -- some operating systems have limits on the number of open files which was easily exceeded - when a large number of small files are being processed for par2 creation or for repair. - Fixed by closing the source files as soon as they are no longer needed to be opened (which - is determined by counting how many data blocks the file provides for creation/repair). - -The changes in the 20080919 version are: - -- added more information to a few of the error messages to make it easier to specify - block counts, etc. when using the -d option. -- redundancy can now be specified using floating point values instead of integral values, - eg, 8.5% instead of 8% or 9%. -- added the -0 option to create dummy par2 files. This was done so that the actual size - of the par2 files can be quickly determined. For example, suppose you wish to fill up - a CD-R's or DVD-R's remaining empty space with par2 files of the files filling up the - disc, then by using the -0 option, you can quickly work out whether the par2 files - will fit and by how much, which in turn allows you to maximize the use of the remaining - empty space (you would alter the block count number and/or size so that the optimal - number of blocks are created to fill up the remaining space). To determine how much - CD-R or DVD-R space you have to fill, find out how many blocks your blank disc has - (using a burning program such as ImgBurn [Windows]) and how many blocks your data - would occupy when burned (using an image creation program such as mkisofs [all - platforms] which has a handy -print-size option). ImgBurn [Windows] can also tell - you how many blocks you have for filling if you use its 'build' command. - WARNING: be careful when using this command that you don't burn the dummy par2 files - that it creates because they don't have any valid data in them. Remember, they are - created only to determine the actual size of the real par2 files that would be - created if you had not used the -0 option. -- added MMX-based code from Paul Houle's phpar2_12src version of par2cmdline-0.4. As - a result, the repair and creation of par2 files using x86 or x86_64 MMX code is about - 20% faster than the scalar version in singlethreaded testing. Multithreaded testing - showed no noticable improvement (ie, YMMV). The scalar version is used if your CPU - is not MMX capable. MMX CPUs: Intel Pentium II and later, AMD Athlon64 and later. -- added asynchronous I/O for platforms that support such I/O: Mac OS X, Windows, - GNU/Linux. This results in a small (~1-5%) improvement in throughput, especially for - repairing. Unfortunately, using async I/O causes a crash under FreeBSD, so the - pre-built binaries are built to only use synchronous I/O. -- first release of 32-bit and 64-bit PowerPC binaries for Mac OS X. The 32-bit version - requires at least 10.4, and the 64-bit version requires at least 10.5. The 64-bit - version is UNTESTED (because of lack of access to a G5 Mac). -- first release of a 64-bit x86_64 binary for GNU/Linux. Tested under the 64-bit - version of Gentoo 2008.0. -- the 64-bit Windows binary is built using the tbb20_20080408oss release of the TBB; - the Mac, GNU/Linux, FreeBSD and 32-bit Windows binaries are built using the - tbb21_009oss release of the TBB. The tbb21_009oss release does not support the - VC7.1 runtime libraries on Win64 so it was necessary to fallback to a previous - version for the Windows 64-bit binary. - -The changes in the 20080420 version are: - -- added the -t0 option to allow verification to be done serially but still perform - repair concurrently, and for creation, MD5 checksumming will be done serially - and par2 data creation will be done concurrently. The default is to perform - all operations concurrently, so if you want the new behaviour, you will need to - manually specify -t0 on the command line or build your own custom version of - the executable. -- if the realpath() API returned NULL, the par2 files created would end up with - the name of the first file in the list of files to create par2 files for. Fixed. -- no longer includes duplicate file names in the list of files to create redundancy - data for (which would otherwise bloat the .par2 files) -- now displays the instruction set being executed -- updated to use the tbb20_017oss_src.tar.gz version of the Intel TBB library. - -The changes in the 20080203 version are: - -- the Linux version wasn't working because it was not built correctly: the - reedsolomon-inner-i386-posix.s was using an incorrect include directive. Fixed. - *** WARNING *** - A consequence of this error is that par2 files created with the 20080116 Linux - binary contain incorrect repair data and therefore cannot be used to repair - data files. The par2 files will need to be created again using either the - 20071128 build of the Linux binary or this build of it. - *** WARNING *** -- tweaked the Makefile and par2cmdline.h to allow for building under FreeBSD. -- first release of 32-bit and 64-bit binaries for FreeBSD (built under RELEASE 6.2). -- updated to use the 20080115 version of the Intel TBB library. - -The changes in the 20080116 version are: - -- the initial processing (creation) and verification (repair) of target files - is now performed serially because of complaints that concurrent processing - was causing disk thrashing. Since this part of the program's operation is - mostly I/O bound, the change back to serial processing is a reasonable change. -- full paths are now only displayed when a -d parameter is given to the - program, otherwise the original behavior of displaying just the file name - now occurs. -- Unicode support was added. This requires some explanation. - - Windows version: previous versions processed file names and directory - paths using the default code page for non-Unicode programs, which is - typically whatever the current locale setting is. In other words, - file names that had characters that could not be represented in the - default code page ended up being mangled by the program, resulting - in .par2 files which contained mangled file names (directory names - also suffered mangling). Such .par2 files could not be used on other - computers unless they also used the same code page, which for POSIX - systems is very unlikely. The correct solution is to store and retrieve - all file names and directory paths using a Unicode representation. - To keep some backward compatibility, the names should be stored in - an 8-bit-per-character format (so that older .par2 files can still - be processed by the program), so decomposed (a.k.a. composite) UTF-8 - was chosen as the canonical file name encoding for the storage of - file names and directory paths in .par2 files. - To implement this change, the Windows version now takes all file - names from the operating system as precomposed UTF-16 and converts - them to decomposed UTF-8 strings which are stored in memory and - in .par2 files. If the operating system needs to use the string, - it is converted back into precomposed UTF-16 and then passed to - the OS for use. - - POSIX version: it is assumed that the operating system will deliver - and accept decomposed (a.k.a. composite) UTF-8 characters to/from - the program so no conversion is performed. Darwin / Mac OS X is - one such system that passes and accepts UTF-8 character strings, so - the Mac OS X version of the program works correctly with .par2 - files containing Unicode file names. If the operating system - does not deliver nor accept decomposed UTF-8 character strings, - this version (and previous versions) will not create .par2 files - that contain Unicode file names or directory paths, and which - will cause mangled file/directory names when used on other - operating systems. - - Summary: - [1] for .par2 files created on Windows using a version of - this program prior to this version and which contain non-ASCII - characters (characters outside the range of 0 - 127 (0x00 - 0x7F) - in numeric value, this program will be able to use such files - but will probably complain about missing files or will create - repaired files using the wrong file name or directory path, ie, - file name mangling will occur. - [2] for .par2 files created on UTF-8 based operating systems - using a prior version of this program, this version will be - able to correctly use such files (ie, the changes made to the - program should not cause any change in behavior, and no file - name mangling will occur). - [3] for .par2 files created on non-UTF-8 based operating systems - using a prior version of this program, this version will be - able to use such files but file name mangling will occur. - [4] for .par2 files created on UTF-8 based operating systems - using this version of this program, file name mangling will - not occur. - [5] for .par2 files created on non-UTF-8 based operating systems - using this version of this program, file name mangling will - occur. - -- split up the reedsolomon-inner.s file so that it builds - correctly under Darwin and other POSIX systems. -- changed the way the pre-built Mac OS X version is built because - the 64-bit version built under 10.4 (1) crashes when it is run - under 10.5, and (2) does not read par2 files when the files - reside on a SMB server (ie, a shared folder on a Windows - computer) because 10.4's SMB client software appears to - incorrectly service 64-bit client programs. These problems only - occurred with the 64-bit version; the 32-bit version works - correctly. - - To solve both of these problems, the pre-built executable is now - released containing both a 32-bit executable built under 10.4 - and a 64-bit executable built under 10.5. When run under 10.4, - the 64-bit executable does not execute because it is linked - against the 10.5 system libraries, so under 10.4, only the - 32-bit executable is executed, which solves problem (2). When - run under 10.5 on a 64-bit x86 computer, the 64-bit executable - executes, which solves problem (1), and because 10.5's SMB - client correctly services 64-bit client programs, problem (2) - is solved. - -The changes in the 20071128 version are: - -- if par2 was asked to verify/repair with just a single .par2 file, it would - crash. Fixed. -- built for GNU/Linux using the Gentoo distribution (i386 version). -- updated to use the 20071030 version of the Intel TBB library. - -The changes in the 20071121 version are: - -- changed several concurrent loops from using TBB's parallel_for to - parallel_while so that files will be processed in a sequential (but - still concurrent/threaded) manner. For example, 100 files were - previously processed on dual core machines as: - Thread 1: file 1, file 2, file 3, ..., file 50 - Thread 2: file 50, file 51, file 52, ..., file 100 - which caused hard disk head thrashing. Now the threads will - process the files from file 1 to file 100 on a - first-come-first-served basis. -- limited the rate at which cout was called to at most 10 times per - second. -- when building for i386 using GCC, this version will now build - with an assembler version of the inner Reed-Solomon loop because - the code generated by GCC was not as fast/small as the Visual - C++ version. Doing this should bring the GCC-built (POSIX) - version's speed up to that of the Visual C++ (Windows) version. -- for canonicalising paths on POSIX systems, the program will now - try to use the realpath() API, if it's available, instead of the - fragile code in the original version. -- on POSIX systems, attempting to use a parameter of "-d." for par2 - creation would cause the program to fail because it was not - resolving a partial path to a canonical full path. Fixed. - -The changes in the 20071022 version are: - -- synchronised the sources with the version of par2cmdline in the CVS at -- built against the 20070927 version of the Intel TBB -- tweaked the inner loop of the Reed Solomon code so that the compiler - will produce faster/better/smaller code (which may or may not speed up - the program). -- added support for creating and repairing data files in directory trees - via the new -d command line switch. - - The original modifications for this were done by Pacer: - - - - This version defaults to the original behaviour of par2cmdline: if no - -d switch is provided then the data files are expected to be in the same - directory that the .par2 files are in. - - Providing a -d switch will change the way that par2cmdline behaves as follows. - For par2 creation, any file inside the provided will have - its sub-path stored in the par2 files. For par2 repair, files for - verification/repair will be searched for inside the provided . - - Example: - - in /users/home/vincent/pictures/ there is - 2007_01_vacation_fiji - 01.jpg - 02.jpg - 03.jpg - 04.jpg - 2007_03_business_trip_usa - 01.jpg - 02.jpg - 2007_06_wedding - 01.jpg - 02.jpg - 03.jpg - 04.jpg - 05.jpg - 06.jpg - - Using the command: - -./par2 c -d/users/home/vincent/pictures/ /users/home/vincent/pictures.par2 /users/home/vincent/pictures - - will create par2 files in /users/home/vincent containing sub-paths such as: - - 2007_01_vacation_fiji/01.jpg - 2007_01_vacation_fiji/02.jpg - 2007_01_vacation_fiji/03.jpg - 2007_01_vacation_fiji/04.jpg - 2007_03_business_trip_usa/01.jpg - 2007_03_business_trip_usa/02.jpg - 2007_06_wedding/01.jpg - etc. etc. - - If you later try to repair the files which are now in /users/home/joe/pictures, - you would use the command: - - ./par2 r -d/users/home/joe/pictures/ /users/home/joe/pictures.par2 - - The par2 file could be anywhere on your disk: as long as the -d - switch specifies the root of the files, the verification/repair will occur correctly. - - Notes: - - [1] the directory given to -d does not need to have a trailing '/' character. - [2] on Windows, either / or \ can be used. - [3] partial paths can be used. For example, if the current directory is - /users/home/vincent, then this be used instead of the above command: - - ./par2 c -dpictures pictures.par2 pictures - - [4] if a directory has spaces or other characters that need escaping from the - shell then the use of double quotes is recommended. For example: - - ./par2 c "-dpicture collection" "picture collection.par2" "picture collection" - - -The changes in the 20070927 version are: - -- applied a fix for a bug reported by user 'shenhanc' in -Par2CreatorSourceFile.cpp where a loop variable would not get -incremented when silent output was requested. - -The changes in the 20070926 version are: - -- fixed an integer overflow bug in Par2CreatorSourceFile.cpp which resulted -in incorrect MD5 hashes being stored in par2 files when they were created -from source files that were larger than or equal to 4GB in size. This bug -affected all 32-bit builds of the program. It did not affect the 64-bit -builds on those platforms where sizeof(size_t) == 8. - -The changes in the 20070924 version are: - -- the original par2cmdline-0.4 sources were not able to process files -larger than 2GB on the Win32 platform because diskfile.cpp used the -stat() function which only returns a signed 32-bit number on Win32. -This was changed to use _stati64() which returns a proper 64-bit file -size. Note that the FAT32 file system from the Windows 95 era does not -support files larger than 1 GB so this change is really applicable only -to files on NTFS disks - the default file system on Windows 2000/XP/Vista. - -The changes in the 20070831 version are: - -- modified to utilise Intel TBB 2.0. - - - -Vincent Tan. -February 03, 2010. - -// -// Modifications for concurrent processing, Unicode support, and hierarchial -// directory support are Copyright (c) 2007-2010 Vincent Tan. -// Search for "#if WANT_CONCURRENT" for concurrent code. -// Concurrent processing utilises Intel Thread Building Blocks 2.2, -// Copyright (c) 2007-2009 Intel Corp. -// diff --git a/main/win/par2/x64/par2.exe b/main/win/par2/x64/par2.exe deleted file mode 100755 index 0650433eec84842ec69c2bd10b1402779f357f83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515072 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

        Hll%UU=2M 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¬r)+%GG)N_w^-TrbO7*RwB- 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

        DQO-)kods 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 diff --git a/main/win/unrar/UnRAR.exe b/main/win/unrar/UnRAR.exe deleted file mode 100644 index 7c4bac47201d879fd14cd7e9bd1f05b7fbe41e4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246272 zcmeEvdwdkt+5gP$CRxamS!98rL87i2Ow`Dt1`;qp2#66kw++h83#QxDTf=U!n!?7} z4LcbohDs1yOR1N>*ixkxLr@4CE=jlu2wt#Qi`v?=E?5x7q$2zKK4*4wLHqvtem-x1 zfBgb8bFR;M&U2pgJkNQ~nc3U#Y7&fsAeeAPqk_3@>`r#i`-}7MlefK={(8Heed+$%L_CA#U!-vuf?kG)v@Zm-GUpHjP zV0#R7>y+R9?p*rr?)dd_^_1?@h<{w|?EV{`U(G4(ewN1zyZ?#ju}|B&zryoe`mXLO zoG-sdKm7xut8T@Z@I1mT7UuDC6pcU&-t$>JbE*lQ4k=R}_T z^(_cn5j>73QG>z=Cg4GTL@)lg5h46v^RNkY%&+4GsVr6C&)x?wzH7KqSj0mnVdf(| zF!1Ix35!w%q3L6TkTx)9K+I`GYyDGz=XgT(U;JI?x&KiQ@>04`i14Dm_I5(Alr9K& zUst{89?w03;GT*!>U#m62k`9omk)wmrxz2}?M6m6I0!fk7ZE4*{pAZn=(_5~)%PJu z?<*RtM&z3Bl*_-a`u+zVM!}g^A|EsmuEO)#@025~{{P?qA_dekyJ=j=H?hQ}p7zda zm?ipprh8L;j~SMFFY-NRT;R2A6od7_2L)ll4wK;PxyO4YGON8~ka?MRln4MIraoX(yI1`b^yI3Bp;3TPl!W`!7H$v&=s-Jq|P>} zh34F@8i#tQ{WC*_R%=MlJy>HA37Jt;n9$Szs>$EP+jaKoq3S^?T9s zGsgNy`Irw|U5lq2N|z4{B~JA~M}fUeWM3WzR*l3J>T1p*FH>oCEtOS@>^Aj)Qf5zO z^G6_&qKGKGh@uzaRTW-U?oN`P_%Adsx4m$;Ab6#~&k?Cq>(?PxnOpyJfb@)V*AD@L z*OsA+a>qy)TYN7n>@r7w+))2A%H>JbKghE$xzE@33S!wy?m{;%2VKoyqyT^*+_`YU{JHY3oPKkKI9#pEwg^HX zy^~3=zeBRSHrDm4ZetRsy`` zU6yg7@C=CKswAx~8^cNzNW~Ne(J?cRA*!rh1wic8Z=zAaxg=*T@s;Gi7;IHqT8iR> z-V%gxGNRkTk3t1|-3+c`G)*3`r{zZCT(zSaBVP-ys~?T zC|h>~%+TeC5`P5tNR0vD@5{TsL^ECQodM2b*Xuak9OG@zgg|uZjq*2XKh2hF?Y1#X z$Ev$CcgmqOUrq_6+oNKs*W!EBQ0PtcJ!+ieNhU^{k=s-IyU2A_f@T^6c?Cr3dG`tq z^-dYD6~w3~Vo;mOKuT_-GJ@9@IO!Qw&YndF(LGRZ2oxA5M_v?vdY(_uL&YaBBh`A& z`<$84S}~H39qet$V{ceJ8O>Cxjd^(ZKE9<=YS~c6!>J^B4 zu692$1jA8Kj6u{2M><)D`$!BnHULV)q0nbW z-^XHbwL-D3Lt$i5q5+9=+p{Pu1RGW4NzLuS)hiGPHfp?LLs#gt#85a11yRS>whm?O z!PQUlBE)Mo&MHxtvYQ(PL0dYq!fhP_RG)DI)e818jlv$a1E zc8u7g055kxCIy<1v}F?}wpPzd zk^2k8g$C=yq27!AhoQ)v;>2Rnn?j1L-QYh=iY$`A)feeQ9N58LS4~2($_}x z7d*pTsY8_kJ~~v4`XQ=~oKaTmYP7fnjPl1f!9NFBu8v^fKCoEiM!DPL&DKS~=uMBq zywum$1*}I`{|n$n5U#ud5GhUJl!=L1PMJ6dvnMM>=nWmuLB2M^Oz>U?DoAhb4pYHyCUAZ^m zJBr)C65|HNt){3hQ$vB>94r_b?bYHj;3Pkxk8`J(Yb=>lObWu`eP2hT$`n%^3tgW> zzDiE^wu#T<&O{nmwbpLwEJTkmqYKSEWrisbsu@f|pdLUXMg@pdnrEmgsUwUbXK@M3 zOClJSUW4L0?H?Q1KIC_IfB9{>Kz^s|^1I=g55P96$DUm!xO|_8%r=_DxHriW3S*`S z>Qa;cn9j9t{X<(QYNkt^Y>Kf@@Iq91Qv%04F}r6vm>D8B6<3;?Qc+%vF&|HzWOJVu z1;^n^rR=AIF=~uzGsN6NbIp)U^!0#~jqdF@Y?yMkbT#HzN{2}j)XCZ%qIRp$kTe5m z^U)_k)GJ|sJIe{S)PydK51jQ}0n^1sl&pnl(u*F$K&+j?7YmEgIM$g&wl_H{UMA<|hTtUI>d2k~I?FgzJK*JJ8V*%vgPR`FR zr+S(hyGj3gGr1l=OjV}b#`So^og^|X3oxSKXNW8^bi?Bzf@ykyAI-$`MRqe+KO1&& zJ~Ayp_c&#LhY<$ct1Gy`P8N0)rJtUO4Fd8B7BztetL2XY4sDXCo&AOer8#+g~Gn1iqN&TL2V!$C@fnjJJ z`C6h;b_-C4Dti}zq2qshHy(0$2oQq?vNiBk7fh<5XY0uduzH94LsH=HnB6fWRr3D{ z5e&}AUK{q8uwkFkvu|9|g!aa>Ypw%pVKzIp74|s^ApfAlB8U@rqMxWM*w0-A~CcEbJ>NoQ#{Sd)<1<_pzz&@%gaoH^z_c~2GBs- z`~Z-9SQlv(K(B=T{xlb951Z7aa^h(XjM%%9s|HU|Iu<46AV=?_MDou;j!vykWW}j`-{}n zm{h2v<*ega&YGPWut40W$|e2WJN zvI3Njt;V4OY%Ko`LRxD~hja#l>79wKv@9HpH7R62ExndrgW$_+&^h%@wz3-`3wVJz(P!V!*8kgv*u zYssn)t|bdDxRxYoa4k3C*OCbzTuTO>zMNCW1lMxQeJxq;!L@66jt4C(YsqkqnTKo1 z9#z(oZQ5Bs6S+xXTV-t#LY?*bxRaPu>SG1(`~a4^K%@8JLLum8=0@SO(9@!4kc-s|-2PEJbmNxtkG>8#jpRAW-Mj4a z+QDig4N-2_k`el{A$M=>^~(mUeDRQbsOAdyi6KDd@@a8N;4bEpAig>qRR_}`?pAQY zKr>gsXSSTCoZNZ}6HfHnTrM`Q7E+AOqq~a@$3uOR7uiBZ47`ZMi;U8XeDSy_^qRrF zog~|XGiwZV1=-o�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 diff --git a/main/win/unrar/license.txt b/main/win/unrar/license.txt deleted file mode 100644 index afbdc87..0000000 --- a/main/win/unrar/license.txt +++ /dev/null @@ -1,34 +0,0 @@ - ****** ***** ****** UnRAR - free utility for RAR archives - ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ****** ******* ****** License for use and distribution of - ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ** ** ** ** ** ** FREEWARE version - ~~~~~~~~~~~~~~~~ - - The UnRAR utility is freeware. This means: - - 1. All copyrights to RAR and the utility UnRAR are exclusively - owned by the author - Alexander Roshal. - - 2. The UnRAR utility may be freely distributed. It is allowed - to distribute UnRAR inside of other software packages. - - 3. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS". - NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT - YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, - DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING - OR MISUSING THIS SOFTWARE. - - 4. Neither RAR binary code, WinRAR binary code, UnRAR source or UnRAR - binary code may be used or reverse engineered to re-create the RAR - compression algorithm, which is proprietary, without written - permission of the author. - - 5. If you don't agree with terms of the license you must remove - UnRAR files from your storage devices and cease to use the - utility. - - Thank you for your interest in RAR and UnRAR. - - - Alexander L. Roshal \ No newline at end of file diff --git a/main/win/unrar/x64/UnRAR.exe b/main/win/unrar/x64/UnRAR.exe deleted file mode 100644 index 57d8cba9653bd53b21d194ecc8d64308816f8f7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262144 zcmeFad3aPs7B_r5-5~)IZa{+UG}t=P00!fdq=WViH*i}!zzm=`Za8Sf8AciC#tot4 z?S^z;E~2>245QABI?mvNgF=D`Ss)37C4eG|3o2?g4T|7k*zE6js&01z>ifLkAK!l; z&qLp;Q&p!jR3}Vw{_);B?i`t&-OXj8 z?tSKwLlc)D+K~J|e*3)}CLun4`-}~@^6vv1rr>+yfqOR;;d|e2pWbjIz7v-p-q6b7 zGd2vucl`GIH~gB%ALifR+&z5;;XJnm6U!y(j)h&M%V%D2T{7*6G)(HA)>V>rrAgA~ zHV!^;CBiv8=;06w1C&lb_?P@rh%*l`yX2`#7P86$Dv%^URMvt}P#QSiF5N+aSq@2? zg|EjUtsF)G>)#QFbUCUl_+OedFbVs=`5sA=mQttw!oQLJJMZ@+ZFL)v6G7DWbMiYS zY1+uyciis3U6O)-L>}Oj?!k8tzMcMgK=nwGP1^r15~e|-2IH%eWOe-WNK)O%St28E zBibstkp8=$;tFGFQPH#lg?STuCG&?W^Nkaquf)6_S z2hIyVn4S^HE-LF1$P_tO+8VcR)r`mXqEvZdUF`OqlC)Ke-0aG{LDLU8HRA)#%<82X zC)qzU($5(h4hVi#Fq{}oKtVnFV<_k&;E3FwO`es z+MYjCE%?5XxI9g3R$a~?6N!WtnF=<}$k8IR`fA2^$E(`MVsOZz{m^EbQPp-H#&k_% z9z;S8Zv`w^OTCTA21IJxvL%Ua{k08QTiBtSCFvb0NafzsOrOic?m-PpHDeFO^4Pk& zY|>JB&5~Z@D9ge&;L*&|r)MC3IKPohj^@xpch{Ux;viM9exTbpK%AHwecog^(4q})xUXa;CR56Gco zXc0TyB~6OO5Q;ABa=Rpz%JL&GB39~>7yS+2;Q92 z^fj|je3mA$r8lK$f3=cm5AXA%vQ~B#sE%JLTD6R)SgrC8WdkU!zev09th98NNKcb| z=FP5YUgM@5uknYzUSp2aYkYBAqa~Y>f-F?e<#RXkCgs!Es7zL-DAz-XJU=f)k^7x$ z^mEOKl@}gYtKVSg6xOdSFz%mzA0f z@KZCNydQF?8Qa*c5DWCUKLZ&^Vf!L)9RbQtIi{UTBnbIHwdgGpPC3-y##KwL&+2Td#6vc@uRN?)ry|VR=nBgb!k$;1ju^8?SJY2`pC~^Q1 zwfL{bIy6bys#z>cb{Ev>auOa2=57?GFZ~Y35r+lc|ZL?VqGcrWQT+QXr#= z^UiiWoP#7=;5^hy%=Y)JRKu?lzbOl0wsGM~NxyCOhU2SyU}Fo^rXP}K5wMs3xO zZd#%qj0qeA*a=mjnP≷Q7)gZPH2`sn=Z6t5Eq@FO zwn9a-gFhq^afcQelj%cpMYzu2Lo?2Y0Z?JDV;|dSSanSAG|wuN|BpJ-YwXpGqn_x$ zhohG~!7r&Z*xz6dmlqyTN;U>EU>e;F`O%E|nM%naIkbz!W#_k=d4o;xwdFYUm=9tI zrsR$eAiOrgELUWHN9L7#9|9YU=&Zby6#%FrnANlhzjS~f}>{U$o zn)@N1`F$;a5;C{4m7tS2_Yg9p9U(6E+t|Yin-qVL$_EN}5z-N96W*;U&m8wLAw%;SK00>^wS zVMeZ}-hsN>BF36!P-BdECQZ5i24!-M=N~9K>A#Tl{QblcjoXh#`YfMa(h4_fk&vqZ zS-b`lV<}imIvm;t>Twv2XUGpX1Xn>>E)BlT4N3pinz4*e=z2p2*GH{v0_J7vtLZIJ zg7WJ96uv=(_tub#tyJaL_g0qMzlh&=Tqli|CWk6v8+4%RZJ}~lsJ3<|RBQgqO+>Z$ zuiQo)A#B8~aU}dO!mb;_CQn5h*Gx{ZMvPC+b6W{;tP$ znksVwxuH5a{5psWzAX&J&_57CFXTmaVNcG^E_L14RU}`5;lz3IDaJS|NF(Y2n8*fS zOae3+a%nDhtxN|wzU^Qax-l8|d}5P4t8Jd@H(h@Qf0K+XBsLYm(2`dlq2PrGf_r~oI;kKz%?fXSFkLF?YWyot*k+sR0wOb^t{gq8>3c1MCkra6i?^ZH-jV9{g zJj`}T_27egmQll~aFVo5-`JA$1S*V>>j}^gqt~r-qt{*g6iMIm@(z9W5}%dG{^Z)1wr zf$;)NcKu6e0onDUiC2gw)~X#%v{4i97*EoG;5AT^N(E8kp(Tr|*~W!|3M-38vSa zw4as2-p5FVqQM01GaA?S2bXE_m&e}u4wZl$G<~m@e={aAGdlvNGbisau#9pUlSn=( zDAq%b?I;D)gX>+)5u_c@o+hx0pQ=S>(v)%(DT*bQtdA}|=d?(a2OJ*Gw8 zq6K?&VULR?sk(fyTKyuaDSXJX#)oV$d`K_j!>#J-7s;4LjLb4$fhNPrFE4hcx8mrmAJ=HHVi1NJ}@}tVReExk>AT!d>MUxP93=48G>@UO?v1m;)@^ zT1voLd6Bd-5R%gnpG@(|!3TBD0B`VVLA&rFbCF7rVTkAnL04aqm27K`ECk{{X7y<_ z!IJRM{P=Toxn@L)rjd-27v}JB@Ypb%lahds2w)o2A$FDAdUP(OYy>Z(qtHyshEnG0Aw$D3^=jjimpQ$!B;ZD~~NZH*mv!mSV|tyrfH zSkM&#S}n}~Rqdf{PP zbRL=e1E7Lf!2?7^E7SNF-z~o$};Y3r*P-e z*>$4jsFReEaaIMKBg@Hz>Oi$M`WUTCf}igXp4=}#QP&u(bzoJJcAtE_sy70e{w_7t z=*Ggj#;wsRN-Is9J1ELMTx*?3aqU;lvLmJY6~}kX*Lf#e-MZ^p9+G~aS~&t^Vc^ahTbr#oExuwYe1K_5Eug2HL{!k;Ttp zPn}NT%oLSKXs5{g1E*~=e5btVD}vOMsRDl$fUH!3CaXY^C~%V%Ef!Iq6)h3b(N@$g zq9d(nsfZ3i6xPYjuHqUgNMpMDUX1H!sYh$NfpSx`2j{s;(qy&1dLgYgqpGXaQBb|G zC&Kb-)#a{?EF@1Ng^MB!srTeHs;eNfFcU#zA#ZnNVH<|Cv5>bpvT!dVnz_V7u&1b5 zObUXG$ZK~1f={*hyn>Isda}!+eDVNJDyl?BI#Eirz?N)*yS)09LID@aSj#+rI*~wo zUUOpii1(A%{hog?oS(#9i#U6WW?w=*t3{U32o^m{-R3nu)(nwU%#$>E0){5!$?M(* zRaJJBMna>{T-BQA2#R_%kZIit)rpQJ2~M#6YQaBG<5nk_HTtmWV-YUJpMnc%W00&3o+e%YsFh zVnQz}2-rQ<1;L^c`sM{kUv&^htsi!7_Q)7k2w1@!H(+$ywM1R8ND6G$sv3zs@d1^( z8we_k3j_AbNFidtP#MYB^u{zqq`;?Q)I*~ek@A8%-|FF`RJmTcp=LkY!PdQKElWZ! zEEFWZGKnmA^@ZO=i@f4;^6#6jJo*~x>#s?zSlUpUmR=9NK{>ff#XwezR?x)h&nAV( zU_ZomVj3bXhmlgmc0nSRD(icrCgh~aQ4YONOc5rL*WP4lXL)fQz)cWKTe&&*d(B)% z(-|RM1c#*Fp6SQ>tCbCd3y~WbMWTOycf=-P`F{)Y`V5^kt+%SKuL~-qC@+A~I%!BP zEdW*1JD>G|Kq)1g0{sZld#^(oz|KeaWPkQNoL&b=;hS%hu@QWmd&T5sbyy}5POYke za8|3XJhghJ%UNEy*=Op4z#Z(H-ylZ>3*vY>r53!CL1^J+;2iMuh522Kg>!&6;C614 zKtQbq{QX>?U6%tVCKAU`Vjp>pPPF82B4;gUNjvV?I)SDi&$srAkBOci0umU$H1OI|j=Sj5M<$=GVEj-YR zN}aIzM+vS7XW7p za7X}L04Oz?TyBU;qQMZD1tZbDge9VrksH%GQTILPB=vJdZ|7k_-D%FOWfH7)!O<#I zWr(=I2{t%VslO70bV&h@=aNtvl!N;|+%0nGJ)0y|ov`6o4uL|cCJjH7unm;syX18= zq3VQ#GAwx+zf~vFDI9(paG10&-_3i2NX7;S8*-SlXB~%9vp+$dpsFqf_>%zCrvTFg zU}FlfLI7G)fLj6BkiZbEEPk7yb2BOE?tOi=uM3h>@}JjdTtfQT#K??wDW z?0G<-Doz1r2tY{+aDxDprU3r{Aa-e|%G#%OR7U%?n9%qjk$911j#SCv0#%n3;8ZW( zGIFO0_8t^~%oN}R0I>#WM3^H-fK@YB(6U%R>Bn-ISnma{A~sOO){2-@#3qW^P!TH=v0)-MS;Sl-_6TCai5V`>^aB{k zvv$afSS8Q-@Nn9Le0Obe}1E?k;lMI&+o8yqzln>LUx0CnZe8Sb1Qg#KXjBKCkS4s)E zLBecwR;G#qc3`GW(jRs_D2HD`7I{rYH^P?RqQ{(-;fFK*c0HDo{MMTOb(H6~nyl&4Ds(xD|jcTtjf0akgPG z&&!kt$Ri1!PAQ<>jNj41m%=94_SxOgD#XutF*dm@B))vuTcNBJugTiV(;|NIb0+)6 zA}w|oC{~L{2Kv+_&LB9nJTuQ_5u$3J@1~#Yj%6Si+ zkKHv59Pd2MU716)nzVsoOc}`HvuRQED(zw5L)#bl(9T5-9RU-Z8%-Snd&4gTb(YMB zDy^)v$P=8O7?QNCBCl~Z*o!DFuPC}yL}{5tQF1k}2X+ZfpJi;9*UWSIcYg~{2s&s3 zz!mU-f+dr&-^XRcgSueb+<&dH_)rk(%nf>}8=gnxTH^^0RBBw5q<#g*;_+sOKUXtC zu9X1c?2a>0hiczMgpMdg-XzD1qiFv>lnGg?jFJV6&><1lP6xje{EIO>FY&XB_h4{usIBD=@+|R5cs7 z5TjEv>kit3pYyG~A~qULtb|uNqKh*v<(TOA5Rn*q0r2AC0wJhJUo+CH>eHmixP-hW z{UL-ZBjfBz`xjjVzGUxxg6v;N5EsR(e-CCE?ZSZWIg%nUUtvHS&FuPXz_Qw_aEu4D zrxc%=oG-|emz*!ihnH00wDp4dVn6?oGQB&Si@|{u;0XY%@y0i5{LrP#SSq<6lH=*T zHrn7I6lGv{N7IGn99c#_548x(kmN#(j_zQ)ZmO2QL(}UsHJd?pF5K{B;t`7h8eDP)tr_080w@oVx|C1Up@r1QowC6wYz^%bnb1VD$RRrbLI9Retk;~6$ z`e9q(>y)av7zmV-GlB87{%o*p%W%%d~wdltB z*4hiaqad}iu0xgzV?XzRpU}*I)5MI)0)14)kBp40y&CIVwj|#Y!3jgyo>DAdEk+Ha zri?&Susb#s3OibLF%Xm%$d8z5h;*!yo!!Kqy;io z+F}@iv^mRN>{n-zcs@;G5;hO}?!OQOA$cCg8f?%t2Le|ai~6GYPd3h{?G^hiV>4AN z2R6^mM>*!H5M;~}i>O}Zc%8#vX?ZYx=2BW@E5Q=UugI&PCUS!(UGlQ}8k!F()eGu0 zbJ4_U2r579tr)P`cR@=vb{gO_aDsge$qFWb^f;DgM0Lh0zH`(aEi)ETleNgAm1tAb zq8j|7)JASV2+9s3n;LzN6V?`2f?wFw>gVn`j|#oMml&b{Yd@7Tp5~2)@~)W*R3TRz zK2mT4alIhWBT2`-_d_xCwi?2>{)nP&yP%R6y$P&8v=uLMqKN<6+A^SJuV0+%UZ1&$ z4y&*uB^|w7x)i-UZaT;aANO~qdGqlIjZNOpA?O`!VP7O-JrP@Ji}$Vd5Z)U)@UrKC z@UlA1SnML1BVitK0JTCXohWN4;`j&J2sC38=;H2TbetlFdKNtONFzj zMsxhDWWCneR({6h8Y+ujr?IM`6J|wkf5=~q-vD86 zOc)O3;mv_~c$Z%$3Tofwl*CsitLK%TQ(qdIM;j6mD77-oTMdd9QQ%E4+o9A?ppM8)YXWV@iSX$I8eU58Lnw4Ljp;s?U7-F?^Jo=kd#4LV{8=ibkmM zK0kGm+$e}mD5fnI?!&~{RCuRolZ_4@))YX>*w)8{>M_!f=BG4{6DevGJ^C0aQ0N|# zPrU)$im_8KkoGYr-cF`4R7|D2WsY55Qx8L!=4>Y|7maN+2_All=Ojl&4UVW_D3ns_ z*(D~!NE6xDBRhgkYN=CVSNzRFbA-M0F9ZoQMmgV+2l6JiRODvW$y8`Il*TqaHYV9@ zEA{uuR1nHj$yjHTDU~qdECbC%gjog7m!}bX0q5%=z=0E+$ZTm6jwy=g2R58qWA_7I z9y%2D$&0k|<5OAPnn{JjQ41$YzMl=bwFt5T( z_Uks*faIq1FRljB7-Jbt>3b1`d4zVNH#io26S=$Iq9wv)GMarZXCk+O$AJo|USq44 z-;yj7O{?a#gKl_YRTq5b@A5)gep}SWShR(Nrls|y0}AhIpioE3Nv#H zYtk?*z-`Hk6%>T`p8Ym3L6M)>SROjyzn0G&Fy_*EyWQ>bxOQzi&O9`;cVwnBcHny<~>$e z>3!FLo#wBxrnd^)k&T3cFcGkzD=>cbAIlW5;vZti6y4tsgUp7B{Yq4&vmV+rv|`Bt z5NUn!K^=8`wzY6S1gD$U9CE#k{G`~Bt&XUSE+S%&?;Ws9|2!Q!iHaqwezcWj2SyZi z5PHc%P_~;1q$Dl zIH$H`Etgzi`C`XO83E9xFjEN|B(*j})j48`Ri zY&=aX49@u-?ANbwt3!3olAla}s|13DvSO}T%)g1;*WMr<@r3JhsuLB`H<9}chw_tF zU|u4(8ga6KMcI(}8rz{kl&HO|+R@LOXe6DN#GpZ8ag0z{q(Q1f-6Ti^6bWe%{UuTu zs1CSE+f1Z&xs}a9%0py}rl*1A>V>3Fnii6>!A!l_MWceo+8z6ZTA_huZSlb}Pi^sS z^`xf7rPu>zZ$(o>Z&q>-tOW_Q2ey~KMtXxQHS~gjVCdnrER;-g{dHV|4Ec<(XBuUH zlAn)28;aP_1OO0F%a1i5QDq&UN^#iAg%xe3;@;%X!|%qqnToNoG6FDc;<}W3YX^$R zYk)zm9*!NL$*$qVog!8U_}hsL;9C!l*(!l=I7c?7(%m>W!)UC;v5Mgw6*@5p#VE?P zTKI;;1@g*dg2S85Yg^27u}^U6f$D+SQ9Z3cVipJTvuVsrA*RWWXS~QljD4|JdIve! z+9fYy3po-*LE(FTZ>4)TDBMjH761|K_0AMtY#}O0QHU*M5)vX5f=D#8B2XD0WF;uI z6o zQmBo^Z{RCwIkXWtyvDY-kzb02vZ(1WNqA@5TWN#yAQ>bS$FVMbd%|mMhfR@xDp?r} z8ArEjhpgFKG5n5!gTgRL!_FB>U>sY;g(Z@YL)|;c^az3)OcD>RBo%=u^~fc#z)6_% zd4_CZn*`A!vKTNaUSy?rSE3(R4=TITjtddhgG%UosaiB*6as+(xFI2&H(^@&21MRI zl&3pyWc8q~h*UpIBVVn4jfTEvKupC7{Wh$qGz0YH0t`iP)B8dZ&@lf6`$97|@{?#) zhjK8MIv-tu1wF%wvESrOjeQAOU?F?RT*eAPT=c4?qhRo!c+oS#n*ZfdBwR|7dDKpOV?oT8<(A&Lg$slCQ2T;>m*t(0z zo>XdzEFqi4p4x+DBwrHgY_5Mi_xk47`>_ve3(U~WRkSjKSNNZ=r@QVo zC8%R(c4CTL$8k%3AKD^^&f6<;p7Xoq#LDq6e8#!xO+He5wbYaO$lC7E9 z-YP74C!-~?y#Nqj2G{ncQgm&JJL9s~zXtct-+(Um7P6q?f1y!WfYy$rd^cP5%|ixj z6^F6w=Ul|;R(#p$DNrdeCunURyA@1*!ZnMh6Cmpr3^^R~Mj^^9a$N&pt&7l~>BpPH zo6q`En=T^oS4pra#ePJSYV#;%Yex#*z-0%JvQ#kHRzSEGyGYtdil2N}NHGa0q!=ew z{=la*enwB6Z>udOr-bn#3vjeBLR;A5zzELC7=mk25_SR(y~i?dq|l)m5bVQ)EWuV? zQw!^gs{U~qMqEWv)msqZKzUL6^Os>nj#f?WCe`%7xtn{(t2ErPU}#F$k!E9aAbPcQ zN}Qd+);U+CO3epEHtO$1^n(4>tWp2oGI4Bw3GnH!GJ>pQzP5SAt${?3kFy8JFfx9Rx4%N!EIunv7h~RGSRSu zH9;@a$yY4HCVN81{iBJnK{&~Rvc;SNrMDT1)QYsKM##ncdTJxj{9ia` zdXv6wW!IxFt|nXJ9|)%mCkTvt1}cs0DsFyzr6oF@4Pk=0LjKx-<06VHz`g7GvW ziQm)2)*E^e$124+sg!@ld~C+Wyfz&kyBy-uR16KPHe9A$wiwBjmPKhBaeN=s%>jY7 zPqDE@@+cWs`I+(l(D;Qo*nm}ky=BkfTaUA|IlSPqL}opl9L0+nx?`J%f7@M zso}PTk=}hks)Ie`v4zrx!-N(Q4;H96i0Z5`*wNScHV=7R#myb}4q0!3+R@A?F`bQs zzSG>zvJM9#fY%o&Z-_f!@MnQVg@-*Qo8<6QJn<>o4WbVH7%3b+A8=!=D{Pm;a}e|t z{UOueH9W>4hweZ$IyTd_zjQww{KiwX;YdZPpLkKY%K z>foyv%C5qQbYk(sUTnY=hKd4Xv2R-PWuUK>!s)rbfECw)Pq1Aw63ww}h=I?2*pH+A z$>fC-Y!a>zKT)q#S4i*{4)wWX{vRkEd&2Lrdy!nY%iRFMRjSLS_{X%=1WnZc7*E;` z^k&sY5|osOp3ccbC!%=d2$&6PlKTB~@DBqgh9W-wF~2)0J2AXn51avl;X~CX}LeMbfVvJ*{*n6 zbZ7AG251z?-#xU;pV6fANU6{7D7`*_D@QM&beTV`aC5amQzM^08$CDFJnsY6;JnnL zQEcPj;A9OF$X`=OUnAY@lhQs*Ipl+2E#bsPc6t3{L>p$TsYLA@;tL#hsPx^dsU4Z5 z2zJu757QtB`?49ikz)wXB@%%280};BL~-n6M$@wps2*pR*DtdWe~ZJNtiM1khj#)i zAIz*7eGfxp8OOqHo$mnA@4&pJMhzSI0SEh5;ymdF&0Or7=mY^z{L1o@sI-x=1*Q@u z(YZ(VjulxUP zyBFL<^041lV664w3qH{h3((4`X_D6?1ODFpWmR|4g0U^L?-d5(P z%a~VE=pQ)58pom<4j|CXZn}kU1me)D1$b#5x6G{A&9_Q86iV{Ir7e5u-@)cz4M1a| zWOz42$$YUzOxh$Vn6x`R6L9vtDXd!@q`l`}6zFu{_S(q2z3n7$bR-#Nd_QxilJ&!J zX>3_q*DF?S;I@v3n*yEIF}PbnCIUPuC)n3Glv}v3`Z;1y^>ZWvm67M(Eu#pHpX%rS zj^Fi1_&l9!AI`TeQoFFy0cR*VT5dFZ~Y|K zHJx&CB?DZK{v=nwPPs^3P>pwY&efghI)-j1lPvNaS39s(G`gEQv6HRh%}!Ct8$I*sJg_#oQNYhdHxb9S8ugMU3F0vi!+`pF6Mqd8q^nRgqeGX3OO`BC_x z5j}+*`oU}D(3c1(`FrFLE#7(H0t%RO69n7>JnlVm_yFaK`dl^^A4gk^drQmZ&~r#E z9WO4jK~^tQU`5*U(X)X*UJSxCwgBD?PxYM4$QVa#1=jckwXwSajo4#<0YH)0`&?;- zhjGw-v>qGfACbS^e?A^x2tSO(X1xW&IUSY6?xDQzfN&g6SwYa)&45H!@!+o!RIPA1 z!k+3?)gzIm7-3jB)hm7n_uzMh?A+ ze3iwQ%Apkq;5s`l#Tb1DLSOw03O7bqM1j4Yut!DsPQpGPVJA~N8W^_yol6f?~=Vtn7`xw*cBs@Dn8l8|0@g+)n(J`+VuAHi2gE&lpp;q zEK3ZSO|p3-vc;}L6#YQ;4|mZt>%&brGxzrA(jY12qgg>csq{N=cSr~NwQl^t-N9;` zNb|I7@O#ny4ZL&W8X2&o=TLSi%2J*;C=X_nX&C#+h-aD1+%wOn!IQL+jcSHQJr7+k zI^L0Gb@~w){#@T-R-|&w=LHfHgcaS%`*N3!=){@=WXGNX$P0qg*gi2V2&{zL%mnZ>a44JTfUO-lcwjH)NuoeEEOYYGV?R#OQW9xIn~|jtC6pw_R}K zWFsU)HD?@C`TdeCEx#%7eQX#Ch{aFnd<4yh9jf_9yJ|k1DX(wAVq3+3nt42IAV`2D z`>}Z4%Ep02Oe$)exP*>D7oRTU>49&EeIoeIWBGrGP&$z=ikx)1U z3at~0+7t?snMV-=_LKqcDbN4Jf4PdEJo*`|=6~w%U7r83zgxNc)4;`;RN}va%^M%) z#m^wPJ#k=yTqg0JwU`y8c(+>8o;34q$b^%pU9#(7^hMHX7 z#(ZE?>?UABrkj&E*nd2D>UkQ@B_hLBsSFX3p?hT2a!T(n($7n#6A@2|ETfVn z9Q`XNA#};PBy0w?&_+5bnw^=Pk_P1Etzk}!63kV+rj^JbhW%?uDOCfLAgl2)Tum$o zL?{A(9+b%d{a}_q8yaO8<_Rhs?}zrhNr4;$R#PAY0rGW`9MYg)6Pu99DJV@*@a#2w ztr@-&3CJBKGA}_`P?1MeOq9cY0pVJfD>s@dS3Sd-eTf{tACiL$Li{*WQJx$=1i32Q zRk&HH4ML=t*^_F_zV>NYkyjub+lq97eGBTw0vU@))%~#?dIZ_AcFgzBBw@Y@!9IQ! zzp{TgbT5f@UmAk$Pv!6exOG8;bTRPF13rYOQ+O8PPR{->mID&nEr+@Z5H$Y(Kph9| zM*w`1L)(*(*AXBF<%2=DqDrbJEqJ0}UUu-rO2)Jdy9e#Z$7)KUIlNcG-g`3+8nXp1gcP7kT|jlnI`s>}&uCCVNhS(K5z=erbjO ziqhZ6;nV2<$lK45;C#n}ODXsj4?aP`eW_sNZAy#0y_moo0mh&ux03*i9{$7sE>AX65InLwvj%xG_+wJDIuj21jI>Fzybc#Pa_Bx*5DL1}}+g0NmuQ|_U z_Y_@<7pfvFdc#V@CkLMxj>t-C$r(8uMIb6O19(Ut$M^@qh{kJm*o13k+rCaD)aZ}# z9IJFZ!zxeR0j%%Du0!$23Qnm9LD3trD-aaiF9hD?6!l=~2!Ca1fq!DDR}Nz-Wwri} zMw?_#DdDV$=ngP}J@yWnFPr>0`>EO37-TS7B6=nzJ&q~BFnF#<5sYntxs%dT%PLTCp60+AX>ykY(xG*fY?9ka@0mYl2{QEZZ9NHa4ronkyhU z1{a+3*W&{n_9uKudZ5@LHBcz|2q;ilp*{!*ne2h?rjzJxWXs9gT3BEU=znY*Pze9B z*Enr$m~I~n({pG-(OH=sdIcHG`=NrG{nxAcO@0mFE_8;G<;tN)kw__}lrn@uz02KA zINo{pE(XrVXKVGJ_m0oRZ?||Qeh0^=A<0uFOYs{Jkhc8A9Ure%otyze@ycP<$u@At zUx2_$h^60&!1Ea9Z~#`F^uS&V3|%YD8;++A*GgCSfepG=TG&g9XRVc7-Eq2ntyG<#jmk8HUxC_EuqM4%@b0qZO_h=sR z&(6ly+a!BaL=Tag`xsy#$fiO&5e8!;ywX@BV*0@wF_MSTEbBX(^f2R7G)H3=dmLK5`FLD#d;M4zD>ijm~67zkzVzpgT;T zf0MIGDY^xl;&i`Y16Ps;KQy}aDwyf+FZ{i5jpj|9oWhwpS~Px#WxEosz!|G6Av==- zH)>{>{HB)pRqQ1%5=Li@>v(GRw`*;^fQb{9CK2K65v|EeGXTWN7Ss$%x6T!6n zZ!rNmE`^63Ilt$%{0_CyP62dS=nKd#d>5g8_)-TigvTJZ9T6OcCwEyMI-WU~@HGu7YK6Fr4MdBBdl73K2!<9H8|t$_w9X_UhaU?jztS@HiOu9ln% zbU}&9@FHLBk;7d%QHx!ZvASjbq0ndvdOt<7t;lkUNQls8k_Q`r#K!IHsmDbnPXQ^% z1jiywR!Vw*g-Ci85F<r;8XjRsCv3>-O({aR)>8?D5+=}FG|nG^!}8e z71@r#$eeMS=a$goj(tR3PPxt8ejE!1Ag?t;6zz3((Jv38XrfWW>SD2qZaDWmzA?|G z(J5BAp*y`5nc8o5;&ui&;GYVeLG6{%UVk^bvN0Bf#bXpI#UO}glsW@FZU9mHqjxiYjB02Mb9PoryRv%T|E* zv=0v_a2r`SH&H734Ae;5YL6?#zpg3N%OtFDY8Wqk->~ny#Yn-!swo zpss2Z-vz-Q)g)Zn*dgA1jRfpXeFwj_CY~Rh1_*z~ zlWHzt6J}zz!De7yI59t$Kbh!0xd1d%ntl%k6K>X0cm=|-=g~s3iNRsh0TZtpC35dt zgc`_ug^?QVURW2}?7t{@qFbOBby!AlUf)Evze`hEHu}FBkC-;#fs<%f-_Yj3hfP!v zvnC4CX;J<)c8g=6{Jm3ZHReNp_u&*bw0x!l@#PPV6tI8$`GyS<*@Y7XT-0g|_G{k| zY~@_Q3=A-xWx(EVaCH57FthyKxZ{U?haE#mlGyj9`4f2xaNx5Rrg%b|el(GLUnotg zh4T#c?oH(0jTrXOrh;OU8v_UB+7r1q0ZM>r=YYi=SvyC(lJY5OG5y*DNT-ioWspom`3+Gsj5WoDP%!JRPzlY8r`iJnUGj9 zOg0)vGtigd6_GK0E9g=T*l(m?gY|>nZueiJx2O3pgeI>r$K+t3Uj;ZzLw6Xt18KL$%)XEy zeb4ZrPS3y7Sl1#NPWVjB@kKm+eG!f0)JGr0Xt864phJruLUwQ{ioQitt(pA^!d!OQ zR&1p4&gOe<*f$q@Mb|@r&|8uiE)DJAsTeL~LwFvE=_=eN9pOpg-EFVkg~4hS=aHba6tNuy@hp0UxO-& zI=Z7kwJOuq5gbg~%1*pU#)-({HE00fkS4DJmIf}1AWf`3@C>beC(M1?`b(wS+#qK;O;~)_TCmCBWVQZ+8`Rk zd07OL(?661->KnD5$yKWneyt=octYu3=H#dBJd3!kISq5i10KX6?m=!9-pyE7#a;Q zsbYA1Gl83IX=KNNhtv}o!i$hZnsGnHt2R;x;i4ryc1Uj>rd~Kg-!1Kd9MF9;fG6RN z;KlX`UTlxd0a5AS9Zz*=kg^%|g$dR8)@OXJnhS71W{2=9d2xJ_+LwU!jR``bWic|h z5npD zk{=BS)FX0b&%*v~GtLxwN}ByWldnasx*qCe^`+E=<()Dw1rl0zm7}ZqAfVxq$h|X| zCc(?&WC!56B)={+KNvZGBuT+^busn5ygtMmqq_I{dn)#X*N&Uo=uh|dc^}2o@iKKh z4Kp8x1D9G1hx`9S_WN=d2|JD&{K5@naVM~E=QEHVS`HcM>{x0b6mSS#YhZieDkJ_rMJ z3^OP@O4w=I-U^%2XJ((g$}W`~ZOYqNSzyJqOEI?WJZLni#;z-zdd=bBXEqfZAzr)} z6ZlL?)Rjkidi8pTQq?ZmBx&BJW7avxbLY$B-1t9ed{BJFa?}t=XC`C|^+gej5A_`1 zl;L;Et1IB9Y}67vw89pnQ85Na>RD#tUM;Z+v*djrYI-75ex!=4h-Pm+vwMv??GJVB zn!Ua778nDYpfelmW2D*0=}gae9GxxO#0a(1FH%@ z@aoJKSPFXP4#J(;k(}P9bLd6)ebF(EpK~S+)-wJC!`$<5P217ao2aj}w^Z(|uW+}_ zK3r+kH*WPATVfMWK-3ZqVpRh!-GL+gxE`BO3`f_-vHL5$P9p`&lC^RLd1!S92WM)Q680eT9p4vJbP3WB2z@s>k@(Yk2U^Z-l)z{)ga@J zN?u$=jYLNNtt@P)R0KZ=#QSP@OQllCF;r4;lvP!Pr&2DevJ#_ADM<5*_Q~NpFf@-f zHYrXJQ;&B|>Gnhr71H%?y4H=$-1y%Y4`MiD*S?4&hQglg^cQ~knxBpi!BTY^e0<#?Epx0AIl-<2}4(qVKoYH*_yI zLXQv*`yQpR&1ir;;xC5a%K8gA4lsfMeaqz4i&L>o+#W{`wfkrC>MckK@f4;0K&G)r z?Y^HNJ*gx?5LXMouHPaXKNh~H7~d=Q&NYaVKVO5|9TE*e?p(uu;H&F|pU2A!8@>8B zHr4o8F_;{7g1t)NM_yy6*Vv*&`YFaE#2KZqPKhWO(T{MxG$WE(UicScPkH1<96jLY z$#FtJ9MpoZVJZ~2Q@oiG+m7k^+&RnY01qau!o$|21y|EC`Q9|qCq~Ixy>d)mfOT(2 z-ze*bpw|mei9SLPp>ryX@4ZG7_09JGbKks@>WyFMo7mZ$`;zw!oc^i4`4YTjYT>u3 zzWLw(H+_SL_LF@R5q!x98gicx#Pgxcd0V&+4R>N+n;0q@Bjf(oqA=(OqGp`OG{4D~AaPc5t0iRDtlfGq zf5&D`ou+RCw$qxijg~otC^b1?L6yi|H5a=Fbs`6@Q-ToK6<2>j7x3xM;SX3o-VSqd z35_y#(cfUb8T(-J4t#``ERFC}&V7J-+Ci8VzNS?28=>?#upU5IdyCEBtGESkCpe<7 z@MyeHi7p;RXsa#; zCDB;!{zP6(CxJkTyzoi19nBm_#LzlrB$>K;V-C!<*`CcP*@u>gWaYds`pqpCs0QS!cQ5}3cRrQ2YKk1nLSLy-yoMC0dT`$pk z_Qm03#{tR-$5DNribPu_99CBY%3kAHL=yYkNaV*F!jASH^UGem<)$}7k1sAQ;uw6c zY3zUfsgvRzXaOvb?jYB4mjUqi8=GiQxa!+8$(p64YSncizzY5f9BhR49D2Xi1>i;O zJ>XJm64!ucW7D6N3)<`rMvHPmUHyq3`3-a}!rd4cP0Rc`lq9s%l$x6nWT*cktYR&h zSRQR=x1oA%`eaug-e#U!9lGpN(5xgjDOG3aZ$!$Az34|mQeY9*%toMu&s;c!8fTos zA8asM4Ru|?ZiXkEs%c)6G@pbL*^k@T5Jqx~j1 z(Ha?a7b1LJAHPrJyaYMnwn4s9D__3^+<@C7gDB1#k*q~V=OG+#hB!g`n@Q6^Vl*5R zYcrJ7_Bwg(etAy%74{$&kTzH(xafA!7C4|7b}w$dMM@VYniY5Z>~Gab7g`3=!!KAQ zC;j8petpEYQMj5H7^WH7Zz3d~=^sm#8`&#TfGY@)^lxJ9ByDKlbew<2!W0JdcjfNP zxf6u9K`pk=hEERTXFI&t4lTdcm)~kQdScB~n5IPVLI|vP)oq^}SBw_b$WZffSfux( znwho4TfaYz9YuAjF(mGrGl8o|)xBl5%Zr9%Kmw;PzY+M#42LbzP-rWQIJ#2X-RI9e zq#AZ(i<*zSeZ7qowih_I0cvD$e5|6kB+%#n^RG3t3@v{*h$^%NP(J1;x3>h2sF5Dt z>GTGWe*nMtoTY2|#|%etp)KMVmCW_+Pgr@b4M_gqS-8N)7k==RejtZ_K;J2P5oWH# z2vtnS*20KuF#sx17o1<7m(i(kT3>5AqF(I(89s;8P)(^UqAqp?@N$4sBQ}9r*}Kpa zzUe)v;8dS6=**>d3A|XM8k574QgxC<#b4~3o>2k2eiS?*A?Iig8&YOwd>&a65? zakI)6OeEwnEm$!cqkPLw^M%q5syy(zfhRBVcO&7uZit+x>Fqt|4}pTwTkw$Ew}w)r z-(Dn*QobJrp^FKjJE*&R&h6K1$F`Vc*!5B!x3Lo~5qsb$?kElA2Ei;C1UOjI`OhGV z`wd*4z%6cM)#K@1;LxV`LfbAz+caZPe|)f@du%fF>vrU)$+; z7e&9L?KCpkuvCTr$6s7wPHsD`=y*VqP*|mNe_Fa*+@a{huv|QdH=HnxwgQK#;;(E> zZ&M(BGv&oQFuX072ke&Il46bUg+T{Eyk* zk#<<{+Vq~~#=t6{QBMx_t9?f9#ejoaIGVDmL~r?ravcCe!QS%I{);M+tfidl&Bu~H z`+2S$ug%DQ1?W6nC2)^G@$c zgjAT0Wfd5^#-Kj~%NUF|u-+o4uYJc)$uN{rnUErf-jE2iDRhCeCr4lU2>wD9aUm_h z#|{_(>bNhS?wygp1kNVE%h}lOn&c$ zcn?ak?^4{m%tyqCYlCy=Y0Pqy$XASlWWo51ZO8}U)!cgu>QwhPatNmpkYv?l(Q;^x zfu}zdBkFu$1R#p>{z~xqVBydy66lii*)b#u)f0Z5TOG*Dmae z5amPwuN@{Ydj~+(uvi7Igxf)p@q`PfQ_vaPSUJ+kTejRqJ!CoIJU@BH(BQ9_ST8y0)7QA|ig!Z~kg-rlXyEe4$GR8AWi2^(VQbgGHKh-sMl+2vhrXXXOKG=J z%+rbrI~tQ1r*PV1xEn&1laYkYSd~}GgT)BKthW;O(JefzcLRHVX2#vR)#!;)9^MtO z;}52w$ClPgL70!9J5<;qnTahsV}bw04;T%Nh7I}1f!*RxyRWC$%&LYGMV#ijw7JJH zW{agccBqxY&8m5$O)c&}I}hr!!kp-+$VVU3T-&JF)9|p|8h8S8F!a1S&AI*Oey$qb zltewIIkfy&UbAK6K7)@Ge`u%-b*0Uo<}*I@ znO=u4{{!faG5L<}N`8Y_%3y=VCXJ?_*_jB_JFL5uhz(Oe`ASt#zpWg~WpJ5ZT7@mK zwg5KT9FNhxRAj;Y=>NVfkyT~b;@u1zI-?sV5gTRoA0ZknTMXJmHF|;u@+eOU^qCK7ZP)riv;wz(Hqn7yma`{7gUr5I(Wjn>_t zqu6fNy$$cn2xgt;uLgXgK-iG7ACK%P@K9L#o77haEqXDA4>`H~<8j0Q>(YL6hpXmI zcm?AD2MEGsdIMY=ypAo2MynRQHLW*06nDSbpMr;QH7mP^bKOj>4WyI0g!u8=cdDyiQlDAYqY}65CV7O>>~KuD$E-p13MuD{UHMK>vbJ6z|BI4z!&KG zY$Gj!7J)HYRq??PsE93oJ~2(k^9?pG^nX}_VM(($Es6OtiLF$7eX(t>^=E%zx&;U6uLD_q$1NkMZ0lf!lT5;WytXqY zYU8hOI=Ruua-esxUyQ|#lZG5toC&NXKjCTtqm9kt0RQ>eXyh;LSjFz7Vy$sJ@@5rO zp?u=_6PwFj7;9w4&cfMxF7X=Q@FaM{VbRj6 z`}r&~u$yk?Z{Wgxj=7Lyb)T6n6IQ#H|1qP#eG$is7>*Xc^~ts@rPsvaqNF+=oU`5vS?jNQaeMExyB;lP7+y0>YQ&05$ z3gfeC&d=}W!>Q1Korjx2h@*h5?T&3nqy$ge0`x3|U^^z2#XwOG70NbRIevt%qJfaO z8|SUFTG3d6M_`Qi*i3X9>ZzXRa?T%NsvGd^9$JaEY0m)R!c2Ap7^FtAMpS-;P_I6v zRwL{_HE*}6{mb1ks8(UcAohAn%pUvYVUv#&S|g0JJ*dZ$AdoO zGc~$H5HuSV)_1hHr5llgepiB6Fb@9NHn*kn{8&$=xibsxe#`yo{0lS_Mu%p^X*0y2 zL!%@C&!R+10>1nOUf}F#D3e_WhW;Wiu)K10=Egz{;v_e$hZ6CAK{H*qB-!zq*JhSs zn+Sg!8=9~FAZCi5&~sP})Wei(&z$!;sokXBwdT%Q*e{`-_Y?TrUOpmTK_$tVI(Uub zpCGTtNv&pc46e|1z0YCnjrTRjJg2w!yDwdD{CB*&Ic5VzF3=k{uf!4=()b(tDd*f*$e)Nxao&?w5OZ)t8h=DxHEh=Euwgb%aVieX9)TWkAJJUm zZku}qFB{OKAADc1!#__J23anJ``#g4O$S*{GzVuwY5X10$jdVjD()A+8PNKr0IVe_ zn+9(H|HJikX3#RN*fls&OxDawv|z=PuiXJR~_u zx}4ZT?ac2W`DsF%V%CSCyn|Vy-Ndi|;9z(MoKP@}gPa%>_le$T*K&|>BBz8g{8JIbgP=gl3UL&j#E~LGqHp9fgSWalg!B^^$D@ZjOIZrM zkAt~b3UMS^Z8|G&61f-ytR4hfGT9->E74H)C@*HQD48Y%*^i_Sfd!kuH7*NlLgf8j z&Tj#qBSfk76{)7PO)xBjcw?;n0?R%?e~{cvB!0lIzz6o!&z*a= zX4|E_IxJ}L(o_tJf`%7ZIE&Yqff^P4PRvC{n5w0Am`^4NkWiFo+pkl$7YQ!9ML6E^ zjxqZZ8b@zWh&x=OZ=S+^a~0Qro!lBXXC$!Ki7DZu*^a_QJlAM6TI=DY_)JdJ8S_HU z-QVh8!~VuCXNP+)vK&7;vJ;dojv{YRU4 z#EV0pAY10+hkNiwvR#aHe(HvrbJiace272I#^+_Rp6D3kV*Q)!*H0h8nJ$cL zI@;;PT2=W0TS^f50SP__UeM0|$fplJf3~u%Sd`MA^~(ZznM26J2;wCqfV;AhjReIzwx}pJwXL=YyQmd)aT7^)S*0yj zTd!@kU%#!kwpAdgm;eS4xmy8g6})xgdI3=`qU`_undjLgp#A@TKVC1g&oj?l&YU@O z=FFLM&S;0q_(g?ED-3^Y-e*b8u7z>C6qrfhkn0hYm{!dc2`mZm*IWcVe0j+IB4TjA zoMpdUS(7PXc8XvqZFwlv)Ek6!yl*wl_WMHTyW5JHr46?5++Izil@EO9%Su_~W1gYI zD32`~L{o{amQ-GtE6CglIm28)u2DN!BiUN`y19jm&BJy%vh|B`6vGhQ`NXTO?M+)- zB^!SYolqjlqjH5#C{{RA3n8QfciaIf#@W~Eu%yKRB_jCb*c^~lo!HY90CCmAsoDES z%s?Yuxqq+=xmY?hlq?=0v!D6k^qZl&mt|p;GtQjVMUDw3C$j%~6^YT5VoRJtnXoRf z1SU%bJ*-04b49>OA+lg9; zZ55pWn_-eP$dKgO`DtbWp>xxwaCYPbal`PUPcN_0UTac37RZeZ8(U-?zwO6|EPOFeQa((1`|*MN{;7<6h#_$bXR-NTaK;Mm86h` z^YnSvwd4Z;y9M>MDOt(MqsHExyg;@{4HxI{0~dJ<#A64nv1>!<#MPnnNgrOC&39La z^cKfNg1Jld_WZ1HKWgiv+J;cdRM7;8c#~Z;t`3gcCnN9cW_atjkoNuhl5Fdmw2*p~ zRwjprp_cJXv04!)E?zLv+@#}>QJd4gO925L$PYweQxpS#TC}n-oENR^9>Kk5MQTr! zAaxU#7OF-dm@h`o`h%Q#Y;rQH+O_8P_9UD^x>^r{q;L0BVu~kLFzLVgC%sO*gAHor zDW?&+JG>91&ZLg5^uw{gMN=~L%J6Zmzs1q9FA`;xLY!-Ej|^#gU-VE7s%sJ(Mxp0x z7Az4lO@4R5X%cx`Ps_=AQA14!@qzS2x-=fYg0ysA3xCaSzeVa?_Q@T%EQYryzAC?} zTjV_Ru=rK7aK`13Xx9zU;7+yq&lPHO6TH!(ej>!(I(l46NlWLQ z%3m|(Tstmp^XaBDHyH7z4^{6~)T>P$=U>fs9<;@%`P;a#XT0Eej}GthaAS+$6Wi1i zDmKSi&`|Jku)onv-NNj8Wv!@Yz38#5<1oJM5eC8bv$M^$V_}^aZiRjwZ<1n^CDjST zn4+Ijd)9$24}@Uooo*^nqrYnrK3-){pho|*nMN<5QRcygI2|3xiTup*Iu9kjar{1# zw*b*P(-;+NairT~8`CoF``aX%c4MHjXLR!C?0F@Zp~X&nc8O*&6WHnVPeoosXr8kq zx6e1yyo`2UvV$_eL>-WhZucFISfwty3%-?v6{Oh3L&rJI9y=KvLj$wCS=|Gn2(vh~ zG@DPXiTJlLdVw9R@2E=z>DD#-=(>LQ-E|#C^z5X+E_SBW7i%CemP_!g!PLZSdqhGi zb`|EYP+vOl)su6wR^=_`uVeu8(HOY3eY%b1$<8bCI`T{x@+a~ZkTt_Wy06N+lh^=`^Ll{bATn$Ek59INss@>kQ?+@-wssld%^+i4pIV635%q1xj1*~S3$ zN5{U-`ia~1MoL>J4}Zhhr6i?&FHY2@4agM9D+j}N(!P60kU8&DWYvc=SwQc-5~H{^ zT(4M$)?Cmbnu!f7*P9=k&P-CK7u-7~LJirWYt)@8EX8~L!kaBW1>AWeef zm#LzSxb+X#jYQYO&>iQ!WZ_>*7|146F>Trp#bdftcFaicJx}wd8`qxTm-wWl9`BvU zIksI<{pKf6=;<;i#O4!>tNBe89;wa}(>wAsOR>lvb^eaKA+?nQw zV~{C*V;!&s_HO|px*Rt=(LqST%SRyOVpfR^LLNO4ggni5VS#){tgCD5OgDO{?dTjj zYQ3dxT=L|3`O&e(xUOd5iV@=4O6MY-b!p$fLfJ&5a1K<`zBhS8ayX}Hpax|AOGmW7 zX&nQOUx=DMfw6GpB;tcBVc-$4R2%`z?jT1nr!^I;&hjJcypuXJ^{g2}J#T2clz``n zs^EEF&z3y%NQtE~?)D*BZfKS!xp(V|C6hN$>lF}}OPB4DVjtoIborC!cDnSFV&g7o z;W4_&T68J%IPc7D|gC zNAo6v#0V@ax~!R02omDWl9Vy7t(MzHG zQqYT+EMDMSR#^_ATbtvx=9d>|W%=U=6tR5?MYx>M?hbYycE8^@)~PQ#ges07ArCSq zC^!hRNT4nI?H6Zi4ffV$yYqgsne~W@TIX`~alX85l)ypTi@YEO`yXrqS{{$cr}ACv)>_9W>T77#drNRxX8B%*V98>Z4&~RS^0r{O*etCSnr$M%g2~8RnMRZIQj_%ufjc zQO>U@uuQ*9!zuixefxuQkM1;11@0JqR4H&W6@INj(wiNYPkBpS;dJ%9B^_O5Ce1?# z$Z)bPgXrbkXp-O%C7N}|9hvw0%FDM-5h(p-@EL)=p zr{W@VBvm$e;BUt{VcLbf$s|e%Uk2Ti`+1uXKHENC!na5%EAxqyX%t-fPo;+QsiD0j zi9scfRJFd&$u@6)o7XM)C5n`qtsYyIrK20sZ;MdP4j?3L#8^{&PX$_6lyq`J3 z8I!*(QeKwZNpQDSX78$wF*%o8E6fEb``Z2t=2?sxZmDixJWPkG8qW;ZVx(76!Mz`r zkZ(A$rvL3!)0bTTV6s%xb<||T{)oGr{1e&+IvY4;*H_Mq4V?0Z`(gv9tm4Hojv!08 zl^V^|N#Yv2MUD2d=ytB*exEX$;fI2p8~G;l){ccAedD|+Dv5dhG-#DMA)*)ZESlZi zHbW(|BT&&AE>RApXj`++ENsLThh(mwKsl?LzM>|*6dlh?#8z9eFMNJx(z#YnnG6NY zN|m>>PFLKj`qlgjfM)$d+I^`i?VB5LW}W)!_U`B9?hLby%|G3JvvAzSn+l7BH7}O` zj6uijn^*UiT*csb_G^e>zszO*gVZrf3e5dTdlSXY#~$I7Ntje7wp6oAe^7_XeWFcS zASf%`v*W`@TBVWQsZV=m0|bL>$anUFc5spTt~9{@uMR=t|`FCZ?k<3=(Etj{1yMX=E-G8s0gR zRbtx+bEnviq4rPcAL05^bShA<41Ex)Q9eHq$E9bu8~6kCNYR@y+B5l*X=gYR1J(0We&DUaJ#A ziNbX+^xTM}X&lgHU%I5IZ5Rxd8 z5woyN}eOZA783yV>0pyjM`U&>iv9w`QJ1W;j@X1F%$zJyB}I-)?MWx{#$G0xa1Wc z7VnQx*P1We6mOz!I$}kj;RTIYsw?l8@}789R}RMxg`F#`0xxONj~$wgX7JGMk*-w@ zPbqus(5;a(0_87g%)NE*lBGJC>`!s;Vo$AmPxYEf$@>0$58-qOSLw!Vi5>cRgg93( zxRdXz@!46)iH%IXOuek~nM#wk(g&PMvon=qCfd2ud~{F#I5>zMx+8K;ug45}FtB!ti-7=j8VUItxq+HcmvSHa{7_%xHeJ?%eQw zg;QPGcB)fO-3MS{#9M!?(nc>*tVa34-m5TNiO{sb=%l9A%tA71R(R__>P=UaR7-N<6X3a!BYj^3HH0bevhxv zw-D^D`x>+a%3l_v_SSvIOLg+)2YHb~FN3Vot)uqYt*gZVBovI-|BKRrW|Lbrge{1* z0RO|yLWzrCgyjc6Ao@pZ_yjF28_X_Xfc(O}@K1l?p>C`l4W}?0N*%HnSC3o*N3iT2 z4m-n?{1REHhLL1Rtw~l54mRANdz9Z4|D9oG@>SLKrWz+@{x9tGdg~ZLp)7ZhkQr5l z#IoaFdO#iVW;!w|9k+wC(FBI93^de>>p_R7SOh${LkB?Oc%U_F#9eE1lc z$sgYr7qUYI92yl>d~7_adT|Bz6Pm_b*MwNfrH>lHr@0iX8;sSmJFRVzvz;i}a5uZ) zYD8!%fcp9JMVzRKLcR5G(kAHc54&L$o}xZ@ik4Vzjo_2N`~}+)U-ac7cuQ~ZJ#3M) zo-Xp%-_LK;4TZpd?w`~je4(5M%%5L?p_MOE{LsjaO)vEz%RncKd1$dtHqv3A!lRrZ z?faE9uI8{rxiAwL=C?&4;8E6-|Js3tG+{ds=?B!Gd2RWg)X|;)UHFgszdCuZLL&Oh z%OfYkZHfw{1sWahGb#D9mJo*zRAY`*x`%mlJUwu~kd_IT=FarJf%0X#&4I|U$z;Eu z(xHERUwz(PozQ(~_BNsF(yzIxyx_Qof?O5DVs!psi!&zkc6sT;DFn69GsJf!#rbhA!JHv1I0AkH# z#ZD;iLcpYzu+_;+Dj4=aY?+pUyhw>%C;id%l*k|?$tyab^lFv{s~Wndy4yTKe1U^x ztO}p%md*|jJ_>u>rrOh)lI#@ra&a>Y(8TZkpYa?ZUh|G!jCA~fKOQa#j%xN-><*6z zL|-1jIA0q%2|OkT@@RfHg)z|b)5{ zi3%aK_)|J98%+In&U^}-GSwGWW^=};mIT_+KZ$p$B&(llB3{bqYzcB3%sHYppIaFg zI?yFFYIc6AT!Hd?EtOrzQrv&0$TeGHy1O2Iy_=%k251Se6F96(<_XHTXZ$O}ApSyg z1vKZd-QWIDi5tw)E7ej6Y8a-qd7!gR6-&&l$d7=e_PTyXqihbeCe5F!HMBN1dTOLQ zjyKtQ3hxuDb7~vAs_W51RpCDE!;7`zCbifgxQk4`4yb06qS?D&S2xFA9tftcjT}z| zlH?#B&7mvA>{f+)BqvmW*?N7~*!Uwp{Y;MZbh&CIFA)DCMbP>E%+Hl#HwZ+_6bj#o zdn|amMGsAJn3ekUye88`t3y7(nn5Q6$T0p&3`}bL{of{s&%3;|xo;MOD zAMFA2d-`p0|NZfLG2JnRGjqq3%)TX*yn1j`kvQ(UCp9V?YuwdCo131nbnl`Ulz+(& zYin!wf13EJC7qpE)nW$c97yKAlG9weyQ!B--|v(TCe}L#lV-ESO+llDV1OVv83>%^ zb51|j-$b%EHJkaTWM%zhvRydtW;vD+(ME(ACDiF8jxqJtJ*Ec<&;*zzR;%8a_=M}@ zDMKCJy4!dgwF5VIe|T8aje=|cA5>$$WnRT86eM7+SmrlA6pJR zhR<*Mu?jCes_^E&aH?+axP8KYK`l^t%~($4oA}_?da_&VU%T1rbmtFlE6qWtv(82< z@umpiV`vIfx4M0BKeWY4>UXkwd7xrN_%b(T7AbJS%lN?(Y+Rzg0F=Qr*~Zsz6V>os zrhD1X)6-C-z$dAe$6}ngCt=or-wJygM1GMO9yANv+`7K%$PVBza*EMGTQ zq*sve!nEyHFc^SXWwo(L-P|-o*qZ-)eFZ0z2Gg+F^be~l8Pbh`KjGgux-woXnYqa;yYYI7Uax*jCI=hL->wEQ);@3jdIqA>+kWqZ4Bh|!2>kn80zwG~lz+tML zJ9849vFq^3O;ZHNH;-F5CJ`b*EbRo1(4@hpLLkB6&+X{p-CgL?yO5|PJO(LpqJ411 z?LtW%e*Gcz@)wpFMPL|3hMR&kc9=F0xw#XM<4U{Z)%4qS_PTF7@Ti%i8^K+3AXSZ8sup zUWQ_W3fq(XGij*#&)w>m-Cb2TUVfvL4>P3T(YMF>mZ)Jk8z$WXPW^cx8p}7aMc72&Q=a>+y)Z@~RRN4%8^-6Y}vVb2) z6tEsF70YiOS~c2|+3cP{m-O?PnyDN@6bHP7l*ZGv& zP7y5^tL4Z4=%fe)q3TwbgpJ|!?%|>EoSZ#=dOb`ME4ByA^ggzRTnV> zgI!xsZ(m!7nA}m+4;l8=;>wP1frK@9y4aDqa_|w2)6A;xZ03i6Z2Kb7BQh`}R2*Gh zGrPu&c+qM5?EtufI>dEr!i8`~DJ?C(%++56U+GsO!yGz1S?qkEt2tqd0aaF?&)9a; zY|kZ>aSxX7R2RiGb}o6B5?jY%|F}%5@kdImnww){k~0?CGAPOD$d^3#KXkrJZo7V5 zv5Bpn({4VXA0L3=8gj!_+mx?l#R%5yAzb|xQuHV9mC6ctE~^^LeEWsgvmFS1S0pd( z0y%9@Lr(8w>$f13;LPt9N>r}pl?FHSV44drl0+Krl{o>c5O`JJ z2Jf10fmhQRy!%6)!E5tc@E#Rq#a=2gK%0)7e`J4kkN1)NJv6CPf5#nB;X_V^HB=a{ zD_MS*VD{FnqMro0Yvt8j$GHohzI7!pv56H+3q*HXP3{w#_erO-CuyGvjdo7+ZL*@~ zt!#zCqrRB$^|v^=0m(!vy-b0`{q{=bfp6NcM|EeMfInjRPVd~EpH1kDpEU>)4Bwp` zWV+p{NxY{Xy+SA0v7u5l;L?7Y}R_^CUb7kdbQk^5o~;m_lx{SaOl=v>FTVHO32H91d~ z_)%iCMVKu$oM(%W5V}qx?Z2m14n%F@Tq+k+;9mm|BdP%oOtvw z)hi`4%T`x)9;P8Q#W1}oW?-c& z(77%`N11g9sKIsTNIVWl=L;3AWm8<{t$SZ|0?@r51Q`!*cV5c%5_eyw>g7)N#g6q1 z_r;F&boa%M^%cChs*Nnfkj{iAGBj_O+TkAEK@Y!nIGr=AUU5ESs#a&IAyisdl11~? zr7J_8dqopRBIsCqfZUnWd6beFgJ2K@S#Kx&v@_!vK9&)1rl{q(kKg(&2KrL<(L?(u zrDUr8WPInLozR0t8`magyx2J_MWf|M_p)UAn2HICG}DWb!d! z=8bP?0n6A#-d7K{FA#pdw9b{*JS%>WPE9#zZkSslJOIp@%oiPv@7n6TPvPCX;l9k# z%PL-+u;8iT5_pSsEN)kp`^B;u1yjS`)n1GO%8ON@XPz_n<~bQ3v>6pIVy&5Tmo=|= zfqQQ)|N3~nCh2!%ywqm&);$g2HOW8d#J(o^jANbxF*ZXAM0K51`f*Ju%I(+Voj+n+0KI%x@CA=%Wx zooWDj(&&qxM%OrI`=S%f_WeY2J0iTRwMW1W@}^8YFZ>|=tZ&fLUmj?uCC9H}dk9NU zR-y!^`_8p2A#6J59^A(Q;++?z1H#Jy))?0bsHk(+d!GxrcSN-JP@3 z1OoFtd>T!O?cgU6#1jH__E7A2ip}SC_2L8mgBKjD@rjUM{0R%ovQR14xi=IX>kRG} z&OH(qR(gIe>`s25>J2^bOV5k(2OVl7Q6Qpi!9MTGB}FHJ!i8Ts^QW_Ac^Mx-!v8L8 zM?#iOc}w;hOrW6V$RFMy6E8RF<=5`Ze7!XC;xei-mna9FBKRR}2A=CF%a9fx)+1_J zO7NDn+?dXp{Q)&@^^E#v_OEuVn0}}nC_1(t^?j@Jy?z4U@$_+S0CsdFS;)R-{A&)J z_T{%uVMV=3`mQ<^L2Eul;&3&aVHdQ*MCcJ)amU<4ML<30*-l?2FY{HF6K@0dk&T@| zV{fieW9mkkZE2e@l%+4lyvKVq*h^*7To}ZBl{5i_nJnCUgLQ~3qwf(pQBY=T=3yvo z!5KS%g3h030f_WDPMWiIQg_<-62Zmmb`T&kQ{M{eYk&D31hSz0 z?Rh5hbDqvZyd8H4>eG-o`y(ZmGUl!n#kZEc0`ZpsojN;qpi89vo{+@n%%b~X<*{#aA_FukPvKTX z;cyQX?xw;>!-xZ45 zzdwml?Jsjui4t37E4xG3rS)7WnJd~HI$=w0uS~RWKVTB6+_6WL`vc`tJ=_9!vD*nH zKrS?>rQ}oTW9F_DiFew(aupj+r`7q4bKaPfxEUlcfUx@>xoi&fGz127%|S7>HU#=N z1d191y&D338v^}EWc(TegBs_S*ar@`@$rs*l@6a$lg!H@G`9@@H-;3FlBf?v@XQ~J zMO)U)PY9R!P<3O00+e;w(#3A?4XoR_N-^9ec3tnRR5+BVCMxK`boj^7JNjltf@$Al zT(`jb@AocTg=KoATWsvZA8Bnp6*lLPU^3uVq=E>cR{)|^82dFdFQqLbJTC*HGT_0ixzOa-8Lqf6JQEKIx zv6P73F(509na;0-BzYg1uF!^K-s-H))|Sz_>(W8>O5#gdph+|#Z>-OJ+zoaBlZ8le z+V^+*h+*Gx(K`lag*h>|@O|BbcfDK6b-vL(g0O)aE- zzo$~izY|dG9bC&XUbKDbWN#~YHfd4}HD5l){2sNLhzRl{F+Zg@tku5q@f~QY6&Slf zlQNt@-(}Ki3-6||bEBzWTQD1cQlruX36Mgl9p zWl*s3Zz9+xT5GOK-sM3sX65E`FpgkW1UFR$?H2-iQqD9A&xZ_>erS^a~JvwCv}=}MmaR#ki$ z{(h+OC;0;9m{2ldX)y7oIdc8qW2ICDcCXD1?)b!_bzBZLd_EdVOC z_dpPUWG}>vMlH6o%+kkyvw8Ltm{7j9Yy%DkE7mHq-+Sd(4Pv)%?K#bYK~~9fMyN6s z9#%X0YE6+wcCr@rE2X+=4kgx+Vv#R4oc2A}3*?{l?QDv8)+yUuvV|Ha%{v=FYS-Gv$87?E?eVU-2%N6hb*3ZT>r92xE89`J&YZDMD7_Mt zZZL0KPu07j@Pv(baT7+iSlUjL_4SQ1OOCDdJNI~I{G#77n>+AH#Kpq*QtUg}!)2Ma zWz2$P;bszG_vSICrA07S^$uS>Vo$)`h;UfqY8-Ha%)DHDA&m35n#xz5`x3nqzDfJe zKUOFh53Cd6yf-kMidyTpC-`rseLp+KTEbU~ItG7jhuIgZ{AM=B^SD00spLACLTXU# zj@}+Zu=_rwKcph{ zz`lR!?37KNkNt3{MBBVVzZ?X+;? z4Op7lZW6Xgn4>y`0^cn?IV!TcA?Wx?EpAYU<`U!0#qcas9g9syc>{>-4fiCfd&9Lb zbcYOziRB(H(6t7~HQ{aoPVE(>X*j>Ge*hnl2oM~@?|N7Y*Fo)I= zw!d`61G^@;1anGAd zZfrfj$fMOI?V#-;=Qjx3!%jR zP~~T{1KeOkEsXOimK4{TGa<#A#J>qmT2uOt)A*#yw{H6zh-;=tnsHq)Gx`~@2-4_FzC<++^uPQfE5pJIIy3bAc3Ix3$j z02cT2>*$ioCDyY4jWPHg5iwM8u^CpTvl7^+m{V~8mNj4vp>NW@sXeUlA~`Rwvz(Xc z2uE=pXP<0FRK51#v^2wM>A*ehElpDjEiuO1P4fs|Vq>3s8`Q}Sx^OF7YW%fmO8kt7 zI=*K~f$64wA9v@WF|VGysjfgjhX-Z4#@3e6c&s(~XQ6L^uQI#NR4|<~ED>Bri^DNC z0a{Hat5BKk*O}BqHGNpe&a4cU)ZAJKxw-;*OX^}(rD9`LtUOZ{rTq?KRCQ2>S;c8z z01$D(DF`je8pp(tIdfR6BaG?%u|aZBI9Ffvf-ewC`;mJNUTB+sYp7b+p~;v9F~l>;{`w z6lojJRc$$Iv%}!Ks+l#FEyzHX+to}DHG}(H+--&yZ*6Y|x^&_{+j|EPOcb*Xx+@My z9zh|u$1K8lV$>&@eX5Gf?6r7yDZq!zF&1!GrR4kLtEPmS*OV>Um1|9s{8>P{-hSF^;`N~>TmAG zlPV|dj4X_KvzAn(Gv+HvnE1$hw+%jk#*-l57( zz&g5nxTi_1&|C>D@>H}$a)R+a);|OS3C0il7kNUZtTx{ywi8^fq$cr!6!~CO*sVM$ zNAXqFrLTs@idOH;E%#y?wAd4@*b^?9dq`>C zM9y?fJ%4l?&06+|q+A!v7<*n~lM9d4jtl|dCwv&S25B_DrzUYj$xy(FoKRl)9AS5~ ztu6eYlXPRvR`avf!ZRlqsT^jg!tSoju4$wIOrfOhS=ugV?nl_kt}_!jYxFM5H+z{2 z)~cev10~4N=V_3POsTQQts*!hQxJ4%(4pg}&v2&t6MDxKgrD{ev5hU#5%(NL#N3Y? zME{Ar6XvuN%M4QF5V@P*N!o1~*^~NpE&&yU%%5bX0GhmYNX}X8K`PtA`N8?1qqtYVku&?_FNiGy$eLYAt`Zs*1jn7jw& zLi>&gL-%!N1}W`3qRF!QyoQv3v%|U3+5Bj~qn$CkAMqS^QtN9@w2xD?OLBKXk7bKM zSQP4cU`xep$@GLht4Y|%Qu9lMZVlXLWtIVHJUR`ST}wGf+C7k+MGcyFox^rMN0PHV z<9FT9+sAJwS?zMW-Td%mdzNyGa8za*IlfpRu4CU8^Cs&B`|`P7m~@x*rI}%%QZKjZ zrPzIWL@&qkBAGC`(4jY5_B9mxIu%h9=j()Ig;cy+9L@gyl7g|@5lHm0hx*7mWPzT$ zQk~K|M3rrGbfn59HpH^93bJXPdf5@Gy{2&*w_@)^OHhMhl9Yp?)n+@=?}C?65>Ypv z2Q{b*e~kWb0r#iI)*?x-H-EsmkXys6>fa9!YMPA#)Fi{|{c7{<-89RdfZc`p9nXN` z7@_+==fe`V5hSMXPUSiESMHAFA%Lg4E0%QSmo?stVBysAbyY?rWi$t zi#la$rLzF&q!|Weww?|wl!!0bdVC>LlX}zm@E%?u10RZnuaP}JY|j## zQrfefOzi2@;0EM+X8m_%sQ<_skqlQ2z3jdnT!pyW!A$%+Ewlw$I^3fox8+nDI6t&B zj}OAyWOLeJG6r7J8isYN_&Tfrdv`bgxey12`={p|&{(QK69p6rRvB~Nu%^;(-eYav z$Qvw`IV*{WmfsNKhN@>u%D^M{-E-146*d~IOhqbn{o>hy=$MjpWJG`?T+iXiDanho zE5Ev{*hUwLd&U&cDi~9UMP_$z{Yez#Zi947<<>bLRC85t`9N0LE8&SDZWBqYjgBh} zkBHux)jfP_IjYDKFzctya4*tEL<*vJdPYRLG;mWm)R}&j#KOoX`^xp=YeQIJ>%x}G z)|tJd<;8^bEAJNR-q6=coAq(|Aa7kAgGQz0s`P~DxFL~&j251Np~PY9j~AUY^6-#I z*M_Mh52Jphui5M;q=|zk{=$>3vLTf{Gdk|1$OwDcJ@mrykIgaSut&}jeK6vjh1Syf zqIq`Da}X1Rj`zoU6X7M4jCj=9yy!R^H?%di2k`3mL9uNi1Sq=+6-V0i5hwW?uN#f$ zcm^0^=vvH%IQ<7c1s#%misdOc0Lf<$=yo)aKEYV>N5o}j`7j-2@ElP!Q zE~dsgt6&1R_HZ>47sPQkMtv!X)fhNQg~uO1;?H2`R37s;H5aO3qn%h=8#}i!d=Bnk zWWQMfh|}$z|rVf#Q`n$yVZq zlJd;>_6OP_k=~){t+lZ^6ByQRwT)9J99GvSCD6cgW61{d{vt~d8dPsxl!_^IQsn2l zg|(Rtl(o%pcem~1Ntm{(uL&b%80*RALe>u+`gO`hLA&MXqg=bW-0l&yh^w+wp9(egIv22$*OEgG zs`YLX1}-XrkE;0jdLZJql3zFFdPDHZu!Ef+pti7PR$_%(=!U?6wa{5+$t@A$kVjm# zgZ`s2AFhVz-#Ryo2TudH)y`FioZz!o?~$;1>@j1PwC|)tR2oAw(ymvu_aiP3mA)2; zXK@*;hdW!?`eF6(D^*mBVmQ(>BNVSOce2p5#%yEK#e9E-w8!H`qnXX~cCI*aK={hs zzc@>Q-6F?06}Y<ST}oRj+Vf@+a9kGXK=y@YhG+Ic-}lr+_uR zNnYSVYnIr{zR{NK#cr`-p7PO*x9-o%>%zhjj8JB-h4?eiBL?gFvXUB!80U93ny<$w?qV5uR8CBQhY~yn=xf|z+NNO4%*Ql8~%7yrHdX2Mtxr{iQ zjq_wBt<*DVy|-#dGi3UX2V1BwFQ_F1-q0I>zL5oA0PG;VLZpS!e0P%C#Br zHafya&N>Soyd;D$RAcrsC*wVU8hfFfR|6I6BW!&iRLAWoZ7>%CH)#FNQIap4J4((F zsb!n!3{}Q^KGfc7P}@xnSo>ePFNSKL;O5s8?!q_%|!92yWnE%5H(dZdTC;4S$3dpekVOx>pi0UtmtSO zkxtsVStI(Qh%&1t8B-fvJOGPe(jowu&p0~?HO54{DVF?%9?V-x)Mjs5BB_MfQvwP< zTiqp+Sl3WrM54o=vdrZJG@4__M~oY9YrO+pWtRMK z)12&D=Lqp8Dc`hF^NZcF(Qx~g(RZ~+@d~s?Z5`&Ees;ekRZ}IVf;MvKo3=;CXMlg- zYH)x1C5w^mR_qT>FQ&1@Xo#r`G843|BXT(nxAW_!>?j@9-8IfZCRPZR4`UP2HtIwh z0GP`KgUMVjVQmh?c6MzsIYA=bdps*@xK=N5aXvS~2eUogre2U8XxWt??4dj2gV~vv zCF~xvN&~s^)qyQ-xRYb^GWX+c7Jqr;Zfa-7&7>p>pZWp%CafPYP(kycP31z;)4mVB zpmXfz5^#&g!n?`U=(~75s;n*vUp2p@nqvpEy+I;5%`Z_+BBqf;EHSC66|dKC_BI^P zsQot`+GND7U}Bf|K8%sM)IBHMi<{lOb$^OSvZpi^T93bi*yI->m{DKyF`#xiPr->fslRM_%h&=lI*I)%Gd`J zW3LW#QudYPLg%5_hZn?JNlLT~NTd4o$Np0lTQ!VuG@GSrjJ|s)y8O2N+xs_{oSZu> z5Z%dP?n>_>#K7g=DsD<%SyJR(w%t}Jv9D^t4vrdP?_Cgxt+36sR1MgyE1lR1zFQTD zEw>drl?FQ1iaMuLmC>Mg*_wUZss=O%=Dsh%6I!6g=3#;T{~EBFil~R4-+&Mul%~{t zI0IRC0my%4IDdpY`n_LW0-V@;zMOZ|KLM8uEad=rY%r6yxde3ypabAZ!JMrQZq}4| zRP)f-uKqb2Y*N*LH6=y5V<8aR1uHAuz#&mk-vnj!{d_x+!s;{Y`o}hb0FZDn;#bz3H1u(a)Q=#79 zQK-*%6e^`q>g=Xg0k?lTs}C#5O+Rpeyy-dz$gaxMt7)b3Y$1;T-}_SsyMFheO($$% zcM8}o1H0mNMY0>X+^YGW$W^JliW}Q`zyeaR4c^TU64suoxbeqf?gs-l)VH_(x1TUJ{?AwL|djlH6?j;!!F^Wrm>ho2?+Of!N7SDzdy)&%}!zxJW$`p8!& zAa2MTM1bFxK?rPsJ2u&5qL1lKE?JTlKDtlB$`*4w?YEVPza`JQhg~XJQC=nsZ|2$F zF}B5AK^7Dq6rZo+$-*kWNn1RY523{UhIOK|if47CV9B|FqjQYnRCg=TnyVm2^6pe# zM2B({B0+~9<@P(ZzV{8-{OBg)UM!xFUmG}aRoJ_4LOup;e0z~^sR6a9qxANa-U{tU z0`3;xr-FZ@pw8tVw9q&W89(Drh98gtaPK1v2(%{(fG`<#i-|w!z%!X_XRDqck;x8Y zabkivgO9|M=uC9K9kT(k<-<*t+A8oay0UlTq7t(M-Dl#;zU18nJ2yl5$fpx{U&DLs zqcYKSXb#Bv1#*_h1zWlnRjwAuWHtfJVfYd7a7ihg1B%VwA34aixB$6-?dN);fE!oSStbpqE|8FZvm;7mbDa9J)&R4k zOP?%-PY5N&0X~EppDD5KVU5q1Tt*a?Rb$S>7PvLqB$u5lybFURBOUJ^=_{VQhl;?#b3X@`=4x4};1luUCj~+|6NQqvWNl7RLESAHF zjMhffUMgRT3wT?UO*lt?qdtLXP?rbdHm2M(6EAcidRs$86wVttJvqcP@SLIJ5pO-l z+ElBG-s%VT+&o{9$6t=MX=DK8C0|12*yiuZvDvAG2)W2|pE8c6H_CPLk&?hqAzhA1 z`Zqlz`ulh)^+SIJoj%J?ZZg@jX7_LUi!!ZpGyUg>9d*FM&r_c8FxA$(={aS5%+0ur zjHz>*{;ssRoAxKAl{%T9*N0o&55LfdUQLUXcD0*!Cut(Xy8-`dHm~L;5~>J9UQW9c zY`eXhmZ(IjTVf&^_!e}(=`thZb-#_UwFyPPE2dtVax`9eyfn|2uFTR}&2IIVrA5-@Ohyhh&-UgfKTj_lJo4(!1H`Mhb6{^+} ze2;uliN>|DOXlg7LCy%*4}#seBaCo-W~$Ks?dm4kv1H?8r_mYSy4QIGh99M9CyRD6 zg4F!aNcfB$Zzz`XL=t6woEnTVnY1S)Em} zfDXIA>Y1U~D;rs?koM>E*B#632zt9a zB6qrQc*3)S@%zP9;W6?Y6Qajtd$KS(yb2Cg=INAv+nXHEyX-B)kDg(8F7m4Q|RgO4x9#YDR#&+`x?P;Rc2_Vug2Gsy*FEx%=l|F z;MbrJB+(u8n~`)SSJr6Gx`VF4Pasn=PS>#AH&0zJRB)k$7C2VZ>v}n>sn$wXQ_c#1 z;^*9u_TFn(WIKBdnUu%?#oETio2>zNn~WC1dEQ0iQbpcHJ<;?1M;JK}50*^kLl^I& zs;pFZ@1jX)8-AuwOmw#5egy}}hs%sPEquzDbHhID6vMtT!y|b*%Jbs0v_}(z=Px)= zQe~-!INFMIea_Q{H*pqcSi`;b%XlJiiYI#RX_370tFyzqmJU}Er$rO(>S)RbbD1~C z40+{KJQ3&0$@q#kW(nHe6~xR<)JV+m)$bM1yUj?ILXUhtV7gVUGg)rpNL-CUHJ~}REv=&}dpgqd7dqQW4Yxy-8W0rx_Bd>v`3Ee)TIhT0 zM&XLMB^sOd&>^cy!hpl>>;4PQy^F_jpxO<}dHYF*_keeCRhGbubY&r3 zOOki->QL;}?8>#?x-`9AdK!N!UkeY59XuDUJJC}5B`?TD#E#_E$~@0?!PN5?+(e&k zG5%XQHdvG|r*xB0TZ^TKxBd_I>GJFdCStGFj-HYm-oXJqSbz5S!u|ouWpjcAhP&`J zyB+bVJC$|;2=Dv35RM*kx7npK;Cz%0X)DyP6vwN6(mNUbx>P zxHL7eGj7)kw*aq@Arru9?dU;~ciQA1M8A&4Zu>a~a(Efj6zQ+)RqfJWF)0E0?2Xx7}~tZ;>kc1~|~ADxS#(Ed#|$$(vjiyg#21`h`Dl`Jd>TJ`5a z0RkfhI>9BoJF}C=P_pnhEUoO-14|Icc{pJ5og#H!TSS&E!Fa3D9dKfqq6)Fh;e{0A z7AFx2n+{i(p7GsSQdY#e7k`O7>^c&8&t1_$R(!$KRAhw=-tyUCh|5wImr!#ltJRAd z^RQsqEpi&m&eK6@pyC@SD*1>d|Jui>rt;OuASx;d*Tx{K0{)I*x&YXM(2O4lW9>mb3b=LmZ5oDm%+Y&Ef9Cp!a zpyJhbI{1^Da|Dc$&&!?9k>c-YC$4rX%nmkUsZrQg-o%ae9HBs7X6tV|z_ux1#R2Y4 z2e>QHmH?c${#tjWe*?kUk=||YYXWl$il55`xSd6}VRq%_py zd#KzaCGu6(kZSoBgU$-hefq){*@UzK0s(ID;0+z0<#+Z$G8GB?XYjW&s`*$~g zJCs4IVo&o9e4K?`e=73us+dANGHC2gW6zPo&l3H_>>VZc%G=KEwRRV9iEXOY?g<<7 zNU)i$FHB8IzRHw!7+58?qY7x8YfCiF-Km0&bB%uHw%kZdX23$8lZp9y_Uajx!LeWn zU4V`-y<=REWg7Oxd>OrY%IOr(J%nsx!9vVQIad)3Zo|Cp56zU zEbg(t)Rp&YJ7C924nww&R#?OSS`M}?{_@e`S#e+bP_}GNh5I~kAIS|RZ}Ze`)*u$X z_Z7?vb>N>F#JKODbF@4w^1ANm%fk>jb%w5igIU~xT@JOF% z`S3_D@3N4m{R8-&k{u5r_i2@WUC5gg2SJA*v;s??#8JB=J2h&|)X0eP@tz2%otV8; z#Aad$$(Hm*TTappH^~lL9IuiMse#^Q8-=$X!dn-_Xm5(Iw|g)di+ivW*(tYy{OGy# z=$%Miv~qal7}_0<;6NW3TXf>vLiPK?!yU%&M*Y}gF25HfNKBAbA+o~mK)lC!4F!X$ z(<^Mu4UH?yq7VbG?9;{BNeFe0Ue1k?;@YlD@VD`XIz+C87j>XFA7kTBkfXedh2dcG z2UBY+*KvVpazd_m@tT0tkfPSXwXxd{50A(IN{C(@%5MK8jO5lPLKrJGXHz(`s&@1U zZ(S5b(s7nUt)CZ=?9>5JAY5y zkMF?}iRzlg!&o^}g|1M&+N|#lG0CjR@yV)R6XC!h@BI(qZN1D7sHr`t!d*EzUEdMQ zN3bYj-~w> z&QWVxbsz8EtsZ%6{YX1kPS3XB&uLS_SBkA%qE(@RZIFXsh;P*9&;OFh>-K?`v9(|s zglF*r!gJzz2j2H&HB87e6b2YFCAN%OllHy*hONh-2WCuw zGK6LUFg)qWLxl%_W)Lk7%3PEA?X8qb`W~V+C)fl!mC&jdR{N;ygO<0&_KE-_SlFtR z-#WeNE3SjSD=4WlFlZSs_$4BxecLt*7z(6)|Kw5q@9Dt)<2ANFOun_|_jXe#!KHm% zxE}7-q4k?_;l7-HAfzNVaSlP9>f&2~qHUFi;OQ-d4;h4$fno z&mcOC+J|Ts$Cq9=RWVua^lD!omkEa59oxBx*`mOyyv~6j?kOV^1yfEHRB%}h__WGKq}j$J*GRe z(MHqQR*lu(X&EA?yNSFrwrkwhL*ntg(|B%}kYnDm!u+<>Il=N79tkYIGv6f_Y|DIh zr?w38d`tQU*u;q*^Olns>AGsXXXbS?*~)wxnXWGXLPV6d?+O^C=0v`>3loHIVAfyq?VNtG01`c04b{ zQ^WXNEG)fs^#I~nS>C0d*q9{}CR=9@7vO(ZmjN8F)jQH^^|x*Uljj```dgwOxYgQD zy(!(xo;x|GCmt8Xg=2$Wy6QHZHDsyDQ7b`plD&h0^lGy&PUXqV)4FW)GKW8)v}WbmYyvSv@+cG@bS^xJzCXRQOdGXAT zB0V!=*E`x$yoLO?M?@;&w8w5ouH6FXM)=EFC5d*8cm{{Mz7uvjlYXSzfa0xldeR}Y zx^wLaTREWg$L+c#JGm$TvY2k=6epA%wvC^<&6w63@3Lb<=pJ;c?N?Bhc~H?}+5JdZuE?fa0sPwKccz)ackp0Z^c#6igQW;#0O&Q_+aBHx#HX z;4QM8f(V_~x#}o(VD~L7{p}+7jH(V95hiVQ4GzCXCNS&aMvUN!e+%!3SLWt#VB``| z*npyeRsfjOaXXB3iQes*iZLsz`sO`y8wnrlT{a=R9m^T*u$92n4iZ?^A%Ttag5KHv z^Mn8Je_IFS9va_`;bb83uVDE}57BW6JDaLl&?>>iyidTyZx=v--IrF1p2ulJ?3~48 z?+91AoTH7zHo1)wyzP`~qG}DdIYmJ?Gtb=2{Q{N$lI$MJHa|lX>XcAiu~VdR?zC8R z;rw@tPIX9(ha9z9v}>&MVIk?$Nfc z$?lT&xy-f^2{UHGY!a+@@=?3mqv&zeKF5VERJlHUe(mUy;efeD@KhcqE;bzcjM~Ps z)G(eR0~zPozXSwvUmArC>w4CkN123#*k^7v%h~z6^FS+&D^%iFSB$R6eDO5J9b16* z8`jJCAX@;x{e8Y9q~Ao|!SmY5uE?gq2{+02y4|J8>0PRdZJdAENX>r$tF_*3NRTUL zSBalqaGPCnyZal?Syo1#R9@_G8K;L@QV-qwZ(LWCKlA9SBi}XzIn^-5E;eh;KzW%Z zj3XjENR$a3Wc?YbiA++U6-h?#xK`9clk|PQiCU7}FHZRCu(f9> zri8sN-S19Ye|whKpI6E7@lFh4TgvmvVI_6v*!NA=jjZt1nu$YMjvU?Av!AQybZkZ@ zPL*Xg<)hH_J$4D?hDdnK#NWeXK9AsRczc*Lo4lwb<(^o;NVctAEehLc z5mPu!IR}mr3Vrnwo|1)wl=P#~N@90m9vn+|@K;1AweJH0cF_8DN@_;8?tF~v$%+hj zT3^1zW&d`od6H^EIS3PP&-u{Fd;L%>{vIjOZZp2HM5n;uNcVo4shopqNY|9`at<$0 zLkYS_Zo9%FL|JmeiU#Cw82jVjWh>aYDrv~Oh8L&q3pnp_p61YsJ$x-QADjk4ZbY|- zok*TJbO#OQouDGLYthKqT=k_8{78vKG?5d)t~J+k^-9{$4cbiIvFSzR%h+>cCi`t2 zE0OPt%p~etps6aYXsO7yPv%vlG1iwAD zWxko)c}<;fX1ZVR;TL&g=l&I0&_x96*X*S|sb=olENzrFwxqf&}GT&i;)AH60zujpUB*7d{qWzgSB_ z?5nObKh~zeTG}TIE(s)p4f!d>Bdkem4kTKzXYTr&reb(yCRXn2hWqfFxT|*QLsH zF(NZs*6O0r=!yBW*~_+sT5#4&&dDz(yj5uQ9r+>e1pcsU{bX~wIsQ`(xdOBWokY%B zmBVTwB9PEo)M7HD*W5ThHx;m?V`hv0BNN5ht}6K^YAjrZH$4$DPiisU?J!emY)xz&q+2yu1(L)vcQ>qx3z(`HE{9Wvca4Z z$mEjZnnZRL9tL%915DsW^`)AgC&!+BR(4kP^n68ZdXhwfTsc>)@5>$S_trhG+=(q! zm2b@&GAS7s&B_jsjlt2x)zf!R!nK;MLgm(= zTq|F@vyaN3e_Ad9c3XlCxj1dD=T`AKZGclP=i7g_{gARX)2|yEntn0FSY32MGWP_9 zthh1Q_&Y%&#nEknxnDbd9j%rsw*(V=Wq0Jd?aru4eC54w5T6jRSl;}6D<|maK&(Tz zfjxd!J3kxwNgPV-O{C1_@TaQEFRBu6le^5D{0lTG$FAFI*wWrODS26*4c(cjE3t*@ zY)wS|JT3?WOsuX>w+2g*S5$AE{YkWX|GF;NNN{S>0t8yhSsi3e5&(%+nRoPT=OuI3 z;30(TNa<_wmOw*yI$It%ttFTMa__R&yvv$fcI8m1E!py$QOir02Xj^@T1uUEg5>wx zR1cA#fKM>wIQd9{SCLULWb)Lwedx$D8U9(?ocVqk5P5=hy)2VLK#b&twJ|NMM2{8Wm+qqDDeBI;l+nvC@hyZM>*gTNN@sYJh|Zn#o~Alvb^LefPH2R(o47f>=9~kQWh1pehzy5!-sg z_&~7`5SZ`3_Bk^I?0wXqWX{=VKh|D*?X~w_dp)qUcE=8nT0DqxN5c&HQ!Rfc%byAI zXPo#}tco2gTzW~SGhGoow!iU$%+~az*zv-p=VrRnXT^^1Z!F4eOBcp6g-i3fS{oJ1 z>~GA=Y==IBu0PLly%r3-p)>xK-c?K3Jc)txo#OHI7M(Gw5`PVut~r4Zbdstf+(_K% zU3CO*Gl2_Dk}lF6ZauS#ay$hN6Z9*LnjXY#I~M80ixm!mV}5^fl>Nz%I# z?fgupn+u;<#^qgw?rKI$)E&oC8Z+`p;D|S|o1w02(?>h&9PZI|4t=y-g1AC~EscYN zvN1KZ@{n;~;S~;0=#7baX>6$2yXvR%>DJ0vGM#$Q&0+naM@i5Vx3I>(=SCeA?`s}i@YFP+9q(EF3Wdt;d2QpHsz*`;2s@T}}C z>X{_@-8JgTyS}I<^tjg6o7#(6UAuSvylS;V@S5MB+FPjQ_wU>n+v{yQG9tRj=n`|e zB5Ho()anX`SBLrl=6Sh_wA3Ez-ol1M&j;_X@m?6rPZ5Vy+i8YHPS&Y4?_vFRmk{*i z>P8=W=PE1AUF_WlNkS1LBV+esU^-;$bMaH@Q7)Ln^*YZMQBy z?GH>3_~9O9N_zOE+IyFBUG%45;tmnw%HGh?q_ZnR*OIkDH?T3AUZ{}baztD+3)Ak1 zq}SZ|tA9`9-j<*9 zH+FcWceRk4x8-L3YJqLu7F`}Hwt8EJq)+mI8i71Cgyc^#YBb)JAC7{YT9&hKc!#I- z81>w;o9AGS&kHq3iGOH;gWiXB$g@!rx@~tgcE*F}Glp%`-6B{W$zq(qlUgB=}lGa){cpFv!w{?w{x<*rT zU7~0_M$`>sz3X=vkX=*it&;QzV~bYWXIDx?-ba%8J?S55@xsC4|Ebn2gcf)}3VcTU zDG(0sU<;wZ94(z1O!6xIiaQ2Hohl15-#h}OM_k}zsq9_ftFb9}u?vEgm3A;3bh$e| zvwEZoQojO(jH#?^(*du4{i z-D3tX=9}JfNA+MeH6ENeEF$SdFj9Fnb0k@@`yBMKcSnsb&-~sveqf z4~msYY_QndQjwiNyR#GMd3%WN5y&D6vfq$9+wV_J1DkY>9XpRG+Oo*BJJYM}+!ri; zMayp&n)sNT0H{3FKX|Di;`%D# zk8YN(kN6-+VT)?vMXxDydSkmKzs&~vcs3?D6Ls$R%&IIiDB;#h#z$~k@#oNn^TUsn z$^W54=}_tj$}H`i6R!-p*aXik)LgGvmE-Vk@H>=Luo05po<)aV$K)5>H);8ugEIgy zc6hRPb&FzlsH(v1CV5vElfm2aM+PJ|IDx3t_Q-riMkXwOO68BmRIkbYfVP1gorm8PUm4AFy>!j`j2+vuSo-9QXWKiKfblI|P<#R;Rn z&poGNEBek)P*^u+Rz(t5muN3YA*_1QzF>8@nu7fn`G(ahWK!l8C^@=^=JpI?e3zrB z98QFV!3YdAcZ!M);fByf+AXc^kAugJXq>&Ic%ZB+wzi)mt}&DGqsBC-j>V2 zxFTJQJsg9d<*n^n*!Zh>)rLBR#Q^#B)k2?=2vMIUy!|YCi))sOK1pSl-W%w-ryx2a z7N-u0vNdSu;LC``U$ycQ@Nya`*0ptC$ZCpLIl!xyCf zD*1Dv{3&4&qgBSWBA76r-cLUi?$e)VW^Uv4fJihL=z4Pq1YPw#`W_t&wnyB)F5I5s$%p!onhL44VT z>0@1zYi&Hd>s+}Re=?7V77_vP%I9RbMbNCY2|E!<8@ss3(KXIr+}><8zw{n6w0@3{Q#OY%evvzl~6{^3HPHeL{>x~X`fPx|cBW>}RtOP8bpA%b| zC2^OzmQ0~~SKUFk&)qPItmgMf$#&?Mjwb5B=g)Mv`R}Bs-Cfh&NHJW>?MQsKFFxCY z6OJ;UUiwz3dwM01IruG+-({0^Rvk2a6q@D%pg8RFt`yE|e-UuaseGY3%O~L{I_Q%g zu8Xn6Tv)Qqm%Ia*g;AzgY!D{%9M z!Xg@Gv7y4o5i!$~_QZxfjV_LMuAnbIygsobGq*L24K@bp2(VzDD=JwY` zx7|ld&5}y-fak5dtx`PLV}^e<%k#D6+)#*rD^8r|kI9TrMY4v-#~;)jIdI6rc5SWL z@F!N4tBm)NF?Msc&A2+p&ypvDC$+=C?gKYO-OWP_edF; z2({rq5($B!S*R>L!fy`w#(zD>jE*?V?0BB+wmt4bA1)JKm6s*VoL{ zw&Ms>&cnHX$?QbY1k{(!Nk0;jxeEVr-RS0pjFBjQxXr36QV-#RJsB$P3^`}`Foa4V zS&Z{kCVB@G%_wz+j4#pXRV5+U84Q>C>JMcO^n{#Ok*cJ^xeg6edy<$J!BZ}fm2)3U z4`Zi!j;i@;pXlnj;0v#sKY9%mIlq>z^~9xc1j$4sp!t@N%^7TS6MZ}{l+nsNP<)WH zZNxy5nb7chOCE04o!SdR)~xxu)5(J2b}kCCUM|vINv__JdT8Z&9scAZu5T!N4Q1;P zgHZPJh~b>+T_4GFO;;X#5C!1Trv&+&dUuMbKs~$j_|;{rq?NlnVv`)h?-$U26o8Cf zvl6J4F$=82^~YDZzOxKE#9{hHd=Yr?J9 z%xYb8j8Cm=j;p_NQsLWN{>|rKCI1%2*F-q(#MjK_Zz#UTVf~a_KR)ZH#QG`ZC*B-V ze|7b@R(-hU7Am^4b{^foM4wKf;#VL^1qCmq~{h21SU48o+c979&0LoeL{gS%IculXZw zr!TT{oYN~AO1H$0oaJ~TM7lMs$VToy&A2Pl?7bTd6t3yV!8h1u`OvDwJ!N=ez zWIWk_I=DBuc6Q(ZtnwfT8RX1tBn{-=Hj<5;=Ou$Ew(6N){sa^*P=}D zviaN&0J@DH-tS4z2*;Lru%#FADGrInhw5E|;Cd6Z-Xg{sqr!;?_Rqlhx)x6|XBvjg z2Y9h~FTUinf<{RQ)pxr7fi;6nponWIQelQJnqC{7Qd_-AreZ^>-e$;ju_6LWD^G5g zjcIqoU6H^C-UmbM478UZA24z4TyA+9u<3lHpV5pMF^@E0^o3lHO7-TA5EfqYts|=u z6FN5Dr}HgM6psxREu9=2!uUr~BL-|7J&;8IQD;T2sD{_v*o9wRWSKCJ^!(`Lz@cTc zLy1j7x{0rHOYP>?O@g9rH@8Cg;n-#_+_9)nr_VRKaJg#yF}7!a(_7wHvaojQcDog? z-W91&nhQaP`STk9=YKv8$R(7z4<2T71<8ekLvcfujT;`RB5oA&^8&QW1=yA)<56Cs zUy{T8h)6c+QK9&wl2MGxR5>R1UChpht=VnGNE5x3ERAmHH!$RSCT8oWw3NxfFlb6e z#fM`GR8*4Z=2TRY16)HonMpQNo& zVCe4axmZ~`M^v(&Coj$Uyf0myF`rT|4da@w{2JPp$Mcqs=9Wnw8c!1)tzi`uq<>GC z1o3Q9nI0<59$rn#nz4{^N2=nb< zDg_n%9ZP=ts!~Tk1vYv4<85GJ)dC9(L-MlRewlDPFN=9miaZqm+OXmmJR`b|-WDtY znf0%zYIoAuZ~ur=mbe~B)=TbTrR3|24_g|MmOj=GCF!p2;}W2KpiKl-)(C^sVaW^kgbI^tTpNQieIbN{%!CEp&X;Ht))Qv(8`Zs zLOBahD__D;!pZIb{N+>I|Bj?&+uucaKXiUTrF7vk+PB`M)wREXMU2wh-iC%QwNcab zWj;K%Gm9E&PEccyhx+PdM+qKg2pk(W(w4%*L>rDD{wkX?)`nv~oXwn@g+o>GR6=A4 zgR{pfr^(;wMmOWujUhB^%>BjEoqjbgcB9g`IfdneNjSX4U-wB?dX{VPNlBrvs>Q!_ z+I>|mR$DE;ULXh2UzIKRA+sXMy;{@XaMZJ^Oy%(yj1JO`VI5X&_v1$+fg^YKK1SBmujaTh<-)+50MHbulWo%Fk;m-oz)1#!)z6S_PZ|?rF+c! zz81|x8gtUOd;W@l%xIy_m#Ed6cT%aE%b$(Y#Zw?sA6nL6qhrN5&F0-mQm$a6jTgdk zB<3Dg#qIjOqw?UGD%R1VRjzYIC7*EuI(ouGZ4?|36Z2(?D0aV0d?%Lvl1;;YTN=tOa4ko zOQ#upg>CvsMrG6$Xy!YXxnS)$5Q%lUai_mH$yj<Z#&YJ5Sti?66bkMX@)#?N z&6gfjJwlt^_+80y)CQ8($gHGTk~ZMr%VgOo`|e*@7HtB_p-Y zR|pj6$5~_&uk^$-p&h~R@J2wZBI+w(XTs=XbVP4sxf}eMNl0Ay5j^>}p+evI@2HfdnHd7@j)TG$VJt@1qVj%-`0>-wOEd+;j9T)PI z>;VW-iMi?78?O>j#wk$HetFHTn821j@JV!@)TY{Ze!Bgxu2b88PExY%A4(2y{~D|P zk4D*B7@G={*T6!533qJe?i$iW^9P6gp?X3}$uPzuW%tTl_dXwUint+ttw7o~x1W{dSTx;I^W@B#B$g8VgnUTQYJ zD;s9X(f++mrsjcn`P6W3ZCl!!tH0#5XU|o|!c%99N13#DB}(9`)P$8nu{+yZisXAM zKi3PDx3jP@6<;iqSDNAEF1A#Y(Q8tMROj=6A=SnmG7t1q8d*Ri8|TXyPqx0ORZQxI zc`7ibl0&_yL>p;$Axscrp<5P$lB*Q3(HjXMehLJP_L*;iQ2d2(bD`}Df1*z^#yC0m3xMcIrZ-oJYgB4JuCW2 z^*XnVQgjqNuG10q#K&haY)ZK$Zb>p6=xqFpVt}$lqsy}a4R`Y#8e-+PnPZi9u-h9Q zVQN>=7PA$#szBQN(3{LHBQ3!ih)^+2H8D4A6flSS8fJ#-UkSS&lamW0+C(27hG2~S zmOk`El~f_;w}k#V)(A9v)yWEfHLKuhTHxbl6LjP6cyF!Wn)_r|bQ>9(JEcy9py9x= z#uY*dReIoUZ%ahjj4{u;4&q?O91j8{Qd0apRX;9LfoMqp_s0#ViSwed7yg{iUVJ78 zYSO~>?}j)}v+RUaFAosi+56Db%+pA{tPs*ss2gWx>Oht#8rha7tI`)0jf?0Pn8Jar zji#(9K4I|>Q#fcK$%dRITXxjy&z3Xx?nvO1Wm82Bu6kB|%R0%-YMk2R)m)p=;R+iG zX{fDbnv`vIk3rRIPTvA}_4-wY+5Q`4L{4XP@=jdd?< zEM=B_(om;QJIzB|tPedH)Uj+HmY$XOu1Mc5_k_ zZ}A%$#;$Oz(-T6cD*6i+Dp?o2EpnAELpfKFrp^p)9DBqWrw?9~i#a3=CYxdW3XAE> zkPSO7)x99c1XNZ?e&K#Wa<;%<_gEZ%sbb`7QA{0HTL)VSNX{qu8NRO#`?MK^$yDnL z)w6l}WZCJ}>(ntRI!5MHN>pOs3-m`X_-EDLE<2Pg0C#`_#fDBC;}-rw`VHI59pkQ& z6iTRL+?tIxYf&gkQ+_yYi#_EhLepO<%6_mG{^&W?kFOW%KYimFFcb5%(b7tfc^Uam zaK!?IP^WOk0fbv8bHzVM3gD7bklLGPzQrZgFx!DIeGA)x=9vt}skQ?-oA;10ntNQq^6WxOvUH=o z0jP>QXUj!T(&GzZ+Rp7zq4DJs6`=TVy2?mfJs@Jvz%c}a;Y3wSsQ!$Q>r8VpeL`Yd zd7s<(b2=XhTqLo`UD4^&Efbkj@VbDubZ#I zTq4E|o{+)b3)xRyyz%j)0`}LqYT@EQE)lpS(0tr0#5GT=25;gf0hyI0vf9ujNB?7Y zLKdf({U!N;wCXeo+w0#f>bQ5R6tRd@j#ij?rd#L=3ym2kb_{p2!w_St|9sTxu<}8s zl4#yBpfY<~3?-ZTlqICZMYFP=Y9g6HJKJ>J50$ICfD;=bsW+s)es8I|azy$mdFS({ z9FxbkqD=W$k(sW1N--VzI<8Tj;7{dD5JfQsX-gx(_FUMBCYQ&&YJLE-}R)uJ4+am{-1E?cJpL z58#lj8r+4~dRKj&H3RUXHsC)1v_XVfj_w&O4l+Al$(4Jaa=P(Vk47|cH;Y_-pDD6S zrCmKzM!~M*2C3sh;oS8zJaw2HvvkgYLWsdB&97=i!rj! z`%+P%m|tYtxytz#PIIEOXSBHswWgs-4VUOs+Z)Pw{1yr%O+$+t3i#U)t?6=mMyJo< z@7Q!9f5)W9@OJ^40&dSFt1h%{Vae%|*b#!0#f}i1>;*>7(OQJ5hkVfkU-dLLh3mPd zAKB&RL=wNs^Lu&#NPpH6+7NNMCiAJOu_RM~Z=Pu-!eJ6u6&kOYe>(~WJ3+fK!^7=) zz-;7TIg+5#zxnq(PIhBONle=SzNqUcleG>>y8hTjS@E`g{*22@wccNpao#c5go zen(i4vwy}xivR5g zc<4Z&eV!%;G+s^O&PyQdvd2;3DdgevKjwj(%Hqj9Sb@MfY?wW)3_9BLT;BV#hUmv| z?T6sf^6IBC34dZ|qJS_GaiPV!c;b6ZmZ3y(&yQsB#030MKUy`WGbxa9M<(|o6F`zs z5WdLll!J#=3fDb}`D4^z$$T$j75syU8l(k;9~IcZB;l8A@(=c z6ZsfU(F??$OyC6)i~pE6NxN23pY8i*RnGs?V^X_ir7ldp3v?)6sCwga4?fy5M(_Ne}-7$FJzuV3;Raopqood7~zzP?j=UisF2|P zv(LN$83Px}BI7Uq$`AirZ!c#i#M_H^ue6RoNv;`p`I8?#1Iw7+R+NwBQC;gi9JTCV7b%4}GZe*?`76{+3v6qp z$5jDA4zOj4uaT{XLA!!4#(FdwXQDj+xV$%S7BpJ+q`Cb^r7_~;yYn2}3MIz=WD#SM zL^0-^9i{#Fk=V_9sQyp!;vM7&rQT)(v5WCB{ivluQWF@)`DDSPFl!B0z{YEt;!zJP z6u<+2`RCAU zAe!hTJUW++xMy_qEFQ|8cf$*;!u}nZVi%dy29#=8XjZXaH|thnbO|v-=i4kMXXC+X3sj%YF(l ziE|(O89iOEmwmPkV1&xcE-NUJgp0KoT;yzXmuQ#eSL$V-k;F?{$wdJ#P|{hHA(mniO_(eho# z0T*hSg>mA`u199eR`1upqF~V9@{r>L`Bb942qObCJ>K;lDmm?v&kr~biT+zkOAVG# zfgT@a)vPMDOM2H2P|nB|0}yE?TMuIHO;^F0qFQPmymldcNIuO4elm-dfI|mWebw_po^={pN zwMX~QB>l!AG-U*7q)k+yQBw61Q&_I!HDg^CfB1#75XjVguTb-^%VN*&uS%hDer?1h zF)bIw#V1-d5?t!LS&Wk+<%o~vf9@glxfuonNigq**=V>!tFw zbtZb}NekE$X}D#ChG9%SC(>L1mdaMzI@4`*oLbWe0s`$544+gEYXRy%xvo*vCBu;e zvQ-F3FeP|BsrYExNq?$R+}*dIfF)m;W5J2{0;&GQ>)4Ya9|wj`eDrEYu;|iJ{4Ke3 zCgT~LaH+r&^j$i$0LD-_ESe+yuKC>(*fdP;3q(P(&$JFwVEx()=de-N5_6s5`ef@` zwoEpWM?9AeG<{S*y>)GgufXl#H|G4rrG6duuL~_(Nq5-4E|--rFZ(;nF2`@fc)NA) z`j&#TXkGmOPH%0Axm0B>u{>2tOU$VXbCE_N@nt)#m~&XMJiD0FF6OX{xhRHG=oTT% zJuc19-#q@hl15MJu;;R#rVmG813~}x@{zxM9B^Uuml_gcqOp*_Clvc|1RA9{f>>oE zs;6x{;VpM4WH1#@f$J6%UPiwm3wsq_)#e>TTbEUm~W}UWTsw%govd4RV$exDm@t7OLM5aVAF{>~>evX0X z6Vclg!|FY*P--8JLLzP-`cMEX)2Y?HCi(_$7^Whr2*-{T*0t)VyBgom9sZudM^-H0 zj3W2wGskl($ZdokenvoBAhFKXMkr#u5su#=fjhEVTx=f%zB5n27s3=Jw~t53)s99Z z;SM@j?%A(s?hqPu>RiZO>H+U^IfBXe@5uhZxb0U#W63Xq#{EB~<#H=@ouw-u1U3nO zTy4xNn0YL zA<61O9jq7AST1Tg^XbtiNGX?|`gC@ARbtVP%}Qh06u=eeQg6F~bEaElw&MDm#zQis zcl=rqw65%jKrT2sNm4BP#s<+5#TN&XKsePk*rgqZOU73{AQu|(GhI8pFYNU!8QJ{N zxsa4>RJ+~Hhec}8xGR)+=_sVKQ5eU8pNY~Q1Ekz~{4+ZtJbJLZ$H1Y+aF?k=HI8bQ z6^D&f%%>_&y0w7%)c8II0+I*TiXp<1P{k3Apx?w9{D=*rB?yTxxt+ zFimGfMohOjWpe$*l(6>M5k`e!umZ$n>1=}!F{0Tdw3N31j&aWi(#mITSW>J`u& zOyHCiNAwf9RX->6c&L7rb#+$XqHYEeyX!{5>a+_RdGzhwqu|Z|_w4#8=f9X=c>ljr zzpNPlN`B_czm$K(znFjIznFg%@ozohSds~hm=ph5Y9Mb@a{F~^SkssN-}~pTrW#n_ z9DEe?20B<*cf^B`L~y5djOv6!#Vf)fY+9eX)4TFfW?S_SJX4^al~=-)H3URXP03b` zoq-O$^;!A0>|A17dLX~}S;m7xhS=F^E;Nat_Ws6wk@~e|O~9?kpOsAbr-=l1F1ss4 zgjWgtFst7EP^4a!!*xTbq9=k6oB9Q-k1qSdti;*}Rgu8%hR@V|g$eXX^;!o zA6Rp)$8fJs=NTQB=FO>~*?n%RSiU6!7ZSps1p*T{qpEF!En_+J=Sx=&Yac*8AVz0+AF{LIXXio31W@FBRzd9Q3|4H- z;&#=qp;%!x)(8+FUJWbzF&|7*7Brt+Cx8A3m$ItSfT9QQYT@*vOLQ1qfc!{ewICsA zG#^FgETeO1SIrM(WP*ub2-cU~rW-$(cTrFNm8xA~_4@c4*1S;7;v9UIH{0!qiQ10k%QG#!I#Is-&H=1q= zoUTiOhy*24*?&TIBgpuzc5oph8cIsGZi&#h(aW@#EPjh^5LmZl-ul`TS?QWYy0OY%VcD;%ht%j2>?;NxApQFeip?yPAZ}sGk(g4O%D0IX@dH^sk)rP@lDlq)0Qb$=HR4#OCBdX zET7tqGUO6PiOp!+d$}{K5J4#MOKAx>B8g^cEM&w5S}RtT@k)fbcpGg=DATE(QHf5) z#S#;+Ta-Yy>a95s zzI`d^BrZ+!2MVzRP{O84+D~7iP8W#Tv7r&zFTX?vg2`lt1Q2+vYf03(5(er%l}&{YXIYNv=m#XUb_-*aEZ3Ln<5bzcZO+3JD1?g_t(C zq4Kk&TBeT#S<2Z;W$m>>_06g!v7*Ps{oaWoW7=ONEDiHvyZO6&Wt_H~JE>MId+vKn z%@*0M;%ZM#mfGwgXv17AxXr)KRa;YukCbx<{4gKH9q{AwYmE4a*p{{|rIr+>3Bj%0 zf6BPw#z?QeJUUuS%y11pj?ReI_Pz~bq^1g`<3WfjlvtzC%!O0?cUckI_V{<;j%f;J zQ!>9W<+2eZS5o>?VRYO=kNr=lR{fnqCUo@TbY9z*nn$JM%P%xyGFh>@Y?z==-7EgV zT@9yIKPq%8F9bQPZ99^7)jsdEN<>H1wr-llSk+EFV);L$SakW+Ee&Ve^*4-8x(DwZ$?-@!X7>GuV4CYfG#J9fqgJ}r+wK&eESxQp6wY1??U{*-)nIBH9}wn1^9J9S{F*%gVccX78-UW6(JuC`hY99#p1EaB3*b-g`!Y`;j_L~nwDouXD=uo=I`bh8{LB-ihnnAqs<2d)C48Ylh@S1p~ zw+NvtdVq5*P1PuZS?Uwkqxk+>x&sktZJt(cqqs~K|0dB7_14d;maXv*Rcu4aQm(7` zN?m}t8;Bat%mMiFY5;r_jtfSKxMhL1T*(po!+3dtY9eKtTuy65NfN*=RTN5P;@cbY zly6XP|4BeYk-rm)^tL=l*Q8pTxi<;tHTE<9-j*iSYc7R_$ltDD1RhmgRUBdISvHq7 zeRJ=Vf9+Ix5Mn*HPf zsi26UM|xaA9@`|_g}i9paCXM*ATc+Q?tm{#q4R>(|0NS2KQOVxTU7KnT|Ld7uu8+Jx{OxoiMa$u@RHDW2WoSE~&*eSWMnw)1(wR zrrHI)Vjk_m1qmP&+ASWB(azuD&O)XV1Zh(P_rFLtwwaxeSR_+>3dx}J2FZkpxjCHd z*kmy^P%%*|3`%j~8uf}!K`n|ZqR9YZUEzTGy|FWCu~}`HL>lf*jFR<%HeX?3paR*k zy)1z(=atopZ~ZYi)+cIMimUUFvZT^*PB`%$sf~ooqIU2%U^C+vk`}D_FV&J#LzTX9 z;a+@TnXLUbtNZaq4DO6vZD@O0Ta881Z6O~!-?t?nI~Zc$iP4eLK#^?$_xFlro=tN$ zB-tuvQY8C)B?g7ryxFwd_?}S{)KGr~zHnU4+w?SRl86*Z+bFz2ts%uX0XppK-2KNh z8=o2r0srAI3QW>QlcsL>aq0toh|_V!bGMnL*dNI}9;Mu*SfW3ACF?nxj=P?qayA{Z z0btWn%ccYA=iAw*{e)$x~)m14)w+1JY!f7qtQzQ^W< z@njM1og9&ZG&_NN-ZvhQ7(BH=gaNjAJN22rT+0A@B7lw1)TbLg2?BG&IFa2{$Bsx7>X{VmQi)*gr2ob`id&a6;fwD=~5B^DqZcWoF~SYTwS5lQN0K~jtqGhyI7%(W>>+w@^DOiqF^4<63=CkBs8(zQ@UL*J(eX2MrX+AQbilfLYk{vL0p;I zo@bc4J+LnbDW|r2jK0!+l=E+=&C+f8W_D1yC7A2#R0XS2+n|Rm9hwB?qpY!wB9v!T z^;``}J>Rs(Rc;w{WJ;=nY8hE3fJG4fn^eiz?|zo9GwD%8NgX!&sl z7owkU4Su3!oT|40;veYJKjK^gaf&CCyL=;JrB{$Piq z`)@CsrpFh${aA>>TjUm8CJoj2KY=J99?f`D3}dEHXAX!S!K_8M{x=7@}f8h)^ zU-SRP|9;T_f&W*kHf2yF$|p26PayNZD@G+gSGVr}fSIEEk3)W?y+WLJ_j;+>!uUXk zHJ9S^3qUW37Rmr9e~+38bZDS63k3LOruL2z#>F=wUd@74UsLO@l7gT!LBn{~=hA`~zJUtQvfI zf<;PX>cXirXCEOWzg{*^I%dHEi|7)5>=#Bjkkmvtg?73%03EvVQ}rlqx;6`?)T)X? zLQ_;!ZZ{e-WGVG;*8JTA$+%WVE#=^v{0dxfVwIjtBSIU<-LoSIwdAlOQ`7$r!~uSw z1PBraX`x4lOz7}t)x2)C9?Ig#-{H4F9!M%k;@T7-m?Fap2tqCvpH&=4)lel2gbvKj zqD_^P9{D?^2bGkEmQ@!lLKgay+H|lbST|a%aRH-rJd02p5uMaDP3ozlo@!`DN>&RN z;aOHaRn#M>0J<#61^s`w@hRvH+L-7C6W|MSvPNDoQDs*mqmhN9FVEkV#bmZOm4GH- zOk+qbDw0Leu7|OeG=&s_&#FvDUeMc}MXueYF1l1rT~2zWE6ifcd=h56#OHZA{0h{H z`Vi1qBx%>MnHs7D8aGvx+sL)(!$OJ$kHRlxz(k*B&qdy{2v&^H|2IV=c&}Q>I@N2j zJRvQcNYpr~ah{?Gwc`{(pmu?y05~E>I~*^fhDJD}3&0^wd+}G3)sF%@NKw6D5>+ZH z!4Ck$uKC}zsw%XwvV{vvU097^2E;1jb#;^6;tTG1i`6YCp9l%^^OX$PZfgoH))h+@re9oH8{=W$7062$9|Htq( z|36ec6NaPFf5@f$>gSq;zjd+uQtW6a=XpU#{7zr0eS`qZJVWVfi3gWkG`y zYGv`L%(u9yYn#vpuI1I1!T-K6`?-3eW&9g2p0gS@PuYP^ys-*zrPlZ@Win}Ck=5d< z+G5DAt^BDvAeR}-Pa;jl{ljR6TIB!@j-2bzvX)ac# z0We8*;M9Lq&}xB@Ln*IwL95X(r3I^$u8J=eZlt__8_66HWM%Iv zXyvIgi`UW)5Cp$61_rwG1rgvgZb2PiI?e8bkb=VHF~KE}496qjDl|&je1Sd^U+O6B zQwy(!P7E-iglbh8{qf5i%&pH}^>P>m!_Ws~4yqyy9Hcc*#xbNZSpGvYln{$sp&Epr zgl#^s6Lf8rfwCys8YSq$Bls=tAitttL6WSirM=|eW>f1xcaBc!0jim7ZFD#gEDq25 zaB#3Jqk|skJ7C);5UO%*Cx6JoEBq>pR^grSsRiIwD0N|>g<0VmwIHRGyU*jsp?r2E zpwDkjHo6N|UJj~`&jsHS0>qa?wP1dLZNsu6HC{;}-%^NfhoWE6QkkC*i`{P1DjT&d zrN!^Y7rwQ_km(8lLay>yZ4sT4Fk z(lvZ%Vrb zJCKdy3oc8qUgvH`5mTjLe0v_>r)5#D!<2-4OlftB4i63qi;-()3%1g38A?_qX=eaB zr+wi*^G@&{kPdhQomr&EZz&gu1k0QZ^LqtiVOQI;9Ac}DZEYZ#MYkTWg^lzIW-Xqe z7(!_u-GTY@DFtR+oC@T$YfWVIm{`QyHUBG`AA;-g&y$7ck7^1Hw5L)dTKj{RMYH*f5RotkA#^J6XBZ-UAsid%ma^R%w1Gn#*@n0n_P1pc3r)kzR;j8K zirJ&(wxPYU^!g7{8X`dhYGJj}&Jzn>2X(P!gW*~m6wTGH<{KD0Q5CC)EKl(}r&)^z z3XG`{6moUh3l(+2;?c-f2c8oJ{Rik(h^cP$4Ron8fA)(*o=WLhO7p(~c`XD}t}agS zYNB_5!xQC|JVBOBVG^o5o4a2rVARP2_+8M$dqQB6uz-I!C>;*F!s9@v|9#n=-r`Y} zd?51{mnkfxf?!SsB2n?l7mMKS+-h`#{>>Kk z&xKSe0F{=2BOysnQHpF_NjV9~zzK2Gy4np(U?Few5-*;>vRa2;wYRSRSB>q^Yc)hN zK>$%0f(SXtxl%Hj+E2!URcCyz&*;t}gHdS*7drD`3bQ)#+_1Kc9n?Ng_rJoJmGc>h|oEu^i}B zxOokds`PV>1ALkv6dpCCMmiGo9}^mi28w;5U79&x8 z^1nttk{MFE)#LBTa*ylS!q^DtwjtG7-&L)tVYKGrT5Mg}252BRtyY!&hF7Q4d5v3l zhLM=TJe+umc3y)b<>otwYhlE`UgC&-y~xq+be0Bh?&b{e^wtl$HP7)kUUZ7?f7gU>DBQD{zoobb+c79S-xyQX})f zR)#SoVpZFuCU?J#`8X@L1Y0D}h`g=#eXpE0+xADdiTN%Lcp`CJDKP zN}`*vDp>g%^I}DW5^OyUg0{2vy>H)42yAhlldEzK8)!_=c9e=xFX4) z2J7Da)SM3U0dnfb4Mke>+mcyp{zS4zxl#ZYmE8mSMC81HoY?Yh93k%&uNm&C@lm3d zDzTin?MmQBIx%|!MvRZH5LFL~5bCVRT*(`zW_tXFBL0;~m_RS?%qJ*co_*$uL8;ZY zU9BOnAabGLP;`rHxu55(hPH6j&6)XNge?!4ZrO_!(jF@v11A*nOSLd)H&VfUj^RK{>Q0_OU zTazi4bRn;p=+O*IKlY_z>A+O2p@e}C-i>leB6cU`N;v+46Inj?lk=S1Cgo8}wdn3h ze&M*~L8C`yqoB&EN@t39;kGWDUDSm=Si#a8r66*|zWUKJ1T_mie(xDg(+bBnjO6c_ zD8}PN|0MmseWF84vGxuuZ|L4tfUDXqZ#sNy)cu=q8ViA56Aw2EfdCat^`isp{jNB& zh#mGdczA0N?5jK0j+ezr`AlVCDnzX`(b=-?QdImQinSxT4yyV$LCW?_pZOOVQqgAW z&cjQ?9vR)?7Z2bdoj=XDxNzF?dkVOQYIAZC^}%nP9hWIT8s6u{T@wy*)2An4O3MbQjs)f*fqqd zjb~L<8qdu&{5RKHenm#yN43UmpY?X=UU^f_Zbz8=$Fj zl9=r?_gN3M=36|(>KBsbCjygQfzS}z194Qp6()uiy_8;0a5p)@U z`skT32J2kLilO>8^B;GJyS0(%2qp^LZQ{U1MRi3j=c7(;1O&e2?b_*7JEXtfF}mYT_IO~2(R$Qwev%PYeP$P z&`UkjOF}j7fhc$UbvW;yK3}NO%O^%?x&RRhqX#qW)m)tqwCF%Mr&p&(D+lJ`n9mV1 zuC%z;N6(<01&W-rfj~Hcnt9e-&Dqfkf>{?o1f8tzto`OvG_n1=L-8*&0$+yKzC7Pj zmSv5aD{J_LJF_rC18vey&X#Nfj!!KSx6l@&Ld zYOmXV&Y3lJkwmQtDHNKYh0}2>d#OMj5-n2bZ7U9;L`{tjAeA@I!}o;xvYi`ubIKUe zi^JFp=+r*N+M*~se4CYjYTt#q&KzTp<(9|%M4VgXrV^|3LN%Q>$!tlV88Nob0pX&K zw7uehc{#%Ycq3OHyzg(cxmyr-Tq?+Ik1XufDgw2%@UlFKg9FGgm94$pU62Ki6d(Kj z+a+Rxf>qIRf@N=L+&$m?gFq129`z)?c4gxJ|4dIM^yktsn`%i-+;=ox5goP3!3)tn z504?;r_v9nPmkg|p^1G8#IT89G9SnkUpgDd>f)3mQ+#*C32VHCzxY>^gzI=bnP%C4 z7-L5Q7fwk=W{TgH3^xCSfw?Zhk}w^1qVL!t5(?b$4D37 z3FTyq$oBE3GM_5TA+y)NLzD-lqx??G<2O@$F$Hj3<7nE5$^!3;u2QXsEF7s-xsuh> z+FLGSLGpQ@$G(agQ!8(ic=O1^1w0hULpcwH@-UeP;sZfM@-{`HO<W5VOc3C<@7}P(H+syc%cpa-+^IVYDwc>O3`?CwhTVS5TuB zM9(wo3PqLp45O~7Mk|VrGwMoew36sZYoo!A<7LAcGpD8Yxbro4YR`y#&7=Mnr1p%= z*9whr(ZHZ2q&kE$jdp^0x)AUeArm)8#P(dt^pnSY(h>X1W1)KV@VJjq(#6f~;?pg* z#~UBd{e-nHGM{ieGayZ9iV-`k4 zb)F3qSEjEy^p-}yQu{_o2_6e>+i_FH7AYW#CzPK?c}zUa&9aEaHZx+MT4(Ho!V%d; zv$K|PNugb4;2!98cj7i@`U^x-Gv^&tv+R=CC+?+ge=_Y&Oh5WWMf<>zt1~tY} zNw40CizA-P)N^bR>nIa=etd?TL|=TQ?1L8412*Zp(R(oEiq>i`2nys7d1x?ognNQ^ zjGQNGu6~dZ*b+TE`z329a_bKKi8%N&Y|IH|r8eV=pR!kM7ltZyt0vI#5H!Xcm_+p= zQ~Y<{z0WK1omX}N(HbH`+hCfgKaxJ#IvK_Di4rdFQ}p<3cYJ!0JeS3<^~9%7NYoLP z+!qY=+zp*>D5%5`KY$qo|A(8g+>8%xkdg1eaAz`N~jgk1yoH(C=hDdg;8e z#ry-!a-u?a(R@xl%Hm1Xf^~ptspt>mjmm4zVe@%1!b`QO=mc?a6E1u^4f0NGHZ{kz zw&Y1H?W8(XyEuHywmWTjyFd8X+Wi>r|39^x9cu=fq01EeW?G}n-blR<&B(qpao(1N z(#9!hXPLG9Z>Wu#e>YYK#z#1gsy@5nTJK928(YoEDwI;g=!E;p#DZXdx~jHqt9ke% zQIy^_O>a17TByN0ZBE0;Y1c;2OrL(+?rG_9x9%=vyPqC;>+U8zj=DZ!_mSyp`hp|+ zYuP%?0TuFl5$mv}D;f&j+S~Nq$2l0Iv)sdM4~0^Pea!fXu$r^GYF59 zJ*FHVVhi^>_+xTttlble&)vmYP|lJP*eO$d1{gTB>+ED1QVpADWY3P-gQH}W0-53u zgTpe*K@-#9IYfxY)3~qAS=Z{G)u!>I&vK%qH@=}jc|u9$&EZtBM;#DE7-8&~6G+`X zMc84*>)!R(I5&ua*dp(s+nD`ot zD6MU1Vzt8A1TAWTe(#D8c@@UJ=ZYjx(TlV;XPHo}cjf0LyZ5EhvAq+?@Ya>^e6CKU z;NXjPq5W6vkwVi?6v~rA^v$m00H37}{%KC4Ewd&_O>d3ldZInGr$AL0OXa1%DKHFO zv7h|jl{hV=l58E%s<&K~KeS%+>=xF@>xmXd4QoLf&Eq}S+-Y`m2z1iUd%x1m{?p;O z`wQwVB5#F`dvuAJjE=d39Rnfe7FDD`bDnZrwWzdzgQJWQsK6IOyPNbc9#4DtIgQsm z02VB-{2?Ss+EjJy@8E3wvMeI)_(h|iY=jrpjE{bNK-Qc^4||`_TNHQlSACh3NFCiZfbBq*pG#cglSTc`8E-#+w0VHsm_xUks%JWyg zNWdnJ?7h)J)qZ*`%{82tZJW)?qCj3lTH38~in8tTOcK$Jz>+?PR9fc4;*xvL$TmiY zs8Yb$Lq7aLs#sPf*KZKjVDt8g@C+O>8Y3QorK@9kOIamftUZxg$t(td3oLm}hZ4Ie zd5x022o=MKo~=^?m~ebq&X)2#?X(Fe;7C%FcpjPKN1 zlrc`7vQWz1ZeGsZv)Md%)UrfL|I+#1=aYeU&drREj1`mYJ?Pb%XS;R9CDkmFM$a1F zw-Ss`5+R)Z4}=3d8&6|8xvxRg-H@NbN7X*(eeX*(^{Fs3P2{B9Mej&Y5gY~K>SvOD z{2~OO5-^RSHwu}2JEHH+G1^%O*b>;_P+_#shKF@HXDzp2{R!$*B>%d3EG!-DW7c>$ z?`WvAe^!x>H3Q7c#NVMT*yd*B=jw?sqS1{DxH zF;8E;h-LjUd&;nJ(>8FpMl#5b%&erLHW1Ks_{t~_g3_ht0}2|r#4vQUvVAtMAggRb z+2KYY7SIt8kYbzXf(w!1A?mET=S+lnkdKU&$nb=GVndZn-e#dyI@{SRg=e3$5hh1w z@%6?IS+)(CE1*(1nbZ4N(!aa)L0Q7v=*gR;v#tM560sDFpu71K`Lg)00*n$TKJ)JY z!^%{$zT-qe_)f_sz<^-&vOxZ#^BMSuVFGWMx4+YEn9jRAHwC$iCd3#EDe-#houZnWhWTvg8@%eg68{ZtnBU~OVZ+l; zJ@wR~cT)RY3H^~VG-31@`^_ioL1#QBxx`0kA$Jz;V(fh`dH=YC0OnmE`EEQw77yop zF=70aoLudZeKam+v?2{4^q%z0EWMSB2IKUI@uXDG5i1gZa)|Fw#P*JI^(%N%M_h;Y zswX%aUZz~Z+j{2(EAY~>MLV=N?CP^}?Q?|)=LG;du#XVL&T(}_;xPwF{K#C^4!uR! z)afBn@Q9w^$nsVmj5mzhSlmdG1JSBmi8|#7wa*znz;9wUBDVpRsx|^7f25KNP9(cj zZY#O)g|n$i<>%_t`oK}9_0gwDjwEJJ##ahQG{&ri;}k^0LCDpwwT_p4W%E!IxfeuXsq!s0+rBw))cPdnB=7p$Js05tA~NP8ri~UDjE<1q((GBrbG?FG3FYc19xAl< z$gKFP?JA9nW>8~3En{k|`oK!VT_Y0Ib?Pmh&!xLL)0XgALzxrK=FV%ziiOxI$}Tza z>lq9_#GiD z^(&ewrk)KEJB2g@W3l z-%5!HS;F9U^ zUvaxY>s_C(wXJ9x<8aiqwv2BgDIEK;^uu8{jR?_}(;CgmFA0WUH{zRlfW?QqVk_oT z-;!FQkSifRZp>Ye-a;Dw6}09(naq{ML?h^mZp5s@>Lc>+Lh}ZayJF2!9urk#K#qaA z;uxWrQ^{Zzi^rrvi#X+Yj(`2D)v*XG`R7{X&aiod_46C+=U3LxFZhW!zpVcDSV=$S zr@Q%w{B?Xzp89!m`cxI0tsLvDpBJs4r1jH7`*!S5AKNYEiGCx+9LeOjfM2BV%yFSjBO&|s&!3k6?-XeRHR#6rzn16G(QKBx`+yUxvAIVEzLg_ zs8w?0q9>%oGLVuf{=|#?7;)*AZVYVrG={yY zmQh`{(W7CcXCq8~9%Fyjj3=ZL8sf&Ftr|vr-;ra1q$CE;!ZuNKQdqR&# z`7862mC8f1(9xZ|n|FPKw1n~Tcdaxxv}N9CrTq~Sm3+R_NDE7v#l`>W*oW#jN~6r; z&~2Foy3yjD!mDnq^OmXKwO${;nHKK?d5y30maE^j>a$$AC!U*FB}o;lyc5)?7W;RV zDrv0p7LtrghWFW)i3RfLeO6fkOf0fql%-lyzDfsCK95QN<-NpuZ<)A|heSatb=c)y zKj?jF3mP32`;62R{`QJ?XUoJ&J|pOFPtsJ1E7$UT(rVi}CtLkN{v2O5QIH)sq{9bW zCJKrt#($-{>s<+-b{K0_=lsdfSiMYyoHb`GaT{mgdh7z_daTPGJDk6GAL457gTIAN zye;ea3$Zpd%Ab1qQ!9Tij1A$C=^!7CmWeVXv7!CmRe$F_(-XH+26tIsWt0d5?@h?E zoJponqlA@42{D0IB_w6=Kdcfma;gO6m@Q$YQDQ~5grubJ$u(cN^foGw#mrF+a|FUm z}( zGfvnMYYV%120|o>g-Qn|w(%FTA~&2K`;mIUi^=@iOrAYoR+C5F=d*dXruc@VFdwA# zaIRoQj}H3@@lOvMkJu~-=95w^XobaG2y=_encUZ5pE9YSYnNuUNxtYC2Rh&?S7-=f zvbn7<%$@TU%SX4v<|?Y@Oj0FF6>*gi?S{eIdo`TdMe0Wr?%QMB=fmr~py47(;u3Y|zMyMfOb-T5KZi9B zh0vB5JP>^eOSYZWM=_dZ*_I8{Mb{g0EtZJu6>br5L zWR7F>>a5Pav{c9oDwVsM@VpfHTMr`&It|QR3Y@{w#N6=C2H(uw}Xd;D50^@o~i#{q^?@b$2+p=uZ)}FnpaR(XUr?` zq4pVc?O+kyxd*ReSEF=^Q^=&dEQ#0l)s zX*g7`w=Bc~n80VH0LnttZ!#T#^Qu^cOYh>JKiQX)?YG_b%k;0s>2aAgGCoihr%G-o z$38QXQ|0S#qI>c`#pw~nnbGD;*HJW9%D;M#{1KHgb!4*l$V4gM0K8m&vC9bsnv=XV zxb#-8$=qd;gj^@DQHLMyJ80Wo#^z3d(J{$*;Q}(JIXa18q?OR|YL-u(YJBywA_dL%>y= z=jv%bEW3=QmxqlI$H`h%JHI@KYkOYDd#0P4%QCr<{e4r=$kZKsty?w-6R+ncI%}tw)9LACI;rcqBCGb(8j38vFtL0Yta7s&m};`y z5AAF2;;0?AYxmQ+a6GFrewTi#-QwafqAeuf;K(XM2H!adKzIlZ@*>H*D78IO^^(0q z=-6OyNqfm23@K9xeZqv2v+ML36nDO1&$GZV9KS~=%&_ZT61daQtoS|pu@^*QIR=#K zFQs?RY<`B0)U5v_pF##c;=mg_r?pmIQz}QxF6$2I`GiwPV~ApHm45HWQ45xx5=R? zY>;9w0$~xII{H>%juwr>GlHS%7?ov4hZ~^$>G6B?dvaPD&p|*$M~UHa08T8eaD0tm ze>kwFiJygIWs0)AVY{7fLVWPEk}knr5QPu?v3jKX3t0)CJ~Nvy1nXcJ%sp>>G3C=$BZ2!`~Z@_ zjP;j5A#+yglU-p=U?v)cOTe%QdpsGKklDapGE$K|Z+REHJV{QTZCdN4Ef@<*I`f%j z#%tv%nFHy4NQ*Z*u~UqW(ej{qta6$1=`6GvAkPBqN~Y(S@voBHyMHjh=?O~XWiRa) zkFFw{p_5O^sR440@pWyp9OKnxLgf;xrR(YddIft$lw=)KC$PmI>4fhXpDNiBU$KN_ z(_Vcu9FQ4UJ(nLDRx`uWX$Y*#H_w+;MzvZVOd(GzASA_34hpOm8rkEC)UR!rM*sxiI zH}MrB)}cWWTcj(KLLu=TcgNGPzaH8k`P;=*)=Lh+Ui?OB4K?! zc{LJfU$UK+p~y8E3ERWiBzla*RgCiNwkp)MgC@C9!bjg)LOZuqyC^ELAuA9pt$i6|6BV5}4wRZNhBRJN{rKab;Fb(2WY& z%0fr`WYA58!;DQp!&TB*zE&_=CkOpMYW1}4=`k9DZXya$HBCPm91L5OlgKSC>D+S| z(ZA7PqJVUxf({-s%7X5NSL&|bB4M#uK^1~!(%lNWYaG=5GLC2Zg%zq7MS)lpA=vXx zFb*xk2!wAel;PBs?}5n3 z+PCZ4ge(BtNW5;hrWK;x0_KtUk7aqX{|eLr%Vb|N$n*`iw;+gd@9B|_?dd^NZ|pe? zXojJqj&h6TO8RxDreWXehQ7q51Z3A5Aa zOXAP9DaR=D#SSICm1ue@%S{5$N8l~B_hl-K4oGgPv}e{KULa*MD6k@Z$#}?DH!$$4)DFcc%@S=k%FGBVUy)^$bd+==)+pH%*s>@W zwGKMBE&d-9o+aU(oyZ-Q2xVagbLd01!mJLNvZT*woa{l5HWnw0J_+c>w7eLxJz;x? z8mLWQ*_gyuIn&b@yDw*R6-MFyqM!f~1vEc!3Xbo3UpW5V{BXRwpuY$EAUmG`2r;e5 znCz@@V#c}(105DA3a%N_BuJ&`kiZoC&C%P~K42-hk z=o|;s#j!(~MYEs+Y?Wm$gDDMX(ALm+>o%}p(3qIUw;*F?3i=^9Y>wbK)ww5DSC95) z$(o&KP0q?n5`<{7EKc`C{FO?wwNX~MEA|be5mWUJ^$Wd0*%}F9!0Enz6s(Hd&c z-m3p9=j1cQY=Jm+qyKS}U1J%~trKI7S_dyhrO8M>zQ{J`#kKlbA?LKg4M=wQ~Cg-W_BNdD0F4rvjOeO`3nwd~_6DDh_x6yRh96r5zVAgi%FaaZj?!`jV@iUUR)>9EU z!aADgu|+>J&(l6HK2wG{GYjssXzaAa@N+5>#(nS;~9%WWG#XmE)Zk@*pyv$}f!* zf9oNfhnZQyhV#sZs~`e;TB-SU^3O8ug}G+nahWfFeS-`*o}RpoGELnHP{ZNv%OY{D zKQr`BW*O{c>_3%|2-$)z58H0m7^_L|jzVVAgj$wa|J9|5hm?-XKBWt>x-xYyb}w0& zt-|0tq_`|C^QIU`C04@m<@YoHwk2w_2$sSSsmCP+*w{^Roorj8YAdlCq@XRC#-aTI z{CzYn5s$)}c#3shV9Onq#Kno9j1V#7k)AbYt&`-z{~C^@hzTe}7BGcb^@Maf|={X0{gerl%}} zsY4O!*;l?nx&nXa|7DZe{5rPfSvnmBs*EAxd5Jr}Ij-04KwL zkMKe65Z8U4Ew?vb<_KQ$SLusf zOdYIGf3v)JcNNkq9FoMP6%0mp1rv?h(;X_SD-hsDKah!%D?8Q}U&zyGz3-0wJ>ft2SA-l)b8v)d_lHVsfu8Oy z451Sv0_+ak+-e-!XbT)0R-GyUi@oVztCt_E28%3zTz~nPTcmPgkmShZsu6adAdgE+ z*O{o#3D}oSW|AC!&bhwz?5nBN2AB%wf46hwWxd?keKzLDLbDtk=soXp)-APuC8}P^ zf2h7)#M<2~8rrO<1c&UN*!gmyW|z8@oZ6JD2K$_0A$x^ZCf+NW#qLHL^Q5fb%2%%D z4}3Ztv9(z=#b**yE2sE)syY;SH8$8@Et+Mk*^~55u~)h0&m(q|eUH18U%b+}Tzh-Q zzj&y#zBB6c5Y@5So7{npw1VJn_es&@OwLQO9H$abhf~M?Z#s4Sp5K2{hkP~IzE?NB zg{GxG`Ai1&U*j0=kwO0Dc?>o-*!`%Cp?fq-AUz!G$dK5LQgSvWIk`U5h-rOd$|vGK zG+XgPo^S|->h0H|&i1av;%rq!SuKJWBf?$&4axjHNp%SS(DBUzw)ii!Le_4x_jYq% z#$~S%EpACmB9iU0Uia9WR*Mo>8hwRtXmo!(6W>!eJG6hZ^JzAe2xf5_miP>@eCtR~ zZ19&KmEm^x0959T^o5=fu`@P{YJPz{I&Io7#y72y#zJvDq4CXnLVwR^_G+2GG!*cO z)7-2O490b;bS>y~4Ii)rp@a65s;TWV;xRKizlaey@l~r z?Xg$gD;e%bbV7X9y$|q4>m|_y6{unQ@IFT7=9xu(WwYe(id(auB?P>t2|@=MQ4;(5Ca&kQlPpi%EpK zbgY;k&kycM|K`~iZI$5K1mMl|4s7;51M8EzA zB&R2N2^ZjH)~ZptAK4(XjO1zKQ~1z+)4#xeA`MITSn$R#tFJda#x)IzZf+v;@l=lmqQ zc)#9xKVNs-OKB097c%Ko|L$wjwp0%w&^|X;*axs8N^%&HUPwmr;O$K^Nvh<=r(*N=fJ z{Yz$P1KX-g!gY5vzwaCT$)5LBJ$d%sV!mRf+|g1i<&Boqr(&lD9+zdXXjo#pTOg(T zD5a8l2oVR#JseAa)aG$YF37?%@wm*#B9GPPtNrvbT3U2^?ZyZA$aO9&YJg#-f(vrn zEUDOCNL4w`vuhcBvK%9gHv5J66PBQ{lR{5XxNg)G;c-D|L1A51PU@3t zzA^2#x4Q)L{sna0xZ1cza9D`=L#GSbxcFLPD1ewNq?^W5GQ*QnF{YPmb=m(SkI8T4 zry^0|Nmflteci!}?Ax5IEBP_jfetuPo|M9{XW>xoZkMmRR`8X*EjfNtDvxx0YG?n5 zBy#>cog+=0>m(himwLR^qfuOteV5wscTT|&htBfNVie@BTTg!A#n=$dWYr!?`AMAC znc87}n)26gk&pRmCxlt=alF_{{f1ZnhJX31heB7W1?t7$Ztjsg;xzfBmNN2t7r*rH zET@0+eW&9*xRjpA>pu106ls1l+wL*+hS&VT;K4_fK_d7Sbh!?_Dss|Y6{ttC!?Kz@ z>Q}F%Qr&OSH+!`-Y#q)=_7Gno&r61tZ{EspET?USbd4@S=4B$R6+%Yx6S-Mw+^gLz z2_Ud5zFG=EX&&9lZ<{VCl*V2y%58+Jq8ukwwtdep?&ryP>Q`hozvF8d?oO@HMN+Fp z@hNL<#r=yZo48jB%J_fuGHb#4j!23a#M*VMrHGLTvext?@fnF@v&`#F*Wa^Y_D7_lGa3Xso;-*r@Ez46+kuxavx zKNu-U-kE|NlEkqp9o%uj&o@i$s3l|$MflLF9-JhwxKrq-L_&C0{V<)tNS%aQo$%xP z=L)O3QWN70hX@25l~wmG`&bX~h@XjHBT~P)(xjcegEeH1-)hF|bmV!*B0#RYy=1A8 z{amW z`|Z{ur4X6gNm9NeDrjZ!>%Y4iKJ)?1#$f4j>c z76YyL!(s`xWI%kQyq)-w#}oH_`#s^HlG#r!B)(MJL`N^|o&xsJg_%^QAfE<7HBTAnny;i} z^XoE<(BO7sZ#M%$?b$swIBk+ko@f)gd3|(}YG{;XU zuzT4*yH}EE^$=Xvn-e?#Keytcl{^|4DAgxR{&V4h6dpw3WfUH)yXNWZQohrrJ5CNZ zEV(F1f21!->Ex=v0x!p)qxe!Hmw zgy;5Bfmj2YRcM{B@&?szz@2LId=k*#F4>*DiYc96NeQMjXskb1Dq&iFM>%pHxI%L7 zDf$k{#`;nklFUXY^Y2^sa=J&`F_I2I%PL;&hU6}nM-ed@I{=DU}yrtETUzO!ViwO&?;3y%|3+F&w0SUT#H!KzQ8 z$dhE(5^dyNGCK9PBv9>>15&xrad_HXq5va9ObQ@ho} zq@d9w!JRy*oGlS0CW6oQF^Y&}~woAQpDP>Y^WtL5jTj!s!o$F0t^9!A&OOBeYR5ZgZZ{ zWIx$e`i^y)+byh}Aaz#?+y4&25ou(H3e!lW>S`LV@QptRFENUX^l&`MQ2c6_(fnSv zQS&c%w3xj#)3ImN2;DK~8+ulRh0YZO;=S6H9A3Uwr0aS!lQkm_E9V?+34W%6=h!zR z60wj*X%ZEOa8_s?#yswj<{o^oOYu3 znf9GxIT_c@ss|t$$vV{AT)9qb?LO>)o@oiyl_GN}Uu(jpV)eAekmRE}w#$qOHJQZXxUH?#J}=jzvX|Di)Q|SbV(TI%DB5v;1-|4ziHM-iqcB z_YGsQc<47-@K8bBHumWhdf*v4dbdcWZ7rFzxA_0u>~>_(TEI$>^gnNLq=KfkQ6zD$ zXdtZ@qF0jOf3nnH|F%Y@V3rxsJ@v16K@#GY2;=#YL3DpWl5K1Gwr(=v9Xh@lj>qL* za55pWYdB5MIrLKP>nRW>ZcC@o$UMMLfBYQs;uqnkmYp|0DBt)TOl^Kp8iKVHsd}=3 zzDgfL?gt$+3^6BjbX5VZZ}P8rPWJ48EwJ^kY~uxyZa|Boqgw=2-{68?_rp>M+PeSE zRH|m9R&2#iW2uYaP~U!lAcqX9rMEfYPfc5_dvP|UPX$uysq1c!G^W-ou3-#N2of9vMHEyl|mfEXvQCg zUd}KwmMirMx_2ykg-B&WjEB^0lnPz3Y<0aRm>sI;Fk?dls5>I=chpDcxm=Q>`>RvB z(kXgaI%StmN#N9oLH}kVRahGZIIie$>p}fM1)}Fy4>{j;B`A4Bh=qg!4iI zPH)vG#KY+u6eYM?c+YrRTRe~39kxG-l>b>^=U?%2&5o~h==ynt-FnYocPnY3vhU?a z2Zb8Gm)rdvd9`CM`|EhCC0h1YV_X|5AnOX!D*|stM^}(a058Zn*10MBPC0s3*l!sn zyNq$W126ekHd1nGqG)`@xVI|;A1}D1BJi*1mp1}_D79G5%E%+0l>%9#jZXDIx>AD^0%h&1sdUDPm5!j&B;mGZ1Xa%SQfER=^7LCEZ~y5& z{W5Al(R0;Jn?b-#XNbUy?F>o31pHSc*l+ zdHW-Qr}b1@KY&`K^T77~KHBit;q}KADj)B!$EBmI{JUO%{d7qw`);nkKFAXa{PYCD z1#^fT9q5HN{yFof+vg$DPQwRqPto88umU3>vtq0R?kRx#-$3Sw^gnT>26u}nl{2#k zxGOZcnYk0d{pEC}0`7k^hrgv#0e59k{cNw)Y4->B!y4SFR-he*iLyuS|01AYa!!As z7dvlhpr5MWI@Et%@EM@@1NibgHTlMtVHW};zdP*-aiMJK9e<>-U_%EGBe!Z3m7WSGq-0*ca+w_XgWko*| z%?Xu#J2&bLHGCUqmYM1oyc~-EPHISQ>O0>PB=j0i_F^T>$$mcv-}K48in6rer7m?L zHVWN0@V)h*r15i)^K+m4@bM61^F5SYz|q6*q{9#bFtLRdl~!wYs6P%uet1xX4%`Lg zd4t1jb~LM8|C37DBw5G&v1yWj@8|QsOH%!Nv4O3jiG}{;S=P3!YU?J`rlli9(BTP7BgBpyUl!0^}8RYcs)@8?;q zp5!pKNzxp#ck}y$tX6Rkpzb6wIV`mcOO`usYz$50Y~I$uPyNAV?<6azX~h@RwBUzIho_| zcS$zZBfbIeI@Ik>=J51!_;)&UXgc!-Co^+a79(F{ederekeNmkeO3ln)KAXJ9Fzr% z<)Hj6$b%e|wKaV2L77N++GS!t{#YL(@vzL<^`*cI{`xlh5N!C1j4za!n$HnWErJ?*3k?n&BnlJ>Bq5v$;FS=;f)g;ccZmB$L>U6z=d^&xYG^tvNnja8c& ze_V)B{BgNs6My^*uGVz_wl%|RVBC{A*Vn8UR*L&~ABi4%h+V5&)R#n)Q&8Z%1|Rzu zklZ<&{H`UHQkyxd;A=UC0Bg6}4v%a7PCDpH=GrUu*P7UwsXO(B9qVcNarswWDD%b_ z4|X%V>D0EBTaip?3F4|@_b;ln@08Z; zA4}s{m24T;GHD2PRF5Rc?+7XUy)CfZPwVmd>tR(~*3%-lC)6;xxO3Evr*6eWbhpZ* zSMjyd8+)aQmg|~sE%Y>z6W6cyN)hOnuM{EvqOiL1EmqMro~CpaP8p}7t?I;zsDipi z<2~^66|Gg1ITa-HGMQ?;=r}VFOZ4cyXSe!IGpV0FJqx{O9x()Qj()upDQNzgiM*JJ zd{Mo_P9zKS_;v?|*=vh7>o$j?nC+%S>|!#-e% zlrVO&^`PXSCWVU2l2*^PrKM!3J?}W<^A*X6(g5oI4a-rB&-|<9>X4DJK9VWB4>9tl z!p?7bTvPo|-c$G(4}_quKoNO$uh@2m7g5Pjq!OW_eKPZ*S^EB=Q9?M&jMQ9T?=wnv zAU#JKJtdJl)Nb~CiU_w)PDQ(#2?puLM4EDOC`*Hx2o;7?Nh-TEjTZn4+ zwG^3@%^!ba3lou6qbBawTLTx)OIlE&+MBeFRb2`RV|W7Av1$0;KUUyth_|l)y8+gw zM2x&(Bw)n!LWVlTd6c1gv>*xv{M(F--*4vvMRi{FMA^$sDn#(sG_&e=y=Hya?fX(53z^TM~wLEGSGy zC1iBo&vy}6y#05a4u){GM{-(gBVMQx!Mg0?wFd!e(%lv{EtE+nRwb$cRt(8lJ4WXSrd3ft}H?TsD4mgt7d(XQM;Jwz1g>UYj-k6`Ti4 zH??fi-Ws2se`3tq+5JQ!L`u^hltaQ-bmK+!0rk}J<60~d#nman$=11Q(0}jq&)OHM zf}3Zn#{61!js}24b3S;?GK zM{kVS*L!goJh!#UM=2+-$C8{y=TjDwCjJ{e8hf>Q@0i) z+4WL&Bz{wSPdbS!?X$3QNr>cz#?{xpE?QS&a^VxzDLvCJ+8@6$-|1h4`<5b*kLYc$ zp-PR|FPPU7HkUzcEv`dtI@uzJ5-cysX~-cx`=@n7jA{v7%NUhr5!5r z#i#ikKt6r0OucciEf^h8+ahi!?SyPPo(|-k?6`41d4+QSK)`+%rQ_4Q$jz0M=!7- zXz-TkD^*V71teB@j#UJXFKADWF#{4-oq-=J5YeCRs*4ifcQ^A zBZ)=xVDjWlt!lfTUp?35(B4`QS!md@aGi`wJ!dnoKc`RG;fK zat9U2?0Wi5?&YKzo=?J_R|B6c*vV$4yYnU8R1#Ud^kuA+Y223Nvbnqt)0qOh2c)~W z&O1>wvsJE?YU8Y6|2+YQyf2&s2dW7Bn^`qfJbkmd;e-daPByb)Zj2;)U$S`VW&E&{ zp#NCf?MEYyU8`v8-2)Bn52<1taouJi!98e<+n;JR0{deXW|f~BhY!VKL24fA9^9FE z%))C0H;P~<_r8Nkk^jk$49|YdZG4WNePDc`F|M8Zl0oaZk83agu_io|Nj?6xA5jDT zCxij)t--8%Ut_C)?#H<-#ES9%6fr1_MREN>|7u}|I6^_iQtjmfmvCQgw^{^Kz%J}d zOigiBdC45DLL|()m>39X7)(wEO!C|dr4k^JhEhXlw9B4_t%x%u_du~`AUm}+oZ1!% zym!Y*=y6~RHP)Ux!X@!2ilF(Zh7AY@y%+(L5^O|$n=X`1py?f8E4n?4WR#(^|dELJ&#g(YDkh@@Bl%F^@n zC(X_$(Yyxlm(0|*aNzwVZ(|d{RVm=KTV)N`a5_T-^)_tnb73gjdkFX%_w|-}4I>vP z(!zg&QlCsx1P+D$@4rD?4u%@#tZF9C-*os`DpY>)t+`pQ*!M;2VB>M>AQ^9d1Iz64 zm}}{@ko`T#TlNnrY40{RLq?gV7c1>;#@@H^957(Uiq=&>f!kd;<= z-U`dD<9BHiNimeqN}aUe_f#LEV5_xe4*N=|>~Rqk#3rKW6`_jS^q#{YcW!`-n9%C4 zdk4m{=p%={qN941Q`e)!j{b`wLIW zgx+ygpN|lOyI>uv>tCWn`I)fqk@BC3jK_cHjnbCWVSoLXd9gNXNvywq0N;vqR=o)4Z@^!kENwKwU+O^|hkNTb5CU>z3|Rngx`wy)19tjS z*mDeKbdS~JjorjN8IA7?IhydkzrLALy6$gKx1eNp@Nbx0SjRmvu7N$NlD_7*S=CLR z9)Nz_yJUy{%I2$3Vp^7wxVliPe`GCiPn`dUL&s9xYdJhwJ=w8BU2Tq2t-o##pCo2` z9Y^!sMZDRzK9<}1coJ-w=uV!MKF>>)?se(2=N+eg@p-;`rkqawz|OzwBmSN*kLG>; zC!Z)TyxGGAy(jM}cJY9Owj%Jt!v9~V_>WFFME5(z&lVU|wcDE#g2K}LIfCD*Hd^4tWD?nsnoMkME}VfJw0(tKmGp#*NH-p^f^2?)yk72acIR} zpG6nnDB^{*%+`90XWRNcfAL!o*9B}XOo(rMNU~n&eie8+q6v8C4s|1P)$aE>CQp(x ze@v$hW|!!GS<(dfG0;e47Y4IYcM_>-iAMKNq^5!V@h6@E64@MyWFEtTUG^qhT3b32 zYb^a_PdrgU6Kqg|1W(G4UUyrNkNGf%{4AHz#FN+?8FFf2|ykDd+NSXfcdgjb7J<}IO(nj|E z<`;QK|M{h$fSl7uTu;Bu?X1U{$8UVfj5RziWFLo`LM(6IL5d?*mr~yoDJ-lD+_tdf z7!=$rVu4-`(D9A-sXtn5eL6fk()#pNwEUlrj%Hh*7I8JLu~T_4B1jICr>of?L^^*~rCU zy9_IXsjQla#12~FyNcZ=@!S2RSch+m_(NTAbJpP~Lp*$2EYCQ|fi)|dZLD=CiJEyV z9C$t&te9{NC!94)iVBA>7%zvK0``FDIfpvSmz(TB(J|{!ChmpWg#Hw*awIWxOr^d- z&x1NLkK-3ngt?==OI=YeO#Uu4V5hj63ULQK@ScPQ+okFx#a%Bd7kSO@;5Bi>80Jj$ zM6=D3y^U^hW`d{Q3EN@^FqJQ4bAUZ4nw?M6-~44Nb#TSs8B~6BNT}@5uJ5syvnv{( zNqUUGxYLeEG3%7VatxTQ#^iHoZ~O%Jz#%ye5k?dHXq_v~(Sq*9678&ta6m-| zM&k8lbg^QBiru06MwQZ!{@rUjv3saMRO>I;cTeaCsk-xgtnR_)#`v52#IEQ9>DuYd zMg4js`i_bT`(smd4F%M&Vgg503F67c#MJ^AZ6HZhtlkoxlrWyeCJlhe7w?vH&fA`x zE#k zU)uR?)cPS5l-$>OL1P+$T4@~RZ-u> zIZ^M#irDD&M`c#o?~ zQu1vgyEwhf?9vc*FcuE*fyu3F?ihP~jHLtrH5|R?OR~2;uWHXN0Nc^cn7L%0_ zA|e;X$rD;8D&U)>3}1**JD!~FFvn-aE%XzIjds?-KnUDXs!NoM3mJYZnob)%H^wNImz5A2mx(2gwU-~1FjQ8dJ(aB4H zD0wH|8FJ2hSl<;!5+;|Q0plC0o*gPIhGx%1xa~D<9MxCdk!$bg@Od!<1DK;UFjYiq zuM%UhHM(^ijeGV67I>Ft2Nw8nOJF4hB(WFSGf+}+S#LWwVIjh$X;GOzv;GF$6W9dx zjUU;^=V-v_uz=~aDSl67%8`~i;SfKRkVmuCE@s=buSA}sTUVR)`!xiJTqEOEk2?8f zA-o~U))Ntn~g=)Bzf5l=ERcP9N!YpeYplJSu!piSN!SIhRM_3) z-&3Q;!mRhyzk;de`2lI>s-l}C5Sh7#)xj;SQ|-MK@dBhc`0t;I7Qp*6u&Gvrtm4DR z{jm|a_2|-UBT&9{5FR3i8=k$fcTva==VmC;Y-`La3_%j-tqFT>De{efmU_OyHYHVs zJAL`$8Y0J3o8`N}I{6M$#z(lLq8`>&>6Wn43mlPc;yS8&CH9fBDIkMN->Xo| zbXoD-=k)f?-n$09^Dq8cv*jyhy*urowbV?Ec`nvl-AeN~5VU`rBE9%rm?6p740J-k{Es4+492zlnlsXT~QYqGNruZ#HOxjzZ3)q(RS4pHBddiID@7= zObQg637U{J3d|8Bi}_~!iJ}@wX>)XTh1qwHl%j>|%YT!m5EN74=e)1>jx%F#BLXk$ zaMz+GI=Uz}$fm#IuxaOwJr1Xi6Qn}5b^^M((`ic6i}f6CUFz&%(!ac;$GDJdw~c=` zHR7C?BxS#-V$UnjK0t=JI_prcvo>VcOFpco^4R8Li*%_#?<0;jF*4i8yE>~k(ZRq{ zAxqAUK?Iy)9(}3UPD8qyX}g9dq~Ue@q=DEe>TUXoN6FNPsV}lJ+tr=C$8qSD(Vsf& zyKmetgGVw#gh)HoTWkZ#?+D%vR6k_z#4VBaY1g7DG;|6Li9HzLc*XRGh*igcp|7bC z6*Qe5^Y_cMQ%4!|Y#H-=w9J@GOzTM3!lxwV6;jkx{y5|R{P@&4Wa{2Gyr6r(2aJt- zlFzIBOvd+}jCDFgz_yXq*#EzI^ZaA#=qJ<9q?YXQFaHJI4qH9G1>ZQ>JTQ96!De@K zFfR59FQ(&-9Bj^t`sdjs5O|&NXh?>$4mNwEc}|j7r+D!*6mIU$j$Q6Nc*MIKXBwS} z4iMO4yT-x?D$54i6Ie_Ka|E`NbH$6pZ2 z31UlE!#mx0*R1W966=DzN9?P zBptRPlI~cF2tF<0{gT=f`(wCPNekiH9{KTG(#icbxkaw-^7-wJhGhCKXCfm`&zuSJkvQ}}&Cdqr=R{r+ zz9JLZ zLacy>6S}U_-l|>PKBI=Ay1*xvvme3nPAEJxwHFW#7;Eg?B^AB z0qh;VuNgy+anJ?Vx+i*)VF!JcRkOW^_C;WKtJ)*uh$YlA-5$=|Psz7&%I2BjJ7{?P zQ7obj{DSWn-%{<7@jHk>rzx*?MX34uN?U^6ld(s|K@W$bI^w53en1XLXEjRTElocp zvNp5{Rf#@1$zyaNhOwilp#NCdM=9X1yO;T3IeGodSMpSun0>Soo@!~MP&RQQ>!rdg zCQLpWt86rm@jP+DUpEY6f@z~f#107&Af5PNcOdN)JD+4_cib4#O}&qqwiVrs-0`WF1CN~lpqOfWoJ`Jc>5 zz6{Kh11D^W=21e5#|})`5<}J9ED<2t=d5>uQ}*_0X-OGddSjOMOa5#mKB`Dq1Xdb% z=j9JHYCB%~QDX4_2HB(_#bIRTjqT6AG1)gBIRXUbPiZ8PX8IA|5c<1Gjt$J~G7%e2 zmJgrhs;I^CaNGM9vq@8`6+bbY-3c)_e!CiYF&m|Dln(#i%a^tqL~pKt)?dF|D*4eV zbc}$=Fquufn{lqGH>}f7uzz-5^K9T8*b_b3u4yN=KD%rd3(KdzIZFy-Uz9zDi}GC3 z@kNQd2+}v`VtGTQ*dR3(`3BWf)0F&!x`wRS2uqjAYMoNxPWle`zn^u$zl?KChWiDM z(1Q4!6O{A4y4%?t?jW-aO9Z_%=CM&ku?N+}(WMa2!oxLTJB*0`6Rs+m*Fa-Y$53hK3) zvP)7fIV^1Bb`b3*c?4xNtu7yn)E8_l!PkFsv;9QT8sHYJId*<5+uD_t9Kd5qY=Dzb z^Zo|81w`X`vx8>IQ<4A9%XlI)R!r&AsL$AxLnXPJ^Y9=1v&gzq`T|QjuEjT0Q4eVGr%G%`x@Uc_PR7db& zt1mW^H=+T)hIH>*!s8tE98QDbuBQZZDdUZe=C3<8!EUv>vZ6lG1-WV#0kYWHfny8D zDWg=Fz%xjda>%cDV{aX7Y%R(8TFKzb*x`qFIOjp=UFSoQ{=a{Yud9 znBA5%d8L%g ztKJ}^8C@eu)gDP25#?DV#f9oNU1mh`taO4Lyb9ItW#Ig$Ezxo`TbGfSWX=`Vqzi^* zQJFpZMybsHF#0_?f}U=ckG_F~=#6UJY<*z4h9VQC2>iixxvgIzqScRt>|hRwb9t!c zh3XA?53~`k-5y*sv3ybt*$KuVFQ{fR0KoupSe)z>!@WeP%*~WFrTL0}M<-{0Ed`e3 z)^A6313DI|C(jpD6dL_mQlh^96&6!da_$DX$gIvs^vg+glDznT*vy%!NZtDHKfciU zc-;DdRIMK24$2ytwY{3j+UKO+d%28LW?SOLJG5K;_@L*pQJ&1!xN=?hZa&W7OM0hq z(eP*co8D>GV~{614d6Usr;#Zw{oM9a4GsMd+sp4S=-Xaktl6NtV=VG?Up19XOfOKM zTrC4>=jf&$_463dz6`4oeoEy>#6yWG1xco9oXAzuhf%>Ms6RN9zAK+`H4wqE)|;RY z0LwcxnD8e5O`T$&YUg#y>y6Tcy)PWt>R&D*2v8+lax{|oKJFlo`TWb}_$N`=4_qU8 z+|%1uebokGtIfa`(?7YBSPz8ESTIz|JWbD$%>`Owr-C-Gn2Bo&&AFiVsFfK~|i)j}j5zx@?&K%Wgsn9@u9~(X@B>aqUBt9-G zUPTi@#GQuCdFKsQjP-$A#4U^c;gY}0w9N&TQ!gY{Qr9SY*dSHip!+N`Ng~=)+3fr) z)0LGGs!#iK{m7cz&Nu%s{eOPh^x(Z>jxSSpzFG2GrfwtkT=MPSPQ!ai?INJ;!x={< zAZ{NqSNc#6-UJ3sj!cc%)+WfZPbThttkz25^>PCk_G-abe_2ZJdV8f<)|-0dECEp7 zQY4K5JPTcBoPizH=j*|yg?-v43;ITLSyFF{&kX!yfwtw- zR3bf(PD~*ofBFMzIR(hDUua62mD-c}vfF_N{o~6tT%D$@Nk5d3v|Lw04WGA?XLSY( zfrfq3@r9CbITVUP|B!8#GS~5=mNGD!`Wo*?pp@z?*)kKO2kIh|O8LRW^9u%GO)8P* zqGR~*45|BX)J4H5jmu1NV?PGK0MHf+uw#Q$ig60n0;8oQ(Xu=*I1K= zyzO?udmUvFv}J$#7B4)78qWNH$NE?N^}F@z$ZHr#4^psUBGF<=lmc*n-7lTYD#?69 zXZA>DVFYtHxl@4BMBb6oeE>m2*KT65oU0y|qU8f)S;@B~;d*5L>OuYaK6R)3#s{Xb zFUUJd>TPr~cs(i+oo?qf5;zdcj-b1yp#w7FV$=C8?QM`vQaX~XXEuri9TR!k{HRSD z`Xk0VNy8-R4YQ=iO8B7(pqNpaSMsvjiK z)_cca^$P4z3%@E!9cuH%&hHKB_nGP6-wOJXKj0BjX?Ca=&fq_g=+ z72t~KzpQr=9kcnRMl`p8*vx8(!CVw>ezOp_&v1$H(LMjv#nZ9#TlXryezhi$H2^?B9%0GtV zq&8031+}klGX1k&Gd-V}fkO+s(X`36mcT!vXNq>D&@A}}A}Goe&l^&BlAOm8AvA)SxPF#Cw>Gwnx?7V?s8HutMFAv9D&^lhiLzVCUj41A)$uPk}yfAl?E@Co0C z<@<=e>wozDYhn8s_Z|)`Jk8`1N8q(;c7PXHDNddEYCEv#lBla_Cyc&avN~EMMJ^p+>euMh79GprzWMTu&OU?rStMg~ZnY!umO?v8Z zG$9T*EL??PlY5~1W9SwM)dc*yo(YaS6HF;S^;<{Djo2S_@8Z|A9n>;8ziU*(YC%vh zVmqkz8Ej>rOpBnnY*}_{OpB`;-N==q0Yp%d66AW%%G;^rMoS29pF7mQIV;f4VG zvQa~0Z%Gb8%bO%_d8122QXL4qG(pjj|oncM-_G@kz27c;XQnX(N)pJ^!PgOs~e~B8Dohka2bkWpk3UKrx zo>p(s?@Q6sr^6Si-(N2u+?unVOqY6xE0?Je4{Z{dXMYpjr+SXT^8EU%Ja=B3F6)!B zn<=aQr6+>V*>ur8lSF?Xqk8aeAba3XNQv0lU*q#gJo`F+Onbyce(byprOK~=h{aWp za4?(^<%7rY3Zz>2lRO1G`6bvW#C#qmR^$0DqGc_$`@5r3hdj5o1UpYQoc_L@jX*f2>whT)<6X_62plR zMI^>%GoY5_Ajr11_yW5ZB-yTp5VJ9y7~V7)<&QV%;kfOv(|vjjHcmmXh@I7ai%>!O zSy^RrZ;#Er)3Cj6tLJ!ZFxhg|b-FGgXTEUNY$+3p=Vm#64>eD2aAyg`=Sa3sz5KG! zE$%N(8KtGjfh9igQg58UP8Xbp9p0+&~y! z`SFcS>8lvB;4gBJRk{)>{)yH z3AEGPt)x4%@#1BAj%=ADt;~=QNAI`XsTfxvvp0QNKm^|{-wjX(->q>z`~};UGb#5t zRb-|SYXJzz2f`=@CY^`<6d}v-V|@t~1$v@Gtjk0$ONsU4d#CjZ>VmUTZ@eZ@AoQ8w zwWjT9*!~DPsTze)j47H6q5hMeqC-qYJp0x2L2T@yO+CfyK}MH4XNpuPlOO%Eowtz^ zdY&KU1Cma6?#|2EC^h1bGM~;oYq=|v-ND5J&G4t!7WbZZPzZVPpUPxC^{o@)6Ohv@ zFJ4V{ue|u1+y(oby!Z?CB`nZF`v>0fuV~HeJBWh<2e3J*I;ejBBD6O#YCzHxv0sS< zUh&s$W_aWhws?_OE$yFelwFtault3QKUDn}d2#@*;_|6ye-i!A0X0v`1D2`^FNdZu z^#saq^hSrOi@%_7xuhj#qJq{RaBbC-uj7*=lo2t_#K*GgDzI5PIM5e8+c@YgLI-eg zpgVe+JbUHY8}%D?-lC|tZeTQ9dmOM^lG%=QTQA~1Qj0`QwgU-&>YVj#cWqhatSMd5 zQ)|nrs=wD2D^d3_E!G42(68nWXCl;cNzp#=T}ub6C~v6-$=8#o&w;=@^jZ5lk!OjR zl2Z`805))8z$7Z;57kIC$##!A>ji<6K9(1&(Nb-VRBPd^tL_s3Yy^(^S7SXTDOgP| z^)AU)ADsj%RQ0xc=Xt2B<+!*z3lON`Tu|wQ_5j`-Xaj_34j@^Y zt=_|$>VzKe=X#H9^L@s{*R?dDdX+ti5kgeHR9mj+_iQ{?KxI0kr<+HbRUo7c7E1hsoINa-X zD(7@$(_)O;Z`KQuy6RK!v$4UdjB1siKRY?~Uii=Q2}>8NiO=bk61Jz7npI|QW#X2> zUUl|~iH3dN;QIHLa!;73trKgMk8FreSlrrr_NmwRYDB>5Xlg0QuuhKpo_6&qaAQx( zO+6E~wt4ZI*2W!)C)}yFz*m+u2(&rBXKY7}#;tl$^a*N$SN08~_TBrKGN^@I_+*5I zp|MYB+q%fuD1r$71l3%vw5sWmf>`6p(LqI=wEgL{E`GVyK06YBsA!+0+0#r%5+>Kd z?P;a*GACkxA9GtS?WjCHkHjC4&y`!MifhJKeIiqBuhG@wwOY9R#p=Gkl{7n2zGzOg z7%RU{KGkG;i~hthz!k1p{Y4Vu_emX`B{bIJ2q024M?Id9p6!#qAlulaN75aqTt>pI zVti{o(8MW~#qme5ycNv@-@x)&cAB@eE z6*mOrBTY9jhNVPqQEJ3p6bZ3D3T2Xd`w(HW=E{meMY&szWw;gSwJVKvg47k|-lCXc zzylX}W93FIYpM|IM$A^_ajZNJ){kfK7{icTZh8NKmC4G_`6~gjcBX6b1eXgVrvgL-XVx9pC>dem+e4C!5aB1e1vt8W*QV~ykwRYyA0Tgo)qQgjJtBf6g=Tg%FyR}4%ZC-b(-#KrmN>(_Y zTZCfAr?LP@IPNX#hBI-gC8%q<&*n+j60G}5^c(UmRei_#7;%SGb-nX8AyPGUc-X!M zJ@QWV02`dObU2}D-vUbE@=-%qc_R9>R~wNePGjL?2#sS30Y z7&8Sp!^g1fel}EoWkJ-hj))sVyHgHm5lDCfgMS%whz*u8r&Zh{L3%b>lKCoEZIiF6 zt~}wBq0T2-+$6ieH#s}3k-nGqv#Rams|qsPJ6jAED3269z?5;>1k~1!&tKxoL_W9M zO%W&VRI~6a8DVKXMk$dj{9ga|h&*$M-gw!5u!ChqseEysSTz$H`rYh3jjJ@Z#DgL? zuY$5V*U6`l$TFMIKetGr*PTc_iiPgW=~&(LEKQ}28OZ!DN5QlaL!Vzo$0n)YMMOq1 zzqT9^N{tpMvqCumf9S6}BG|tiwm1Ya?9!cn#4)V4*2$|YI#X4NbpglCx8)>KZb@>q ztoAFKtpa$?c2FtzMcSl?^a&PWSBP!DSc|vS4d56un)=l=X5Eo1&YTAi7AlzDDG*=H z)kBrfwQ0A2vBGY{C$Wa_E@$N5(YV?}i;~}cG1Y|vXZu%;(GTD9`tKYe!};@00q`vB zqK3!$<=VjTyR0So`(4o@b@vzK!Rh4hSGP)zrzOKNnd;^*D4MAz@&$QLH5c|(Q?oeV z6WZ2e5_kXR$e-D641BA$15-VQMD7}>UB1B8)1Cpi zfP^49$VG$%bJV%1i1-gIQZNO0-2$duz@kb6E7fFLZNu5R1#$u4?O)yuGRoa7jc*9S zdg;5kwq@NGYP&XV;np9KxCKBJ@}X?3h~2eXn5$TOz;H)f5o&-AR5Tt6Ar|bSuyTJO zD66l-Am5Y)WA9g^xYLXD*m+miND=)O*uS(;@A|j_QHPLvI_^Ny_D}!&TA1y)m|nWroVoM7gSqTfT!ih=w-N)Ye_fLGqP|IrY3meqt$vFcU6@f;95iFoExI2DZ4Mp zVf1g41km3TW)&w!ymGpnb=%eN&Se~2>pTgMEvD7VU7ByYmOQG8>EKSeM!8$XM6Q<@ z{p*dg5`8BsTd$9M*p`iGvZ5}Bg}q98l=b#G{j&Xt4-=0gfaezZWtD<~j%dX;XG#dD1ZpA(-8LMW za}$7DE&&!QCLHqDKR`RS2alquF_UDu`IoPjlruTI)W~$>LVL3;<%12v_D81*hgj3%VZFx76cK( z0@)M>&e1-e!K5p>#F$=QNV0B+UI*;PfCm)M*q0-=Q)iu}m&I41z@M@8lkecK`=2=_&LCSo zw_UrmtOtUHH&-dIoVHI5^mSXpgA=wh@qRPG^I>Fou6 zZu!*SK35+jP79R}#@yFGZb$85A&LufLUoIZ{Pi_p5m91(KhIxxw=}WL3n3C0(wvKA z%@U>i>+;rB7`==tViPKXfd-(sUE8geDR{abTp~fBrwM^R835q3NcJcDdAJ4j8;E)L zNb2CAQYc+JjW|jUMPDQz{EKCcIFrytyOPMy5%*K^E_Df$-u;H|63oN}_P}vl(s=fa zPAufAmHGqj{Mh|Lq~`RV?yq~4YzGpt?*RnQf^XH{uJ?h3H(;+^YAyD;qQlfm`O=YLJ67qgwIuQnNc~hN~+00-NWl~6FT_Uq4L0u(f;@RJ$yp!k9 z3j_p0`3kk)JMI%)96ALp23CP#yEWj84o*=?6S0aJ;Y$X=w?9|S&mUWLxo zlRVT$I%%W>+%bQ)!MB} zLmb&F*27MrPIwSlh}ko(UC4M+(euozS4~Urd^e&>Kn2&bK>MfG%;JoJzEk$BgH>fkBH?pH|J~?H4Ru`-ZMJ znh%8+N*NuffuMJ$-fso4weRX(A(8iO>Pd}w_~)|SjJ~QxwB}rO2IyjmG1rl1UcOks zE=(V?!P%~;VFKtf00fSUfKzrBc?xR!30Q{91PSHjLZJ9WfOQlqHb4hH0soJ^H;<3Hx*Go{%RmT;6Om|K&=C?F31A=y2?H_% z6P?IJqky8KCWIi=0BJGwK=KDVPer8Ds_4)l?&+Gfwca+@wx$C*-Zs(qR&bcz0?vWuJ&X#>4n%mAtXv(D| z;$2^z?$4x)<~IKv;S#Be@fFRzQu4HH5!e~%dS8TLzfkRqm_tzfC)Dk@p)v2dST>wI zU+w+_owuMUy^*oqWgA4+(2P7MH~8J-sqH|gJCJSOr{b7zw#d6BQBfE^x&5Y$1D)KF zwX4QW&k4PQgf%a8=D`UjF0}8{(Du~!>3M$;O`_mA=FEIR3w3ZSu@}0eTz^&b6&wsP z^P7t}WppVU?4}3*!RdMW$QPz~gG~^j}TCS5uqbT*mH%_;_av0mCtgy`OX=>&K|q(`W4>Giq?q3f~%VVe9i@Z_jMpz?uPZWKo(6o%`3S`Vu+cJDn zq!K$(AKbXZoJ5g85lkPH7D+|qUQd!WFRu3YrHxsOoaml%`)0iEUJHW`GVvAn+UKI! zeiUp>jRw-!ym9k~7OyX^UK)d~zw$f>+ybgD6fM_4Rz*m-Id)IV@sWu@QL?s@c_}qf z&FNHwnNDhAF#P~_Y^Zc(@OT~l-&4&fO#uLe*A%m{F91@1ueZfoKHkGx$y9meIHpYr znsKf9B6h&k=dPdSmud91;*eAb+qavERgJ|PoLSgl#*wKuhksRO59ch{q7|;!gC6r$ zIH2(4`v_!8^-l9P_;ID$4zXDB(zD)@2$KnMcpzI9s#yo7=eb$5AG-fAFN7oi0hqjn z%Rpd|O@t2z&m&NXJPTVuZ3hWMB&;yDdqVpde246n*LTdROl#fIJUpG(+EKJ3Ni|8p zcj?W+vnBWGlAC+GJw9Vo=v`~bzBs2M?e0oO$fFco1(JOIs9D zz79O*UVDzm_}mMF)h&O#7}N8&->ztJ&!mswy9|&f-mUn#o+m{tjn{ZQuFrk#PbpTK zW8HRAgv<9$p0j+2&#`gqG{?qu897;)qI}1}jT{S3?Iu`x@bNH`zw!3WVxl^~PN%N9 z#8u=-*MY&rl_N} z88AaV9!IO2&rr{FN2}1Cp`LO_>lhVsfuprRd1eL{hkE8XTHjY+R|ZZB_0%|8g^L>M zsdcpeo^0JB4JkK5+%xi;*`~lbK4T7^*8^w4$bWyZ;~87ike{>fRFTV8wCRPOZY*K) za27^)x-;;h*7aYG6kGRaP>G&{TZ(BM^T_eU$Ac@3t9je*AZMJ%nL#&;G&OaQCWkbR z)>9~udSXTU9NuB|6vT+@{+z1%l$FRC7=@l=Wsh*9I!Gro#an4?HU~0H>30up7)GIU z1m4IAp0(vYe0k-oO|xNr;k#AN?n*!=u0i75&0C$G&@Oj5oo~f^j4vGF(IDHikxsC6 zU$5|9=UA6ZzEIC~t9OTb7CBl!BQDgl#L+4Tp-|6KsAuJA2-Jmonh*t0OI^^>x=RJG zaIEk4krJO{Qo1NH^&6ClwTksJ)4yE1exX;}v!zxl{ z0qAKt@>{-FpX~{66t;@5cDFg@bX->dyND2~b0F6+#=*z{&qhhAu4#?z_0%YMWDz(F zZ%xuaNUZ7I%dR9$cO)rf*C>YMgY&ozFXza0))m!D>dHTg9OAbn9W5U=lQS^Pi{0`( z&ZCtSZGOv*qR^Zx6zN*hp`bs-)gzXPvqwmZ*L$UCc8v~7zkJMCL<(i6c@88y^G?v? zEyF}U+lp*eM6LWCTv)Z+fo`#pZ9x zK+)ckjxtuVK+x5*`UgHE;$cqa!^k4` zWI=@**rFP*_A7HdoYRs6JiT(J9E<2bkPj(oPUda}L;7tw_e33wfdsDTkyhF$U?Loq25&U<8vkH#K;8sUdNt4a=_)5&#Dd4c6nC3c z>gNp7CykK*3mFb_JOP#UB9tWRUm+z`Fa35D98O>O3S`r}H>N0*P@}vRdglfi4(Ls< z%Hf5l0lY`H+1q|~I{z~Gm$l%FKfy74#16euba-w08M2$gkNkH^5P~W^jFO%Ze!<%G zGG*!pyW0{2P_(+gGZUwKWgD{P<7QCCaq0I!$+wth-DPl;*>)N#ZL{HHkh=L2l{`3aX zV|>JE{(&`C7N)fWF|F{DaekH>bh2VJFe{6V^D%;?Zvhy}4Xl)k;f-KDu}<@w>1zDD zZKN|U%OVUTzoY{)(5>$)WvOrQ8k(~V2s#~_M<759 zcNkOcKw3&5t9ek)+SZ{`pU_!psevKQgPamVacwPvsmQ=>%7uPWhI_Cof=$nq;4_h_ zY&jGKB7W@&yPcvalR6`r=QPdU*|l!VDeM(4VG)kEwh(;k%>e|Nt0 zAzXBX*P5Jg(BT@$xKnyIPV=2TGCX@?re+?1LBdAIofpFzj=j&gYXhFh5-n0b17_@c zpYdx6lR{v;47+|HS-fIe;zO624itH@yp%R}-1+@c>Yi_42<15+bZu=uZ_l?Ug7 z1zq-Q@bkqguopfO`bnj>z)S^=wdF?2L*E?6Y`=YcJmmwVjJzEB=G!0^=NLs@_B<=j zaHmI})P-b8RB=q1iwPzcK?Dsk9s}zL)7*Z;5n3R#MO|ZkZdR}*qMFcy`2)By*zShB z@6Ka1_`{>84B#4pdplI{wtAitu**u>Wbt^?c2%T(EZnWoA$wzYOVm6pM>pZ@x4<YWg(z*F(1xA<7NeL7>9xZh|>PvAQTAo|9n=&U31EA*2^oq2XD~fgnzXGt- z(!AhHzVP{{KTd;f%^3&{Zc%Z@Md>Zwzhhd!u;@+?oEGZN4&-3-CXkMF+bJ8;Il4wp z*dS-wNY;jQPNc}3AJ13&`B~of1sRdFb}R{pSLd+IJuUs$9e+_GV}{x`2+tx<1d zz&d$_Fs4hQWlR6ca0%Bh2D8K708_rSPdw@=Wz4OAf|Sp8PibCYZ0Qv#fl-b}kH?l) zifhkuAr8k4^Q`3@^0FrbJvUEEW!f&+o@F4vGqv>O;O+`|w3TUZRu;V+d=kX9d@5}d zNCWwyPtyZ=p-;21eB}Bzc*>KyZBOd9J*nIFq-xtWh%j81QxRVINxEv3lIv1RXaViWg{~V zc|y-c%?!lm&@M1@7;HY{9+`C9glyyshL&r3x})_r#=_%HhM`%^wC4Q7jio$&BKK52 z;|@Jdw|h3IB)NZP%(#&6@E{+QA!LkUl6XzNO8g^9tW;7?@fqraCsT(K#jWA>qk zxTPORkb@v!y8?!_BIUrX+sT*eSTl%H4%iFnG1xA0lG97Un^__dIX%7Ie&54Plj#}l z_FpMaR=fQ!@w_VAFc(S7e{wh)`r5t<=GL>0$GkIg7I@lQeYRn|8?s4~MBdd&TfUYF zu<9g|t@WOK+O)RTlXP`#KbhgnAyZkl zqVf(-_V@XacG}G?e*)L-!>&-VX_hwCN$~$7MZ$1B3k+m4RVrL>iov3t=Ix|6f60ZT zrtKp3643f7@6uTWLqG@yt{=oEu)b^zl13N`;bDg1ur4;8DN9f1p^vS}1mDgiCsvWS>1 zI=zpeXPOD{74ep_4y%%6d|snJr5N*4?H7g<+s^t-Y0~z*$It{G3y(Tc~8Z3ITdXs)>bVd zDrNwwdlLzE?P4adqqPVE1l#F)hilPDO?+z$^kq6A_Vu z-D8>8dxRWVVTsW^$C=Nm_`5nlRHR62&|S(VwVqebB@E@-gEZB=jA|)HClJneoNCE{ z=_*ucmce}ZVHVTywJ9Fn6a@v#bA`%qBhldI3kCBVx_?cj zT20&?QxpH!$rjbi@H$;|#UTKc5;$~>D1k$hvqOb17eS*7)lx9Zlrvupw3CxSLp$XHri6y=Zs5n9oWK^Lu4$~r zQm3pGy}(oJ`3-;+w!gsC1V*8{D>BUGQnIY%;LIQ^hg=$Ne~LtEF3b9^u3nXLqX|tH zjcYa#8y6p<=ZR{|B9hSNEL(1>@oaF@CFVb*HBhDvNK#00pGa_3nFr>`!C5H{slkRq zZ8UH?S|^X&+&@nV41j~+jvOZw0x>aeF&LR{dHJ%G19?89n9ZLQ(cC*$Ntd7q2Rzk% zEyVd#JoFGdi9atsP_{QXd{6-oD2u7ui zYSD@2-b67Zyg;x~#X(Q(1Y$&i<&ke$BLC8N30ge$| z(DOC(=>TR@jWzoRF@S=)W>gUxN(3NfPz7LhR# znL|X+wRh#_4SMyHNv{_gQDI>EqqB<&q%Wu~Sn3%G|76S@T5I!IU z8{hbhiDEAD)X>ctDad9S&qs4_m)>Q-?!8xV|2?Yj%JI1luYB3EewL+LFd&+Hy(9!S zpX;ra?^$$GA7+!fy|sURh=e>cVbHv2!DPwCFlW7t+booGjnh~An!46O?(tK`r450A zw%4OkxFzPCy)jv;um2mUfIAJ&$LQZsa7Ab(M`aG4+afnTUPxz{)7doGwq-qan5VxX z#5czb!OE5DQq5ez*Ls~Vc#i4@q1CHML>5FBcbaeh8mjv}Dz~y8h~!kX&pmA8EeK*a z5(|?gdlS`1bL($lsa2AueLF?#f>`1+wJYmQgX=}eVCZ%Z9ZMkcd2ThFU55uVuq1Mk2+@O^g9TE`DN;%<_P^Pl zMW#kXYY?lcNXzOt;6XlNgn9jIvGY>j32NpGw7a7isyH(=9oZM|TGHHY#au!h@kP_* z`Kgx}xs&K~F?+hxl=&hYUB#VEV$3qL?x*uCSu?}FfrL+@&n^RCpt7J7vBPfhGpn{M z>zwWOpOM6zC4@n{ebIwVR+8q2AB%Z<amA0t|H8~*f1^&5%wr|;lLzRs`H)M)6Q z8ulNbqio$dp13~G5y|w0XJ9Gr@?~V!favl=hv2`xzRD5m%rXB7{T@$!A*s(!q_$|1 zaPHxQQvI`y69EMRT8@9qiyTkAbb688fg`fkGfY7(u{ zRgWyQ@4lC+hYLgSH%-Y^KSnrJdmI;hE37LrCo1PAIGIXSHXn`&!vRI~DHs$n^PKtZ zFXC-KN5~(bsL)Wbft;$KxW_`kSOvuwK*2LbUj{dR2Ndx&Esl4w8K6*cKpxI9J`&~^ z2L04cjnW?-tVXlyh!`+W{aT>}V1CpnD2V~{JHnAX0hq5muCIbm3NRo-RtDW4Znc~0 zH?+idK4y;2GGBjLc0!?o5(}qwS@+WqBnmUZL-a#36PaQ1kj!=9fTBue{>ffv(dENF z{Vn0)DJD+;c03aVeXo37I$y{C*L?6eY|mt>g?zAirChtnD>jf)nC}Zl5_^qoCf1L2 z`EhNWDDIVJw<6}t14-<)3HZB4O za?vJskKw1UWkK{AZTEs9f35w$WUaw;`J})Jvhs#D<@h@Hq58*;yQh)E1dDO(vnica ztkf@6xL$I!PNx_@N5D!ca{?bc9AOV;``fR~;FjmxZjl%xC?%L7doA+QRP(0?rCZwn zDh@BZg$|(wZz?!)PX-R&3gWLP?b%A>S+DDbRU<1p-@zP5=w6cW6fN&bI#V);$LK0%Oq}1rdjf72VnZzwZJnR+;JF8{VZAoFbO4yK=Nk5UWOkIcYDU6>A1WGar9gubf z7u;e&4mNn(6(YLdV+)f7PSLjUg^I014tv~xfAUKX~D;X^Y^iis#Ranx>b05GdPjk!zk_bt2v~t0MCp}OZ`e;C4 zROsszOs?^oZqK+%>6-Td0 z+zC1^D>*I_G;f!-!7mYlQEItfjiUAUl8G&t(fjF_T%cT$F1LG~oDHqPx`_?5(d_lv zWS3+ZP(Tdo+#aNEaSM% zY;o*6!!hkOIq^sGrko^`X0Vzh(cI$iL-&j6Luc$TYT1pA*-WbD5{#o?`_)yx_TU^} z`>JX#E#7?xT$G?vS)S)La?=51BP1z$YL&)o{`N|Ylb3Uj|Ga%RMC)tb@RF$4^=j~9 zDD*2B=jFz8N`@eIMCX_g&F!cc0sBB!x$zHg`{+mRf>u2>nmZ2YsNlDJhI&@;F3~IA z_S~QG)O5gT#vDX7ot2x&$&xW1DO?RTV1<@pTU;)7@b9(o}#TDSLdos zFWf(Gdu2leC9&=8<>chmaix*$dezZ76Y$Gj|8T5n#^W{aZZ{~Ze%ii@g9nk`Pi^$i2>YkzRJfjl<_&us+@UOo%7rViZ@2q|JL>(j&#Q2T!9K|aET+7IV!t;tnbd&JgT1C9i zm@Q9L!zO|KWmIOAqo;0kMRQB82OBJrwfjA;{SHw-pv>7KoceBNlgn7s3?@7-m@)&2 zA;oR5y=~-I%wD5>g)RpvZHxc%9?0o_LuJ~(x>}>ackqBh!6h(dCMXn)JPHLfpaK*M zI8{}kmvKf{nri+D<|ntw=Gvh)*BAyiGa_bVw+2?6BwiA45P+~q(@I8pH1{$Y@n9e@ zRW}51Xg-U_^Ol@Zv8yvUIF6P`cC1yZF`zS=TeOho!cU&D-&-~|Xg5!i&In&@eGTHv z*w+0VxbYbW{lD1Xw>_9)JT1eEqvZesjTM+2dfuEeDNi_Fry4+v8oxzWp zpPg9k{H9xY+xYd+Ts;p$r$Sy+yh7GgaQKOy0%3k{DplPPP2-a2iUM0RM|dUc0-FQL8>>i883?J+ zKDF1x%7L9)`v0>e;TK>#HD>cKv;w;u1%}%>#fg4;|A-R3eerE6$l83sm z9=i=QbCe#ukDAh?Rx0_mA+ZHttf5uHK<%>EJrKXShrV?uojPGO3+FofW)hnVbjC)> z*qs9ExEJb&FOYcO1>QG0=^Tqap*mS{uv__>$9movo*^VQq9=&amb~BW8Xi1>7n;_* z?|yW+-0DO(BP9|k^F%RMCM43@w6=kW=sF%PA&Tkt=vc*r#&${X1jM>q4+Ku5q~IUj z%}1Pp0sI{lyhlnIwCw`a(nQj~9As zB$}I1Bi%O4Bh3HyDZdEGuzf?YWeY-aye(I>K6L@cuBsMjwcD8=AP?fJMIznDJ+%6r z;d6b~G}l+_hn<0m;U@O)p`Y;-T_fC$XU(zPYFK0mH^S-ck+E_WKS!-$=&@0%yyyT~ zIpytJ0GMv<@U{=zjX!Rjne|n_G%jYN`yZcRz>PjWO=jS6A=7uw@wP!i9Z_y3SHhw&wgKs5JP zs%y7Jnq1EZ2GM%Q8o%^Z?kW{77;v;sBEVbfM6)^Cfg9|x-2FwH;pNt{sXuQ9BdYI6 zkI=ppJe~r&ZRAw8(O!~;>I(QFDlShI&O$j?I9f3qmLg)bQ1%J^R$FXMNtP?K9;6Ur zS~fiz_Ej|(0Z+^!z#E>oUH03{frP7EtlD69MxQ~&v=Hm<74#G&SbMe`kI!yHAjx|0l-$w;BpUb8Jalk<*17+b1jDEBt|Nf~%`-BZBR6lG zp3&lArHG2USE%!=4F?!><*pAMUUbIKyIN-6ehv%Kz=eX+awUj=`BfV5iN5v{|~5R^CDoYyKUby zuouj z2A8wf4XH@mQIYlnFTO$&rh1Ax0^Qt_r-Lq3=PvGqdPqlWIc2l&;A^LLzz3B!AN@f*cBSRx2kj#9x$#{j(|9T=lL+%CPjIVxi7c*c!&An(MrU|ehJ}%+cT*vtW!sG)2(E4rIdDi0cj#ROoh|L z!*XLk0S|UEhDv6pLM;O{fK8|E=6RCC$o}SsL?CEQsHYPj zwBm=Dk6G~?1LZ9^k{H<+5NqCJMR1nIs1&agVLOu)>LP&2)F3;c$P01q9Y8eiUH~=@pKt1`NsaOg2}@?@QHb{zoP3TY!n4fe_dP26f!Mef>0Cp--asv6e4m?Sc* zg0VK%uxH8Oq zgbjg9h*Gm1PXf;F*BBNhQP<>WL86a%ElyJaXjMUGN za$^g|mxvIVTh_bCiKfXdnFi22jJF+*{che{G}j5Pc`taR`7af0J`+!<47Mdzd4pA@ zAZwu<8XCY@!U(;VNpmJyN8M0-D$D%8i>U$rs$n0x6Q5Q|a}rbX38vv?aefzkLV&x= zMOFi*+=l~5$21#bUJ5X0mYPL4zTRRk*0A~jxnHo*{Wr4sjc?>Rz_9)9R%kyk>}Y+RU~>k-18gqHOG5d!bx2o-?L$ae zcEwNu0^`>X$L*V=x&NH03;P|pI2sP(@a<^5laFX_geaQn=ZM92H>Z5fCyv(T#K`T* zoTsxXQxdP?P)VPm$+vbeR_dD%A(=7yK{;s}v;G0|`1WlWM?VPzNKVgM?@9hPfBw~; z4U}Sou$=1&%_mC0oExbS(=vB*l4PkKk1~_5XmdpxhE1`2_M_cu1H@>8&WfandHh-2 z?}#a!WfI3Z`!u8+rJYETKrwmE{fs4*V74THCPVF1QD!i==E&BLt~F}!niMK|k$t|< zF8NV>q`7SAu1h&Fnu2M43>3jbbxY44-Nl&|c{6U2(P3Bc3r4ZL6U}|IN@H{y)gm2H z^ljS8e0N!WzTdHq5oc3~!+^Y_Rf&c&->p*JZS|t_oLx`Rs#tHhoTFY=XS{gqDp_U! zi-IsK6mk1DF6C2`l1y+sCOGmA zM>h(S!(PXlpGuKksX&JDz~>e)1H5KIEIPO%+9egqeajY)YpdfHF+k7ELw_IP2KGTW z*AQzqq{$$1wBCpt`o`{9Q-{a=hC4oMvgdHe*q+zD7r~shymvy@XxD{?|0_9WIQ$nH zUVL5NfmPCxQhMb6XfBeZ+-*hfP~X2{7|&>t0iPuU-XR12Sw@qX(fe2p$30|KL-kvN z!!xsGw7PxazvVlT9!2?gt8PKlSsZRK3^X}2IJoUZ4|0<7Khmt7Z3D#HawvL&&DOZb zcjjD?L~d2ty~Z|gQ3oJwZ%#pdi-J`fq_=#&@a-y1Y<5L+U%E&JLf~BbpIBXjuV}xo z7Uqc0wau|kOfwl2~?`G3&Nk1O?fzYx%m+0@r% z>FV9osnXO{@9JYm* z|3V3?53x6e?S;S<-xJ)tK+!xo{}e0?5o^|yuFG~BgUM{c8**Ysi14Dra@VmgU-m-L z8!W$3HtW0d+vK}ti)@~;>yB$heei!wmz-vvLN$sm`3y}Jy%NYSDdSm_CBMPv8dkeX z$daGo??sl(CAdGbq{!SvagZgyjF;M%Mws29_T$K6(9=$flc*BY`N%HD|`l zF&CsSnw~EakrVhppJuv~0H!>gFcKNlbCkM@$XO`?OreKEhmHiZ&7b@^hTh1f zP{?Ck**U0UHl3xUq;rSjM-nR8)EtzjW1}|%vv}^vaC0Wv^#+$9v#fPHiSkn8W+ca3YYJZ*0_YHdipfg_Yv=lwCj6vF15Sbv&kxwJ5Wi3tXMc z{5~FZ9fEZFvTUx%g+u0izy`X06EhcnI7@ETaufEy~hO$j}UB(2+OnKDw=bjn&j z*)$)r4mC#u`;`r`6>s2mec_guA=UU&be8!J3$PkJdUS}SruC*5J36iK zwOmi3-ot zA~CXhp>M-}5YF#rF143mfvgDPX4dWexiMjh%y=q?5*s-wpQdZE5lkk0qi@FIVk3WF z0v?%CG!XsxLJ=F`77Z;2Nog=fDvd2NxWzoKSs##V8U?nxzm(@f=F5EqN4{w87@($@ zT)$CS?KL{M-%)RmKTI%;6D19CHuqBBP@}QATgIQ)sDo4T4ebnatu7Km)kAyZ3D&-O z(GVF`*p!4lF&iU4`E-$B4#9_nRD-#aR8~V?^}`%9$^k;9^9Ug9Ns4kmTcANa;v2cz z-)$}tU|?!jX2?Z;eUl)AfnzXm3-p;&&=hRF5XAN}ZE$w?MW>8IPP_1RzaZTB&- zW-=?BvL1?J-#v?^1v7HYpJ`8?xlVhWW=MMq%^S6+*!+R=3^o_(0NxAJ9-n!+_Eeb{ zY0n(9Tzjg`$=b8fEYY4)bENh(m}hFw3Nuf6jAoi=W@*24w`tRUX}0-gy+CRRI!sgh z?-l=>+W(;V_h|oL#J@%RH;8|O_IHT?A?@ET{(H55kN9ub{=MRF)Bb(pU#b13_#3o; zzxd~Ce~*PBD61lmgnpf{MrU;rGEIkEtV0S3Db*oUbOku~~ zr|6J@I)t-Lc8(7D3d!nN^DKU(P(8;9`aL_9l9SfS^+FsBZG=7%Du9LACVud7y00uH zh!PIktL@V=%=;-1jSJ*zBwge!CP9X|UR8pYtS+~EhpH3(I^luNo*84ldxW%DsJ9Kn ze$wNyt%5oFw2VV9;$pLHM()pkz%AO7LT<^vaR`}4B#b^|hsh`p*G640DS^f|?rV4e zNfZvPi(a+voIFh}j+q|g<#L3iQX(hA$M>)n=~h?mW~Up%1Lc}sq|`${gj^=cvdXNZ1t>lOv-4qPx7TK%h1+gA|EJLQMa(V%6=tn zUR|Veu8ZXikrRdk+hrp2PAfC7fptAGh)h5syRX`M(JOSz#=GC^`ohurF$70NY{PY| zp3g3*1U0pk;%qkG3GvN0A*`u{_Yv0o4MzjD>jt1jq_|&ET-N|gT5;-ivH-9RZ4NlP zY_hp?C}RdNg{c6XiV)j8RnX>W{gM`tPFl|<(ochaLBbd%(M77& z*TtIgCG4}*#yP!ch_T0_AzqS`UV?@Q+-%VgCzwIF^VYT-Z%KlL2wWD2t~|q%KBXZE zn&Ip7RR5oD%uY8dnKy`BZcC1Tmv~J)w3G>&pdX%;8p9Xuj|cpb0LGlG=nxZrBjRN$ zVx<^p^|*ac#x23sNLZq8NdI%3huzX@gPQapb5Z9Ht62on<&E!M@u6W3 z;~G)7)6x1Or)uOdGe|6$_ZYAAO8PnFBDhZHibxC+i`%ovfM|0Oti4iI}QpnaiIsZRrK8>pgmO>#|o|FYHTvr++Qm(z`s{cr*Sn`H< zu@8%&;e$YL(JQ^_6d_LT5_}3w7NLT`VM54oB;Asqv;fIm_#$h)Z{s4DLwhU z=3pTTj;SQSNuWUFYKpo0*Q8U#f8u0hG1uGRBE+dCSTe~<^4-m{sEX+c8;eA(8&OG<=cTOY#XEnSGgigRzd8c``2PLA8r@;-MZ zUqR^1e{<1Lfsz`N=&J}CaN9DX9saU0!LOnnagoO@TxiII5MiaQ!80D0#nil>142aE zGX2aUqerYzv0iV@fE-7TYHRR)fBQKi6V#yYN88U$rABIUtZ65^$Ms2|%wIP8@La6E z6`Px$kx98V@O|^;U&U|?b13QToVe5B3|;OztX`&mTPZS_8@2&oyZtwmMa6+_{`NwO zzK_q~$vVXyI>l{Pir3JNP!;EX=)i>qzG>TTG5y zBuDK*PW4~e%vWke-sNy$fxoQ&D@^+`9KQmIJQNIrlj#IE99Fc744S^$S7QPnQKa$q zI6}g)hi>}aRS+y2GWamhq`L$UD4WFpSkF^FmSm_6*9UBl4)y z%U#C`G~WP7M(A_!GqfD67}sptss@w*Sue2<6U*U~#m^V6N;Mzcs7C|usl`lWsJUR) z{z>vNdv{k9z3fX91E_5yF%C&fDjel#V!To+t=SqpF0_;Pv$_4!+!uGthUL z^Y{Q(wvwN-9Y{!(4(Wb?@Aw^XG3o@OmC9%sr#Dk9P9we0ly8m_z1*Xgs4T(%2SCaB z^=hBv;Y0c|YE9IKT)ObQqWhNT(Ob)y3utvKg^T-u8Kz%wbZE*Ff^C@A2i&=oPvB0G z)O@5XO$v_uQ9j`L$cHR5Zm4PzkW}!hv#K%$QCxB$d{K%ie8~0TYtmSJoUUP$;j^t; z^mWUE941f#6zhMYCg)uYYz5$X1s2w-$^hrSkhX(R(3yyel_ zaf2hY?=UZULoqantDK=>UJf+R6}*m$>3-Vf^7?eg z6SaBAHDRV=r+FeZQ)MWdS3mZi+L81ajG&vzxiX)JT<2qhBgT>{_8OldkgB^t+P_{Y z1Y($echoiI(G_qz!?#kYzxGp*d+S2g6Q(Wj{R@quCeLq#0@d{XgiduVvM-Q$Bg<4> zbgn0KBqcc1EMpdnKwAN_YeGQfM^2Tes81wOD*bqhj^=oAP?3>Fu2YpV^dkzcqhM`- zP8o96-SiZ^I4PSfUuwKn$-<2lfceVoiM94_R;kq!@tW_S*z1c$gZy>b@R24ND^uly zeZGTVRJb~tMwlsg(S3by%GFGH@3Cn!+n6sISn?vj2(K`N zmq!^-d?Fnp0F$z3anXI>c)70$sxiRrHAhRcYoXNOhZg55WRg@D5@qY&=gHW6K-_*( z(Uw0-MWP*t0MOrsW-K?(6q770BnJ^gR~mB0M_%I)Y|9MSvs^24s^O577tP&Y0)>p+ z>95HZT9t=PvbqK#P930Lu%er-=-`cAh;;Jd34I$4RAV2W+t(lcfdH1|IA`!?G&3DP zRJ%mjKPY~TsXr$DFT1(W|1xP=ZzfynJr~J*7=Y|YctuL&4vxKafko!;)_h~d85|0b zh8XQxvy_p>L31Jynv<>+L@Ldo<6?)P%{fe`H>8T!{I!a!zEc>FUtFsxZffXVJnKp{ z_wVCCXo(DeN9zt+TFI-FD5Y({t8_l)PqB0|vN%eN8qA5P1z8)(s`8VnwC0_b%03692ZZA<k?JFej~T<7aU`X{aX!qsrg1XQ|4P7lUA z5v99ZO%Oo_T0WlEm1)C*XK=C4$_7x$T0bMU$;!qov#b58Km8vj8H<7z%6Bu#j2HCd zVWKjyLlGA7H35BiB?!yqQ z$3jzRa$Ypx#xBqA5$6n^&4Q4Jh*%&C@%-Sa>e;nO*5fDuM1HG(LhcYrsuGWlv*X_;2upID5`nKZzT%KRu+=D-c7QMJb*dD zmfv`vPRFNX2BTPnqdS!&}!46l_fl^SrWc@ka+|_r1kpyWR|TGOYHf>%~27l zesRRtQEy3>7L9%BQHY9YAZLc*|9~~ee{v3XG#Hvf`6~1%vvMotlr&%M)=rN)V=4^1 zer{n2slo$Dgl~GC%qhf3p*;h$FZ&?_lb&_pFRLRZeer4@MZZ-o$xY^_d2419sqUS<$ zf!uFOhg6GbDHzpKZB-0f&;m{Rg1PBxStRK)xwXX3m)r$99v!%#Jx%TceR2Z{fU&c& z0`Sj{M;(IEV)HZ32SU8x4cr1SBuhI+T-inrrK~RYxISB1gjse(uUv0o*(t_sl10^G zofVI^GD2w&@zu6SW}j<+W1+irX-Z(Yp#l^jj@I$aQ>nylDH3*%Ai(_hZ86fkA9$G_ z-G`4rcx}~vrQtx%SLkI0294v^j}5`_rDKm~6x-%j$C?yb8GZ-9mt#Y>I>m5+V^N!2 z?szm4iBwP6^NiR&Pxpj6odj`kutL%Zs1TXd%yJeTyVtcNu+v+#10C|s7!K*HeHGHx{4;;tnSN1{uwp~ z-nPW)r=@D;ZK&dauG&7LsEo;mOo*`$=ou-ZLSZDl4FGQoqICuey zSLmR~PB1K;!+UhIyR;;5m*dei$74G>-^m!f-F1jLUrunvr!$wWxB*lKJwxE$OSIbWR|CYkM@ z3uLaMf2yNRHRAzA4?Cp_H)lqn(BYY;2VEG9juzTNwRv&dX8N?L_jzQI z{o3GAG0>13G;-ynEWzcQ#{riHr0@7QyY8mmuE<#c<_-)9)#TYCdFH?Vs?Iw*&0HES zYk#o*da?SMibUfPy=7<0CksEk2dE zkUeja3OJ`PVV=*y!~ZT7rro=l;t z&=ayVq^!=9jkiis^R#us?*&Oji(1GnZc?Clz5kPJi0Dljv}4=G6r|X+nLbf_ZeFB27EWL zCJE0(k=0`MdAEA+NU6nL0mU`-G9GA^CWWGij=Nho2pJU2WaSxlz+KG~!e%yPvm$&r zg_$-!xMYgh%fIzqxxRFZ))`gj__amhgM2e!DzLXr7<%0pJKIbLjES-nYjX?SaZeF-f^ zG>{Us#=>C2ZWS`5Cvu!QC0+ze9TD9mR^otOUB$3?eBUZwy)$XrLdq=!C&fxp$g&G5 zD>O@JU^t$P0FU-mf@i=qY9>hDMD?`h0T zw&gy*Bz?Tl$8f5K=F2lp8I@vA1XVkK(Vj}jw3q7q#%TpP;I-2AQqzeGJT33q_E&~~ zX+r|Zvn@?RgZr@vnJ*Nlz>vdQtbe`AhdhLsR0=b);<$ar5F`!F;oBMcd(0U)tc_}K zB}R+zn|2A61;wqb?}>4NaHZQkZ`xrAcFO5P|B~Yi&CEX?vEqA&5BQFJFaGi9d`6|) z*V0)GL(1&(#H#IG>@VZl`T-~W7j{(h< zS+D%W??0dT9n+7748YAx;>9Pj2?7thk4_)1EHyufhaU}2INZz_F#r6A7%07q{QT6T zTNn-(bF4LA?JtVjmd9&LE~?O+af~V+-W{vDKj^BQRP}MZ=T(xVa>K=}fTp?c=!OfT zIx1t(A6>M>-}@c$&EFAU{T=b{czgn6skd-itjUS+FyrQT&-WKzY*r8IFTBC@^%ow# zSB7R89O0zNlw41t`SN*3?Ce{gu1W-0zB&+h2UK zxhEc#*I{#e$&Xwvb+<2CmmpBj%(Dw-aBU{$Q#M7YeiF$FPrdWF*x8&}ch@<~T$ zL+YlOsElK`rs%Z_&MpZn){D0J$8Ka6_oEkcKIs42kQ|1FPdQ$zxUYj z4V9E%c=|E(tM=b@?EI?y6~~IlWSaTK`LShAHJ(2S^s{(N`$~_UzuNrkcjxcH*!O>I z|FPp$|9o8WpZo8wW9QfHkH;r9jS*MfPq+c8v9COal0y5hBqW5pj8@06i($;3FS`sOc{__4>1uafxV#1sOt2kv8JdjkoeH+=3(UnNTt?(JM8_bI)sh)CMlrs4~dYqd8n|Ut$Ifh(u5(#botSa8EGv$N; zzv82kH_EPdBF@E3@EYYjHa(kbB({NfE>dX=uf8gY25+xK2B4B`<@|$T$&H#(UaZZ| zVH~R5NzFE++!?W(Uj^fJ#SSB(RZg3#2^Eg=25MSJP1WXdT~ji#A9}i3O2Xg>3m^NH zurk#FCV^W6DXbTa40G%KN5$!P>c+=2>F!GOmwp^-Xgoe%sJQ{Tm85yvH>2shn&YQp zSJ+k$HYf2FZ4>52AK*$lO3O>(-t`FvUk&`D)#dyX^c7kt6NGv;)HW^N=jE}pO8Hba z{HBYqWrfozhWikhQXgl^2Lh7nLrnSwIp)r$L)PpCSw6#8=qtOhFgTF1h0`JlrPQm$ zqe{KR%KIIqj+A7+(28PP@C@@J`0!oL9UKazOsnXwa*@!-QW73qdS3A;66Z{XKzDqs zsev_~5vxYRg}TK)<5vQ=w=6AK8oCL?h2vUo(hVMhM>Td39@Ws3gr{n5EK~fb%tsgk zJI(j$GxOoA=r|+1kAi&dZToS|yLFJMgL=f_Xq-Hp^*G7;WvtKR<3JCPFMe@UgwM!s zL5cvorMarO*qD`RN8^0vH}P3#jUDa8OGXl{WJgOW2Z;{H?VSeyC5;g&CA6x+ri>p4 zb?q{Llkk^P@tH@fWd#sO_J;~pMLqCf;)NUYcc-eM>j}uvCKh7NBC+ho$woY zR;{>P*i%EFHJ9tQ(dIPZ-bRX3r^-1}~<36{)B z*#0!KW!RVhGY$;dKfM6k5#bP|^wL!avoxC9D##ViuGL*#+I{m?taTny;7Gu z#BzsQZn5Q_XSqJhy~c9CZ@DWicfI94V7Y&@-0hb8zU8J~rRzJGneU^l@6#>!ILrOq8dvXI?u(YY#d06D+}~NQtxvhJ`ggsZ>K2MAYoB)WEVtBh z=UA?-&u?y_PM>j(b{m#x_syHMJ3g%4KG|%6XLWeT%Kqb%(~qwoF+;xP=Idhq^_-bz z>lv74yYy0Wh`vx88+k^@dZ@Nj-NH z9{Wjq{?;em&=EG(zp-*ZPD(F1zwDF#Sm~VKJGy>>cMjpPpZKc#Nhj_8TT;4gzPIqb z-O4ECjCM|)Iu%#{P2j;_m?&S`H;ZpY+2fadvERhv+HvE@kDWiSWWt2`W#j5bo= zf>PeZQok4;wj|XrknG~yt&^zwYnIPjE}yaVS!XBU72i<48{MjCF)tvHK zYC`cHgJWn>Z+MGG_J%{!34GOr$9{wHwDn2X6qvtg3E}hW7Ssgm17n&Ntgy{Ie~#_q z^Ut?kG~2ImR$l41l{0x~UgWg_)|mRG*V+6RUtk+Krl3j69yxW4ZQ_ltn%X*7P2=}n z^KKmHs;!yly6#5T_Z#Z2S2-L7b~x!51v-=?N%vtc}>d~1!@=8HHpfW z{G@%0mMn_r&nZdZPw@FrA9ykgnkG33kJVQ?Dv@4%ZoU`d%1_|Gs-X62!CC?Ek8;{n z+cXv>1?v|7#y)4WJvq&0Yb~(Zve9KWXxKppz;UfM+XVozd85tt%TJ&U7covp*lZhG zY_=*+zKc_P&n+qMc>e7wwb{-gUk>H{u^a&jR7n>y$ZlZ)yDpnkH;eT1oL-2wJqBlN z6L+p}!mPZf&}MtD&SpEzc>dq|2|T|aYqNb$xm)sVwjs>mHt^BO^8L%1>=_r@Yy&H8 zwpWG#`wceRH7?o>d`r(HPZ9gZ$u`^T&i^fFY_^(nOG+1vFB@Mou4cjfdBwFg=hhY% zm$Jf)EiRs4J8^97JeHgZ6UWsS*Rtl!uPL2hcJBO=(h1|oEvOw=GC@sU#(>(caBVZ| zF0E?{EN!f-YFxBzQGMNYv{QaF>t@!~1{)UzZs;8$NNC-rB@&nZ8~Yg0iJjupmS(!n+- z{UG%Ue&&u%;ESPS`yJm*2lbQktYy|#FlJ;^VZr>fV{P$w;b{yk zZYY?anE%P^g{048{YXyld#Crlp1hw(dUv1n7t{s3i<+)Kzp<`vW&Bi1ts$f3akLBPsXG3 z+(doSUv9petu!gPW4Mv#f7`s8`Ocd9`lYosfkjK%a54+VjcbyQ;x~HqdA5<0M^D9} z?`o6(b2=pfzvMveXU`&BH6GV0uaq*!OQBBLfJxw7EPv&@bWG_STq+pDZyF_2y;I_1 z?Q#kr{G5|Vv*IdOeJg)~6wN4(gMbL)f7g0T~HD^!zZ(Nc2;T=W+&d8tONZ6hJ_M%skZv)Qh_mRWPH z^4hNDzeZaP|8zhc{)v6y=i8~XD0pPmDX5)ftyauazQIFm`?h%+8oV`u8r#gJ3j)h) z8tdlj$hlQDfrWzmVirB2Rq9sM*`|)1eBR38(4ZsrSd(gEygFs9$njynpWPlm5Xz>0{;Y?~|_Qf0)i$*1LWwZwPQy6CV4?Al=V* zvlSq4%DiRkQuA~SlTM;Wj%lo0hHE(z6mQ2$SE4+@Pb=Ta`^m_~bxln**VQ$R90_*m zv*J=UhNTbk`RA`$a$S)4^Ox4ouWMv~=+j>p)GeuNtf?3Lfj+%jNkK9EES!?4UwjRG zC)dxO%5-O6y`d>kx7c~v()!@yI%ma_1xp(jtEGg21EH;8BD?If3xk3AOP4R{z0Z;+ zI6D5vDZWYaNAk!o9yPjvX_AON`M5y??e_Ha^t80JRDN$wo_fYJSA607&HSgX9Jk<- zYH5e8r%z2yv?HDGU3@!n8k-x&6gdbNkVe4b99H$sg#Hn>YTMpmjr5R$w`i+(!bZ_Yzj6sENvvFu4b{5spMP?#Y!3R zSv4ls9)YhUJ9D(tlK>+~*_AUZ{8Rvl3mTU$riw*P&YGsCy2bPAZ*b0s&|Pw!a|si4 znSenm&QyU#HT8>bRFgJymZV>_WWF@Gj-1YU!Rz>T-mo;-m<;O}XGOqC(#1=g0?ztH z*Vj?HG^eqyiPNfc=>lghRE1OqrUa(ZwM!Q_KzGk~7M@dE-*~ojL2yZ}^qGdUCIQrv zra)t`7E;~G|Edw*`ufV6MN3rMrQPGC-Ak4RoOMf<2CrM_Y!U)Yp-bqP`d$c2#@El^PIum=voyW~3juoRlG?g4|8smK*HbL@Os6z~F;U5UNdx@jN+mwHq-GwVGI|mz zoD1t}8gxmLZsLDv=ki5K8CBmU@=Z8qKH(}HJKwpIuOY~YTehe%5UigFJ~@w+du;qzndU>`Xs~r9{LR)w zA!)j*#h|h72SLu204JmWQfu+~KkU5=d{xEOK0N2-5OReC0wfURfFMD+gcuMJFySUB zmzV^_ijt6%kZ4Gbxj<0VsAy5qBGncZ6)7qzRf?BV#TqGEyr+nY_taX&N^P`O(fZo& zd1lRI?{jhv(A(Sp_j|kZn>;hKXV%QDS+i!%?7iopQya?bmQ-P&K^Q3m90rXwjrC;e zveJK{DnNU(HD4o+hw>WqWNpoo@|p(I9;VlPjhMc)ZZW3unuhw0)-$~xZxv8-4II$H z+Nzp{4oyWeRDb1Kx?w|CmDSbO!`SejQKefu<+$TI_%chBBAJ?iu>f;lO$gT2F0O;N zt0{%nZmc=K1||Zmd&|mc)Z+sa5-?FP*?2!Q<7)2X)ANZxT`)`4s75_!U?#+sRnu5q zEnXeQ93QJN5v8b@SQYC{@lBgHtqZR)*Vd|hI@#>FQjCM9?4o|4+5XIih`ebO`f_RH*l)Byj$ zK}QcBa?H@IVaFafe8k96*`sr?SvvNFaVL&HX~M)wC+Fo)o-%dX^iyWcJoU6$v**k$ zIK8l_7{?#YKkIvEFF5Dig(ann%CHr3_>xPN z-6vaT=E){A&jt+66V8Urm8^J+Nx#{olh$DG4sWVNvL|Rm@j9G6fwgN3*PZslTgWXo zFXMg`7QPN)%S+zBJ}mr$u<)9&@C{+%wPE2OhJ{%MFRbH@4T6OX%+sOCMlJ<0t*oq!i|g7H3@!@>JIN=K{GY!3D*P`?*}w2Rk-{^eIS%!=Qg!|dO@Enk z{`donNAl;UaJh2+ym*FpB!4!)|NnH~OXEBDYUTg71b8m%`12g$WqXi#xySkQdXDVR z=I`A4zc=P^BY-8P;m?-HkmFBLN7!JKEIj>@wbn_Mq8z{YJR#Fr^JSM`vGU5RzQ5|~ zYpz{=-St0MbHmyn-gwiGe!TAHTW(!{+wFI3xO3xAHr;jiJ)7^n@BS@6ec-{ZKil@u z!;d`r^X{PM|`r*{5o*VE7ZdiS%>J^#XsFTLFQn?0}Wef721_r3AvTW`Pf z?t5*&egAhK{Qkp__J90`PY(R?(?7L;_W7T`_{*1H9sK&6zkZ9;8q_~)Fhn;9j>us6 zPq+U+UH(7K|HBz<(eG=6?LXcA88gN&Su&nGFLDKN4foH+<)>#kE`4M6>`{ThC<*ZG z`FuEDQ_IV+r@);>x#rX^4GGW13ZA!%urp(ChwnnEaYBX5dKswCNJPPTUM&Z7$DiA@$ z;wI7{DQbW_s0*runxTTIC#s8Dqw;72nt~RwVYvKLuuoE5j&-A$p8i>UG*eqQR8!~u zYHa8DXH;SL7Tj9ypITmDR#z3YN&J(!!z79F>*`9En~d&wCkr;Q{8^f^zj%4DJe(Nr zl;|xLe?86OGAwfSq8dBPbpat9{{)8{$q_60F9i7uV|8I-$IreU87Zy0#v>H@dBz?uXn3Uu&1tROwB+ z`l`jq(LseWSW~|2>~lomO#d&f(0e%{J?k#c%85xgRFxDK7tf^pOq-zzl{5w#usevs zSc6Rj-0#G#5OT`JSKAK}8R1G7k)^Kt(O4<JwUyRMcW}GKAte23UI>cT6HfUMib(mT0bx{8Z%CQ$7|jiYL&m)`;7b~y zCu%DUSJ+-|4Wd7nF47WWZ;6_Y3Rw0YRD=2tg4TOhJi?O+=)efQ+ zWqBa-O@teW@B|Q;L}Iv%+-sRY}xUa9!-)eA`!TAQq8B8&_-^kl` zgR2Zy8nkjcW$v80^NI(n!lJ1~@4kA&eYf17Fnevzb$4vtIkuS#yTJGb*vI2$UA=uJ z0S3~7MU7R}fd!2<@Q=-1P>7ilqiexDzRxf+7+9o~dr`Q#67QA{!gE!)XcwOWuX5er z0RL`R*ybZGOB>%1{*Cc@aHQ|PT9M9P?sV;8>1-O(j62%N6JEA0lj&2c@J=Pt;@PRq z-U->B`L6px_`_*36KPr6?s}5G`?6^m$F{K@*pqfA(SCP2e|?PFk2Khe?v&0(==834 z(^Fi2rXdY`x$8%|f6tZLKTh=zq^OMI?y6UAHx;+d7koI)s|x<&RhsV0J_{Tm>!`|%kg?^WQFLe_0;x`a~)C8$9S z$?B*;lImNWsCwrnsQ5aeyA^b^GbG*3Kwi`PntV8ZIiWB%o8|8_Mkk@x6oaEO*brz8MQd7ahI-hP|7V5at z#6N7(c?X(w{y60?PE!4H6IF6yd`s70Y>Ac=1yWIYmEy(-=0oeJc&49I(H zfaJivgA8pKkDCp>VaVTN?!N}))#YfDKHaC%bK}`BT2?nB58pp#Jw^k0mDsd{6V%{9 zZ`8e)%FInu-9L|OjcpMbZ#8A*qpbadB|p!};&lZKJJR!Xk5%1^yQ=QFz?{UAjM>TR zB)r^leDPrKak)o(`*0 z+&J;S4dnIx6D7P3$g36~Gmw79=tMQ3xYj!$cZqj^r^4H#Ev27PJLTd}k_2-HIBOtH)^G!MViE32wFZ)IZ!%3nK6XnuwAdG+~?jG+^Ndry~pw-oAI>Nh}+ndwCm zE(WrGj{%wcc@s``jiEItV@9#0I~T|+V8W?*`zs@mpwcjYVhg=`{A@>h(kwLfs57|M z;5LJMfDMMuZbSD?6aEy)da8L+ZW@sFJH~{^17i@LWx^#uJ|7L5aK^Ai)hG82)yMOa zN@?%bmeiWi5*O@R5?dfVFTn$CcN;6emOB3db;_=gGG_sKU1-7?qY_pB++p7So};{x zXttrBQq#LYmz=5+Ju{Rqi0_P`=eHZ$-aTHm;(VdK5y)!{RxspMMot&y&%Gh0yXX2C z+qVaiZxQr&lS%WKS?#=T!XKLOiX}qBlN76xa+6h3p|sS~$D{g8hU^T9S3PrgsGgoj z@m*agA9!L{#`t8&)?1#z#cz82xo>!SdiHpd+7sGDvx%H%eS@*mP0GnZJAxO8|Gs)@ z$LB!Zj-m0YSMd)p_g}Aic~&X+xXwlgfw=04I(hmhss0V%CuFC8aXk16yCEl|txs#O zmW&|@s&{cJ=F}9`yUx)L91GbfPWpB!`nEb^-xfeHJZW(%Ezm=yfleCer0q!wdJ=pp zA>dVAay`m3AXyCvOu@LGtOn%fsR5qxD!sjTTUu+6mK5}xC%KDC&P`Xzp57{!Vde#$ zggvoAk%Jy_{XKDUk>nsd4|T-Pb$9dljjoV+oAqyJ{RhXZ9=I1e(nT(L-_s{v^$AQ; zeTpYSh9{t%R}sT1dtKq}^v6xDrCV$jp0tLhP$i*HZnfc`9%*wKz-kta*? z_>+~t;Y6(4$6*dT0WvpM`8_#GIFGV5jWW>6`uqhI9~Phj8z?c z>W4YJArAMu;(jddcTxS?g_@_kmvdaU@Ge0m)PZ+eKCXj&Tm$*IDnvf~l#f`iimmeo zGjhACLAkTjQa#hte8HF!Z-K~R$+uoLXrsv5sgOfn=K%wENnGyTI!YA-sXsjTNVq$Y z@;MO5`0GskttLKWT)a9a_s%yl8-RKY9UrgKJzKhl%Li?N?WjxPL`nBQrtJQ& zU=G|OaT6a9+BX7OzdxI>=RvtI`Z^I~B0=++`e{FCvfPW`giUPHJq6_TstNzmgcogf z(+So4>Hi~i#-ToGKa+H419{b&a7X#YPWgGrw_=;5zaOZtha{XaAyFNhJ0>>6b8M`m zlbpV(MBd4xC2ax9Wjlhv!6tw5b|IGoj6u!i^NH`rxJ}ofe8WWzmQ|>PT^8S<0 zN?7FNyR=@OFVjRnI(6BOx@IKyD2!BxN+&q^8@rlptXcYibzJ3H`8}Bpmj{qrOADQ^Sn)sD3$Xxj-km;WT@;dG%*u=ndfQ-KY z$m@DwEU?AIKW*Y4e3|cZDfL?*)9(lJif!e~T}q7uGG6Sx<6-aRz}`Eylf9RhN}W!f zcO7)zYUsRcq4QR0ou_p^^n%Qfcl)|~Hu^f|NATM_M9TOH_|@`?_-kI()lkm^b@^jx zTXpYbTX8&PeTO+VMbh=fc=Ej_{_NLQQwbX`JDY|xVur&2I~r{p-+if2Fq<|xcn zSi24=?AMmj+NY&gFs;NB=TUK!!56%x-_`Sdv75=KelaTEbG_m^k-RHm+yKsHt1$J;_sx3rm*}s!Plad2Kweu+Sg+f6^~Acp2iEPWShuIB83`%__7!dO4A@s0u&*)- zX)wn=uYIbo+YF6&T)IOg1so`te4WPO08libRXfppV4ZaJU)kSD} zW2KBCK>E%EGHr#4zc10F`{r#R<2|XdDivcaH77ZkRFYUA_E@ZGk7JMdDXYhkKi$0< zsJJuoWc>J3Le~k|o)}I4OVq76P0G3q$ZMksXAGttb}ekEYhXiNrEMtoAMG2lf08}D za+5s0Jh2|PeayNT-ifV>KBHcc@q0DK?^PY+SJRptud)MGJ+q1{d-`)LdUp2&dRpDM z9rf&StMIkgYa+*E49+vy2rL;QZKyg%+OP*mU$3DaEw85ldDQ{wyB0`lPnh`Uf#kQ? zYc=typ2~Q)?bL>PS(5%1Ag{BAN!Yy>OYsViHzWOabN?kEuYD%$>63tY zB3EXLv3g z9Z7$zLf)O%3eERW9}_3k_as@D3nEL_G=Qy!xJr|CCan%)Jrb{dHvPI_nR&KJR8XCY#{4=IgoYy z36QqJt0w+q6W?o&N81Xg0Ga-5Ak%*hWS!rhi+KyUxj@2qo$k?RqC5uV{hC5azXBMK z@B={7*$L$RPtE;rfr$u@ERy?^fxLes5GqRDZ^AF)w0@TV7BCr@jGrzby@5ccKM~0L zrvSSFmz(>SnEO9C3qJyY_(k9ID5wH;Bar!i2V}m_fG}Uw(Psb-9Xjkb=&)NlbXW^% z;0x&l*ft4kV}sOdc`R#SoazC)rU!IxkDP9;+|A=X^32mcPId1QI-|)vR;K4M3ZT$T z4yDO`0PL~$UfZKRr42M&5`yt1aRsD1gLJtjZ@_v!09o!Cr+PN{upW+4iNzQnT;mT- zL|-I(hkAV8zU}F4y<5{-dIVETQVNhaGf`zW#CtLWah}ZLuAa=?SWl+M=jqjgx{Tm@ zH`&v#I0^G$qNgA9v|aCNJq})F=)J|BF++2E#Ps$g#DwoH&X2)dnJ#^ugTAi3So-R_ zOQi35Un*fePv`bg8GCxQ_iRgT?cQSMtE0HKPexxQsqS@&n$PT0PZzYe0c}f*#r_7K z4PYNREhirE+0US#W9W9pm_XSXL%P7WNb>gd#Cf@ALSAJ<03<#x zwx=gH*2eqM7_n7jJ=Rv$b8#=&*=xPowvRJp=s8$m!K0`#Uo*r%soB5xwux)zbrV&;tz6dnekKhYb(A zDii&XS?IFmHSdzZyF~B~JS(PpS(6aMG?1ikwUdRpDD_O15+GS6P^)JBq(a!+T zcjg&D(9@gyT}k>GQtupRzbn#Q=J(0mcq(Ly*LlDfJ`q{^3y@cj1KbTAZXe(4fW+!4&3{#l%MoJQlIaDtWWpvBz!e$O<$|7y;AQ2dH+u) zKF%Yw`U4q1(uDn936BQynrg!HO!z?)KHT%ib*OW@N!!CGv~B~ktOrbZrwJd9Rtso- zVbb1#@xkk9AZfj3!XKNk?5XtiWq4A2k!+a#pjGD=-E|ZASe-0%?#CLK*ULcCm9;L$ z24puAdL}a`e0*SRgzFZ)X9=B#^wevzCQibdSoWmS>aZr3J-~wabUgFhmX^J5uJlva z-d;5nZY%0Ulrg^@WB%tD^N(W8Kdi?*>!@{D59k=`#YG}he#S#q(zc~!%l>n!epcNd zYxVw+&;D!8z9sb^@}#mJ(0R7}8-~J;g8RbAn6BqGZ+5C)Yhj%gFzc+GUTr;FQ(J7l zompOW#W1f*eoOeL>oys6=^CTDPL{PuYGxev4LbBpYwwn{pw0hB!$jo`rw>I59xVIbbI$IyMGY7i8JLXS}HSF02 zQ!^7#pU!(2mPXDsN400R^=(aW=^gAB2cU~RgAiGMcQWR%sWKjmf$@4gJ9C+>?*`oK zF-_8Gs#ik- z<|X(GQ`%20|7fzp$ZTH^H_@hi#FLu>%__DEnst=%epNd_J`s ztoFonpKgb?&BfM!7&g^I=(nvMwssJct;nkE4_e-SUg=e*Re4qaccssazRb=T!2Lsf zGgRm7Vpy9=>!@AmQ?#o?PZjoRwKPj{$XdS|ho;tj&d%rriG!!tMB)ARl|^cmA*p6Jl~GK+Tf$?Z;E+n(Ciy*0Tdv7?OPS3;k_{mhgRA2wf1zRIgA;9kUiV#bK%X#*P4 zu(s$4nmts{Dc!bp?1vS|95o+uD*Qv6Fn8K^iOq;P6JxS_A^5GwX)^i}V--3;kJY+f zE%AK5w<`nB_|h>(`e1zYR(?+pmC@d(tyilvF51`PT_HG*i*+{v&A9P&<$m(5n45@? zD6vhu!#3>}@+>yBUjo|EP4&Y()UU8lyJ!i~jimY7dW^N(urF(PBhO4Pi0SXChzYd< z&D@OlmJUa=`Yx}!4bIZ^^oYfnNl`tvbqgk!Bo$UF5@FFh784p62Z3)EYv7uE#rjy0c9kgC^T@pk>yVIQ3Nm{+|F=QriaSVg}!nEl&A zSsPNeS)-miyy`5t6HWRzAIH3aaFwmE%jU^K`i!B8(=w)Dw_b&}KzJWSnh^P-U8cvY zqt~TQux~JCGcab&I;vxQp1c$D7~JLVI_wnsV7-xPtO20Q)1b@K)*77vecBykSIe~K zqgnH=g$<(Z5!{Eo+i@N9EbJ(_TP?5jK5vprE#$~d=&*%;jx>LTd&s2I`U%exXd{TO zlKDSX>vY&ss8gRpu}5rK-+$4ow!m2$XokLuhlpIvpUu@z=*2rh#IK8RkMFedqU}sf zhudIiF>EjUPOCdzOTCn7(-2plBynvK%Ho}aQR=~WQF*!Pub%DD-#y1^*N<>s^Ne=r z(n2S0{Cu3*_6435yV8AtI4ow=I#;@}XW`vhq>FU@_xyR`=j3^U|2=-_mMVhVBG(G)pNDIe$F#T1n{nBZ(2^o6IJ9-K`Q5_6IlF+~l5 z8KpIWYNQzAE2=KXH?><_d8ahgRm=T4^_7<&qgM0GQ#HdgU7z%4&No4cACf-LMA1j~ z;0cK?uMvlz)!?X99)VU{w;buFs44hPvD_4TpDUF)h(+yZ`O|S&STRm=Q;9LN@oh1K z`D(IfdUa!cB?FTiD=NzC>Tv>}Oz?o3CyivLfDKfL({{zYihZgf{$1m z48>+w=uEXpb5U}&lZvZ7H~7xPF~K^UdYlxe;w0g6em0x09?{_{*Lkq{%1`dHN%?^Q zz9BlGx6-nwlpN|d!1vE_8m(5kiQSasBjh5*+aYxI78m0Yn%A0gI<*TD~czP8MIg-k%(IF|$R6{~j zpdO9n_Zbig94g1tc)xJCO&W#=uWQ-hp;9s`W_u{k_F$?{AmOC}69UH$xWoF0-$KO? zv~lpMv=M2#`yeO9`om}(ZCT5sq}5MZ_7stQxrLnzmTXh#545rK4Eh{Vs2^p$xYqjA zNS~an85XVZK4C{HvS$2)WoGAA(U^O=uQ`GNCrCP8uS`Q^^Rr1feI%BnrTG1zfd=^3TfjTkeZ zdFJBKI-{p_COk>@qF>o5_8@W8byIj8%01RwSiV?``)TFN)nbNDZ!E7{u1Raz`X1w0 z01_}Ff9e_e1v4!-Usgpks8KMUr{ieHnNw#~;ruCRH;FI8;deO5QOeCjhjO z@rC7b=X&M=7piBMRN`4@R%s|wKF0``-3Z8pdp-NK<9?aYJR;Hb`{i8R=Whp z4PboMpf6ri({Q$C0Ecgh+TRWh<_@2XxuTvbfnBHa7(z!$Xc9xZ84q+CsWSukQkeIp zVX8Q$u(YZk2Yh!NGP;&+D=3rE3MTM?-Mch5P=M>KFs1I$v7$%uJjqvVPX)A7oto^M zS5v9yU+~(LfJWh0$_63cNu=i>6Z0!%QNX4Q{bvoqxIM(IHOs(|i^(jY#) zFQ;yYl2t`)b^a7AY?V^(OiRRqqskw{WNGLd?buEEzkqV|Qt|~j<7S4y4X5!#_!}W#3qi=N-9JbokAh^MBS#ZPQa^SFCqQ=6FgBuSw z32qJ?ws_SUaNmPF7j6+8wkXwka7*Eu;4Xw)0e1=9<#1QQt%AD-ZZ+ImxQ%d|;I_hT zgWCf40NlfHkHS3$*8;Z-Za3U>a4*2U1SgjVz`X}Psm2Q%`b`u+Fb__t*L&V{^vtJQ zUi>;UWm)z+-edQBe)e&<`EO;s_p2|ycjljNzWQ&!{^9fmlfO*fmo=&X8y}t#drJEK zyUH(k^P+Rk{>irIrVRh&{BKVC!{~c1ex<1Hwl)5zelYm<6<|TK>Vr%U|93 zz+X#i#{Rzk#C7LZ{dw;Rzxm6_iJNv0SbzG~-}RbRcI}Q!Qx6{ha?=xg;@%%NZ@K=Cx1YW8)V#FI+J14(;-5Zx z+@S9YpZW1e506h++P5MpXJzjvSJiHOXoT;^>O05Hx#aVAyFa+L&%n4MNSrTlqbFWw2Ms8C~2m+x1e`BT=3 zp9@~{``0J1_nP2NzPd`EcF#{%FYX%Kjqjr01h@N~;hF5+eQ=(SuH4ZD$o z?`ZMz`C^g0YgZo<(&4jJh1YvE^3zs^ExP?SPBkOJ2DlcuR=75}Kfv*w<#xEw#YOsU zO4gsNSJsR5!7$TOmxf^2e%$>E1dhXvPgNP^BG6^i8U@- z9B%7t1O7)UAM8`Cdkb7MT%>w%Tt_OGeZ;PyJ5>2zeLgV8vM(;hpV!=im5awa^7k6>vkhoD+unslP(O2kazawK zl(h6re^&Omyn>Qo^M;l--j2jS#{Z-A$Um~;A9ZXMFFRf5Y*m(&V<>Myy8rly~-GqI-6dY9q{Qu^P{b$Jk|6C;UszrZzygofu zZi2!txqSKM0}VIteos7i-X(b19c_9_$h)Lj<7T9P>L+jh#Bb7v!(}u=apf6&+^KV%jtS=UH_v_3uNJ;}-kUkDl;XYYm3{BF zeT_ZKOC%>g6VdbLcd$8_VoF#JPgwZh6>Pph>Jg3pfBHW8a424ExF~Y{vr{C#B~37| zx1j$*!8NAcmbMLBxwLkm#YpxfkM3Mpg-y!5ybktRdNv|FY~wA4-wzMlbQZ(!A1-Y3 zSqx8a<1L2YKU~=6vv|1l;rDI6|LeG6u>9_h<%11-+zbmhdTnAC(q?mKaovjOWqP{* zUjOC5e>w1vb70mJvXAhuLYN zynoPOyTLYtdkwx|(9+*!!aEE;Y;d!|4F=a3Y&O_ru)$!Z!2*MM2IH|o;nvsIJ{f5l zZ*YyVbJ7ONJn_%srRK8s6YIb-ZC$M0W9NouY(Vf{`)6XW78IES`b_=)UMQIQ&*jfv zA^jON$g$zBLwJ~WHZP0xAB7Aj!F>;o`%^!LdjxJT+@Il6(co-2995u}u<^KTzVYyL zuVxwCkKi7Ldj;-uxD=!v1veY6+T=s@|I=3qY>Uls-_DBB_$T9U2hPQY5aSDg6>ux2 z#HdQ(GbWzr_I`p5$@zn0)B#{@nxx^`xp!jo?E}Pb0=^1II{SblGsMqxaX-W6WZn>b zuL?XH8>H&vRP04aGhz(mxEmJ`44MpJ%If9f#-A@bg^L zryu~svtraP;E5+;T+E136M*-^v7TFijT6M*1k67fJVE-Yz@zez9=}`e2i`OV&v6jX zvqtYc1-ycvXNH!Y3i`uhQ~-m?VthkrA07aZ$Pys-v#MLaRBR{DZi4)+1#D}g^V{)d4)tMUNi ziB~tEtl=?gH88IcWx-Fp2(AhKUBLI33e6G>_G6o*p4*q>9fyn17fcWQU(z^?}xtx_**#gaPYP0D>$Yn9<^Hhe&9wp^0p0FeI4{0@)B#V$L~169|V5y z2aqTD7XYi*fF}Iwf!Q~J4*c_h_pU{I;okzh_lMAb^aC?)lr)*Z%iu_VCGcD*$-VHG z0C&Lcho8s?ln3D_E{9|K6~ISs#-20ec{?!kR*VJsi6_8if^Xx1XBdAqu;*=%J*3G3 zZiWlM-v*p=yR30fmiOq0KPrM6` z{M-yw8zl`f?k6%HiG^_Nmtx@U#=il$8;*2{pD`Zo`T{t5llXIi=NNwzu=Fml33cY# zmS5ciy#YVZnC!m=bIvH}6JYj(=ok2jJiC!~BVM)@d`A3AAkSjtxFh}$E-xEn2bi-> z>XQq+$oP2<QGA#8x=YLBwutw1_O%@U`!#t7}(`g@DYBV#rGjx3H&@uuc{q#1wYTZd*d&VCHTJu zrhh5*CzinJegxhNmj*s;0XBRCxgCQ!0yy`tQqKb5ZaCJBxF3#rr+$lPP;lFkemn5p z?~o4uHsAzUpl$FIKZ)_EgYfgrxtTZTVU96 z{v|$)ZzGfNHW6`f8vLjO@pR+onQr&P4M&!X{bm9MM;Nx&?;|^fuDN;A$C&qsO$aCvhAL58pJ!&87 z$usJ1hD$jSyaFyf+oQ(8Uk%&~$2xogJY#|Q=L0W>V_D5W?>XQ*+U^79!ZAJ1B)hW2 zqvoFkT?G8H)T3U2{~)k%kw<+1{{rCkaHO*a_=hr#O~fAnULU|XoB-Vm{Gi;U{O}VC z7klu#Q5YA%qbt$B@DBz~uJ)*E_@@Hzt_7dr-wfOhNBYFGgXnj}F92SBfk$nEe>L!Z zxLxpn0Q^NA217M$v zJt~uZ3S11Q#~1M0D?KU?@vDKES4ljv;TDfth4>A?Ww#1%n}9!Gk1>PzR^Z2QEGzdm z$N(JMNDLT1@dmg|q`48;V*EsPJH`X(Bms|sBb^z*o8TyW?Lhw>(k|ixIM$iCAFh>o zH+a-AIOg3BY=>hVh@>1O8|$WSDt@OMm9kYq7!GJn9a(m5AQ}?DvrP zGlBQRts{Nl#D_gp1f`@D=X0RE%{pWOo;1)Jvu;M7;7kBATKl{#z%E`L?pwE{T&b?8atC0-22 z`ZohFc@u4et=J5l_6}qZX=VUlc@JY8{=L9ow@Dp#12_Fv>P%end(;7Gg1|j+^D8i3D#0v(9?lxMpA_yEd7JkMX7^heke z@aF+neg=8VgKZDI;R}S}zY%!fUxelsVEtF(ZveLb6?Bk>IPzPmXEyLR#?N!ocn;aa zNJIP#=ZFRJ(MP~Ou{duF{&ZkF&cT_AF-RPljB}nKKiNQ@55~3=f7}D-iXi>Nz&m z&jp^<2j|s6t`-3AfFqp^z&*yl7npNYsmndd}21;=uC0na%G=l-1no&%F{CK>CQ0(=l| zFzWz(5sv9wfdx2&Y%1ax0B?uW`~luI3}-AOelze%IM%-fI27lDt${xaSP!=Y{s!P4 zxDVjp3q0yLDc2924M&;22^bF;r>lVv!7;uC_*Xdg*SEkSI75u} zp9-vkW14EDMlS2&vC%h;21v(xDJkM5B_Z6op4Og^I`HD#7|sAKWH`q?}4MtYzF?;_&)&p z8YKu0#I1>-? z#AY~_yB@gbBFH!5-v<72g|w>$_z@iIxgU7S#S%XQ*l7Gsz?a~drWN>=@gD>RE|GGH zAHi`f><2EnRQy5UK{(C}#7WJfSMz{PaI70~tML;*H2&aa=yy0D`ubtu1*+OR`Blzp1T^dJ|aey0PljMuHFp%lkv9$M_(uH$_36ce&R*f zi;S%R4qO914oANO``&=Mf_^6OrL`Cr@V5e=xC!G6{uW^Uk1*c3#s_`@mwqbduODM< z!ujFf2YlgXjC1&j^KOwooevywtN62l&2X9E`6^)l^};JZ@XXsFXUIDr_~<6c2K?KB zAK!(3hyMWZ*2VzY5+b6w}O2H^uGW(CmrD1 za2zAVFJAPjxY?*D@VJ+R4<*0{;M!o%v;fu1Xe0WFm=3o9dv1Ope_xY+VuA7Vw>J5^ zmy9R!H!SHV-edgyJxl%$B;$$i8$W*&GQL&f`MZ$(ZAYdd<{Lkezm>>%;swUf-%aFi z6*8X4-w&jp$lm~@pUB_xqo2s%)uW%-{Ws$0Z|vn5KYwSh(D;ex8Gjw{8slFJywCWz z0iQGeJ-|O0Khe8K=o9&SG%T0M-&~`g$ltx9pIC1E{0*$jjh}d%@oxk^Vf;IRZyNvm zK>mId=@8Rj5kG%Riof5)cp`sOiGE_G@$>hURvAC>C&s@S_$%Yz4g8()?+3>06*_Ui zqm4fcIK}v90LzTO5_pC2uLAzW_=)`87}kf#-+!T>_^I*pw_y0YEsQ4)Gyajl>Bc_? zSYiA%z^ja($loAgUgD$1&)*|?&G`A7B>e3UrXljTHRva18~+$!f$`4+293WF$lt(V zdLn<{f_@@@n}U8Ke>Z}D;y1?6-;n70y2K9vjyL|3f!{O!g}@7q|5D&B#(xL!G2?#{ z_@?o{2mHqP{|4;4&(H^+VEiWozi0dlfy<2lQs6Dde+Td}<9`zPrt!ZA{KokI2IOxZ zuw6u+iBCU~XPMJaTx9$_*PLgRGoE<6@!t*HY5dOse{cLB0=v8^>3Mef5aZ|h<op+HZ*GANL*!Y^Ohe>(%PXNji9A!8@kE}D zOh1ul57STNdBOA(yS*)bo*B%ufEiDmZ2UYAm}mYnp2%~1=_fY7WBfp#1;2Pl5z|FvC zfGxmZ1EC_CcLUpj&jRDHT*G5$lH0)GSC z4aDPV)ds|)X>|~|7ntHx&94HpfUg1bfUg7R1NQ-gKs>TmtAKbEtu_GP0&WMs4QvJC zF|*na#A9WCY}kxP$_hXI+S~@r2L2W}1Nc6$1o%5(6A+Jo)fylk^Qz52JmOU?Ks?4( z`+#_CtJ;A8*M({QfBM2cyKtb&bq7eiIpb2|u%<#E**-KO;)~{3!92QR17T#IK4H zzb;Dr<|y&oqr~ry62C7>{QfBM2cyKt#f5U2Z=zCeanyR)W%wT@eq5CJ8ByZrM~SbD z65kXhepQtCby4CsM~UAaC4P65_GL~mc-$2}&KDh5+?77H&6U38`#yEOD_n4mPpxx>_pkOTE-CFbZjDd%aD@wg z=u>zts^e<@kx#)??zraP>{Ca%?l-OXDJ*F_uHAR|)Gk;0H5+{@$#s9jT|NbKrQ_Pa z*{8mAh1<6H)VHquZ4des9s_nwAgWtd(@{IT;Z)h z2Y+1QykCHSuJFOfe5%+LF4*Byb*}L4Cw!{J70!Axw0`?qeClo2{p~w_IEl2QI%>l% zpBn25?|a&(e6DcYGvKGI{n^j@^wBt$g8#YD@>-ww;Y2Ze7jxl@KH3ExR~#nSqg>&v zJwAo4j*hE+uTNd#3I|{JsSjNA=D*=nxvu+b-twt)UE%h3z%N(0?P8x==?Z5r_bGH? zr)$E=O-ri%OXYaXiGxOu%pT+~=lOX!R&3&+dBxL5j2q;yZ@@`(rPZ}H&q(3mz36zSW;D1S6g3O(J-Q{cFFkC`XwWm zjvnO4p=VVU<@NS3PASbzYGwe3)#04XYFt<&2-`*9QIh4U#KJaUE{<-IIi&coI#^lPN2NLtgb4^qv|F}I)5n%q4^U= zxo;wELmke4G~OGB$nUpo-G!`f}YKKduR*q7^V7D z7=hCy!R#`rCKw~(hJ4ehw)VD@-95u%-K=G^c?th#+pZr84hL$N)sMt!k4tK6Mws(s z>vh*KeTUGEW&fHU=8Z%4vQE&rsJf~Qr(x=&HYW}mJLbeOi^k@T&dn_=s~8=q=qRGP zv}SQ54lJaIPy)!WNNsguHAf~uYJ)f^b5T__dh+lB5R#mtE=83FgQ%uHaMSX0;D`~$ zmF51KQ~is|t816}!6K$8ulKtW`|BHn!P>e8KMo4?8!r0Kz^R_4{t+V#CA7q(Di6#p z^3M!R9CT56PWI^0xnoWkF?vky*b%wMmyH=wI;Nt0M0WPLKzVuj@qyzjvM+Wd=O3@j z35Tx7@nc3GKW@>9r6a}!PDDK_76nF(E6)jxD9y>u&CbagQ*q+)rM4auM!6b}woMon z!b}}wg%APgv|Q-0GgOgUi2u`Y{z#FUsphIV2+zd->G1Pf!$FG`pZMo=j(Et^ql}` z)G0r5)~b3{iMVP_^Hfd4)^RFQ)uUY2J&4k)kh(^vlTwx#T7Kka>&i7nTOX;vrFDib zvED`Fc(m|DH5&i3HBG5M`O=`%*63O}Ek2Sm>(o&2U>5Q(*14G{2tKd{i_y*ol+-!S zukJ<7562%r>Utvnj#nd84(iO_;x!cxZw{iox(L0?qthrE#kk8psRyr0LwHFV(XOtL z!L!hsdf*(ig(uF0#w^tJX7BZma%Uk*ou-y*o-S0ULz1dAANn6r`aHlTJ=n*^lGM!F(BF6xkaneJOkw{X!)vDDlBzZh)| zA_qqn$AKTRax(sNq;tGg;$AgUu#A)Oe;#_(rj&YCAYFM#nGXGbC5Ko8ANqtnR0==O zoI4dhj_(-AaXIeMH(R%zzI@cXt|M-_$2ZUnwJzPr%$#Nw!PEdJT3sb5)w~B4$oX~*wFU0>^ z{4d9sogAH|x^EWfwkM&S1f->;IsC5I_lB4{lpdlc`4~$apH2<@x-@?n_o)@7MP)}o zjZ)zBoWDaFsF|qI2X)Y@h)OL|&8$>eI>&aP6hMAJ0_n#knf;4EYkWy$#oPj#mAB1sb z8QN8_+&Bj6)H!OR)*h68>H*Rw1@e#M$J%Os9UD%UJ=)*UJYVOI%$r$gU72EvQ2E6d zpeA=UYSe%;T^FH7;WTEUY}O?_w_oR>=Bz}GtAMoKh9lh~T~0Y@;S)$x!V;veh(MjC z%|`t=pILbdttHEGO9^NCYV;MUTTKu|-e`ZcTgg+lz|yfLv0VX_-U#Hm!XjnV^wItb zQBU?AB`2ICJQdecC_5wtjw4!N>|wE|{g8X|nKL@aG-vo)w6jrs(WV27-8Oq`ARuyfzjz7ahdK$|%~`;nG?EDtI-SRE zq>b8o$V!x6voo8901YqvOp*Vr2D7v%A&zVwNl$Y;aelBPyA*xmSg|s1+p@XRpboJ%u8e3(1bZi3Cp+_F zDL83qgkurLa*dWp+DDY?3nS1HDU>}6{wIIrn%TjnrBTZ$&~nZCaV`|gh7wc;*PwNY zXx1v-Cmdgnd}V35@4S+g9CkFYeRl31hKf1zzZ9B0yv-7xiqg3rTcpS4KUO=AV`{qd zQKp?k%c7R($1X}}nKHI%M+;Y}UnnS^I>@!NTn|Aa$>hQE1jcyYCXK7n|FMxJMt~EIv zZ3R$@T%4D}Z7ZwC?fNQ!9*9PLuF;s%Pt;wqui}hWA<(Msw!yLiA3(>=l*0UPV()EK6O`0E#9Xe0uFLH)_a^fTDbSpv9YmwVC z72NQHTCL_0M-%x{j=7Ax!?b+D*LGF7ON}_e^b2>kBGYESxT#bBP?M2c(vHyiT-r;i zZTC)?^2o{#>fC-m#8iv$^G)XeH`ev3#gUWKWNlH|+q?W&E`oSrbs6N3vtpy(klqWGX4agt!JM=dxtD7-HR*A+ z8mSlE^klUWUN1W<(ngjRa~BzBM0K>8V~Ccqm3ybQ+(Y52T*@ckomtk=eE*mwWaXXm z#FbK{)`jz&do4^E-bViNqsSVq{|c=wI@2pgIdv$_kEeQ5@ZY9%&j(`n1W^hl*~&WQ zhUqz%gjy_iCyLgS^lRsGDWi@x$2pBV+1xd-x&N_!EGr-9Lv}isDlw;_#-b4yq2{%) z2PuD6d$TRv2kdMsa2K8wmSFD4)_e0~%wC;SlAQxB&%)P%1a+2`h}}QzTqln1rN~L`Agzm5OKL#! zfifkUOZ5Ki4h{rR8tr+mKO75yWl}!LKUs5<4#%)fYxgxygMCB}jD>wP9CJtxRsqBD ze+*)V<3D2$*Agptj=>d!7*>= zI?mwEY%Lm;_Z^Fh~r8o!A(x+nw%Ws}iIr~4-md;in3cxkh^bjq2 zOEVmc&_7~z)>a!7z)>vyEOw(!XZi1}9b{C6*FwUS z7AqYN_oZ}Nw|r(JYgc&&z`aN3Ss3>tBh&SRcea%dFDY9xRyd-aJsz&O4^Kzh!TioR zcIwRWxD0KPv1x6f#VC(65uXs-c__M_#acUiJZ?M8v3r8hPSNTby1KXk<+3)^mejwY z^z2S(WQ)h?9ociM2PKZ3Mo3Gv^^aXa*B!Ekp*tYtrY*tlUV>Hny#dyt4q7@|YbiT6 z@8N34ev`weE@}PWAz{(zu^0FThkdThoqfK8!FiZ{T?#NNg6?CDLr{%=-0^{C`#1oQ0`t4p+9_bv?3Yb#|^}o80RgcMn=Qb0|k&hdAp9 z(IwpXrrdBYchi)1h-Q%YxF}5xI$dOKX*E?eD$LEDDS2;CW;mxu-DS|Ov|1_D5<8SU za9&&n#}UHOBfamY@6{(AVx=-Fnoq^V3J}~QNFo3OH+VB=BuY zOAEimfic1FN(%8MNuhqjc`_u5>#J~TLm*FlGy7&HHiqg-=e zmC{@b3}|b$+aW38*8xx-TPO98Tpr)a=BN91PG*R2?S;09W6ZsdW}ovdKc|K=m$QCs zW8aW>URg3ZM=MBXU%Qg9e3ZBI@jD8-zQVu1Cl~F!a;-CuJXbo_A+*OVk2y-@O)s&d z$no&{rRsOwDGTH&cR2Xvi99n9Tbuge7`=PNHgg9=W+?aChHtq0J9O4i-Db)G-+<(k zM=N)-ZsD&li}k}@6|UJSTlR|!%7RE?XlrOY*tM5%*V?+2Lw-?`5Y~RSRh}}qXF=OD z$bu^gxkSUWFS+Ya9ecj+^In>w#8A2^8?tvCs(=01<&YY4hg)Vk`)qL}a?M0OYIAv7 zZ)xDWchF~@Z3%Y9V0)sCwKU`irAPfOWjbp$;Rx%Wfc?jE+^5YYGio%-lA1b^^P@cJ zuz4IkLCPEt-SB@39~^PAR) zJvfiDw^p z*Lc(o^4!U3akO{rn8GawvfJu6&jS6R8HW~62e-uv4xj}4E^R)_;f!YAK#<<#SawT} z%=MIPx!)D{<#{{9q$WCzPYh`%N&3I9zOwh9kG!&1#pmY#$a{tIZB7CtiF*d2R(W)K zk$H%Q>D@klf5?_K;=f(1${fb8GpW%Fv=*}K8|rWOn~nT}#?D}Wk8Y>s<-GN6C4oE- zl{@JdmJy44lx^t)8O5PI75j4t=I1eZMoLX-|LmBzZ<*WjNIhC=c@AwU9E$ewXiKQY z6*?|xN7!8(_L|d*(6+M1&b$_GTapKIaXz3Hv2P99)>wOobjV3*0WA=*MLMs4thG(O z*_j@Bb39hZv^Wwwc*)%=&P%isXuWjrxHAWmS&YzBaAOu+G2B$7uya3ivBkE&l(^8h z$elW8M66Ng^_%pdttDr&GqL(Bgr&zX#81&SeQ0mEX9SKS8TaIDmkx`OE%tSU+GBSkxB`z5jm2N^c>^M z@t%Uid$)EZ9~|kCRRwd>La}q%k>}*fg|fr96)20e4W@wB6kUp=tI2a-|4!R2Q`g1T z!tOMLzmp$6*2K!?H_4qXR<|Y?tH%b@73mqAUnf{TMNSuPp<4YSddQ&{**3NM%1IYV zOOd9V9(yuW>fAG6XRSahLPiC9W`ygHvw@7?P#c)~2)`+b|I<22y(3xj1#u)va9dnl zLwD{Ea+ND9uFGUsl6}NoR9e#EBhlJovVyS|K7XBMOR}j=}IcIcq!imZW1X zI71zIUKtyaXQ=2UN-h+p^H%`v)3Rz=L{sPg~PW+_H#t$C{N;x z#vgY-hs#=c-6KoevEVRuM>(XNaz4~0;oLQm7LyjGhyBO*K5^-<|q#k9R}Yj^Hj>wzAVX74@%erPa)%!em6A9oaeFjY=gWzaRZ1 zI^BKGPbT1+iu=xA5hOsqb7LG!=B|OP)eAMZxjN>(sXD~b!@pwWlecjs%%>w_ciS-0 z&dT)9236@hS*?>N$7ova9HIUhC|h=j=IUp}a@XCjG#oXAhhM4$djl8a@}bI#u>UXf1JW;TQ`2Uf*gbN2g8J zTAJ2V=skW55o(QcRMO&$bcTR?MNAzaD;17l`~Cr2HC^|&eal|zAWuB)+z_fUj>Mv% zB{v(js>3MjY++F&hpy$hFHYO8v*zUvmVK{Z);dK9^BJOiPs+QbCNqb;`zUQ-+oo#1 zh|SA(^BD!HIQl?rRLWDRR%kuhuqD1u7Zx7f;%Ul z5c3%o--WPtlSpEg=0*j2j~Y`nN;T#&sWtgO9~PNtA<8Syrr~NL6>*$rtwwNWCYh@w zRd18ZazwuFvvZiFbZCeM3$+xZ(GQ;srT;qH8ZypBCrkUJ_uXH14FO;Hjg9Q@cHSik z9qZ%(C6Mw>S+ZK2QX=EmdHa|&`Tf|^9B4xH#?hYk6YZ)t1tW{`U;mVQO#)oR}n27Ba>YN>EGaasnj;t2s!KjF(h0d*3N{@`HwWC;L zmcTFdLpc?ymF$>0QtC3-TIyUEb8qxGl##D@KB>RN(%?H0JkP+{eLk`>>~mo5%s6kw zi{&Lf=d7u%JdlsmjV_`EEYEb9jy9rwSEyd^7ld>7NX~7MFPu7$16j4&-49zwXWz)Z zGtAX1wEb_Sv+vze7t^_6_)khqdxUwYE^D zq}v(5@|l)+s5FIZEI!Gy&ulq|P*UXEkkEWw^SR$=a%Pv%)uUtca<50;o@7q3MvqjF z9*VlvuaW5U{enZ+TQq}1-+jgdS430MGwhx4)t!4T7anzfB4X!B=Q*3K#>7hHIR%oF zdqYx>(A__GuSV(v$z$y_3Gux^zO^RrD*b=$T|JEIMi91ijnlcLbdg9j7tutb3rZA; z5=D_7C0!`;o~$&Xq)0(YNjbaNPxda{Qo5w1q@<*zq@>Jz%&lw#r_@iv*W4ZK%Q~gIXuD zSXfch&OEGU?l0JWf5+4O%v%L&Pzl47zFfJ#sJiu6@{D?3D0qGLhs^NTD@PzEdL!K*cASKXHkZStK?&B_5Z6A$+PnzMigBP#ZHa5TqZUd^2} z(F52pom(h=UXTIe4~%(bTd&5( z?>$!^-Gu0Qe(Ud=m_)<=xax@Plw!Stc7rC#+&wMTP9>}XaQ}S&=I3jr3-j>WhBXvt zVnnXcF?itH6N;i?KlA+R6g;|F0F^ZKGC}s9F7LHI_JIFK7j9(ui8=fobGF)vfG$Zj z=T-yjyDVPg5QD=y{^I$ev$O8We7xdi0iD4NFqhAa_Y;r3_ZZ-X?5sdm;wc{MGP2)K zSDS*p|HE*>W$?$#0ksHtDNhOHA~_$d(cd>$Nw_XI?{mF}`;jSzeS9?A$Fl@YzP9-2 zL=d3fXNIy)iI+fxB^}*ZMWs&|RaV%d_yBlpkq4kXpKqK4{F24*c?ye^(mdUyWx7uf z=`lT}=QPZsZ1Q#RhTdCzC(kxnnVqt8cFBUT!75y}*73T%?ym>yAbR2bK7ME6+vP2A zp^IG0#jfo-uIqZP?*?w@MsDm9H*r%pb91+Fqq zq=;G+Q=2-}r5^QZKtmeQm=c=Mlx8%i1rg=6p^~<=qdgtyNGCeeg#s0-NVQa~+Nz_v zs;ByDpoVIs#wt-0HB~b;R|`cdR~uETt=g%*I;f*MsbKUHj6j2qbW6v&tvkA_d%CX& zdZ5@r)Q#!nmf4Ei{pd z8AFG0^cc&4@r)Q#!nmf4ZO-_JF>Xw0wq|Gc=3tKIWX|Sd0vp=Mwrp(Mwqv`tXZvYvY(15XY-Iq>AbH_n0o09w#T2><{9 diff --git a/main/win/unrar/x64/license.txt b/main/win/unrar/x64/license.txt deleted file mode 100644 index afbdc87..0000000 --- a/main/win/unrar/x64/license.txt +++ /dev/null @@ -1,34 +0,0 @@ - ****** ***** ****** UnRAR - free utility for RAR archives - ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ****** ******* ****** License for use and distribution of - ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ** ** ** ** ** ** FREEWARE version - ~~~~~~~~~~~~~~~~ - - The UnRAR utility is freeware. This means: - - 1. All copyrights to RAR and the utility UnRAR are exclusively - owned by the author - Alexander Roshal. - - 2. The UnRAR utility may be freely distributed. It is allowed - to distribute UnRAR inside of other software packages. - - 3. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS". - NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT - YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, - DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING - OR MISUSING THIS SOFTWARE. - - 4. Neither RAR binary code, WinRAR binary code, UnRAR source or UnRAR - binary code may be used or reverse engineered to re-create the RAR - compression algorithm, which is proprietary, without written - permission of the author. - - 5. If you don't agree with terms of the license you must remove - UnRAR files from your storage devices and cease to use the - utility. - - Thank you for your interest in RAR and UnRAR. - - - Alexander L. Roshal \ No newline at end of file diff --git a/main/win/unzip/LICENSE b/main/win/unzip/LICENSE deleted file mode 100644 index 5e6441a..0000000 --- a/main/win/unzip/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -This is version 2005-Feb-10 of the Info-ZIP copyright and license. -The definitive version of this document should be available at -ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely. - - -Copyright (c) 1990-2005 Info-ZIP. All rights reserved. - -For the purposes of this copyright and license, "Info-ZIP" is defined as -the following set of individuals: - - Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, - Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth, - Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, - David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, - Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, - Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda, - Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren, - Rich Wales, Mike White - -This software is provided "as is," without warranty of any kind, express -or implied. In no event shall Info-ZIP or its contributors be held liable -for any direct, indirect, incidental, special or consequential damages -arising out of the use of or inability to use this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. Redistributions of source code must retain the above copyright notice, - definition, disclaimer, and this list of conditions. - - 2. Redistributions in binary form (compiled executables) must reproduce - the above copyright notice, definition, disclaimer, and this list of - conditions in documentation and/or other materials provided with the - distribution. The sole exception to this condition is redistribution - of a standard UnZipSFX binary (including SFXWiz) as part of a - self-extracting archive; that is permitted without inclusion of this - license, as long as the normal SFX banner has not been removed from - the binary or disabled. - - 3. Altered versions--including, but not limited to, ports to new operating - systems, existing ports with new graphical interfaces, and dynamic, - shared, or static library versions--must be plainly marked as such - and must not be misrepresented as being the original source. Such - altered versions also must not be misrepresented as being Info-ZIP - releases--including, but not limited to, labeling of the altered - versions with the names "Info-ZIP" (or any variation thereof, including, - but not limited to, different capitalizations), "Pocket UnZip," "WiZ" - or "MacZip" without the explicit permission of Info-ZIP. Such altered - versions are further prohibited from misrepresentative use of the - Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s). - - 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," - "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its - own source and binary releases. diff --git a/main/win/unzip/README b/main/win/unzip/README deleted file mode 100644 index 202e05f..0000000 --- a/main/win/unzip/README +++ /dev/null @@ -1,288 +0,0 @@ -This is the README file for the 28 February 2005 public release of the -Info-ZIP group's portable UnZip zipfile-extraction program (and related -utilities). - -unzip552.zip portable UnZip, version 5.52, source code distribution -unzip552.tar.Z same as above, but compress'd tar format -unzip552.tar.gz same as above, but gzip'd tar format - -__________________________________________________________________________ - -BEFORE YOU ASK: UnZip, its companion utility Zip, and related utilities -and support files can be found in many places; read the file "WHERE" for -further details. To contact the authors with suggestions, bug reports, -or fixes, continue reading this file (README) and, if this is part of a -source distribution, the file "ZipPorts" in the proginfo directory. Also -in source distributions: read "BUGS" for a list of known bugs, non-bugs -and possible future bugs; INSTALL for instructions on how to build UnZip; -and "Contents" for a commented listing of all the distributed files. -__________________________________________________________________________ - - -GENERAL INFO ------------- -UnZip is an extraction utility for archives compressed in .zip format (also -called "zipfiles"). Although highly compatible both with PKWARE's PKZIP -and PKUNZIP utilities for MS-DOS and with Info-ZIP's own Zip program, our -primary objectives have been portability and non-MSDOS functionality. - -This version of UnZip has been ported to a stupendous array of hardware-- -from micros to supercomputers--and operating systems: Unix (many flavors), -VMS, OS/2 (including DLL version), Windows NT and Windows 95 (including DLL -version), Windows CE (GUI version), Windows 3.x (including DLL version), -MS-DOS, AmigaDOS, Atari TOS, Acorn RISC OS, BeOS, Macintosh (GUI version), -SMS/QDOS, MVS, VM/CMS, FlexOS, Tandem NSK, Human68k (mostly), AOS/VS (partly) -and TOPS-20 (partly). UnZip features not found in PKUNZIP include source -code; default extraction of directory trees (with a switch to defeat this, -rather than the reverse); system-specific extended file attributes; and, of -course, the ability to run under most of your favorite operating systems. -Plus, it's free. :-) - -For source distributions, see the main Contents file for a list of what's -included, and read INSTALL for instructions on compiling (including OS- -specific comments). The individual operating systems' Contents files (for -example, vms/Contents) may list important compilation info in addition to -explaining what files are what, so be sure to read them. Some of the ports -have their own, special README files, so be sure to look for those, too. - -See unzip.1 or unzip.txt for usage (or the corresponding UnZipSFX, ZipInfo, -fUnZip and ZipGrep docs). For VMS, unzip_def.rnh or unzip_cli.help may be -compiled into unzip.hlp and installed as a normal VMS help entry; see -vms/descrip.mms. - - -CHANGES AND NEW FEATURES ------------------------- -The 5.52 maintenance release fixes a few minor problems found in the 5.51 -release, closes some more security holes, adds a new AtheOS port, and -contains a Win32 extra-field code cleanup that was not finished earlier. -The most important changes are: - - - (re)enabled unshrinking support by default, the LZW patents have expired - - fixed an extraction size bug for encrypted stored entries (12 excess bytes - were written with 5.51) - - fixed false "uncompressed size mismatch" messages when extracting - encrypted archive entries - - do not restore SUID/SGID/Tacky attribute bits on Unix (BeOS, AtheOS) - unless explicitely requested by new "-K" command line qualifier - - optional support for "-W" qualifier to modify the pattern matching syntax - (with -W: "*" stops at directory delimiter, "**" matches unlimited) - - prevent buffer overflow caused by bogus extra-long Zipfile specification - - performance enhancements for VMS port - - fixed windll interface handling of its extraction mode qualifiers - nfflag, ExtractOnlyNewer, noflag, PromptToOverwrite; added detailed - explanation of their meanings and interactions to the windll documentation - -The 5.51 maintenance release adds a command-line CE port, intended for -batch processing. With the integration of this port, the pUnZip port -has been revised and "revitalized". -The most important changes for the general public are a number of -bug fixes, mostly related to security issues: - - - repair a serious bug in the textmode output conversion code for the 16-bit - ports (16-bit MSDOS, OS/2 1.x, some variants of AMIGA, possibly others) - which was introduced by the Deflate64 support of release 5.5 - - fix a long standing bug in the the inflate decompression method that - prevented correct extraction in some rare cases - - fixed holes in parent dir traversal security code (e.g.: ".^C." slipped - through the previous version of the check code) - - fixed security hole: check naming consistency in local and central header - - fixed security hole: prevent extracted symlinks from redirecting file - extraction paths - -The main addition in the 5.5 release is support for PKWARE's new Deflate64(tm) -algorithm, which appeared first in PKZIP 4.0 (published November 2000). -As usual, some other bugfixes and clean-ups have been integrated: - - - support for Deflate64 (Zip compression method #9) - - support for extracting VMS variable length record text files on - any system - - optional "cheap autorun" feature for the SFX stub - - security fixes: - * strip leading slash from stored pathspecs, - * remove "../" parent dir path components from extracted file names - - new option "-:" to allow verbatim extraction of file names containing - "../" parent dir path specs - - fixed file handle leak for the DLL code - - repaired OS2 & WinNT ACL extraction which was broken in 5.42 - -The 5.42 maintenance release fixes more bugs and cleans up the redistribution -conditions: - - - removal of unreduce.c and amiga/timelib.c code to get rid of the last - distribution restrictions beyond the BSD-like Info-ZIP LICENSE - - new generic timelib replacement (currently used by AMIGA port) - - more reasonable mapping rules of UNIX "leading-dot" filenames to the - DOS 8.3 name convention - - repaired screensize detection in MORE paging code - (was broken for DOS/OS2/WIN32 in 5.41) - -The 5.41 maintenance release adds another new port and fixes some bugs. - - - new BSD-like LICENSE - - new Novell Netware NLM port - - supports extraction of archives with more than 64k entries - - attribute handling of VMS port was broken in UnZip 5.4 - - decryption support integrated in the main source distribution - -The 5.4 release adds new ports, again. Other important items are changes -to the listing format, new supplemental features and several bug fixes -(especially concerning time-stamp handling...): - - - new IBM OS/390 port, a UNIX derivate (POSIX with EBCDIC charset) - - complete revision of the MacOS port - - changed listing formats to enlarge the file size fields for more digits - - added capability to restore directory attributes on MSDOS, OS/2, WIN32 - - enabled support of symbolic links on BeOS - - Unix: optional Acorn filetype support, useful for volumes exported via NFS - - several changes/additions to the DLL API - - GUI SFX stub for Win16 (Windows 3.1) and Win32 (Windows 9x, Windows NT) - - new free GCC compiler environments supported on WIN32 - - many time-zone handling bug fixes for WIN32, AMIGA, ... - -The 5.32 release adds two new ports and a fix for at least one relatively -serious bug: - - - new FlexOS port - - new Tandem NSK port - - new Visual BASIC support (compatibility with the Windows DLLs) - - new -T option (set zipfile timestamp) for virtually all ports - - fix for timestamps beyond 2038 (e.g., 2097; crashed under DOS/Win95/NT) - - fix for undetected "dangling" symbolic links (i.e., no pointee) - - fix for VMS indexed-file extraction problem (stored with Zip 2.0 or 2.1) - - further performance optimizations - -The 5.31 release included nothing but small bug-fixes and typo corrections, -with the exception of some minor performance tweaks. - -The 5.3 release added still more ports and more cross-platform portability -features: - - - new BeOS port - - new SMS/QDOS port - - new Windows CE graphical port - - VM/CMS port fully updated and tested - - MVS port fully updated and tested - - updated Windows DLL port, with WiZ GUI spun off to a separate package - - full Universal Time (UTC or GMT) support for trans-timezone consistency - - cross-platform support for 8-bit characters (ISO Latin-1, OEM code pages) - - support for NT security descriptors (ACLs) - - support for overwriting OS/2 directory EAs if -o option given - - updated Solaris/SVR4 package facility - -What is (still!) not added is multi-part archive support (a.k.a. "diskette -spanning") and a unified and more powerful DLL interface. These are the -two highest priorities for the 6.x releases. Work on the former is almost -certain to have commenced by the time you read this. This time we mean it! -You betcha. :-) - -Although the DLLs are still basically a mess, the Windows DLLs (16- and 32- -bit) now have some documentation and a small example application. Note that -they should now be compatible with C/C++, Visual BASIC and Delphi. Weirder -languages (FoxBase, etc.) are probably Right Out. - -Finally, note that support for unshrinking has now been turned OFF by default, -although the source code is still available (as with unreducing). This was -done for legal reasons, not technical ones, and no, we're not any happier -about it than you are. :-( See the COPYING file for details. - - -INTERNET RESOURCES ------------------- - -Info-ZIP's web site is at http://www.info-zip.org/pub/infozip/ -and contains the most up-to-date information about coming releases, -links to binaries, and common problems. -(See http://www.info-zip.org/pub/infozip/FAQ.html for the latter.) -Files may also be retrieved via ftp://ftp.info-zip.org/pub/infozip/ . -Thanks to LEO (Munich, Germany) for hosting our primary site. - - -DISTRIBUTION ------------- -If you have a question regarding redistribution of Info-ZIP software, either -as is, as packaging for a commercial product, or as an integral part of a -commercial product, please read the Frequently Asked Questions (FAQ) section -of the included COPYING file. - -Insofar as C compilers are rare on some platforms and the authors only have -direct access to a subset of the supported systems, others may wish to pro- -vide ready-to-run executables for new systems. In general there is no prob- -lem with this; we require only that such distributions include this README -file, the WHERE file, the COPYING file (contains copyright/redistribution -information), and the appropriate documentation files (unzip.txt and/or -unzip.1 for UnZip, etc.). If the local system provides a way to make self- -extracting archives in which both the executables and text files can be -stored together, that's best (in particular, use UnZipSFX if at all possible, -even if it's a few kilobytes bigger than the alternatives); otherwise we -suggest a bare UnZip executable and a separate zipfile containing the re- -maining text and binary files. If another archiving method is in common -use on the target system (for example, Zoo or LHa), that may also be used. - - -BUGS AND NEW PORTS: CONTACTING INFO-ZIP ----------------------------------------- -All bug reports and patches (context diffs only, please!) should go to -Zip-Bugs@lists.wku.edu, which is the e-mail address for the Info-ZIP -authors. (Note that a few rare systems require the Zip-Bugs part to be -capitalized as shown; most systems work OK with lowercase "zip-bugs," -however.) DO NOT MAIL US LARGE BINARIES--EVER. If you need to send us -a problem archive that happens to be large (> 20K), contact us first for -instructions. - -"Dumb questions" that aren't adequately answered in the documentation -should also be directed to Zip-Bugs rather than to a global forum such -as Usenet. (Kindly make certain that your question *isn't* answered by -the documentation, however--a great deal of effort has gone into making -it clear and complete.) - -Suggestions for new features can be discussed on Info-ZIP@lists.wku.edu, -a mailing list for Info-ZIP beta testers and interested parties; you need -to subscribe first, however (see below). We make no promises to act on all -suggestions or even all patches, but if it is something that is manifestly -useful, sending the required patches to Zip-Bugs directly (as per the -instructions in the ZipPorts file) is likely to produce a quicker response -than asking us to do it--the authors are always ridiculously short on time. -(Please do NOT send patches or encoded zipfiles to the Info-ZIP list. -Please DO read the ZipPorts file before sending any large patch. It would -be difficult to over-emphasize this point...) - -If you are considering a port, not only should you read the ZipPorts file, -but also please check in with Zip-Bugs BEFORE getting started, since the -code is constantly being updated behind the scenes. (For example, VxWorks, -VMOS and Netware ports were once claimed to be under construction, although -we have yet to see any up-to-date patches.) We will arrange to send you the -latest sources. The alternative is the possibility that your hard work will -be tucked away in a subdirectory and mostly ignored, or completely ignored -if someone else has already done the port (and you'd be surprised how often -this has happened). - - -BETA TESTING: JOINING INFO-ZIP -------------------------------- -If you'd like to keep up to date with our UnZip (and companion Zip utility) -development, join the ranks of beta testers, add your own thoughts and -contributions, or simply lurk, you may join one of our mailing lists. -There is an announcements-only list (Info-ZIP-announce) and a general -discussion/testing list (Info-ZIP). You must be a subscriber to post, and -you can subscribe via the links on our Frequently Asked Questions page: - - http://www.info-zip.org/pub/infozip/FAQ.html#lists - -(Please note that as of late May 2004, the lists are unavailable pending -a move to a new site; we hope to have them restored shortly. In the -interim ...) Feel free to use our bug-reporting web page for bug reports -and to ask questions not answered on the FAQ page above: - - http://www.info-zip.org/zip-bug.html - -There is also a closed mailing list for internal discussions of our core -development team. This list is now kept secret to prevent us from being -flooded with spam messages. - - --- Greg Roelofs (sometimes known as Cave Newt), principal UnZip developer - guy, with inspiration from David Kirschbaum, was Author of this text. - --- Christian Spieler (shorthand: SPC), current UnZip maintenance coordinator, - applied the most recent changes. diff --git a/main/win/unzip/README.NT b/main/win/unzip/README.NT deleted file mode 100644 index adf5f30..0000000 --- a/main/win/unzip/README.NT +++ /dev/null @@ -1,40 +0,0 @@ -README.NT 27 February 2005 -------------------------------------------------------------------------------- - -Contents of the UnZip 5.52 distribution archive for Win9x/NT/2K/XP/2K3 (Intel): - - README general information - LICENSE terms and conditions for using Info-Zip code - COPYING.OLD additional Copyright notes - WHERE where to get the current Info-ZIP software - unzip.txt UnZip manual (preformatted unix man page) - unzipsfx.txt UnZipSFX manual (dto.) - funzip.txt manual for fUnZip - zipinfo.txt manual for UnZip's ZipInfo mode - ziplimit.txt infos about limitations of Info-Zip's progs - README.NT this file ... - unzip.exe UnZip for NT command line utility, MSVC++ 6.0 - unzipsfx.exe console mode SFX stub for NT, MSVC++ 6.0 - funzip.exe UnZip "filter" utility - SFXWiz32.exe GUI mode SFX stub for NT, MSVC++ 6.0 - unzipsfx-gcc.exe console mode SFX stub for NT, gcc/mingw32 - SFXWiz32-gcc.exe GUI mode SFX stub for NT, gcc/mingw32 - - -The program executables were compiled with MS Visual C++ 6.0 SP6 (MSC v12.00), -using the win32/Makefile as supplied in the UnZip 5.52 source distribution -(with support for ASM_CRC enabled). Additionally, the sfx stubs have been -compressed by the free exe packer UPX 1.25. - -The alternative unzipsfx-gcc.exe and SFXWiz32-gcc.exe stubs were compiled -by gcc 3.2 using the mingw32 environment. These stubs are significantly -smaller, but require the presence of the "msvcrt.dll" C runtime DLL. -Normally, this should not be a problem, since this dll is supplied as part -of the operating system core for Win2k/XP/2K3 and Windows 98/Me. Older Windows -systems (Win95/NT4) support this runtime DLL when Internet Explorer 4.0 (or -newer) is installed. The dll is not supplied in a Win32s environment, but -this should be a minor problem. (For the text-mode stub this is not a -problem at all; Win32s cannot be used to run text-mode applications, anyway.) - --------- -Christian Spieler diff --git a/main/win/unzip/WHERE b/main/win/unzip/WHERE deleted file mode 100644 index fd4dc45..0000000 --- a/main/win/unzip/WHERE +++ /dev/null @@ -1,258 +0,0 @@ -__________________________________________________________________________ - - This is the Info-ZIP file ``WHERE,'' last updated on 17 February 2005. -__________________________________________________________________________ - - The latest version of this file can be found online at: - - ftp://ftp.info-zip.org/pub/infozip/doc/WHERE - - Note that some ftp sites may not yet have the latest versions of Zip - and UnZip when you read this. The latest versions always appear in - ftp://ftp.info-zip.org/pub/infozip/ (and subdirectories thereof) first, - except for encryption binaries, which always appear in - ftp://ftp.icce.rug.nl/infozip/ (and subdirectories) first. - - IF YOU FIND AN ERROR: please let us know! We don't have time to - check each and every site personally (or even collectively), so any - number of the sites listed below may have moved or disappeared en- - tirely. E-mail to Zip-Bugs@lists.wku.edu and we'll update this file. -__________________________________________________________________________ - - -Info-ZIP's home WWW site is listed on Yahoo and is at: - - ftp://ftp.info-zip.org/pub/infozip/Info-ZIP.html (master version) - http://ftp.info-zip.org/pub/infozip/ (master version) - http://www.info-zip.org/ - -Note that the old sites at http://www.cdrom.com/pub/infozip/ and -http://www.freesoftware.com/pub/infozip are PERMANENTLY BROKEN. They -cannot be updated or removed, apparently. - -The Zip and UnZip pages have links to most known mirror sites carrying our -source and/or binary distributions, and they generally are more up-to-date -and have better information than what you are reading: - - ftp://ftp.info-zip.org/pub/infozip/Zip.html - ftp://ftp.info-zip.org/pub/infozip/UnZip.html - -The related zlib package by Info-ZIP's Jean-loup Gailly and Mark Adler is at: - - http://www.zlib.org/ - -Source-code archives for Info-ZIP's portable Zip, UnZip, and related -utilities: - - zip231.zip Zip 2.31 (deflation; includes zipnote/zipsplit/zipcloak) - zip231.tar.Z ditto, compress'd tar format - - zip11.zip Zip 1.1 (shrinking, implosion; compatible w. PKUNZIP 1.1) - zip11.tar.Z ditto, compress'd tar format - - unzip552.zip UnZip 5.52 (all methods[*]; unzip/funzip/unzipsfx/zipgrep) - unzip552.tar.gz ditto, gzip'd tar format - unzip552.tar.Z ditto, compress'd tar format - - unred552.zip UnZip 5.52 add-on, contains copyrighted unreduce support - - zcrypt29.zip encryption support for Zip 2.3[**] - zcrypt10.zip encryption support for Zip 1.1 - - MacZip106src.zip contains all the GUI stuff and the project files to build - the MacZip main-app. To build MacZip successfully, both - the Zip 2.31 and UnZip 5.52 sources are required, too. - - wiz502.zip WiZ 5.02, Windows 9x/NT GUI front-end for Info-ZIP DLLs - wiz502+dlls.zip WiZ 5.02, Windows 9x/NT GUI front-end plus DLL sources - -[*] Unreducing is disabled by default, but is available as add-on. - As of July 2004, Unisys's LZW patent was expired worldwide, and - unshrinking is turned on by default since the release of UnZip 5.52. - See UnZip's INSTALL file for details. - -[**] As of January 2000, US export regulations were amended to allow export - of free encryption source code from the US. As of June 2002, these - regulations were further relaxed to allow export of encryption binaries - associated with free encryption source code. The Zip 2.31, UnZip 5.52 - and Wiz 5.02 archives now include full crypto source code. As of the - Zip 2.31 release, all official binaries include encryption support; the - former "zcr" archives ceased to exist. - (Note that restrictions may still exist in other countries, of course.) - -Executables archives (and related files) for Info-ZIP's software; not all -of these will be immediately available due to lack of access to appropriate -systems on the part of Info-ZIP members. - - zip231x.zip MSDOS executables and docs - zip231x1.zip OS/2 1.x (16-bit) executables and docs - zip231x2.zip OS/2 2/3/4.x (32-bit) executables and docs - zip231xA.zip Amiga executables and docs - zip231xB.zip BeOS executables and docs - zip231xC.zip VM/CMS executable and docs - zip231xK.zip Tandem NSK executables and docs - zip231xM.xmit MVS classic executable - zip231xM-docs.zip MVS classic port, docs only - zip231dN.zip WinNT/Win9x (Intel) DLL, header files, docs - zip231xN.zip WinNT/Win9x (Intel) executables and docs - zip231xN-axp.zip WinNT (Alpha AXP) executables and docs - zip231xN-mip.zip WinNT (MIPS R4000) executables and docs - zip231xN-ppc.zip WinNT (PowerPC) executables and docs - zip231xO.zip IBM OS/390 Open Edition binaries and docs - zip231xQ.zip SMS/QDOS executables and docs - zip231xR.zip Acorn RISC OS executables and docs - zip231xT.zip Atari TOS executables and docs - zip231-vms-axp-obj.zip - VMS (Alpha AXP) object libs, link procedure and docs - zip231-vms-axp-exe.zip - VMS (Alpha AXP) executables for VMS 6.1 or later and docs - zip231-vms-vax-decc-obj.zip - VMS (VAX) object libs (new DEC C), link procedure and docs - zip231-vms-vax-decc-exe.zip - VMS (VAX) executables (DEC C) for VMS 6.1 or later; docs - zip231-vms-vax-vaxc-obj.zip - VMS (VAX) object libs (old VAX C), link procedure and docs - zip231x.hqx Macintosh BinHex'd executables and docs - - unz552x.exe MSDOS self-extracting executable (16-bit unzip, ..., docs) - unz552x3.exe MSDOS self-extracting executable (16-, 32-bit unzip, docs) - unz552x1.exe OS/2 1.x (16-bit) self-extracting executables and docs - unz552x2.exe OS/2 2/3/4.x (32-bit) self-extracting executables and docs - unz552d2.zip OS/2 2/3/4.x (32-bit) DLL, header file, demo exe and docs - unz552xA.ami Amiga self-extracting executables and docs - unz552xA.lha Amiga executables and docs, LHa archive - unz552xB.sfx BeOS self-extracting executables and docs - unz552xB.tar.gz BeOS executables and docs, gzip'd tar archive - unz552xC.mod VM/CMS executable module in "packed" format - unz552xC-docs.zip VM/CMS docs, only - unz552xF.zip FlexOS executable and docs - unz552xK.zip Tandem NSK executable and docs - unz552xM.xmit MVS classic executable - unz552xM-docs.zip MVS classic port, docs only - unz552dN.zip NT4/W2K/XP/2K3/W9x (32-bit Intel) DLL, header files, docs - unz552xN.exe NT/2K/XP/2K3/W9x self-extracting i386 executables and docs - unz552xN-axp.exe WinNT (Alpha AXP) self-extracting executables and docs - unz552xN-mip.exe WinNT (MIPS R4000) self-extracting executables and docs - unz552xN-ppc.exe WinNT (PowerPC) self-extracting executables and docs - unz552xQ.sfx SMS/QDOS self-extracting executables and docs - unz552xO.tar.Z IBM OS/390 Open edition (Unix-like), exes and docs - unz552xR.exe Acorn RISC OS self-extracting executables and docs - unz552xR.spk Acorn RISC OS Spark'd executables and docs - unz552xT.tos Atari TOS self-extracting executables and docs - unz552x-vms-axp-obj.bck VMS backup saveset, - contains UnZip (Alpha) obj libs, link procedure, docs - unz552x-vms-axp-obj.exe VMS (Alpha AXP) SFX archive (statically linked), - contains UnZip (Alpha) obj libs, link procedure, docs - unz552x-vms-axp-exe.exe VMS (Alpha AXP) SFX archive (dynamically linked), - contains UnZip (Alpha AXP, DEC C) executables and docs, - smaller than object archive, but requires VMS 6.1 - unz552x-vms-vax-decc-obj.bck VMS backup saveset, - contains UnZip (new DEC C) obj libs, link procedure, docs - unz552x-vms-vax-decc-obj.exe VMS (VAX) SFX archive (statically linked), - contains UnZip (new DEC C) obj libs, link procedure, docs - unz552x-vms-vax-decc-exe.exe VMS (VAX) SFX archive (dynamically linked), - contains UnZip (new DEC C) executables and docs, - smaller than object archive, but requires VMS 6.1 - unz552x-vms-vax-vaxc-obj.bck VMS backup saveset, - contains UnZip (old VAX C) obj libs, link procedure, docs - unz552x-vms-vax-vaxc-obj.exe VMS (VAX) SFX archive (statically linked), - contains UnZip (old VAX C) obj libs, link procedure, docs - unz552x.hqx Macintosh BinHex'd executables and docs for unzip - (unz552x.tar.{Z,gz} Unix exes/docs for Solaris 2.x, SCO Unix, Linux, etc., - depending on directory/location; generally only provided - in cases where the OS does *not* ship with a bundled C - compiler) - - MacZip106nc.hqx Macintosh combined Zip&UnZip application with GUI, - executables and docs (no encryption) - MacZip106c.hqx Macintosh combined Zip&UnZip application with GUI, - executables and docs (with encryption) - - wiz502xN.exe WiZ 5.02 32-bit (Win9x/NT/2K/XP/2K3) app+docs (self-extr.) - - UnzpHist.zip complete changes-history of UnZip and its precursors - ZipHist.zip complete changes-history of Zip - -ftp/web sites for the US-exportable sources and executables: - - NOTE: Look for the Info-ZIP file names given above (not PKWARE or third- - party stuff) in the following locations. Some sites like to use slightly - different names, such as zip-2.31.tar.gz instead of zip231.tar.Z. - - ftp://ftp.info-zip.org/pub/infozip/ [THE INFO-ZIP HOME SITE] - ftp://sunsite.doc.ic.ac.uk/packages/zip/ [MIRRORS THE INFO-ZIP HOME SITE] - ftp://unix.hensa.ac.uk/mirrors/uunet/pub/archiving/zip/ - - ftp://ftp.cmdl.noaa.gov/aerosol/doc/archiver/{all,dos,os2,mac,vax_alpha}/ - ftp://garbo.uwasa.fi/pc/arcers/ [AND OTHER GARBO MIRRORS] - ftp://garbo.uwasa.fi/unix/arcers/ [AND OTHER GARBO MIRRORS] - ftp://ftp.elf.stuba.sk/pub/pc/pack/ [AND OTHER STUBA MIRRORS] - ftp://ftp-os2.cdrom.com/pub/os2/archiver/ - ftp://ftp-os2.nmsu.edu/os2/archiver/ - ftp://ftp.informatik.tu-muenchen.de/pub/comp/os/os2/archiver/ - ftp://sumex-aim.stanford.edu/info-mac/cmp/ - ftp://ftp.wustl.edu/pub/aminet/util/arc/ [AND OTHER AMINET MIRRORS] - ftp://atari.archive.umich.edu/pub/Archivers/ [AND OTHER UMICH MIRRORS] - http://www.umich.edu/~archive/atari/Archivers/ - ftp://jake.educom.com.au/pub/infozip/acorn/ [Acorn RISC OS] - http://www.sitec.net/maczip/ [MacZip port] - -ftp/web sites for the encryption and decryption sources and/or executables: - - Outside the US: - ftp://ftp.info-zip.org/pub/infozip/ [THE INFO-ZIP HOME SITE] - ftp://ftp.icce.rug.nl/infozip/ [THE INFO-ZIP ENCRYPTION HOME SITE] - ftp://ftp.elf.stuba.sk/pub/pc/pack/ - ftp://garbo.uwasa.fi/pc/arcers/ - ftp://ftp.inria.fr/system/arch-compr/ - ftp://ftp.leo.org/pub/comp/os/os2/leo/archiver/ - (mail server at ftp-mailer@ftp.leo.org) - - ftp://ftp.win.tue.nl/pub/compression/zip/ - ftp://ftp.uni-erlangen.de/pub/pc/msdos/arc-utils/zip/ - - -The primary distribution site for the MacZip port can be found at: - - http://www.sitec.net/maczip/ - -ftp sites for VMS-format Zip and UnZip packages (sources, object files and -executables, no encryption/decryption--see also "Mail servers" section below): - - ftp.spc.edu [192.107.46.27] and ftp.wku.edu: - - [.MACRO32]AAAREADME.TXT - [.MACRO32.SAVESETS]UNZIP.BCK or UNZIP.ZIP (if already have older version) - [.MACRO32.SAVESETS]ZIP.ZIP - -To find other ftp/web sites: - - The "archie" ftp database utility can be used to find an ftp site near - you (although the command-line versions always seem to find old ver- - sions...the `FTPsearch' server at http://ftpsearch.ntnu.no/ftpsearch - --formerly `Archie 95'--is quite up-to-date, however). Or check a stan- - dard WWW search engine like AltaVista (http://www.altavista.digital.com/) - or Yahoo (http://www.yahoo.com/). If you don't know how to use these, - DON'T ASK US--read the web sites' help pages or check the Usenet groups - news.announce.newusers or news.answers or some such, or ask your system - administrator. - -Mail servers: - - To get the encryption sources by e-mail, send the following commands - to ftp-mailer@informatik.tu-muenchen.de: - - get /pub/comp/os/os2/archiver/zcrypt29.zip - quit - - To get the VMS Zip/UnZip package by e-mail, send the following - commands in the body of a mail message to fileserv@wku.edu (the - "HELP" command is also accepted): - - SEND FILESERV_TOOLS - SEND UNZIP - SEND ZIP - - To get Atari executables by e-mail, send a message to - atari@atari.archive.umich.edu for information about the mail server. -__________________________________________________________________________ diff --git a/main/win/unzip/unzip.exe b/main/win/unzip/unzip.exe deleted file mode 100644 index e9dc44dfe99d067be97125be62f366ba4b579181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167936 zcmeFadwf$>)<1mGByE6{6Ci~kEmVnPHK3J%QqyWcC>5(FDYU3uyw=!pMuii^kxTI; zN_vPg4l|?A=!}^32!a8B$)q5(;7R}7?DyM$_8@uim=^~N&kcC< z^cG$9o2Sq6-@2&yj)k}1vhez!6yJFLPk(y5RD8qD#R~&JExz@q#nY~;DgMdrH{E=0 ze*Qqa2D;VPJ}u~cazyIylW{MNklFj6N9@NldEOHv*5diMg60t+JoC=`>RADwE8V?Wn!Zt!?jGjNmF zn__FUf8LtewRQgMB2$Hi9Cghoo#5ZI*iGS+BU52fJ)8~?Qa?ginQNa6c;&BPt_Wzw z&Q{k4;@Z~cmWQSa$`Iv*yea8y{rs6@TQ5^S(|_*ze4*HsTRvABP=20dywdggqR%QD z^89anG)1UY%OBAJf;rSG23G=DLyo`PGZpdnRJ`<)vfJ#o<)f5Y_ClmiMyfK^;8Di{ z4^~jB_6r|R5hB(0Vt*H4MrPTIy}k}(6_BBS>Zak~z!7=9C3I90{l&+ zGqp73~rrLOD?=PV756)*}>%I5W{|NRW(uyO<# z+nh<)4srGCm`A&giJ=&t;9X&4s?OCBE>Zz?xm!6BrGO$dnSz_7F^$LP2K4R1c^>ue zBXo!Zn!!zhI29v+NjtS`ft(1_cpOH&W3Oq1V7RWjMG!5#08vEkJ~~QRokp z0-iZHxsE8g;@UR3H79hinF>mU9dNlIxq^|??&xUi%4sH4oCgy{p`?Rbu3 zE2lh8NQRPP=rO`3_q9?G(PU}be9?$NAvkPp^62nVrwa@Q@^VKG*t^HsnlO%Pm3JmX zt$~|Zdvr{*Q%!>FNMLw}kw|*NJ5}f~5<&DYF*q8S-F(Hn7&r zRxHW@WxNF7&Rw;2kVUKWC`5IpYkL@dEIi9@5g%A>M5E|jF)?^ALXDHhi=n#_h%C`L zTbuG`xMI?qa_jqYSFL#ePO!qct!YhZp<77WfBD=fw@?{>9g)#$RN?wU8tG_vZUd;_ zuA4cw(|I&pK=JWEBZs@01%Hbm^5r>?#(#lexQNBB;<5SRA`hW@G=3K%I*jx}ER6fp z>9crx9ZRPdmR`lu#ZWDtWku8`JRGi|a8uqzv4E49B6sP;2hK+(@IdLDNjy+=#04hQ zM0#)-QYViQgI_`UG|kY>xCnfSr^A7+`1^PP1;fHcs{lJ(GzY)Hcmtwa2$^PzZl>7y zUwKxLbsf+2I3hZX^uo~oIbNfy@#aFuzZPoYRPIq){Ku5b&vNzUFU7|%Lk@Q{3to&M zutSwkAO(1hM?{B_URaf*)9JVI^n8|1FD$(qSVZr@Teile`1t$C;cjNZtq3CDnUT=Q zuaik?c;0}i=2!NIne4@%M8=gHK4n#<8dXb*Fc@O!Ej-JLrlAIiAHv}Z3ZK$+e?~%| zrlWkU=@g_=(_MsTs_D*6htYJW;|2H@DI1*I9PK?~n#NN=hUpq&UxFW;lS@zmIQbDG zI*jzfIQ4cqy^*Jr-?zg^FD(7Jbb64dH?wqlVd-nr=_D|KFSB%dVd)Z2AJSo@hNURv zS%7D_h_&=A1U2F5D;7*}CJ=;}WMR47%`9#-;yR2J1gSz?q%2Ha)^H@c5!+#;7o-UB z!}y6lj5lQJ)3+%;{w8v`n^|xjWq!1u%oHDgoMmRgUn0nrUFpA5s#OR5o=vrK4F-)? z0ws%Kz)H9!YNJbeUBgf9HWZ(@(A~_Q=S3gyCmY2lEbeCZG^OBbN>2>solGV%z+2+4 zpGYQqMuEinJlp~uoj4O(rMRX83pvT8`Zur?#sR5f49+p0tt+j{$Aa0}sLLEUs9cnK zh$|K)Ns7oiL+0P1>8KjHw>URaQj3S90?DmZrJ+_rd+vm!eh4uSU@p z5(U@B*kkEz}u*|A# zy)3j%ssnK~WlZM>9A!mBaA0g%5lLrYR9O+pNnlu%dQ6A06Tj5#-~eFJ8?hekV_z^o zOt!RTUU;Chm2n=i#foINhX;~@79Oq?5J>q%&Qhyf0I)H# zA>5;WikdQ-a^^_4u*K>Y?!J)Upjc^FR-W$(q`@A0<iIi^sv#^(FMat*hY^$ZB*fC%jlxibYo3z z9SkG0vlaH)FI!>yR)H6x)><+6bMS!8L-^0zpHMg5haWySX)wSX{gOqJSv1{DOn4MzW(1F38=o-I2D zOAjHN8+NDv<%6jL53vH4>;=q3*^^X?S$*{^uQ_|(a^xkf{T402Ufw^PDttC8+z)RA zs)+rVD75;sRH-ip64};1RVp3O7{_*wYF!}j88|-{CF`z1kh}ED3;iV!Y=0Gz$*_Kw zfiTDK#mM_DoC~vTg?(y5Jq?1tB+anvS-z}|r%uPnfy_tHguL#F{bxqLxe4U6(hoy4 zk0aU-1~>K2{N4a!OxCsl!&!ezte!#&6Bs+Bnk733!t80 zqq{ZKDj8{JX>6H=f(?R)rTVMVP)_C%^?kb~b1JCM^#_Gq4jEAX(H|7@BB(#@4+^Db zK)Jm?DCCq-OZtOCsTokt?gt8}jIEii9H^`xl5g){c%WNaBRtO7Z!fZK}y>_}yi2MQm-0>!oWWzd@ql%*A{?o%$_-@160o zz*EX*d2gOHEOL`w=w0_`$2zaRX2JYx=f&R8{zY$s>k1?OKy@gvVQ*>Q77aRn+S#Et zFk=XofpkG_opT#}Gn-#CA^*`foiuQ3eC21wa?8O)&er%eQ$fye!>2(Kb~!g;iff5lL6g#1 z724KJq2pq@D$0*B12rkSl%d#D%+qp z0Y3UR#vE8;x000=H3Mze7vUm`lx}4H$8f(;A`-D z$mi%`o*p<*N|FUjP=?%>Ho4m<-GrHuS;;5ht41Q-0;i+Zr!EF{3_~$^4H{7H?uH4> zDM6m)4@9X3UX0b_Y4D<8q1UH*lrrlGJj$?wRmzMfjW)(WP{Vkr$pSrC-Wqr(O|^BN z8g&^EQMxeifWNO^sUSQv+U6rzCPa!MbTp8+V7|ODd2NhiRqIU_Ji8YT;TrX#3=pR& ztO;v<$%5y2Y9XW4q;%D)GdO-q2NXg|+%1!H1VPjLVwP>G$q97l4~&M-_|s|$>5Rqn4kvrm5JBk4mUSmECjAh7+Fy;tI(^i z8<2)82FZC`Rzbi4bsL}#_o-zXREv_&z_vE!HW{X*!FJN1vI(dFv>0qfAfv~5)jb4$ zCyBtWz<>qwTcDkVYh$YMEx2r3rPDL=qIYgZ?>xzSCq@MH&V;F^mWx7-x{yGlf1*VT zl_C1hh~bw6%%d)&D!2>=hSsRX%-A!qnn+S+E4N{mw$xrMcNml_uwD_a`&yYU$gPI( zbfM98Mxf+UXKQ#2Qk&o?mwqaDogv*^qn?TJK-uYR1?m(ZP!qE#Ta%u^904z<%ZyRF z<@pV!T6Gw=M-%9*#HA*~os2_)5jE;A$O#~ABS^!P&(Rk)BuoHcz;KJIoAg=0tp`o$ zRi}cJ0B-fE;G}_x7#bl|3Qa%^!mPAV(dnU)Tf;hO6wwNlh4758m4JYuE*yYEwkoU( z{F~;u9eH4)09MSyOm_(8tg!|2=~oj%()*I#Qs+!E72T9Oqx_7(nHVuJTu24wXGlY8 z)e|tznP}3;5=cN0q&by|*}>LTn2SqSl#OQsH5|2B8%&zmf5eTs#Bhdj0r89veNBd$ zoO1=WYBUot0So-SX>@ScDma>@x~yPVe-~J3M6EhA4K@XAVB)XAU1Df7aS-ZdUYh(h zD-YNpWl`$XN?y!Na+2<#9K>o8s@*$?NiJpET6L>tQ2aLh)F|Ak8L8v-`=c z@F2}T05R%g=wPHRvFLISg4!~Y+3WLoSWXm~$cw0--@v(A2vIp*?$(K+87KjEnZ0WJ zElmHDV}9j&LNG>4SPgEUT26VOa!J5!q&z(8BYiVNO`?DadpxRrx4u7mt0|90?|9H_@~D4CW`r!Hbg-&41UWqF+CC7D8mS#~q){~J z11pQhjaT!4x!>|7{BI*qO`-)a{~EBYhg+9lkJ_Mp3NZq@K->hMgI zqyZk)sHH;Kv<9TMs)hb31*2`$g}n&aeW{Sm=k=&CKm|mUC`Wv1>}Fy~abh$I+K`pj z$E+Tr8^WZ9fT_IR3d0wMmRJ21G9w*rwwe_)Wk^ouXoK;c4PrE8rL4Jp8pNQcbW_4C zm@uk!E60M?S>-myjeI_J^8c3_s0MJTCkY*P*LUQym7PH{)9rLG-!4T)I)9v)aJ zuQOByj$I*{6MrK^ijNfvRu&hKLt_3sd5@u|XL7vd19s3n5yVZ#dKA``VKyj+U(y3( zej&)8h5@4ld8!m^grc3hv~1C8BJ5zTD@IFK76@%2_)GnF9Ez5pm`%KI3y_e%(Ji|0 zdy#iBj2Y!kd4p;DoD<(Gm2P{&5l28&K9jqP7hfxP-zWy>6Y`&oaUDukm1(7C zX`K~)sxtqBF|^L0#Ex~2-54p~ocK9vwKQF2Shb2~c zR5UfrB3HW@`Zp575>~1)lEm-C3mD-6Bfd9cpG@w{gA(N}#~}c!9vj=907s#7Qe=LI z_&%Hk+PE}F-QUJhGm!sJI6A&hRoOV|Y^_&j7?h2~Sw|Zr#p-AydhlN5QWstHy<~6Q zg&92JB^R~>Rw-*bf?6IaZ*y+LtPRFc(+J3n^0_0vJwfs^hsg^qXZ51)I~aLYW|d4d z4P0KXGB9?oOGMByi=D~P(R$@)2B}*9#+2$w-vRo|3o@udv4xwI?JM`e^bzzY+7c%D zpa~?}Tpf$qQZ$(;jt=Uv(1&CK;T`?ihU@}tD7>*)(5;#6Z=nNPmA1Qbl=c@%fE}H# z9gB069ROPBIKlQy6iX9apWSt?vN`f93A*x`vz1KKr6f4R-%gUimBP}e{rcFF4nVGi)qgVOUp-ma`l}!&)kr}HV(Bm$OU0~xl#rz6W(g(5Ho2isB7E<$y_j&#!h5VO^ zy~HS`keeVEV7`r%F@%e0V@<<4Ups#4ZP}MYONk!$XZ9!gBL-PH9dGZLl1Hx zjt3A$n(%N+cYTM7e&3lvkn6BE8c24xvSn<{ahRl#v|$R`cTn>{FKB#hDM@R>Zyj5# z|Dh%v+o!7kP!pDaZ%x=TA%jO~9+YI7a9mmwPW&!Sc)@?D38!aP`M;|P_n)6Z&HqoD z@B(PU2~3S{cDAPU;s3?jupQ08wc(0Wwc&BnhD+_!QX28uQ#E1}FZ=&YBNk_B#Nt>= zBNnGMqI_Ut^krzzn%VH5awS(9z75)aF09VEP;!{t;;#^YlksQ6pSi!+h70g~jnGSsaPB%K#>n0q4E`g4 z6Rsda)RJ=vU77?3A3}K~K8&q)EQeZ-Jt1g08n+serk4MV7Ujjz5OheTU@2&B$blUI zL%^rr0oxOB;F%rl+5m@}3S0BR!zkr!ZP3?8mm{-By*yi{lgOmxHzGp~HwZ9a%a+f8 zTFZ*o19fS%x)&2e!nsu&Jf_GU#WZrn|BeXOsKBJsc@*g0_c%qVD5n(6!mm#;KkH?l zSar}%8i4^bD^uw@vhbb6B8cNe6wm80JPX_e)=UIyu_JmQ8<_Psrof!e@-i^$#SBHb z)qqwCy~GH>9!KtLrL)8EH-erpBw^!Mc0UXkl_{RY9T%qp?Z`p zsdpKF1y%*dqNN^Bx70%i83r^nJGK*oS01OCHh`95u(z@8B9UoBbRPdr``}`r@ljoI zfECHM(#N-#lw&_H&pL}`?Yr0~ueZE{kw=I>fgeSUKZXY{yN0bxkJ3Ers`G5B3ji9w zO2HHuOiN-;)&e=H0*@X|71)v>7?#9Y{?lP~_zh{`@0P%);J@uyD&rqn#=eW`C`_iC zGHEjSr&KU^a1qV0$+0jSP6xXe?vE-TUQ222UV^A9n!le3Z;=e2LaSuuqAgeKL^0ip zx$-w2sZPl+#an|=i>bX2e#!zfUYn_sC?)uXV)PG>`u1H&tH#V1kYy|=w7Fr~GAzOj z3p9JF7_5T-8!E__Fw-y0W*C^@Ew>);3!zcdx?<>;NPx4$5K6)vEe+IgPPTNV81dMC zjqB9j8QWI@%?@Tz_nAmiV)0;_ZBr$J2eXd3Y69^%t-N5EDFzbYFhIfcM25aKoR^q{ zO(aJbkA`qrl`Y{R?1`*yWhnOSx!TF?wovsyUXR`EhT1yy7(k;&BExww)VlbmShFZq zoVDtEucc{_reQ}ebpt;+zCBa?U#18FXC|wiaRSkICjem5Rxyka25`YvtN!H+Mg}M} zOsCD+>cU@9Kk%w+k-&CZaRSTPZVHs6?V=?>%As_UC0=|y#lLy|R7sR9wNHePX(`;< z7HmbnnQ0H_Q9!u{q}k;1e+mH?(>V<~rf$@9zsu_%s(ezn!uZl4@H(xH{!ypC|2a`^ zfa(C`I`vKM)kLpUKX4fbT;>4}kEW`C$8?6nB&C2f7LyFc@Hda&obJ>s)a(oeb!jE` zQk^=VSGQn(=pf&?3T{nAS6INM&6cL?JO(eTlHgf;^ogPWtXP>az68PJEkzbBc(_P?UKfWYb`85<>Qzn3kd(hs1 zLODD>zi=Ye)C*aQ<>}l7EO%dp1d3Qc+_bn%KCWZPg9Z)<0Hid4w?ARnXH(V0mC&ZeH)jLz zbeg=gr^AUq^IYpj?UFyLlw*UG z7^a;QW3INqP)g2!$%jUqr^TWmHiInIQoI={z{_uYHl@>k zOx|Zey`5pNEipKqYwt1O`uHsXR9l|&cs-tC=wBee{G7$Luz5(-HYxce)Y3rg{0PzR zX{<*f^jn0Sn_i`322C4z|7~l?dE{7kgQ4Y?`ucj`u{e%!DC^qPG5SuQ|4~R^{B2}r z8V>y?^ch~{ij4pbr{~9b@vrPXZvOUk8aM4}A^9mX$yqj``PX0xvSEP#OMp^O;#|n% z6vBX5ezzD@0J!{W^in*rVj3$iSbR@5!nUBZa>6zs)Q2z~5tfrl*ygtQ82whC|KZ-2 zM7)@ggqB%@H34p&JpU0z702fQaDB7^Jg%?E5f%=tuP_SYeXj$t`ieY347Rb*071O} zp9s~xMr-~V>*FyPBwQ+>Y{OFvc^i5P(Pb*Q0_!n3ZUhz{|Kn+6#>r6V+r!as5@+392K?SxUy;xC z{Gzj*+v=50INqzlJ1C7&DKqTpF&gs>z&tV9xv5^+=*>u9ol1Wr&D^W^QIWnov=B$l z-Fv;li+*mxB4wzR7T}oWBHs5VL>TdfH00x`6NO5qhf5H!CN_Eo!^8j8ryw{ygcQ6Ci6FJs^7uFi6!$_d$pK^YGxGyWwcABsw zMl=-qG7$e_4?{do^Cj1KG96)3aI12*M|D@ha?B^IQYlDVlwKb*G1X;1p~Yz%TObOx zuAuovA){utzXi>&n7r}(0hL>&`W{m)S)Iq@@42QogIo{J$Qh+cnd+O+@j zLn6O#_fhh|Wel;bsaWd;a%ud5B7uUt+yt^S6N3n>lG9Ahs_FP4K6UWvgeC1nx;4d;#Au2FHqy1dh}X0B1o4<1%$~v1e+20{Ew%_x0%7t zK928>4+UV%%5&?Z^Fg3T{m1we6%$-BOx<^a<;%}vb^4!1l^GhMVHC^CCvx#yu&|jL z12H`kgYN_HS4pq3BY(p)kNnkYNB-JRJ@O|8SD_TItw&Yqw2GJ(_8YFHAsicI_MfKJ z|9)Ec{__Kh>Z_qNT~4QAk*xfzkj}(%?aMT>=KqK9ANI-@Pb}kRr$&yq(5K!6vyD}c zM(=Rb-Y216u9yp!34xz#`6iJ={^%5&PSVSV%*=J}YL`5`y)sqr`6dz8;upnL+88+88F z>B3P~xUb$v=V~{S{d#43))A#wwi7B+^_qNq@?9c!>;3#|FFW`8F&+)@n?09?JcB{b z+Q#v-v1f^s^<+B#h<-3(WcUqfW=H=m2)#{39N@3z4KWNFnogtJ8;=hRn67NUj|4@4 z@_&e>vmd@SkMG_6CO#G$Fr#y*P0(kPU^Jb{K89!9iW)2Ewz|L~xVuU{>IHv+NL1S= z(%7~sFr5m($k#Noloqij<2sCN{)2iujO4PTf9fCc14$OOu}<^l(S9YGN1N&7nxnMrcN$HF? z0Rns>v4afRRJ@X02?5!Rzpt)x3ksfp!Cwc$f-&Qt4&faBuFr^02MrnN874JTU)XSp z)rll?-P5VtLeLQ|va#P{`knMX3!CsO2LA>W%Zel*8@Q~7pXOrBHH=D40{%2iW9vk+ z)efYGqubx5_^c;C)V~*?!_&yew%*EJ1H}7ZfWd_=E~~!0mikF#4<7tjpBN%5fa4&B zIuT}y_k~haN5}4%zocwZHBgkUVlAKe2|pMpo#Pi8A$ZSXzS&_sg6b%w9=MHd^Y*B7 zSiltj33{0-KsrcNufq$rvQ9uf*T%|(V}}7r8SJ?3oqpMYB_MP^a;k=l32?bItp7I3<83s8nFdWB8)N0sb%w0moQdAel!X0jOwW6SYbab3 z{R!87^`P(wor^yQ$jRLk#K;%~nDFClEXlHTF(l_=J}ffGd&oETM%qF4_w58et6qq2 z$7qiQmvyHOs=tE@g!_Z=WYAjD&~9eX3KP$!1eyjatyA6oos9ZkQg;R_XMFma?CTyr z?cdfvpSs`1VkzU(3%~~l62u@6fMI_?OfQDb2E%5{-TD@y4PM1AqK?fy3qi3bgLika zD*N&dyTM_I9@ZcGa8y$M^lP~zH!%%-dEdYdwu*S9>0*b=H_js z#u&#tV#fLj_;PIbsH5}b_MCVCLmty;Ej=~APc<{GOFua7#j5qzdHg#mrKf_gp&h@a z0)k%v`2XLD;cxN@0gUOLgjkOl-pCNkIu>Ai9G?UYz@X=OI-E2mSetZ_6zG{RjTRGMEF`_8QZQFq|4mBz18?-p zv$#stKx5yVgHla1OhN2hT!Nr~%~4E@j9Asm#`qzDyCEe)oUuI-i*hf ziYXFs4E-jRu%b%31XM^DG2{cc%iV()o)xLX=KS~=!o~2UK^hU6ft$wYJ#yveq+r?t z23%%!=_}}pLZbW?R4XJV@e1--1%b1G>B6F;GfX;^t~2=5r&#HeJ*ADW7*VW2z+QQ^ z8-_s|@yWz%EPlU;_4lOX-N@1l4f=IxHcSO<;=Si1YkWF(WW010inFeX83fHZdj^=R zU=U~azcE;O=%@e5C-cMy_XCoAGFOajL_mpEi9u@JDlxPV4?w;y-9GPZCP=3E-QfF6 zIyX@H8JT%x81=zo6MTD_SUkeYW|d?jw?QYje(k~D)pTWkR-kY9M+3J|KV}DVfL<_N z;sOmlI3);gYj;YninN3_B*-VP5`)zKD^C&y($$S8bEJ{TJ~^HJ5c)om`4Dm`u?AgR zm#MzOBm}G(qPm&qN!-bLg~zX^v3QoHm=kq4fTwG^%H;Jwo=#iK)3OcZY|5(8MzL#A zrQH4%(VYF71}PuDELf-M3YBJ@Y$E#>4Ry zFgld0Vf1JkqYaQ4G)KG7$VK*gt<8^M~Zv0(>zX$Or==FM?4nO}J|8jaJ z*!(;l&h{GW7UiXC$F>{!8^gkT&^@f!r{_`YM{zxYQxX9 zttE;I9L6Mbp_^(TAm4_L;ta8eoM5iey=u!nbh0f2pG8VI0IGARkrUJ`s z{Jd3Ym$opr2g;YT2NVi{JCuBywj(pHzpPP*y-NOavugwG4&w{95<3Z>V?wJUh2I!8 z+rxaw9{&?*bmQxZ{H$6ct$wLIcR*37N1U0xq2yEBy4n`!GM`9H*~o4oP`1`771V~A zlq!=bMk!#@zzEPEadhf8hFScAFiQxt1h&{q_myHtn6)laiGFc0obhD2V04xDP#40G!E0L*`l26-9P|jq5T-XDrr)cG^|E_k(p}-942Fm9OdE1L#{%(&Ft~c zu2Ey`RJkRcj4mRtGy9NIMsmE~oK8VYD{tcL^U25^h|FXb$1H=}uSgkA)3RRit8y#lxQULl=e6ew zm6vT*uL#5z%%in+I@V_sKoI-T3dL%rlvg)H&@aT{{>1cf~>MrbECH>Ns zY%Yb61*R+c>r-A{ulfvW&(t=oJ!$Drz*Oi@`biC84|k@#`=0=0?jc|KJe8z1o2sM6 z|3-9UV5q+lWq9(x=P+#e%bV;4i&YX|lFl&VnqcF3{FWrPM@;gUlShy|?dlcG6JTmS z0>G$Z%Bk~*8dj_n#rPmM_PglNTmm>B`vAk6)5Q-p<8sB#%X4*14@VnuiGyq1@?wRn z`?2n9A_)P5yY`k-^rjjTEhhd zD4b8An@O+59Bmy&dZT|lhKoIuM{MudMQ1c^{5&#tAX=FN6q^q&XGvWp(OLIMzAd2=T#2a4icX-oBhM!qv_Y z4VZa(UUb=c-xs|Gz4|(|U9^XV#vTsx9U-|8#`HQa?wchvGjG2*gD$_=+S2Fpi`|HV z7N*NDxM>lkR+))mfFMAX;r>L5QP!pQ{V@HJUye9^TP>TvvRyk@u6&Dj?Nllo9dAMA zT)d;h@H}KYBiyY-Vm88tHNA zES>hT()17qwP zapDl&1vyB)7*kh12=M}9@K%7Xt*MLGP!-sIEm@WEUjqc+d}R@XH2^^TFJi-S+!Fb9(5exGNmdRoSPDQ^qz43YSI;x_8=Qy zcuM3dEY9_oxO!v`)?{`mU*V)SLeW*oiXC4#KqDVFi1%LsZH$$oowvKmY_KUi99u7U zZSOErHu@L9g%>X%4{m~;(ag$@s#E_Z3fiL6dIO8ZozX76?y_0!6oEi4CCBXzH-DuyBPk9txY3V4X>PWIZz<3Xc>^7QM1FbojB~; zF5dePI({667Fk-BNOeiK>$AnRDYVa13K+_}9Us)p_Nl-2YA82gmkX0HG4wf#rcf@# zA#d>wx@LSnv0{=N2T_Cd7X9=r#T z(KzH83*L^foHU5{)*>()S1l#YWF8-hT$^4jD zR(4-@1-a3>z=y~pL#_G-3PA2EYAdHq<-Rvug@LVkIL0u$R=x5|(&yNBEe6|BLSAaO z6)zmvR5hk?uehq(j=eeg-VyN7M{eZeWo!;QgwfVji=Ca2P&J2P4*!lpz)kQ;-NFG) zl?JA)=ud#3IP*~`%FjUZ=g(`Z zwhwZ)HXhGefTanv6s~Z>Z-&M0kHTq~VeLH%4#8QLHrsCdCsEUP^3`j{$?+J3w1D=E z$m)6g;1C^;9SyFwtO9$ZkC%JKjd}VOL^M%$A7xJb90f&DgO$0zQFC zH}tl>6UIF3B)X&6PRrj%V{T~-b_bc2`<}!-M3j^e8}CjIlm@ix22P>!Ga{9DM6UEh z5jmbht6k|wi^y%=M`Oj|EB#`S^dc_|TIOEyH*_%Wpr`N=#}33v@DC8BdpjkrAw7pdl)fe zss=$>7iQ6%5pzJdMS0V)F><$#E@nH2*}zac-|QvKG5vFOh`(H?tfR&tg<7L_W8UAO zi%i!z*h3C_V{wX~mf7m4e}EwJ;m|QHmnzvS=W8fzy~GUZ!#_SB!qyk`7mIQ~mwe3V z*a9kvf%+mB0_A?z8i0=zGb|yB1RnZt^i*`Z5-2YD6P@%U^-*+>rk#x^^H+gk(&>#S z2TFyFCyS*KjVJGvhBlt`2HsB$QWvval*NA=q?yCIJPmagL4{`I7hw3*dhW22yY39+ zK~s*0P7NLHU?`I~;+nUU#euwz8MhH#nYZPEUR>iu>qCl;w#*0S_(#C9>7e6pf;#bK zR6`4^a4bwl`;@RvupU)CjP_>x*-7h;x)i%J-$4{p!cS7?Q~&rk;<-g>PYh{!88L~0 zRroxEuB8)UAWmjOp|8fHUO9~kqtb;M2GptnR7lk&xjPfaCj5_$E};dwH7UVULt|v7 zHpP7sOYMe1feZQS>Jl0hzE11XVunRlzZ>Q-d2JAPk1F8Nqb}EYX{fmw4q^zs37gY! zf7CJX9c_rql-^a|YTIAX79T0^6XiC~%y5-8?6D|sDerc;i-BUYEpBPsKSOqAFbH{xC1d&$;);VMJeqW+zUq(R9*OrN9IIkCUSYb_9&9XdgGD=^&aq)=foi zZ~@trNv%i(WD|~c9}yozKjaq{QZzE;MefkKj;zSRZBY!SPyGZ9fQIRvopH^pO~`46 zx|`0n223d{1)aZ8{w7zv|HlThy8j|9b7MAw(K-ibVwOTM6DG<6Jm@Nt`x+3VOrm+h z%9E5w>1J8spo@8GRl^Y`U}zP}9Q>Fv=Tm0K&US2IWOta3gg!OVRdnU~QWyE35S~#P zYz=%We`AFIDNxN9kej^2g4+TGSVYFS)-+{k`AErBewt(`FA2b+%asN-o){Du)_C{O z34#15)#35*osH=i@?$9#l*I0WY0ATzWH5wQbRH}p6&TQ-J0GU$wTaWphXt(oHpDBy z77AYsk(EQ=ihw<@w2vqArGl=Cy~}`ulNEG1ao;6lRsoVnYaeZq3b2+j5&cLr<0V+X z5Cnn>BtrKJ{+10V~d@(c!z#3QN0P!mk z!UaJyRt>Ifs>5S=+(i|gq`jjHr*U7DKi%>E^b8ZzKIBCHPIu3s3Ro5v;t2%C_L3f< zgn@!J+|^|}#M&BT1DmbV1R4mn%WTJ~)`U}NyL1u6OUh;KSlr|t+IV85G_di+X_B$= zL`h(9d9F0Dd{Cf}HRNyxn*H#$Ynk`J9Q586vsABn`A_|dX`7oH$fY+d_RR?p^G%V4O14CMd z;K}w^H*Ix8oWG>C4jou|s$=k?{bXUTN!!Z<|3a1awJ=Fv?`HlMWxN@ZtyGX#g&$RS zY;bhID-rXktI;-)6DzaMO|0gcCt;>bK}$_p154dYoCc^6D{ophFjtF2=esl+#ysh~rC7gP z;uhxp%q?7x@D~~Hq`;6FYOTqyYckaICU?aeJR-*ueo8( zfAJJ9lg1NWE7@Tz0p+xNEAx|1bdvf>G-c)$AS&`vXX-HC23;U5#O7b)9SD^MC`9_f z%|dj^Z}DQc&_Y!$&`6LE*rL}V0d(7;TxnD&(JscTNnM{;>FJ>(rKh)j#I9g%VD zZnCD?Lemv=G1#kk#U`gMnY;NA=Nt}eiNFfhvM(3%ca$ojpCPKW-0uNG&(Oi+c366 zzfO4z?LedAWXJC9hh00DUG}|b+8*aL4NKERAY40_;$kTx#6xw_nKEp+2Yu#Fv>h!_ z+2{s1thiM5FnQsf?DjXhVuf>6YuoRj)T?2TjnZupP^wI0<=7ocl_6r?N(;sDyZ#e) z9#H!iARI&FZauBNFvF#r^rje;x5n<+e%P_!p*nWc4Gj=k3-@oh4k>TK!gvdc8kfG& zrFex{x1_t8--Xh72RtftbuOF$##xk&k$=#D8F`U@)60RBgf#(uC+-eMP_HIN68NSF zw|VwTaT>C4)tGq*kl0js~~%CL|)=trGU{& zH7ofne*q_e@;4I|;e19$0TGaD;sU1Dxe2D$V=V-twE*i4#Ai$hxbN&4xWdrNslfp4 zfo~G{kweqQNL;FdK||*y7X789wS{eedRZ#)dCl$B-ApS3*n{@NC;2W zd&5YeGzDY{oasDB7bG4sDIHf)H@g8UFU*=I%$kb}0r;U=erY8WrM|QBKqIE0_{>zD z7&3x!FRTG^EhhX#pnd$*v%Yxhg*zy607brRug2Ktr=p0rQ9S%{6mJ0>^mz-SS@D~S^elkPGx3~ z(=UCV^|+lt#s)iZZyxrmDHd!YY)j~8gsaz1bbSN1+7>p+$zh8|MhveI2G~19St@7< zr92CdVBo^y9r-gGAZ!i8=oYeuVLqTd4k9e5w*UcrE{J(->D=oW1g)=83wTr)dJx7! zn&-^BcIA4K78>=&@T<^~&!gJ1WP#;XqM4@_=fOz%5ZcA1O+bJ&tQ**3rQ&@B=$J0p zS1GHwM_XpqORwzaTpE^cETC#}9bs1SQE~NC@JAq~6xCbD#v;}>tQW#RiNR>5t{&f+ z#x2^P$z7I3gTvFFo(R?zPLC_ps-ZB5rQxjd)TYad#swN0nT?eL^@v;f#nopK4v_yG z3}$kxzAcdxF_*Zui1$B3COZ)*28W~4h(`xh3nNRPo~Ufby~E&%et-OHLZoX*05-cm zg-wq*&@ng9=FIC}p zw8Dj1D$Gk&SfW*!C+}Gyw+?DcMP< z6;g=#4?{_UJ#>4X6=Gvm@<}B_s%<`;J3-KcyZuSiAga2~lR1Q_)Vy$fLMG((#gOeh z*5?uf;Gw<*S~f6V+iD#c(V%N6@NXo)3QeffpJgUd@~RVo2z3MYsbsAiC?_# z^)YluLW?nLjrP(DN50>b;e@Z5V-p?o>|=*8r)w_CP(SslK31B2IUwE9(P zuoW>2KaUiKsB)#cu*&fnrj66?CX09Lavsz-wC5q@qp<(YzW@Y&{UTkHvpg;?M4ko zwJK_*qI10C>coIy#mv2vRwCKd!SR9e`u05#+mb1m(>q8ZVEd3`3j%h1+oi7e77bIb zG7#hUAU)4PQ40?uwG=c?j#wS8&c!BNGL6Gajt`g%AMpMiew1MsF&rcV5Z~a4vK~c? z5+WhLmPu5k$^;Pss^#H<;UJ5`iW~}nU8|oXN+e%X@HygQW2_iH-y-UgtFSDlY~|-c zHg5kY{PJ^*@#wjikNr@2nPq4A7j930F1KR-YqA0*qYFIz>r$_oEX&_39hAvhv4P4L!sW7n6BuMVGlC6)-4*suj6z6?A&hvz1TOR-4ISJqX2Iu1 z+>lI?%865vY#}iv8N;&u176CgiCxf60ve{_cp7wDKERD*)w(u9Rkw1>hiMLs8pLpF zaGzR?LQuZcoiRNXQr$Vjy5|09fV9;rcYH0YSbehSSi0K+6e!DJ#q0WNEMsyVQUmyj>58^5VzHcxQwM`SDZ#CmRRN2#LD^5czM<$gC<$e!b^)gZ z`1p_~icQ3_xN4?=Qm_QE9-sO$CM--OmW_Ded3*)@-u*H_}(PF2Q?*v*u& zm|XzLFLWfuK=&Ii%41g>CX6rU16-v1olXNLadgF31mB+F7kr_YRe`)?5audv<2c>% zb;9(;6HH)Lq!bq?G2s)8Z{qfJ4$Rw;$KVrA4m=rXv+K4(< zRolJT?O?wtKwqbt<$n^kB);#(vYQfTKnIb2vt!90czNjij&uEwvphDI$AVOMs1?8E zxB-N%E3zAh8gOTfP07ClwKeXu9DQ%pHhJI0^15RB)Kn>bbZRn%N+?w2^VHDyxt8G6 z5b+mvEP;*ae-v7QcmKaYG0N-96Epi%02SE>{6y`WR;;nSfIZvip94}ktm_%9aeY>i zpR6#x|0w{CwK?jY`BpmRbZ~>Y=#QrCU-;D|7|E6hOM1txwDAm(r1+;>+q? z`E)tD7@7wqCs)u3SzHu+1Z@H?7W!({b0CKQFC|hw(OU>Ee2{^}K^zFJkKZFzZJ&ed zLDByBekn`F7EoydX5pt?@{1yNl9f6i&fxA$H{{3cP)K3oM}14w)%qLLjr20hmvuE6 zYP{!mc!}WvT_%v!{?$u6gC*b=P?;!V=G2D z8t?`6sy9=@5{x6F*SK~gN0f%Le<4l1aU>tt9ws5pUkVYzhYi>_MZM~;-%kniAPBRf ziVrSCu9W)5m{$I45`fGxZ5zILpcIf6_o;LG6n9eb)PVLYpqd)c%J_gL-lvkl=F^}S zr7_K;SpVwdyECrA$iW8Wj4|z<#3iSUY3C{Vv{rp;;i8PfsUhv1%puJHU(xNvT69gf z`de@Y!(V-h)Qi$1m8I`UH3f%c`A9_@c&*A{*T!YV;anxpjoaeK@{&Gv)O)bw27_5h z%?alw^I&&q)ul#KX-s+)E!uS|=evk8_;g-_VJg=O@G+?MucsP1Gy>)}E`uVaFi&1z zO6y_fNL5l(3xVr;^@{nJ05D$m?G-mFl+=H(kS`JXbPKAFNqOc+7EWV;zE_Vp+|+NK zsUAU9WOj&}Q!X*SOq!y7*kT`iUQO5{YHB=ro@D1&H&qS8U4X?6+9iimA7<5|f%6+r z&c((tW<%qHqjUsYs{}gLP>Va^uqk7HY~}IB;Anj0q-FaRH&~ACRX(SNXgiea+N`uM zG;dWM*sGy$J9cz_4B;@ zv3wi+An>K?`2NvMk5Ng+^4l5`7or&`o8YBV&5$EVNEMB6Zq$r)1NLifYNGEgE63Fb z;E04U;~LgvU?>XNX!_AKa9(f|Z9tF7$xCor1fIgiO9U}US_1$I`FTx`w@#hF6o*OQ zfvqZ0tf`P5si{^@>($z0u(~9k?zV>@zRuAe!65XpHJ!%*@OT&aG2r*1FX)Z{xfAa?W#E& zD#74PCWbWW%jX92n9ZCpl+TkaHR^+yys(42*d-d+(de2dh9U%dF!UI<;g1IsTwg$8 z%B18%2Lq>}Qovy2N@8L8_`m?L^2(%gJaIEI2E$VUp4b!7Wbvuue{tTbiGhr>o0fkYk;Dm z$%J#g;~S694GhHL-rzP#@5Xt8$z&0wy5Mv{Tj^;<*RmXFA;R4_iOt)P{O8aasd z(-Zh=aCIOz30pW(j7kFf8HvGgP*4o!RQR=GWuA7$^Mh7;HESzDHCs9(Ywc4~muqDL2-r$C+%v#w46`Mm37p(M)pp3ra{>im1sok zMzRuqQ(CeTD~WPbqA;{;`8bwX<1b04zR6Ov8dKB=`u+Mt0qtJ0>U5!pImoON*=p(~ zkSE->fXRl1n{R%18vVKbmu25W=B0Wp5?m@3#vNYHWP`Czz5Q0mpaHT^ny`b;?_zs+ zxPoG$X4oT$6Fq8@S$&3Z1w}DSo5z2eil7_g8?7EuNM9Sy*d}^gYZ>qE&XD-y?AAJA^e96KgNcf9%{(HX<}D8uq$Z!DF}Eq z=fXZXs#*f9smT5~2_Ij5lrCK$?+ngQ37B!OJTADgR=akc@;L_E&<^BL@>`JSNq0DZ zBA$|w853&9E6F6fA50(CMbHo?+~Z1Y3Y@L}*WK9d8Ea;5qxjbkeCn_-sA>ai0vxEJ z0#UN*a7uc1Sy3lK(iKVpU4D!+6WeQWH;pHp{{~*wUAF)WjQ=LAVCCSl;2)(xwtkL; zb^skO3>270V}ZSUK2{MpbYfn(h;~D>qv1?z;$}Xdb_?BIWkobt1a9Xa|EbZ=( zo4@DyQvEuA1>xOyy3W8s{(%2@rGR+jQ|}~xaZ4pIO?95e-k@|Qmlcsl6GJdUgec{$ z=){`jQez7}JZf1+IkP$l!~hERr`*a;(0kM!7(zj&>!dV+Bg=Z3*Ix{M&pki4ETGAo^ z15*%JFo;=4Fa{Gu3)!t1oqr&zv+DPiN5k zwl$jhRq~{0%~6G(!Uig8lbF=NTQ_h6IBi}$7kV0ZH4*`sjC?qYI6%jbrg6`fe%bl_ z!WA9R_4p_HQk4B+X}`RJC@kY&flRkR7BUW`$+(7rvc`k3A<$G0{2r*66+H@!NcbPd zQ<|wE0ec6+o@Q@xKS*F7DN2D2;d}xUE}~b)@I)0%n9Q$fWwf0aP50!06oKpSAp)~A zmxQsbh~z*F!A?P#una8aoRx~AHz5f(SGAOaUn}_4)Rvv zhyOr|S8Y5*7#YA`1)shABN_zij8I|v1A7mEgHL?}3W0KU=>w-}0x*LY)MofBHx$cx za8%GYI@P8ZsRT7T+*}z8Gr#93ks0?8YEc+3l}W@)+`~l=bpa}4^Fh~1e)D?@<^?I3 zVsH=2_JTVz4L7u&;AZrm-L=>xF(}mpQ+`GS_uqS>M6pMG@1-;nSoUTY!+6!2gN#}1 zGzRGrt!eVq1K91CaC2oUk)z!V|DFZ=AoK?q8xr=iB3f>fMre1xirU?;dFq|m=$SC8 z=QKf1+rgUjG~E=3RVuzoewJR`dYF*mY9r5JMZm7_=_T zR^Ga#75U|jTE7${n6U{_QjMA(lrBZ*HuGDI$-qtwB=&E2cxp6`H<7oqC z#}caBmcSQDdmHCejOS-c$%j&3rb|UxsjOW@X(xY%yysH6b$~W}YJ)x-PjD!u#<{Du zLMVn;L45E7BBc~n)!?+x^BO@ManlNP;}-)PHLINDR&8ol{#lz@B-!ceU5OHFEb*@d282@aA{4 zV@c1azPOu+Ax^Msc9^AA3opUf*epauw`)YNM7K{7eSV7Qh2Gu-@4Jf{l?Wb@mEZ*S zLYj%Fp1Y2et&SaRcY>a?H#!aJ^~#X?u%+p;oK;mhi9FnM!#IJp5@uUD+Kr%0cmzk4 z@qiEGNLzP4riY=|Nu76#557r_%Zjk!c|5f_5z8+U+K9H#a*@#>PB0S?jph(Biy<6Y zNmXeLcPiBf7JpBwStIhzeOn#dvr#>RlO5Ux!o^@ICRFjGm<|$ghwx0z=hKsS?Q4g; zr}+KQ_T1XJo0+kFbvtw$%j6>u%?kxN8`ew2q zeCiOq*Ef?HK}!}MRY&R7_A~06*CNiVezuY2FR5>)1uP$XZ>Et8+3}5zeUyyVz-Cgb zUNweSrGS#_n;*w7)3)+@Z0uOjOhX@C&<2_8Wz3_GM=38HI9RZjVAPPIhFj`}2d;rn zl7#~v{xL%Md@KJCXYT_TRdpr)&txXa0F%ss2}TGIF=&(^Xh4A^m_QQ10!|V#F#8Zb%d*_+r9Ziq zN*r1~>Cu9r_TrRk;M_PZIdCo+*AHAUc_b%saU_>Kp85;!jpX?b*Es5Fl3NwT62}sa zo_&)XIK6py|JgUWpR(&z%D5w>LtVz%#|No@Cx1xC{Kr4u-UGw~6k!*G!#*Cm1tzUWZ0drE$M}vIE_*StVZ0 zXG6ypGxbd#qs&ZQ)X*V&T$RRLGx_3%4%rW`GICXVxyKM#mU)Z}GySTDj%Jl!eXq{- zb_hbNjAWvN2j_M?#Ft#wl^>_u;OT6IpGh90NjadAlRa_#WOpmvfFsf*wWi%pZcl4w z9S@`9Mb&smL&qI_RvO=x@71~K4IOLwu2SC}9$v{h(PK25$)|R#R;m4F>Z?1Jsl*L@ zcC0WHU+*!Nnu+H&bja;#mB!6{H+0;|`!1;r!`0mmEk}`w?s0~ct91_CaZHF<-Qx&l zN?Gda0p&bSTAXdRnDsX52shJjEjPWe1mMrXQA?TpwxA$9&pCJA5jb-FWBJ8q&(C)a z9&)^{9e46tYwSJ&{=5{famjUZ) z7F|_vFbzE!FGR8EaJ9&WfilAkyk{xwV|zZswc|Cy05)Gl&_ld4^lI(ne%Jh_b{hx& z?^_yPn(Q%VQZ)jvGXD4p<2k^oPaJX-ydvHgt`zM6wuh)M{jTZ1>)SyoqAeqxsNM5J zi|zOvdvB0ha)oJpnfU(hByCRk>-NIGZMr&Kwg9IlhZJ|>l%ZL^L$sly>r*8pNdcet zciUafx#SL)+6!OYlpS8Nz+P!QY-TjGxn-#Z*K-8lJKuLM0f0j}6$^guaP4?s0#WJ- zBq!uuqwW3Lm+`e8JZj^T#-YVcruMvo!%d%=t?X(!4AR_w=kzy~p{!~mj@d&Mz>zvM zqgvaqs{=%E{k`P)c}dx+hXZMCe8a>WLKR7Ym&L3u$8^8+>+qJ@ z3HM7muHY`_)p~C9U9VOtvQH?&`%rz6_&H*0OlVc<6_x80kMT9c1NB;C+#P>4(v+G( zG)XB9_-9D-+n*X6aTGZ;chPpui7q^A>$q0?qKZgzOaC_ODm;h1KGa1}rt%Dg=b}+P z1ihdNk9i2{U@6|VVv!Ic*Jtgyw@Q|VcOfzKlr4&?>jl=uS`j>L&J)!&&yAsr+m>Z{ z`@0;<*`*>(NC;c%3k=_aj|yM(&+u6+cGhT0s)4dPB*yQOtv9qVvN&*ev+vZoSB&#o z1NOrgQdxU2NH6?2S%Edt%9v%fAS~PB=50Vod)Um@9?SEchA-%@X&* zTfY+gEUPy;hj>b{Y`?=4k%pc)P+l|D{*vj=IWms>y+l}$Lgn1S)%v_FDgVf;CxZtZ zp;=N`NX3pjL+K$EyY0vA@1MfUMw%qOsw?>6n65q`Q5n-DN8zv0!)KWJ{AkexMy@nc zu&Voq%nD1<^+}ZSro2yzly40!{_`W(E(e)z{Jqmok{*R&XU8fI) z&+IiiEspFVF#b?aiKRVyRWC=SUq!Sr;WQiJAHM|aaxuOW?DfqAP`P-oWjZg$?fjU? zj+1ELSP63eRH$yBZ4D>z&RHNY{Y8xU=rqO1_azaI>Br%=o%YFe-9+8qBI##{^u9`2 z9{bVB~<+16NQY8y1@>yDV{=R<)KzE6rp{t@;*B~Z*3JIZf{*%k$kIR{!%1=`P?VS&DO!ZsdR2g(@%KTN>z+WCp4ddW-$P*0dZJx4%qvV16@o;2gXfB>;!*eg1pSSb&fsm8Jo&bDbm zXJoTlrZP(N`NQLB)ZZZfF9i>gwZJ|$RNSoUi>&HRmN%&^vX~gxFjPlo??r1Lt0ppC za?%UMvRI2`^d`$wq|#U!@Em$x_y|FX?h__BZ8kfsOEjdeZvb1IhAmd_-e z)jSxxS$!DRiS>h6?#~YuuLampaX|eF;Gt_nH!?jc(IKasveSVl&+jl(V(B4dpC-A8 zn@(K5Uxq-eG%07j6p<)_T2y=}Q{q&e*RCHL55MbBKul2yVnrdln8h$f=ZKM*Sf$P< zdrl~?Ds+SK8ormn2au`+JAc_(V%f{zJNzYgm013Xzp)2OEDik4;C&T;8h_97capzc z!pr!p=g*R!o^DOzXV^bm;>&KnC96kDB3NEh`E!g>L1V|IJ9$adqkpE%v;0l#F0nN6 zx062zA}J|J?j5oX6~}hAOVjZ$hv4}2>IQv^s1_R7c=bMef+f6`{OsF2^m+LN*K#qN z?At5LsrA8g*X%h-9NS8cG}%VOqo}FgYtWBYR(WHd4T|m-x*7GFFt+82h4ja`zV)Ld zQ7ZXzDah2hB&%$rY7I!YERpW_e<#I{OxON41;e7zRC(0CkH_QNkjV9KD%VJ$)K(6; zP=5ID#5_}wvA4N;F&O#GswMB;!fX4Z1WK_5os|vx0X9|A<3M{ZRqW$ri2>uYyI^|1 zv@itHM6L7eW>x$-ihow)wK3*exe7b~8L~Eu?JSj+pu3$*UK2lm{PO5%ZD<#mr3uAW z%d-MHRsiR#qwd_$uGQL}8C!qOh3CNFmX;%pI@$D=PU&y}nW%nb>Qz_^)AP_W3;r5!VYe(aGL)Fd1j17e59Mr}({++N zTxK*1HrOK+xm&}6Uh>KI_C|Lo%ls;3ySnhmeP@(0aAEhxxd>2T1Qmtxm5Z6PBy;Dm z%<>h_tY>C@R|raUF~N7wVq2{O3SPm5x7w1zZ|SZ0l_5*;U2L93KW8BaGj+b|0OO5+ zRm(}iV^7i-wwEGz3LvPx*%T(uh~SY*J_ebd+qX!+CdK;o%Adtb(UjHo3D?8FlQajZ zS2B#JuVZG@aihdrq__pN2W5#cU8 zmxpnbQ(r@&ctxN%R%QH>B_f;_$l}=EFboRW3`s!ofSEY5(8y-#8Y$p5HQ)P*5s+7} zx_E?^98KF?kFk(qg9lNfXm`e-w-FMl9tu<(HB(0b^#(K(N6ipB@xLkYeJJ$*DG4`& zL+14y?84*?Dam$dmncYWpCDT2?6!(PEanVBb!^Fv$(C%g%D!v4G5%j-7;&{MM1qnv zePYKbyfSW4ZmPy&Mq{q#uu$G=_Uy|z?(Nwp{^N{2uONSMVhiK5t*QGSf?K0Drl$Qe z1%m_3VAL$!^@2!!kDdLz(V|X5Rhb8*j*vD_orIz(xpEjN+gs(St@Pzih;zAT)(TE@ zM_^nSFoX@R*Quc*Y8iE4t~^-uE4gk!9h*}eOdXmt-i=>hazUY z70ba_;lJzDsG*XqVU?(p2xcX6ioy9_yprge(Fp~xRY|c*{&0_~B(_y(?utKQ!bhbe z&a?bPl{)Hdq~vo!J;Q%2QqcC~=fo1jlvBoTxs)wu{HCR>*qu#7&bt&{x(VjQaPhp$ z_)EhT+xw3@=sJR&$=?V3U3atu0NFK=d(XJHtm*V=zD?#VS1~=Edx3A(j(Q4BtM7NfhuLEf<;B9>}$wzKm9`v{Pm;FjwJ6(BL&vBNj|yqcev9BPsga-$v-Iv4B!47TVM8+}V z=IHkCJzXW@o5%NlqVQYHR3nC+-dpgBTES7n*^e2`zkcbZm#WVGsp~^ql`lIp-Yb?% zz$S2=pLYK^-Tp69C$!40mVnZhDVVELFnWwGboR_-5+PvSo+x*>88H&97e@u_j|!}v ziR@od*+-&Gz#2@uZ@LK!;$e~6{*M~`*`XFB<4=-3K(Xq9@MX~)x z%P~37spc`%U3UW{_ueLI_}V3EpzQu+sl>WRST?rNWvk8RJ(b8?aEZLCUJBUl*i%9# z@)pJN{xy;JtatR5L6*6=0P=01YU99kNtDeV77hxleEFBh@v`?4xz&iIW)Z^<3e$+6 zGG06K>{iPkWv=6tv8(wpl1e4e)t%UUOWi$8W)`DV0pJ8E@sPNS`Z@TQfTBP_F_LO1 zDwm?}y;#&7tI>a@*%q^?-CromsFB!_MG>ZF%7&%1|H(wndsXt0Q&qb#Gx7)-8i~~U zB~t5YA}pxnmA<^JIC9rsD!F2qBsY1bK;%ngy5q9+LHeVMDU~{gBx8_@y$g)c|WyvMZ$M?*IJ|pS7llJ7B z^qL!^*LxGiEWJcA?X47plvTnhtb=%BhhLzhJ`X{u)7hCUT*U3j{Qe#}5nQAt_YhFk ze<1Ml+Na7i2PdrO;R)g9{sSeyEZ6Lui;2Ib|A1A+FDm$mDl+mQz|4ZT_OpCo8z_4&8~?UeN6C`g{2%vN@=G|EG!f;t zqog8mE?*m$c=i9SJove7%OR8ED|_%E(Nhw=*0(!>h(*<-Q>x$q4D=OIBL;!kKFjz! zFvH^HT4XkiELujf#ldF7Bc01~-wJl#4bT}8K}W_c{fK@ba4OJf>3?(5;oOqIsX~IU zv;?|l^`Ds3368GNkK|SaPUYBV^}k8JN%{fOxdW$`s3atqtRI=w893$0of}J%t&-RS zr^@3=rkF{Ra&L_#nW~al1E=Q4lT4%8S(7>|b8oJ)&+?s&x0xE}7!_5j-F?eMmd8}8 zWv#3|Xx|xW-!43=FX3WmOMsUdT6VFegchSR_pm{^ZvW27(ASsu?~=!w{ZGkbb+Kh9 zai#k^<*Q=0!VW8DILx3==YUL2%JhOwk=kt($z`RLL91Y~7l#yOJ3&v+izXVQw5a{B}pTc);?x~;G z+E>!>8Tx_TBCrO{ZoS;0Cl&B=H+i&OlTD}AE zBJ?BF3+4#FPU?nCvjV5y_5`}Bs_4f8-|aN9@7pXs#JPAkDT9M4+^DKv#<`k*u3pkz z&AZhLTlW8|UfApYzIt)7AmJs^Gk1c|0`0nDiyLIoFF7V!=^pn09wsZ=vCGM8UW%9T`;*`gR1PTAL+-#YCK-!g?GyQ0stTIi? zvrq4iQC^m!yuig2G4gdMXmg@UkrX&}t184C1S4)tW*$5ze#0*Q|AL+n?c{@ zk;|mv5-k03wS5+eFBjHfrjK=aBK;&Yy#!18TU7c#wrPnERmzT125z#cK(7$FuP0GImpkF0NF#xS7AB4x!v(Fw+eGV=TNzx zQ(un#7WJhTuDk8~29Tfp$@^4X(z9pOm(nZmw(d35*ItQ3JAhTdT=~ha;oz#6sk)(T zQ`Py|N@;%nNNLsNp$WBs>w)J|Amub!RInZp0bcK;l?|*g^0&G8E)#8i(?MAvbz?v= z)Nhvx1AkA$7tCsds@hRki4EKa?b>l8wbdAFIh7l(;a=e?qmow``&@mXspkUgBNjiw z7wrv&gDkw<0>sAUdXIio376_V6w|w`$DF%akIhL`o}wxrX_|`$9;eS{bBbk8v%K}l+knJA&s)==m)TufVp>22C3d&O{y^R~ zNRCH%Ln$+7&lbXi=WMQ)9TM_Lu5fjIY|G(|{>cAr8vMV0z`9AB)ik&mRfaYd9aXHTEjw zp39KL%BK;t+q&n%m1ANi67w;XLpj6H@db|hL zU82r#c?$NW<3aouIUJwS_bTPa#(eX40V6h+w>AyRNOZM4n5^({nQO;Z-onr4o*+Zm z?|KeNM0C{YmABsD$)iPqS*C#dqSWIB=b2(h;2qOgSJb zvKYkM?<->ZF@E&V>Qd(fE?ZRAQE{o874-s_Qa4$BZx2^DG2q4D;_8_%Q;F@v2DU{Q zSoyBtZ_deP(#XTYvDJW@%)1O{@T7A$CY`GwsovAk3Ffs5x4GULlyv9)S*^>^nt?V1o+`u4BupZRLa- z@%44erhjaFf?Cv|ha<8l9_k=N; zD~<1^3pHQ4H{My$T#+N%H#fGuczuZ|5f|;$k#plo{~p>vA3#hwN_Q^U0Ll# zy7zvmyiQBqw_D;C@7pDh!UjB_x!wC7<>S8V!!>x{VXd;T$^(2$MLkrK!%u0R@oQ5Z z&d0)Q(b(=JJp%Du6c^!|6mON0W`eI|Bnat+hZG@|KnP~{f3!ppm(`cYsV(qgb?x{D zZ*A+)3B$EoSLgb)+52~bIc2F3=G$E0sm0xA%4q1K!?#bLfD^c}7j`u(ZnGuVchSHB z1L2gOGN*5LX?U&Ew|`f>%pv8S*B@6rC%$5|F<=(Abbk88#$<6WYEz|`TkP6uT-}ad zv_{dphZl{c_(kV*`e-HNcKTae&(qtVnOa9Jd5`Q8Dd+PW@cFn_=w~a~i9y--bx75e zFkH>aiUo^w;c7ky6`0b4tN9naH*h=T16NTp2+nG>Y`V^uo!}u~T`c$?RVvndBQt%L zM9L+XPPr#T)xw=}FMJl`E&AW^)WTL{+r%ngZla86snj;=%7-h+#Zj!g?;8{Wpsa4or^jT)`izNZM@ZQr|v=2L}mbNx&sH~cs&y+fF~*ozEd>Tj1w_K{5eB0t2| zuydo`))TTe1dCqs0@>eDC5`M_Q^(ktY%WtOjembwIE-xPjbU|# zo~~qjJ}ak^8Syc?{89y#<$A!#kVP0K4#Cq!H4XYK*(zuVexBx)H73*%bL05im>WlP zgXnN|EvItA&wnRyHP!^^hUw;I6EM`mAbzMSC)-rzTpZ}Z&r&{p!aqZ)+S?AP4TMRD zI}J1j_FQYAYp(M~)B#gi{ZET5!V9F9D?T8ni4VxxYBOU>gZ|qp<^R!R{QWJ8CULTw zCK~_aeGK}xZx7IVxX-jbIsDV7h@Mk4n5<|s1VcS#xnEM=T*U+LGAg=N@9r|(!OthS z9;{#rr6FP8Cu$RZHID*0@sP`3UjIQWk9?)W%&poT_(ko{MG?9>cLoq&vpcQ_y?VE) z2FykQNb%}_E3{~+lq|b znErF|DpUV?oBxl?;L=4smK^T79dNqB1nvRk407aH=BkZjLB%h$rhJ z$+0AG%B@n7<`(@J3Y>Qxfm3r;D$hR^zys&NxYaOh-Yq5 zuu03kx4RKkq3mutPTS-ejyj{a;?VKe? zt=7(2N?5IZoz5;Qi)@s~lE~NOu_EFlQ6QFRCy7=_a8;yI9@UXsM9pX-m;zZCn98lbKvy}TrIN73O!#`B>vln| z1O+5$hAcEFH0el8MY<%{RDhQCy+lFi)34Ew>aU(X4xbIa%h*loI+Z-`h<>c=R8rHs zon&T>);x=+be8f>E8`7XU7=aqcNAphyAN*DlDq=vU=V$Ve0l=aeS*izGT%wJNey9)A}R z?o@PdWPv=s9Jw(@sWW))g1Tf#cV472QRfz!>f9nzohu_7b?&>;=lY?u;2Eq=e>FZB z8P+mn?WX?rcY;-O#0D;=Sz@N4@Fce8Cut4CVi_q z-#s5Vuvu6{MBUGQQQLbpoPzYXzzxkDGByOtc#g%f9I-JII2FsW7#8WesIR|Z-yBK1 z_-U$h%SR*7IBDWMSh0{Q~>&v1dxjRwh^Yaz)jkf4R91vR#i~kC>^6Wnt&~n(% z(s1UQ!lwA=Z z<0>FW5(lVM#4ug1gYK!vqiIq1&cB{6vF!h_#FEM1zeP$cEB;)9iBOWASwRfIWpd!f zv;$Y(4866=v=QHFa#F@w(CMpXFt?$?p(OC&K#@o|KAG=}|#^gtsrV#vB_WX7an8SfY^BL^%Ojm(Ib-61tz zIa)@vamgby+J|K{ETe$R>D8B%G|1g(7u%RTEaT5c%Lrn>J2E52QwdPDZ;U`ps>i4w znJIN>rgF{!9d4^gZCjNBi4?q2+2&1V2~;6B=&rI=5z^*Osx%W>+tP7h>6@ESrhaFx zbah^2jaoK&?QIpwUGF+<$0V;DxUb;qdI>l#1YpJxn1nfbo0o&_4%-oVv&q{b^;zj_ zP82>*6+Y?;X}CkNO7>}-7_M>Iy>>50w{kpzLaRU3_yol>&RfQzmo-nG$SUpJm~Hu3 zKjrT~iTIsZ0pQpDxQ-hZQ~p1qwsB?A!L@q$$kFe0>$f}g%^AASp?mB)ZUZrxL@XCy z`0QwNzs3N&M<;XxlgyLTy8d!S*Pq1$e%D9iL?zbi34Y+h34ZX8>caSwtUXj_{W#1c zJvivxG$!o)uY<7n$Yd|WKg0JBuvHmz3jiE}p5-ju!yP;Muq~hFW;OM0NQEg>)l`eW z^|`gaC&_~TSF*5p2p-Ha!H>I}RGCPbBU#MM-df*5mFcA$zmTa)jLnp5|FiuyVjP-Z z$xY7+rd?**BG!*)1+2#e{T`!Xrec3_r?x{*jI{59X>mx@pApSGd9swCrbz)(bRv3tl$#c-+qRGw@>$$>Dzv%X_M5_k0Hc&C5P7LkFq#=Kft=ZBjlPOcodhFad4no_wCPq&GQuy#)&qzX9dKmkP8whu35l1SCjl9* zFX@DJ2m(1eE3iN{9({2Jd!y>=iY2fz5(Wou!*wqyWA03}3iQkN$@nu)XGG;z|I zz{vuYe$=U0`9sO!x=ZbD{dN5}fp^7GLx$XOfarJCF}lpGx>0?{i-AVCo1X9 z{K=hHb$M!|nVZc%xXvS8@I<1zBeO5r1!QU^Q><1+)lH{!K%^Y6s)x%2tLuDA*xt>l4c9gxbzB zu2dms!YePBd)csr!jCsCX*w^vyf}9JHtIRhl*3(<_f2kF>S*rVlmY+BVNB$Tnh5k- zLJLE4lq-VpmYeM}e`D*T()+(d2b0LYuC5#XQbx7c91E2Ut%R(n+}r+|67)>v4B@JI z#AngbUp2GEW4MEeqdU@|D&v)J069lIz4#-ERVa3D4o|zpbFu^lRHY}Hc`qY^bUBPO zhqo%4smZs1o6c=xUVF%6PdGBm=$83`J(0(fE#G!O;|qNMQA_ZZB*4FC8JJv=>j+sx zmG+?wn)6GF0>s8M*MsRop0Tu)q0-N&D(vyEWI*Ru8X4t+5eX=2iU!WUJYoAad!&0C zq@SNpZD4wyAU_kum?KMmCdp5Bqz0(n0PO?l$TBXC%hytZn=?FHIvez584XQc8^{da z8+4DmVQ~XPaRL!e37be59xcEzAzY2Mf--ft1c*l&2Y|UfmC?*&OmcLDLR}T;67;OE zhak*W3O+nW3L>?h_9R1`R>(YcRaXoN_-m=IHF^frlsJLZ8SB^d(lSuc34!31l+J+4 zXHuU-W`!6Hnk0xNjPXyX@MV;XpbuPjRP-E?u(+aGz zTV z@xeW6aR}B#fbsZz322{GWsO=h+deJd5wenzXWkFntykpG{>`julfzyIOWIe^At#4d zxy3Pr=#|42S+dZDP-_x1^744SpiRjl9-}4(kgq5K$@KpY62IyBmojC-jsYX2BjZWv zB%{__5RK6n7Xa4AWVzayD2E)W=mp2NQ9mvW$8{>w=Zc+)5V#C*1RMD0I@v%|yc;_~ z8GgdgRhTdUry7t|B7erE4O{T#C|_}?RH;Kry6JQl(~O+E$>9k!Cup$O$W)ExRH2qZ z*lQ}x8V~bd!8)qBQ=3pUTT3rmD~I{H*;&fz4ytvvbz24tYa9I{Yx3KbjOoC-aQJ#$ z;;A5o8xR(1;x)`3ekfP0ppf2VmkF>-U}lh)BVK&?X_cTc$?JOp<^@Z28;#ef*-0eO zw}lY!BG$-x35hq-7pXYP&WNGMp^D}@EAUt4p+YgmQel-UOHcBT$vC?w`QLaTINwco z0zujjrMx&8^rz!lCzTbx-e{lPNzqv)zL!8!Wyfx*cFI0AJ$Q`YTpfc=TgVPGtlM{x zR8__^iSX%-HbBYpbrS9|eqe_8CJSqpe^foz`~pminq%TXn7!Ek_7Cu589Qw2YI#m% z2B=Mq32&%aVvQ3&5TX%Z2(wMZ`d$(!KQ26Kso#_QBH-=La*_3Jj{P3mlhB#CMBWb6Bi4bCyDzW0_YNz4?m6)TjDXUR}vh@ zemf+ie<{w@X}c-z??Wu3t`VGLDA)@X*x4r73Qk!JcI#C!hlw!7pq)x&jB;fu{uAyU+^(>+G&^a1=Hc( z64fr{M3P^ScaPDl)@&5-YW@Tagg57?S+DVWb3&?-67|oA7H51}wF>o^KX1PvbGUZk zbM>hoxov2kc0n;*p~krUpA=VMFm2c;ne`Xj+-*k|PV{FlJgQ}ICk7v0t3N&1nH20v zT6old66YStI7~f(2V`yjzPIUs|ED~zmb<~2YP83AGmcDG%LJCvf)qVX@KI^3G7%A) zBA-J$(Z6sA?Op6dRU*!UuWdJ}QOH-Y_!qFKXG*_R8N1Y40kK_md#u;e&F&BXL^>eR z54Xf2)3*O_`rr==sQ;gR@LgpIBImGI#9QA9jue&ooAgYF%5BbUP#M2i;sQ+wi9(DP%YmBFWquTg)erdMZ>rDrxk=P5MoFSV|myk#Bxs0bCltN@y>{V}+ zX3@JTOA>YKy1*Wdz=qf z^HD)in#lco4yTne8#APeVX}nB_*EJ~LI|-0bHhp?^|uvJ@v3u^E=# z!`;G`=f)5d`DR?k$Y#w!w30I_jZctH%rYPocF2^hp?4`1pmSb4L&Od4Pbvz0zR-WO zl-ZUxmhz}^NL3rS!niDV>T?p~Pp8(Yv-zI(+&I2_RNrQc%Z!E;MU90ovc_|BS_sR6 zmVQ!aTf!T1v;9}M-wBc+lkttQtI2{lsSNrFlq9LDg%Rr#u?IpqJx>2vHen~g8p0JP zg9B?_4~i-V?exw^+@&}=_+EeqU}X2O?DQBcW*G{0#pxw9&g(($2wo3nFYfDmYXi+Ql5x!mdFoq@0yK(_YS+WrEJlZc^L@$?+M~IJ<$bMuwQn|o%Q7`1o5&%IsT1Z>ZpkT+ z{2w0c%OiKjNyDu+gt#0_$y1Jq%OnTr;J(;4ke^eu+wYsLwv#;7#y4OBm?C`2%p9MW zYt%S2wq_H9J1oQq-KaMHuY8`6wXnU7Yu&`EbtwjzEI+g8@5=ZZZyDyFljBNFN1d$k zI^lDslyhRTfIsRQ?`&^0fKGBu)1L%GL3~%LffTy}@13tDxc_Wd%WYr}9|AI5jNdZR zw#z64$07+oBS_Osq|Ik>b`h9w-Y&pAnE>WXmj))rMiyu6{+d=ZQklGXnCA8>%BAx7 zQp%?#YUrCJ%^h_K$3iLa{?7V!ftTE{N#R7SAPxbx)qj`iZnorqRr!x=FID-5|Dp07 zQh8Fmav5OlJ597LVK;}{l(fR|{nj{LjmOD}9oudLn`%LI#MQ307;#nBX7>b7LXw)T zB63V_y0i7zM46wBuNvCLh{zF6*XjS#FtnZaN_Th?$a?;YOVWnk8+bp+G!=Ns7KfK5 zMRudD$`FJ7I4KVv|AQ9%@6?`yaFH5qyUfyk{$5+&DaH3Pa@zRLii(e6b4H?kD=Mu_?3 zAElAzYC1+98=a+=f8_5U#-ZNl`2+qecB||Y^G`jM*Ra^P&5EU>`9AvZe;X+!4xcWS zKG9?JoMFhP?N;M$xc*Gd&+1+wud(6hs+q8>Ts`QrP|oGvKykU_8XS_ z`+HJ`?=4EzFcwGCX$O58Jei8h2``zou9j&Gcb4qg1nX(f14h9|Z7Jbx)>dn~eCaO- z=3@y{QraP3ZIw}6TFM)t{tw%q=FMXiAgY@@^m?2pNwW0TvF-9==DwQTDp=)~HeHD3r9V>&7|HTt zxc@zZPrR<_ne@APJ@zEJ(-Onr~m`4q7S3{NA1l0$sSstS*7Up}pHjd$GmuQyR zFkRuxk6EWO+j1MY@cjYt4C8KtwqJT={aSD%Dv@>4O@V*q& zoxAm7)mQNqRBW~Kyc#$|7YXssC{yJMl~oz@Rk^G<6k^p#q8B=(zz#_P4_4Ua>Kj*! zNKmX1h78F5He2}b69e*d22aeHl4=4T1yqSMk2ig0C-0UoFKe`_5QTlZF-9scd1AzM zaR%QT54t_kF%MjJ33?NHfe`lzCAGPhwmRZ`z}0fUtku<4ZU5q|9RI9Xg_D&wQ6{p< zYNS^i%ay$8klU4H*`yjBV;SS(EaTU4hBFGw7?u&+A6LtASp`21XnNW)mcHTDR%?|p z5y^@{r*I2zP+OOBb6LE~5gGodBp18t5i(4TH6UP?vq$m{g;?qP`%ANO+8?E6SF@<( zY2_HbS#?_^Jy=FEbQG$VDnaAUj$Kr5ztbF4tw?}EZ8$W7XJXc3 zB}L0CDvdTHu;8xyayU@o=g#i?WKK|N6g@m%9|!;I9BT1OPB` z9SeLR;4iLAi>3adqb0JiT`<+sx$RoLSa3Bohp4uOd(3VU>?*O;jfmWng@RnS-HW!kL&4`7c`Y&5wADSXC z4oSx~dIW4sY+svnJj6w4;n9#HN7uK;P*||bR`6D(xGyxeAnqttNnyl4F;TK2usCrJ zaW!fx3=_);wTg(#k7948)Z*pLbR|kO9cqiU64?xsDoIh$U)ZBL+sdu#3{cTRO>S^@ zE4;U@$cwUS)wtnftv_R#@&VQ%ZR@e;SyYO`*HO_7B>A%o|KMu*4J6Q0o^-v6DNzag zo+V7~lwzJUr|25vGT0}?%0Qafprn&h!;M5T2zgoowJ9uMw)Fhl2SBe z`;|J!!QDkdnf}rm<7=wG1hm81f*5387bA^K)9L{&T`Y&9m|?`m#~#byU1Ul-k?ZZq z$98*3B?7ghr!05OLVm{1=4TxH2g{Iwv9rLpIoC!WQ2Wsic697)3gH^M&C2#+X-lX6 zsphE(`+ghz{KicS;W^*ioUIoA8+gdlvT%++yUogqI;ZG*e@0s=ul}^2l|LryrWzSX??p_xa6=Nwy-_d4iP{q>p0ZsmH} zEy>Sb)~Db=x*JusxdNxA!cKu2)&2k4`SN+{fR)@W<||6^Foye~5>P_t9R6SCYGI^suev zX}r=W!d^6Ug<6zoa=$kIA1OCz%+WHIX=9i9)Aum$Ep_J2&~@En7_w9HCrSP(!}B}n zc=o{jNl(op)y02Jr*~0?s?^e$;yZyz=rR6;_>0w+SWx+Vodi`HuMy;XS_H-?N>i#F}#mddj@z4N2nsZ z>%G)aMNX&!lahKCi?OmW?>H1?XIHvRtv?&B90SG#0Mgqs1JtD#^xL{Fd%eEtvp@X& zU#y!Z-j|94oJGIAKTYf~3Oaj*>@D3*pVcqBDe1n6n^KDdeLs3_V;Ze<^l~Yb98>I` zB{}fI@H;6&S<-;;LH1r5(U{Swtx4+Ve4G%!fKldQ2ls9oNgt$pj62mr$BrpVkz6Py zd)4+zv;=nw8Y=9?Qm$)<%uIe~(;}(Owc|;?iUlgygF9mp0-Ec=9ee?vlgj1NgbB*b ze3qD{nuaLoW#d^Q>X<)auaZ<*6`Dd<;81(bu7q zcy>61$|-HYH*7RBXGC@yE>{aVD~DxF2^ZC2coib{@~d&&_M#1GgYx z{Tqm+?q=%d^2R~6m`F&fDi@f@E_h|;z%SQ^%QCXtoT-R_etRp{EUk{kg|BbyV?xSa z*v;=0f9b+*f3cd(aHoA{K$*T+)}?c$2&qX<^0j z@LlcO0GUPKkZlJo&l~$<&s2tMqnP>ZBo&W`c&LIUuL(qED`5)Ig3kQ{AM?wd&}MaS zvd}KgqEg8hzvMSI?yHq)tXH2R^SHVOi&>t;*t!8~GOy{@+TLE8v zzrf$(gBj7h;4N;&>V;3Mt6co!jg_df8O{#L5QNV$&E@r1WN?U?*2!jC5@6?3dW;=j zOh~ZM94(rF-F!6Dp&Buyqza+!8}te>x|*a{xW#Zynekw@Hi^>Btu;5dS&F55@xA;q zS+UEWJAo8gEz#%X>aG_Ma@nTk-D!D&>CnOf>r5=JW1@;Srs=5QA^2+tr&`C-3?)Oj zyTQ1l3E5mV!5j*?oCH(7oLUXM7tPa#h#rQOr>%4k2i)=pp2p2Z>suuj{ka!G>bD%BpCCsV&Y% zU?QIA8=!4^^tW`5*djZ7lLbLi3S03qK4@wXTjX{LCecD_%&7GJm1!92Vd~NH=(*7f zb*n-d)q-~^P>LU3=#UXzqo0;5kjfq2P`ME*KN&7}_m-a)cHjw@pN#sQz2)yCR&4he zTXTdlIioAz*UxN*mQMz9ERi%4FyYFvzgk8{kL}U-imbCcFJ0z+?S%r!;$~yx9RElAFy_}+y5GB6e^cM;(9bI4ls9ch^+Db5 z{Pf3d6?mgrxHP)SuGyC_KYLv7T2sINFc$Wwu|?VH6wepUdqGDqimM=5x#-+bIGCi> z2M05?y5QhME?XRQX}5}}W6mep@!Bvr&eie&DZR#L{I+z~Y2VbBITqZDC!wDb5CVId zp1ZJ_>U4%Ps=^uHJ4UMt54eI46B~Jhg8ezc;#M$V@n25!%4V{-&U_MD3gT2Sw?kr9 zth_hX?@0Fj%%$CkOG#9X8L4BpA zDtfH0(R%v{*5Lu_G2R2WtiU;uyll5FakYF-Y+!rRdRL2xioTL- z#3k0Ug=9WcSNLgN%#m}?%-&G>1y{428we~abT$7cFTLeXDf_u1>H~G<7Z3vrj4iko zV$?8#)A+i6CU$$}7wWY1Xt^`k?QA-~fz;bxsqht1lh^pc0%{tlYl+tRlPTC=7u@Ph z-aflF+_ITLh^^p9D9!^<6w8;z4D`@y92FO6p>pDlhz#W4sLbeoJrOy1^s>UsIE4Pt@hL!YhY$_JSU^@Q*F~e!6Wz14QjKa zH^-`0XKCt$z_Vf@)kYPCNRU7I%JK^l0Vmk&T+$T1R~p(?5M8kKf;QP$3aX;>RFP+l zZOLQ_70Xw|wP35GuMq%^T#|55u&0mhs;Hs@R`M1(@3PeqE;nl7PiH*gmbJtx9Q>5@ z3J0#{LnMsF7|&sBRN^sw%rkYNayo)e+%55Qw}-P|*z&E#maY$y8dLNKr20^~L$`&> zPlxT>!}jvWi42tw2qW|u_k+OpM^wm#A+>Ip&wy5W8&h1rDnApl30P78fU#IGUXI0D zPB5C}PwtSscvRx;QQo58pHF>s*j3OqU1*kJ+z*&~`RO{G8 zFfSS&X^9E0>cVybTn<<@;)rIQ-|eeJ{53Z7Q`aF;fgCVh!pr_Lq2}m3A<#yfiGAZ? zu(nTPL7n~wMTW7MAKpwCZFB~EoDi=6CPA)`E38>Pfq^O_s<=~OBf?G2r-0qV?INoVYH^XaX{9Y|t z_1-$wp(3?9TcX=0dBa++JGxPB6^!y`xFywXb^g=!>jin{Q1A(FY=lew0?aa_QB_+C zn%8VJuhTG9$41MFlZoB{$r#hm3o7ck zK*`p+!1?R7)hxFCj>udht^N!NUK}{TUMu#9l0qg#^~%=;@JTAlb$6`{&w z#v+weU_9f-cxF+x(S`=94wZ5W#E#M5H~B2=t=o9Ho)RdUU+j0)R%7>G8lw;VIP};f zuj+Utm~WMX8nS|k&U;@*IEIe~L=U>VWd=RDX*xl6gY7<%3H%cmpi^MdlCblXCt-hJ z!fVgng}s89O|nz#&n%pm&G)8TyvF*arZ6$L9z{2}M$lsWLvw`hbp<~-6R|bA>kH>O zLyIk&rs+Lh2FIq3Rhq?4jik|hTcfo;*duAZh>-JgDAruR)C)CL${++2cc}WM>WNXCI0!l6_I z$%L0#aeKl5+T=vyfE&1eWiO3X>4)eq`RqF9a6NOpzsze5)NAR1dj>77D=)N`e~#cW zCUDQ^me%qMh#29OV`cG)dP%{;Es9UCmYPM0nsm4uc0Bf~a;K`a>GS|-7e?c(6{q++ zZl-b>s-_#9;5`>Ct6V?hcGh*wEdi#1aEpV9#r7#vhQ8IU_sr}rc;)Qb5_T9i&1Uq< z0nu}m2t7tuUI>2GX%BwYVGnM-U~xV4HsQj!vS_G2C(?P`aQ&>e*47Q(h-L)Lgw_q% z2KDj*Te-WihZ$zmI94n*8N!dY88f%K3(s#HS6v$m+4^U=Na5Cj+WXRES~;$2bw)a? z4bfCkivIG1X@SFuoL%q9aKs5^~|d z#$u|hwsoGZN6 z>~}|3**A~X(_PP4OL4oJ>NO(OP^~PXC$^?8EgGvOlhpra;2O-JIWV`b8yNf_7rYfY z(;oN*!>$n-s@|Wf_6Q>>g*{tS^_~uiX=FHE<)y5SJ7Fv`RQ_S=GEqQS15#SE2oWO=Q=+xR#M{#a~>z2G#jZwd9vkO~$TF_^jcnz=+ogntxx z>OkvCM+2y6fJ-cNJ#(yohb+lhowrq5OW7Nn;`&vm>zP-&PCCXNSWxcN#z!2kUmaUe zb&R89kn_v~a_;i%v8%c$mkmMY>myoYn|0vi{i8ks7W~5>n)x&}uQ!*~T-EMmb0h_9O1aEPA3-ZGKm|~dwcA5B z$*TU0n`#u>>TWC{$SHruamKf_GPXwdkMSDcmP+v#VO+%vT}bfepN zgVN8QsH>mcN!QeOt4%j&!CSQ`gmCO}$`&}6~y9c}RL>mDZPHavT7$e7dWjI(D)%qWq=uh3t%UlgHw`|;ct>kBc#NliT(xmnbx@rjHuVh|u?=S{oDOR( zz8Xw~F-wNh^;KERTcV*=_HFK348Iq#y#wmtw2=bYikql+>qmuwoQgA$u>DXZd5;@8 zpufbPqop+_HF6$hyXtj-bF{5=v|_~3Xk`vxFGWTs#fx09)w!PY-E;yL=;aQz-5hZ^ z*}!v3@53%-{>C^2@|KmDe~Qc%1EsEq{v8wq2kvk^+%7MjIem`_PS$Z@0W)5sweX$# ztuq$PQ$CEwF?IfpL&?YzW0f^>oBj5ydLUH0-W|Cob`GMuYXAx0P=DF2)_~>;+%pyd zueIFKx^B$vA_0uCv@*~1AYb6!pwTAtzk}uWJORvjR5djRn)pwwKT=%JuntY*_jA`X zD=!GM>x$1{UW9Ll@vB-uJ%i#)mXQ+h-85D{Xdnl?M&9j$n=ED03mr0A5;7gAP-{{B zwv6Dpa@RwLX=&3rop!q(7FE8!iBm;eFxwxu?WStIr_uS?nzQGtZHM%p$LiOd9c+0e zRO{ZF8a&`!&WkGH!67AlQ%b0H_jlR2`OMJxW@#d041 zAItG?(NifR!x5@+Y#ECZFumoKExrg6?^b)uD_iSD2GAB62N^i+IS{)QnGGT^mQ%9u zt784OoR-7e9b5B)n{zDNrnlz}Nt8>Xx=6apFkmw?I2*^HZYX!uu_t1K+(lI;eJuLE zMV76pteGZ&A)|^K^_1ekUu~9cw-;|8cVYY1%9+Umf{2X*!jCC2Se#1;lhGMh^PAM> zHNub*fSF5H1)hw?3bf+??YmkRV6Ua}z=>M3e(tfeQCkH&1rA=;6YaHc9TPlI#M4aCnDyA%b9J@~ zhe~ozQaHBadx}RQLEYJN`k|J?p_Ptp)AWk0##CEZ9l1hY5p1n6I{D2OuV~#{.A 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 b2p0%5gwup6!V`ocLPXfTb}8`pg#!N%y-P#P diff --git a/nzb.ico b/nzb.ico new file mode 100644 index 0000000000000000000000000000000000000000..c808b052b73afe4449c02a646c2e373749052ec3 GIT binary patch literal 96689 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 M^=4Gj1M>X;4|XZQyZ`_I literal 0 HcmV?d00001 diff --git a/osx/par2/LICENSE b/osx/par2/LICENSE new file mode 100644 index 0000000..1bed972 --- /dev/null +++ b/osx/par2/LICENSE @@ -0,0 +1,10 @@ +par2SL version 1.0, Copyright (C) 2003 Peter Brian Clements. +Adapted for use with MacPar deLuxe by Gerard Putter. + +This program is compatible with Mac OS X Snow Leopard or later. +It uses Grand Central Dispatch to optimize the speed and processor load. + +This is free software, and you are welcome to redistribute it and/or modify +it under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. See COPYING for details. \ No newline at end of file diff --git a/osx/par2/par2-classic b/osx/par2/par2-classic new file mode 100755 index 0000000000000000000000000000000000000000..c27ea45be0e08cabac3b7f985285610181e7b512 GIT binary patch literal 955376 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¥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 z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs> zC<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%I zfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs> zC<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%I zfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs> zC<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%I zfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFkgJ6oGY1 zJ6P8vEJX+)lp+)%oQW_Lp*KPX!nc=qu=XIli?9LVW`xTTE<>1yFb!b@!XShUguP2T zSZ^b|j_?G+8iZPe8ibh$=OOe(I0~U@aR+NB!ghqm5gtak9pMIqRR~KE<|15za4y0* z2%UghHw5p@4pw1v$N!@kYT=52BA^H;0*Zhlpa>`eihv@Z2q*%I!2c=)ctV}V+^KVPi>}H3CQL+m2Q@(*NDjTK6^1=@Ix__uowGU`+?FALZKdJD|V+M-XU-GpL9n zpa>`eihv@Z2q*%IfFhs>C<2PW|8EF*pgFTsH>(TI*SnZ_2IAdK+(O)ocsj4P<8KJl zyC8yV?&q7h2l2Tko`LxFCf)_{MicLb_){j{9r3qJyeHycns_h7yQbOty@+R|cf}{U z;^nS*t;CT9zZ+cfyIk={T=Fn4s(-gD{-qsHr=E2DhYd)vtW#a_vt985SG?F2uXe?M z>5Bi>72n{BZ*s-oamBxtxFt4phjXBU5x4{)sF8FIW7?LtI$7;-g*hOI`8RuJ}e*{C!uv*%cpwTS}a^SSE2BhihH&TU;`) zx#EZ8<`gIIxvuz?uK3FmUoP0b;flZOivQge-y?Aw|L4u6Ttj9(KjAaK&p~@dj7ikNOuQOd$}K zRWlm@`Xh`&xBvman)ZZ#luVGtFl-%*a2&!<5q^enJc1YD1ccrQKS#(y=!0+~!bu2y z5%9}B8UIc}I29oqVF1EFgh2>{5l%zk+%y#7bOiiz&%nQ72*VL_5Y9vxfp8YW*$C$# z6tE?j-yxLYRy&72!gJX$Th~ zT#RrD!gPcg2$v$vMDQWZLMTBfMVO5+2VpKk8Nxh-`3U6*_~lmMUnN2Sp$g$LgdjpS zLI@#@umE8p!XgCxau?&@5`@bUmLgn%a3#Vrgc=0?iVLRY1?QBQ;{vO=xVS19m{aMi z@FQL^x7fePUlI=ai|6`%rT(B*T;dCrFtx;A6)Fo<76*N0)eudYTwERUg<5A8mzDY} zLuH}GP*ENznP2QH_XR78gZ`>=B$Wn=D|{%fG7u`8y|}m(HWb^YC2%SO#nt{w7+9T@ zsVWc*A!oTi~hk^w1XTz2>?7nB79l@>54 z@s};|7gzf#s>=P<7QhUKtn9$7c_qNgS6wYo6c-fbg+qZLD(I{B7X||5sYFKmLcUb# zW6H|?V||sS<^Gnq6MU7vIcWG4@lWMTTxASp+SRC zWUx4dt`tH-e*Vyf>=pU8cu}CdI=@_UO4Ke%qUa&8tEhU=;Nl6zX#e@e&{LYvUd-en zsAbilf#8+;t3$!S;`~YH7x_>?9Dh)8QE|v0tSGDWmB(=g4+O_wQ59Ou?ufn|2*MK_ zk<)!uRp>kdhSBFFp%ipOG2wK$Y1y30cqu!{C3Qy7U+oVr@aLPlRgW6P9P!rLX%$I{ zEbYN~ohG2DFCxS}D&Fk$kbV(F8mzCv-j(sKKVd6HmOF605Do3D75 ze@pNg#Yl_)-wi zD7YQ;PG*J#n+V+v1$RLL1_cUAySTMm`~U&b#j3lwwJxn#p<;^_D{g583(Wubo_lXH z35nI+{r{hR{*QUM+p2uxN9CzI&TZ{(;|+p@0ctAbxafLbWF2oCf*0ePx=Nf2eU809ZjY0i{?oBl0~x?W8W6vwcxJr;AnjL_az0sq`;RH z_>ux&Qs7Gpd`W>XDexr)zNEmH6!?+?|8G#>{D+_Z8|_|Zx9#G7iBjo1SioGyv%y7B zw7l?JqbHBPMHW3;|JVc2^&j&{B1>c%B^=I_j3WiiA4 zyRiOMN0jUS)k^g|LJ_x9F5dP?8_d{e-nD>f=Djmn9J-(l*F*Hstwp((Nl${W{-X_6 zH}#)~XbF>4iCSBK7q+p^%Lf4W|jYi%c|6pI%&8QJ9h}y|_bU zQC04iEJ!M=snYjsS-NQb>$JWsd0Fz*Y2VYQ--$d}VqwLTE`ULn%ofmw+*8}=&but( z2^>on$U>d{*9jcQ$V#UTxu>?_RH2OpGyV!3@W7Z$8y$He<3pDCXoHBF6-2x3-a93V z*bx_31;whB>%Zil3Wuhr)yD0!X4y-4(^ZOoNu5j^+}pJw)%BmnmsxksSTOz0 z#iU%=hM!G2E{{sf@sQmrOIB^`e~~NVU$U&J|1M~wN1hL%aHyV&3$kSWO`kqXn36RSf@QY> zMCbKYvsJ%c-=g#MA2e97$gVF5owU(Rau#jKJ(UJ2Z6Fi(E|`N@+$QV8owTu&WDjk~ zJ+%#9t-tBh=PeXW>?S&E;{YYoX+!Rvwn4hk6njxta&zhE;u4WS`Rh^6f0v)M=*iup zV=Dcny-X`#B~*`+uu>OoB~A30R8IZ#@*EBdS9eo~vD`|AG5J#jXM_#am8;4EcK zyx)^&Zu*s%LDw^OgyWvlU0d=)D((6H$zvmYD$Q&j5HXkZiI~q0icmkD`thcjDx;}U zrAxV{N0mE~4L=*%V{%PtB(y>KrCwm*I%zZCoR_x6T+kudAcK#{J4~`+NNJY5R z(539<*`PdT3H_B_uKSZR?zL@u(_InxcE5gb+W51X4zMc2?F1O)6>)<}J1=<{8&(p4T2ZiotZJ!9VenZ-ez5AC)D*U8p zQokKf{4bq{y<@*a>ol$N1((>S4O87s=-?cc8twST`llJZXdHH%Z;(-JGxF?pA^0xLX9w+kH;^VRX_ zJgcAQ_a;v>t`3?7y&_GuDjdI6g@M-)*y8<_dY1f~E_q&m99!r5&XP{@9U8zd zV>LL1u!Ct8s(XP|->A0a=e`}Z;h~L6yNy&nOqF`jz*s}w(&RZkwk3`6EMq%_F7QZu zg&T}4=bd)Z4Lw2~Wy6O16f{59#?SlS2)q9Fed*h7H$5fq7q+5Net@e9{ z{k}%t6W6G8Cp|i#G-8d9zpShG_Ld>!+vs2{8EA_zFCHMkoehMt7fTb`6mJawU zjX!lgQkOPEB2ToDDLh0^hQh9UH`?;_SM^AWyx8(|Z%wMaq~zQ3^y&UC@}2rkUF6&K z|5DyXzEi)|Hg%9^CtrPb{lzV*`CZAo*cz?#t3@X79cJ?^RVK4+dPc&o#p7)KUIv|; z69w?=R%IfSDlt=u|CZj=Q@K~p<6fdfb|U1tx#w$pB=3Fov%9U$MdutjL5}h94wqAh zqe{~vE!3@0?t(#al@?l${9mYVgx?vC%^^RG43u#%`(nCdQGF_{Qh06CdU1AYen(n5 zG<5Ij&GK5yq!KJPKgy`z?<7 zN8E3+`6Im3eg-~$raXT!8sFndrQwA%z9;_K`F9^l&F_o{0u!`x>}I}<{WX2@S2P}X zFSGFoQBLc0crhGWh@N&yIe8X3qfcD&3~k)Bmv74|`sD6$q!&xNt^dT96+=tmrKG2K zq$Ttg-bkKGLNnr&VAODS}>_0YNe zRJx|*+p=FX_pjvpQ}a9W#m23t4STCzf%YbJ$!`(5s2;;@xt%L%DR$GqhpDjB93BZ@ zEgsdvn>gQeB+oAFqI ztp4o$Q|;_-%J|UpVaKjE?I!MH>2~I}dfp(kGBrQ2Rp1;)2W%8Neop+H@$1N&@AJ;b z#ir12zRYVi-+LX9QK7LMomRjMjZ^qW#;g)pgBEN@!RzZE( zHLpz4G`xxANgdORGFP$Uc{{?cx!+6VD|ce5O856y<*~;;h^!oePc{uXp^VghR_ZZl zk~oCC%O&mY?w{Omt{Od&*6;t9b!K2J8m+>uLp=!?SuUhc? znj|LV->Cd~#1p?iLp5`?084*KuPt5`sl9eN{$u4ic_)1mb}>DyuG$(;sFu9-$z@a$^Jkc`J`pFM_OpgQ0`6v?Na2R77WikV)zsSsT-B1! zIP??4YXRRT-F6FcC*Y6oOP=z-lsrq>yK4t5kHn4%PPboS;dXmeaI)d7fsY?rcw{~& zaV%?WBg0>jSe5H3DJSKD&!p^LtBh+gG^8>{{GEhp*ged;#1Pv4kD`s<|E zcSvs{{b|w{bVz@W^o^ufbVx_`Zf_(#zkT|nKGN?dJ-b7C8R_uTmC+#`+;1;rE_|v( z`T^1hl76^D`f1X8lfJ)w`eV6a*KKD=-`*j8D(Oc_U)>=cyl#7$bhAS`^U2$uBz<=K z^i4UWuO+>#L;3>J6QmFCkbZ>pd8B7`NN*;6Tv%Py0nSZ3NDm+bC)$_aTuyp_(%9w`pOOz7rjG9vzkrT~ug& zZ=XM;42^F;@U_=M3O9I8+c9>DpIk3EYuw`MI(Yt`)pvTtP8&(u>vq~~Oa({r}fxOl5BY zYncvS?)`1gPMX}iZBnZHQ{0cGm}0s?~o- z1{O%H!|zHS#2@d;n3~EuOG{QSb&;Pnz34SAZ(tsI%QIeGd7sK4Kf56ZfaHrUS`Xbh2!zx{8uohRv#k6|bHTVb%~Je&*ZCS*JB+4{ibSg?d!s8dz0vu- zy@Qr>?#g}2v+`l(1>XFjyrToW`Rb~*)oSh9*a{WWIJ?2Qt>58Jzu?;hF9tV|FL+W{ z#-6II>#^G`>9eHp(Tn5cXGg1NEeS169`8T{bb0mquyUX7kbai*Wu?i#_}gf6`V`N( zx{uvw6wf*Ka|Zk!9Dt|zEf)c+=$BOfvR0^avx?M3dQGk5GOxb~no+iidX&%6>u;?( zLKQP!Bk)kmgYc93nUtSRS&x*JehYVZ)J2bO54)zn4laX5E}?@57=0Fur{m}|1G#ZgDLz~)Q{bZ}aXTkc(tE6Yy&xgP-&E`uM zzQduEIxAA@tVyXO?K<=kJLO8LFXe2$ezH1oALW)K3%fsQAzkwoeIs%)So$xt(zP7h z>Deji0;7vE+goYdv&Uk8N%CMtQTGDmQFK*VWp$>%a%OtIS>*DXMPt2znaP8UXJ56l zeDf8fgx1tUo@FgWbR4vNRp6q}4B2Z?xVvWuUvNuy*fp&iI=4EJM;wGQ;E>-6M=#nd z?Er@lIIeNvnCuN)102+C2S+LOdUb$9`WH9^p4~kw+VgS?I&x|hIX}c$NVjcwW?{2x zKwqB)7x95i@;x@M{#JAsJn3fhggH)6H}CGY_jJ)C&U%WMwqy;?MLWY&+PT|q$4II7 zTnevgH@$&zME8lEN?#!~=ztfxV#?D?Q1(0Y>h7mK zQWh1B!M)ewJ6G8uMFe0peIGRYcZ8S~ps{>PXjQ!lnm zg+jYjrpSsl$DTB-6&{fVc;7a^uDUm0{9xq8U%v(4d1^P?ch1o~rEJ($Wr)mTb2Ke^ zp8>pwq|KDN_|Q{cmb#3?=DMS-G4^AAJze9G##+OHII%*(iLv6bXgP6`lxv$yOzlbi z8p<|P_iTr<*Xy#=(L+Uyf6MlwyOK4Xlr`+Kt`233+i;qAJvfOSb;HlW*sHMM1Fd!Z zG_=7r7dcv>Wnc4l;)s#ZN#JH3y_>&z%Nt?Wgr_Y$hJ4r-kC-^x;-%}f#2%nUx&3}z zXox(_l{Pgk^;nqjp2&c-C+*VaoVKwvp%LA=hwA{>et{2|X1BpKVOs~74paYH8>UHZ zFim*UhGDi1ldSt8Z>|a(rs@tbjk94oY{69ddK*lYj7I}{8R$797kH+oz;jg!JZ^Ae zPFwkq1<&;_r@*7fKlR^e509~5cmj>8+QU=1*M{d9@VIHSFa@4D;KKM z%Ek`xoS<$u8=gQLJe4xup@&gy!?WFfmpys{Pk9G;hS~6(u;8h9vJIY!UkIO^OUlvb zFxsnX(|?uV@0u!QfVZp--ilvZunk_{23y6S1SaeV`b}UY#zZ}lA9-(;*WE@3-*?L? z`fZf9xo_l}X6c-Y&85kcgB|#U{~C5%Cd00ZE1<)6Cm;C2Dewg>_y(Ozfv?hr&ksD7 z{m|p3Vg&7^&Q*wq{vea~MSf6C7LBkk#kzfMU&jAZU){fPxrMU>~4?e<0g`79eyv03<_d2978 z<6m@k7+oG>UnhHFPKKh>nI{$W_O8rRp_P+WF*-1lbm41=vSqRO=}@Ry4PW&u6<+nJ zlJS`Xk(_v;&@LaCp0@Zo{&j&*XjpeYu}p0zZ+WdWdHR%w!+PJv9HP4J&*VR{L-bH? z-8-x;#E>D^EgLPl9KS904;qFH`t!(~BlgZ8*<+PFRQrP1!SRjwEiy+=7yrfaMwfTMonOaf(y1?dL|NxbTS30%OK)J!d@}1^ z&fHtpz*6Vl*lWM)aS-{J`I$M#_0n9s7V7;C(_8enuk2S`|MLQp3<=q%#&q1p_sbkEN zdv2AT%#5P5%Cr$WDsPr1)3ge%+B7p?VERjvlRo_ zps?4rZr1kb=8e1;ldtED_L%I(m>QgL=4p&m#*+tqRbJ_9xl+b|Q=vLQnex))`&!Rf zG2xplX)CjK)GFw7a|wLLSF!kJr`>4DYT0W-BU#t;_cuIo*07$Db*c{QSNS1(KXXWr z<))PbSo0c%{wZRA`zX$OjJM56rM)j&zIDBAJ$vZ!;oH{RZkiUKrrhzUwch5)s=z7z z$ko+)+w-yxcVT-M|F_$lkvw7EkNtc5hLrWYWJ}mp_VlWC%Dw7Y4P&*y_N-tOnT799XA6((R3WO{k1ZF9JQyM-;8a6Tw{hX#URt`WmMkz1PnOs?1KCW!89InA! zxhtt>^KJOb`MPfT$^j}&y)y10?!_JXiS3D3)4y|J17*E*8MtRjn#Pa))-tBBiCdk0 z*Z64pe&)B9?3dmxwo}G~tiw`Q#D(bnU_7nzA@Iofuk(Z-^vsH zt@Gb+&CmAFOP=+|Wqwz(P1^wCg@TtqA^W+;-e}pGk|?w~%bI~xHfopkrIhVSUmnW6 z;n0({WJ_+KVXE9X`Fj2MX!3Bu5!FLuUChS$WI(tbv@%}SESTCK)ojFZIXJ(bb=z&i& zmonuxJUuOVzWrKCy9V%#NNHF2FTQ!1v}xgAb-jgu$u{!X7b-B8?9y!+k>2gvGG4wr zrLAmub3*e|+mVuamMo6>*nwBKYb^cHZoh=`&pCN=uftCd-iOcj$RY9B7L4?%G)Z@^ zIR0tfTGdqdJigHjjEN0LWXue1lk+hT*>avKeKRJAX??4|Q{U=0{CaG?Zr>Yw{sZx6 zw>$mdj}MPu<%~x?uPV1>Gc5kl;`qaAxZoE&CgV}}o$a6PjIl9ST{s@cY_@1H`a|mH zw81(0L#u3ZlfYz+-7!mmWp&s!danboj4kBDU|hz|9yq)bgk@L2`$Agkj7eJq(~)?%W|D^k>FE1zz`L24QG;L7wo2d6Z%m#N`pVo68FqZux#j}{BGGzv zQ1plYNHRIH1-Le-gZ}Ddvf}s^&-kb1mF2!f;BB+5c4j->cV%wwS%9M55bDBNOi2S1|Fq(2(fBDG}*s z!uELI+Uv$gqOXuYc2;DMn`Lr`_ zR%B2!JYLV53wP#5xr5ddFI?}+5nQ4JU0eJi&deSV8sfkZef083?SMX!=pf+o0oNUS zE-`1#ibP*V4vR>OLz7wKc`l6vr0)BnA(C$vJ*(l7JYB}luk2~nm%2{9+*!#zW|8p* z>k+_aG}~)mtRE_)T0PJbtCRIZqh8<=x?n&30!Q#J(O4bedyZg{@&&J94DRDwilHh!@ooGh-dEzg#y{Y?RCyAElsi$14@LQ= z&zA_2H-&olb_;!@?OTt02*HZs;JlTZ7(v_G8R zypZA4sz)0qDWmZ!PQ-W`{{x*;IW{z;k{yPkS0?U4CRV@`=oDQsDiWYxbj1geV2j+_ z(k1O_WM9(!CzAL~o(jQTI+8Xe&(TvP>Ato9FeCY@`Ott!K6cw&-0EX{{Po*%ncHYT zE$k|M4O&7|=2S)Oc`Z_T!KEs+YBjvkbK6l@qfhbKjGCs!=!s?TY98h3xpeVL@vG`i z+41Kh)f}%U_V8Hl{MxJ_224 z#`{*zgEs5x3o0KNQ&2gV`yFEnqF=@LzUq~TIpwWLWprP`+J5SiwbRw5>qe@cYu-`4 z*2UCC>z-E^$FG1EmGJFGcvK1B`r!xPO8*7${Z@GH<|+n;Y|6}rXZ;xa)8W}jcou`7 z=z{pB+oT|zBm39G+<3a-u;`CNB9=#KVgy3HouGXpwd$DpGd zI;IDohsHu@=4q(QQbjADT)1u=XTRinwc2T)$wNkbuJVX( zPM|vy=#G_)32jT}WO~fv-X3!^Hn1KWxZD$B&hE$N|n7Go?-cQK60U zIPLQus{5UC(}#*}VV&@I62I=bUf{K9kg@7K^%On@a|yjqS7<4Ay#w#1O`D#L(0!`B zJM<7bn7?L>K@(>VmqLRqn+E$+Xs}c2cZEN(sABW;;=kdG;@@jp3jW2h4W~nbKQ#24 z&z~$eqo2z6gvj*BGm;KHeFCdoVrR5Z6W95_{A+Y`=ws8Q-B_^Xc*sU{T!b-D9d?Db zX?cH4Wm-mPKfdhFDR<_D}Cp@zG^I+JO|D3>^7{Dbui}A+Tb0>3EF&QgoGUkd@x+CLVlrN`zd1vJXzmEQtjcZNQQKfk-aL9FmPc_r_sUB6`@vnMJ z95SY0!Vl}kr`n27wH=?z&p61BK7pTuZ!+PoF8rwv$WQgB=6{Ai^+bDrYT^ee{?ylK zCyYP!UE81HPAuCqs6j(kN&2hknve5rl5F9nPNUy3jFeiyzJwyD*Z0+x=x)Wr8Y z^`#oxd?{Dl_N6l0`%r!g0F{44)E*mdI1=)81vUIz9v zedTnOK^r@1D*{B0g1{Kh;C8wKESs z41P6@)7dM4yohf1A7PK}ZS?biay53xKdQzzSyo?AF$-U11#;lJJYtHRkL?qwWFAIY zw^@R}pKi&g*&`UCZa1;N(SbqAjneZi+Uj1pT;>?;<)be3dN^~3${x0?BNr7jX(y## zbP(ms`b1=(AGXBV-DOV$1s`TjId?|%m``6iC|h|1!o$29MT^DK9C zQ&YSPUsCcNeIc=0^C^6YU)i<${f?kkw^bH#}t@--inyhK8Qr; zj*3ipa7@9vh00j>L-vTxR*|(AtF#FX^#uud9v{P)>W*x`sL~$>zNTV)%h_sp(|&ZJ zn{!bPxVAj}Rb@PUn{qw;Tb1_k1IoSjxAZqg^;nB6Fn+ejStGN2(7;u~58+W)Jju7_ z%ge*AZ>$jh*zd$xzhTOIE5F3P{|o&3&l@5mT3GLc$E*9F-!b81c=ktl_9uAu@4_=< zLDLLluJA1mjhePH?hf!RtBW&6)Ri?ASNpyJ?>t;y_*k~8b?)|!bMZoBZYwWm3NQUj zByGYT==?*qUGs1cGQBNr3o%wDe8e9*tNG2GL3kP8sLuM|!)7j{-=pgE%4^~0%kcBY zCoF!#!^+^kHa>Q<_$a(j7{=TL_0dP}${hGT4ZecKG@O`1-H#^>_63E!BO^?W%`{Ek}8ft8hGBc_db| zrn@p)!hB~xM!6bD<2?<3%EO#ne3^zse`A5@=(?AgFMX{v!dWg7ql=sUPL?ySi7Q=M zGc>N_q(0%bT&B9Dh8U0d!>r>bPgQJA&mRfDCFUh_n7Uoq1pG);_RCJ1@QnR*%)RMv zpK{mzhIYPnIcdrp-$>evq`gPl4+iOdWa#~~L449!-AVn8PjIU$!;h6U>tdNJijN*_ zWW-Vb%X_sV8avr7~x` zjs z+U0c`dm`QxCGKR$oV-@d$vv2uQ)y_uJG(XB^sW_e61XmiH$DE@@umsyJ3i97&mC_X zHj22$HO3p_gH?|0Q4sZwXJ2{RYSF=t4VJu#z$NeqT&Bz~7>GWz3gYejxE5PjDMPApYQI z`GCZCLa~?r82P{82mY`5fW|q)npYc{{^=^r{^M{XvE;^?@P@dU(6e$NJ_T}ypX;d{ zi`*$>Mj=0Hd?XeR$(b_p&BdXHTIy}k`^dEq+1OX5;ZuhENATywe|(^W|ER~d?LXFb z;y-Ta#DDDD-hUL|k$!tfTw3&m_>dA$?C3v=j5$7J^tM?`R?fwLZ{RzarOGGcO}_K+ zE7@btw;t%sYTA&CH0>igafXgDN70wD`W&@e)=Xp#{%L#;Svx;u`H6lv3oe|GXMP%t zn0+s)iT&DGjjhYiJ1VXVc7S!1iSKywYTtcUuhGQHejYLVoF1~uATGS_Q!lzVU(Rb2 z9$|BaPi*nz#n!pJtFkm)aq*L+ozyiOd3UbZh65@ZJUwLMqkPNNm-P$mrOCIB(O~Z( z?4N%w_VyovOU|`QMx>75Q?WEXfA_}Z8|FWP&(1-S0J7lhRS^GI@QE$YQRbOoMDL|t zR;92nTcv)q7P)wMKqPOkjo-kuEtQ-n7X^y-ee1W_gBy ztKY#DyPp}`Ep}RYrCsNWo&A+};=c5Jv7r-7Jb40JY)zFivr526d1Jr&V?SI_R})P=vMiv*03Y)lI>K$_Ixm2L^##Vs5eX?2RYR8N)YRHG}W>=v!zL z+x|gBmr0=oe!{D(YBj%W9DaA)cj2_J<+0AEyJ3^2|BVVAkpK zuzejFt~0c|`UEn1`)+qlW!?=eu}hq`xW-7OGGXIp`?w!CymP zWQ21HG*4vBUu0xe0-xNF{VR@cNFI_twLB%*+b6Qco~+N1sY4P+WY1@o$Qx%%z|p9vyfh_-Wm@7Ji7{Tf_aQ=)hlD`p@P~+|0svZ&u>xhy7EN z=YuWinp-V>IB^d;?Om4_+{HgO;_rY5u$${omJ6R^-}<>8D||;cM|jD2I2`-O1EJV8 z=#RG!l+&ge8~I9vy}bFNPvb7|nL-=HJ~jU6RA`kiv1o^0@H;2ohjMmb{y61dys}36 zBJKkIpPmtVij2hm5jsiy`ZroW+VMZOhdQnokZt|FfPBXzc!Z^{T(Nz8`yu`8OP&pK zX`aMMryuj#ljTi(|6^{xvWET|V@Iy65xxzTIgWgP>FA!6^>|Hh(M6(f#NG(4kt^`y z%pg4us-1DbdgW8BU+ob%oGTb$|0Qw`{j@!49iI#Hd z-d;7=sUK^EzQ~GWM`UhNyXlEYML&4Bf-yCj0S%pF{r<}vjDlOglcLwFQs}-z+K_bW zR=}TfsYjWL_%!rpp(=OEqN|VT{*ZmjmQglrmo2l)hEvLB2#m3}p!Zw+t}(Vo&x^n* z_T6{E>+BM~$(XD09nBaLe9;5o`=r_Tw4UojcTeH^^UR-=jxFf+1YfKFV)_r+{TJK) zhuZp2Hl*N{PuZz<*?ha~)ReN-t@P~k0x%?7p|>g@QJKoqx4$Pa5Ft~9N#o)=)4O7>B0&~@tvJ)-NHQdchg{N@3p zLn=7XZb#NfkcY6kOs{2VyVs(ovaa?$+VR@$lnr_$q=2E=eC9~Glrh)+hxSY0PqpwT zF+;f>n-#4|_-L<6`UBo(y=NJC;j^q)c3QrbKH^V^ePeH#jA@~Tv?Eu%j`;8ZVib>Y z?%F8yQKP+H*C_lka$*k(e+-{fUhav0>}Ps}@0LfGd!pGT9`s%A%Kq$qWKTh58s9l) zeZ^~bC)UMx)%2GiYqZwvg#J8h`o|trpS@m3>__N?+%0DRl#2Z;aSG$)Hu0V9HM=J1 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 z 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 zbSL(b6}E#N*yVY`nrQ=4;*)+6$X8a>z4hZC`@Z(c4zyq`MkDFgwgC* zrJJA)y?(ap;#y8vi_z$yMLW}?X;@)1aj!Bvu$y}Jzj;37HfUk|*EE3xS{F`eq5a%- zR(Q!5T58KHz9?L>!WQbLk1%Y+5yg%--Mf+qA*&r$L5%;SX#_&svo7 zK>z^+5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ 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 literal 0 HcmV?d00001 diff --git a/osx/par2/par2-sl b/osx/par2/par2-sl new file mode 100755 index 0000000000000000000000000000000000000000..c03dc37db0f7fd736ef4178aab25711379007365 GIT binary patch literal 910112 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 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF z29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC% zWk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiL zPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk4 z0cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5 zlmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1 zKp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4DD zf0Th=4$m{U!#@oFGW?tH@57rBd8QBi-ta~6Q{j(=UjV-Z{xbM`;r|Z*3H;aayN}E> zgW*TP&w`J^FNa?V|6BOG;a`OBb8w#VN9CFQ;77pEflt9-0Dl+!!|>0-Z-jpjz5wa- zN9URC;d{aF3qK70VECEv{h{y7Z3{&Y_>Ft#na9?2F;V;iusUTx8Bhk40cAiLPzIC% zWk4BF29yD1;QtQ{^c)+TQ8}r;AzoR3QrsMsyd!@_5Ho9ObKJCL;)?kE)`qI2N#2mZ zVwbV8*m0Gq(&~6JY1(!`J_{4ADU)2qe1hXmH4Rg$D^o>9)pb?LSSndnpK6&>T~=0s zxRQBQE%nv0L`y0euWFn!D>kbzR#rJ8W|CJ228P!*w6@fJcMGmYHC5${O!75Ps#DVd zAW~CRqZ1ZeAvS->l2~&**^+3gYN$^wjV&rPZ8zkt=!IrXjMrARHl!+Ao8r?F)m06k zr7Nw>sGN{!s!qmJ@yb+H^}_KDiRy)piC7C`V%2pEWAj_9k~JoI1sYVdw4nx?)_Jjc z^-VQ#&^Bnrt}qmvFbS5Br72aJO4c{cpU_a%(ozwxjVI$x)hzDz6~>TIY0gnwYL79= zUedGE67$UplkCG*NcCcgc?;szsTj=H&u^lxZwFmXeM@tqB~E1ll}9%%Mr~si@s`%c zcr1~Gl&VW67BfMA83i+@R<;xs*D@6dYAVoLs-{_0WfeyAgd$r&c_eP4i<{-*5)Cb7<&!EZ6P2+t z=AV-lpBh!4Xo=yDh*#n+V2a}-De4(9HxjXc5jBwrX-QoqVkuKJxQLb#+=;f5%|X=g zdGY!6O*S$WM2@IxZe~(Pz>@6vp!uf+3bY+*5ltdkWSf_%YK-X4j_Lwa%cGIf*B6E{ z0gEfbn5xR4ZkI;m0%KQ%k@ZW;gp;eonC59^(yJ?jm{ig5*tB{K$)-e2T(~c-OC%PS zl~=~tl2u{4uy0DIG}Whq?!KWDeNgGuR*#u(WGp5(4a%sARW)F$kan&K6O4*g%){&$ zkH>1_m{S_#O{sF^OGk$_WX0~tk*}U}(H8Qp4e}Ki1{JdRM+~!gBI)}4o-kFq_+)%u zRYMhKqgXAbfOrzaw3GT(Snk$^Mn;ECt8Z$FCo%hAq6qEH>%><%r*0=@0(x7(E3R3@4CKKriRBV<0+X!U-%!{8AUs_ z^$iVEDogC7@yfT`le_d=7T=LE+(`4LRF=j-)T|>#~3N|O02pnRb5BT=V=XQmUR5r>3FQ7!J5*RCxxX~(Aui{2AVnBDpHAt z#9}O-h*@r9T5IYT)zp_T=0X?Kn5c0vD(yrOC;kl+_fN)DOPuqf@^h^P_U+x6pOK|qJ=xC4?1KmL2Y$Ysv)Cg_eeBm z8fI8WfM!%Lt|5HL!FZFs!yHUD)Hl|rGORpBRin&g%(z})ys_Gn{6YYmg|$~4Y)mYY zQeVsKJ(gRMYSgtl-khpWG(p1Nuv%KNA&0s#7))>GP=;e?V=iTKX$-Te9Wn2AmcR|- zO`*QAWqu__D;xJQtDoSih(R)C#>|OjBT6&K_?!uvQHwZc_l5DLkv{#JD#mAIX!Bic z#3D;NoADT{IS5}as-|Y_4^y>Fd!a<6@e0AIs#H)#Cc4x{CaWJj+V(YOkL|6z2J$c`Z-6|>$?NwsX0ek^e`9WQav|jBoIDq@*}>Xb0eLqk zuY)|_$(tbm(#Zt_jJemz<&a-+avS7No!n!8V@h_kHpfDq<>U>JPj_;UfyP`Bq=EeV zAPwa1-EH0;gN!M5@>s}6IC%r)WRPYs>K3Gd{HT+gA;0V7^^m*mWNj8qHKwZqE;aFn^?`-4Ce*m7HJobmiR6BXo3FsRqw=FQ{ zS598H5czuAyz3#K;^Y+##@yoM@*O_0qRzY8yvFNWypOZI0{zVXfAmaPlH01|*=7&z+ z1o;Uk7Yy^vdrt0A>Y2Uwvgr$kduF_o*NpJYc~0K+1C+bBO|$NYo+);6`6ADp;N*fk zJ=5ys4R?FyLMLy!*E2T<>F@K*Cr)m@-!r}UaW)|z9LVcDGu_Dr4|t~9$txkB8pJ>9 znO`}1J>-X-yykJwyy4_cPvB-Mu=dSUp4rpM>mV09dF9idInv1+oZJ+MK-p zRnJ@>#J}d5`<%S)Z=U&QkmhyIY<9AF(=)sFv*oUN%QFW#dG0^Kt&=xFt_|Yf@ysbA zx0yD`*E@L=$?L!LOfSs2Ota3%SrR92*f!5x>*SSP z^UQ}%Ha+r8Kg_?J(^f(r;^cLZhdX%#WX{)2V|K>*7bh1$p6%qZkgJ?L7jlD>+aND? z@=C~OI(Z%Bi=4ax@)b@tJyB057eKz%$zvh^!O3$WKkDQ*$j>`@CFH+5c^%|;oV)?@ zXHGV|;JnR1+m-^zJ2`nQ>l^8YjQdm}eez@{*=J^OBQaN#vP-JJ~ejOp%iZLEZ`L z9P2RXM4bO|@|&liznt7~YMz~k6{>(gchLf*2KhIq1WOG%Xx!%dE zAphRU1y|>pr=5HQWUjTW!zRcdIeE}8^31kaQyKp;v#*$TvE99pp!yydLt4PJRXQhfdxIx%&`n=X1#W zIJxWfd1kbe`#_%V|c2 z$S*m01LTcP-U#_iC!5t>Oy2`-oz2Z%%wd6iOBZvLle>mu?U5&8az{6s{4CnD#grvlFRipV1) za$Q8eG9s^y$e%{!(c91_nK5Q!M4lOuFNnyGiER7*&k?yNMtD%SDG~Yni2Qs+F4&go z&yaElMdZSWJTf95CbEGAW9EwNp%uo|N94s;7Mtfs`Mk zO%eI4h}@;Cv{%ya6p?#J9e>fbXW?-!9vM7BI19FZqPw6TUAz9)S%Wam_yP1@Qgg_l3vfEgx&m z0Qmjk2f`l+e-Qjocsy1bu1!Vo#qcHYc)T=ttTZFxN5PMV9|M0d{GsrN!;gg@2R|Nu z0{leyGWbdGN5FGkn*x6%{8ad9@YCUEz|Vv)hd&yAHvBR0bKsAKKMtPj;PLQ3gg*g3 z2G8}d7Jfc_9eh3f0{DgS4e*WdP4Ef$X804~lknO%|L^t<_d$oj4}s^tX)vx|;CcYA zn{oXNeh}o(afNGxAM3n{$@|l4cU@%gAx!wLG#2alDitrf?Tc3X4tA)#W3T3Ef*9Yg z;>g0d))YQ;kPjuw6Nv_sBgw?7R8_9{vfy2PE+r3A4nyTjGb#D&! z^ww0>yoUJ1`f7d@P?cPoE0H}KkxMhXssW$9L{G9fS6Cgb!& zcAR{`&dBtMhY-mJ-hwhtIb_6Soo@(r_2>r}WyS?*u`w+!wPJ9BK~lGbXBRAto?6I^ zNmsii^Q3}JX5+#m3SnesHr{!tV@tZ7E$$eCjR%Nikb?(SAtw$*{I;V8HbIUv2DubL z9XdHxfGip32DW&dAUner&k;z5&JPe+_4hqFU~~VEjtqzidoIn1Jdf7?Ey6`{)gvdz-hoVOqTvYn(f{O?aEdb^?K8V1o;C=M8Su*U z1-xc|&ds<~ePcXPTT_K;zYZruW6jt##JJQs3{q1#vQ=N*VsHQfhchHqOT3|$m`AH{ zwI>neichY2m9qz(9XiO4x2FxVW9>164zc0+f}9#2EU=2;L_z0A39z}7Pxr&K1fZj( zIbK~~TaQNNIA9RQ+2#i+Fk~XxT2o*u^9X{#=-Go@hYn&b!D)k7OHeVAAD%DZDa_zt zftArz#^ES|Tycg#uIvKD^V9&ZJTB1TENm=x#I%{?$4!gHrr;KyQB*V`(b$L$<+S>y z_~SnTs`{qP+&Ef2ViAt{CX!Ri zi;K#ulEtpkm5J75b)2=ubX!>*D=W(^h6D{4n(N}#3oBb28{4b#kk_(BVtn* zaHke+Z9@wVwsyiI&eIm*&YaINoRMipQ86l4R1t5ks!vKunSG1u6lbJJ*Ppd2Dk&dV zQ8a1Fw6d}pvnr0osoZSy(YALOIkX;4kYPNtBF!>bzNHPtTWmv^BBPk{9AluoXw>X@ zlD9nOxrFQ54oxeqh*#q@RdT8A`W&q*nO|Mgp`Xy?sBw9vv+nreFxL_YBC($d7810O~9=9YGtEyShiX{REiJGU(7>#APsTFJa5+1j0N+huw#Bi%7 zdB0C7@AOs(Zx$S(it6vH3BDS=wJDvXH5ux=z1EeV{iZAc{k`($)vB4-_VyqAahSdssBhjdm2 za?o+wD#ciAkhLP0^2pZ4W|{k-EX2%@uV3ICYih*N%{4fSiSy-)?DJ<-iHQ-XFv}_; zD+L}2Q{jWolm+-U3}><_Qx}w{C;u{x)IyxnZNP+F)RN-KT11sL#9LaXEGXl6Lqyrg zSY@msUYo+n^W2BN*~tG^VWVQx?Fnuvtt332%_HVg9ZPA()LV?jssS6fDNX!_1f^M3 zNo-Ge%eOe5qsvZ4=JcG$_To@+8E)R`7_;^`cwym!D3G*TiaZ^Te8B zRjo^=lo#<ohU{WWv5I__fB-X*V%2x;oI59Ffzn)Py5*|`(K*;gC!_j zaBu_IsVK)bvqK$*rxzgJI2`bZ+Nvc8x90cRYjFC_QM2@o${Qcma62!o^o$_ls2CsF z>~y*Yem~~7ZY7MayZ&~YD8IRv_-}&9fW3J(73oquv z$6cY@%6x~d?|-KX(~5^zVyhjQD9115YCQuFVVzD0xanE_$dcN5(*M$SEoR3=q@I}@ z5zgFhZ<8M2TiB*Kn~`m3rcDl=Y@1u$%7vw;tLnH)Px${UQvk+sxFN<~3|}YXCrZO@ zPi5ZuMWeZqv^$!XNy$Vbd%P^Vmke9c*&-L&ONME~#VxZmx0iIUV#3sEe$x3m*^w8G zz?OW(=n`v2fF*_qo_gG~$`dzQoV*ilPh;w@bs_e7H?2DyeM7m-X3v zzI6Zv6_qW)=nhjw>KDALn_kr%#)j#J%X_`DrRj&iqDcA?6>+{nj_m#I@XAOtMILCf z(}X1y6&+z8nD}c8L5HQah0>2p@NT=MgL34g%HpGEO&XQ{m@&*Z!akU}XRvg1ML>#F zG#&3=dD>Tu$IS>8qw#!O!z!?JH=06aaUrTcp{gl?7dw0tnyPb*XBl^e^7UE7bkXPv zeAVli`cxg>)=ru<9-^>JLjFP`p;AZcfB zt!0lTkG(le1kbbCFJ4P4Q}JfotCgt|e2k0Ny5UE}tT$ro;!8Tl$}Sr#V@Yg$eJXqb zR*Ai}r39+sZu>kBFE$tB_bFt1&PNJRRFi0oRaNr|G|U@IRn0FO73ATUt+Q-%t7f0z z@WtlRaCxygw#IlV*ZBWc!=r_bYW~hf*scx@30g6N-+q=coZh2G-sx~agxy)oXJz{; zW2;|d@VtTR_jCdCV0NAxW>KRZYS|d{WB5p1R8cvzHPzgjsz@wm<@h}OonNuwEfpWc zP&KzfC@!&YRi-7H=1<4#k$QXyTHY2%UbkdU?(Q`*AGLD7oykl-`iQF5mXAWUWlN@!va`10h;-Ufp*Sj? zZB#njsI*|vzZw=qGMFY5=V~ikZM#%^B64I=0|rlKf0s& z(H+ef6?U{=RM@fpMHpwnFUDENycny^(T^?NqXnLo0(Bbmdsq7iZWxQ`O(VZcF9UJs)J>j4x^-{KhSWD*;Yju>zJZLIYot1y$qr| zWXrBx5oV&S`WDF=lhMrLA}$Y^QNOm;c$!uMXjhN&JeN{8s)Ze3#`Mez^k7vV>6vinHiUjXlD=#h{a}=&6$;{mHY)PJ>ncj-3-69BVVq<6&oFV zOq))ZZEp<a@7lP zV4$nBm#!ZTxz8SuD7$|9<9qkC_o{po4Bu4&&Tt*-SBl?xfXMr&@R6lONZkh=u_LZ&8cLk z_L^;SV_+}J75lR)(22c0v1_6~9x zh~>*`fq|?mz6+A5!9ysX_iJ05cw{D%zZ;yr$6P+*Xg}bV&v1BfuZ<48Yzo37KzrB9)O&Oe` z%x$lHskO)Nq|p&a`OEGbS3mjY4J~H3x9%isZh@T!xL&RaLz-b!Z= zU!xR9{O$bVoJ(YYXWLun>`k^`u{6ZlZ44_10sF@mbVKN}?G>ETMeg5C!9<4te$uaS2+SNG@y{HYw5Cgu#u+r=hYiF?JX}eriEX%diO% zJ?v)J%XH%i+BTzJEvcI70}dEEBB&D*bj)W?My!{S&sK5h_;1hmMu&WyiH44g=CbA0 zA!WcHb`Id-GV?7wOu*OtzMYG4!!pyrzB*+<8Bhk40cAiLPzIC%Wk4BF29yD1KpFVI z&%orf-t9X1qC?~J@EYrLe8vHJ_eVTa^y%b_dKdn)y?x`+PayKFhq^vkyVE`s@gB>j zFJt=0Z2E3Ndc*VsGSgSW;GkM0zRD*4`e7LV3yeSiR(pHVryD;-^xA^6*8XSmMLQZ8 zEqd;=2l>A3KE~}d@x$}}{_OijpMCadH17Y4n4QYjqnMY^JLJmA?GH{q<14-d-07SX z+S}WI;F!qZV|pA-T>F^tH=0c(f1BO}AHCV`4*U&Z`sFtL;2`}vrhki(9nybOgYioaxVD`p0bge+TIe z(+|j*{)bF|g-!qGApQC`kp2@!c4+T#rmwT<9}m*6Wcr75rr(k2N7?ju2kD!c{--(9 ze?tDd+VnRD>BlmC9Fc8@z6QN%o&Cr*&qMIma`Y8FjxN2ox(g^8eiw?f{eRx0%Xipq zd47?%?z~6O_>8|MccToIvPUPkKQQ@>FZjE5t*<_^%~{CU{>U~b)2=jkr+wO>f-Lu6 zE9!{C*jO@UVjJL@){oo*d8`J+fXL=cLeQf&OgY@N0|9?n(7x*TN zw0$_CEwornQP8TWMWYr$ZINgrr-UZ-iKNn1bnA**4~z9kg;uK|wxpFleT;&#E3T}f zvb(Ih3%jz2!b;1b1ylrdIq7mxfeArHR9ZmD|GH)-O^S#2eZP;Nc4qF=-1nU4er6_B z0M-ok-9mfITG9q1l4S2Cw{+2lYJJU?ac1U(ac14s^t;09mfAxn;o-f%(pl;7w`i+j zcGbt@TGOI8cd^A{i0r(X-t8nqI@=#+{Z*r(!v5zm0LcEcU>EHt@JIIlmh^_AH{+q~Ljg19uRr8?YAU`v8R4Z)KGP^3 zfTB#4F>xCb!SJ2VlAyU)9BBr|y4(m)b{awRGciz7B4LCVN?s#8Q?c!zL>a({3pGuN zSWfP6VY*@ZoE~p@WDH@Sj*Kda4Yj8^rp{)K#q%Feu({j_E&qY?N|_TCGg_N5$zj}= zLV*x&85^4a9vNE1X)xbwu9QsTW#IhvUsU-zMU<-Hz;U}-fWmFRQBhAE5e_N=*a#_#X3{7 zvhCG3IqGVXY04GNBu(R2;=4gSznFSM!!gspiCAc|vyc7pk%l#N*fA>Px)mHEotj#% z%Lzhj7zJT@SkUNdoi1hT3J)RSShONC1wXQ3Sg0JsvN_%@5a&WfsQn>F-E+*PeS)Ko zpWs66cR1?*gNPRsTShea>{mD|I|CXkAdjxRv&x24zK-_c}p|EGY3L7Bb=t zsYKO4D8R37kw?)~lGSz8orfRr0QGN49fkcY{gVMx#d@`*hqi`w7Rq(cQREzU6_I$s zGFhO8xn2B;QOmWSSQN2%7qvX=xXvkP<$4?awmQhof}S;#ov5$6CFp34LFe#>wL>l$ zhteG9@GW=zZh74rN8N0oY7W}#HahBNAnJ9z`{@{Pd5q+>^vNxezF3gm&%<5@OIy^W}_YYD06D(Vk4_1=Gj`Z-Vst^1swV(Wfe zw5Q|UHTO1k5Bt*Bd(EQEKy1~}_wnuV;a=Xx;x2V-reqq9cQ<$s`DPAHt@=2&dT8u% z{$7!{20v@ysM~@c#WAdoS}0RFKggUfX3l0SYvEj_#MN4f+o{AUv@l*Axr*;b@*M;g z_MNSXT_oQ9Lo8Nojn68s|594mj^EgTg_3@`qW_X0RB;;V{{?z)=sXJ8 znTmRurrx|1)YCv6?^MwB$)H6u!CAC#F;OAP_0JN-7d-tDgSDQlZ zcRt)rwy92K$KO>!Jk{`U>RM8FSJW;|T}XYi#kiG>8-Ygo9K+8KQMulvUPbEG zqCOlsBEB9;6|s(FVb_P`oTWHdXwFaG0;dJej@FjY^f|@GeWAFGY-TGpy+KK+)e@ek zgg_@vZ&8ewkug_MU#F?>CG}Z~T6fVrMSUBoj{pt3F3{9NN&V#^WtUtb+=p4IqXrIr zEA4uioK1=|N)SpUg`97a(<;i*4Xjm>H;{aWB44V>KVAg#I+DwQkpsv8TNNkiXB1P2 zOk)+(G|lu9nMNxnj09wIDyEwi(^F)+NHJZjneHLenPfu6c9B_Jrl`xXl@o`7MgcfA z^$=3;|30aDPME55(C~j^6!-)tr*pM31Si9i+WJcTb`@HJi;6wPtW;YMsa*d~EDEpX zU&!?#1N&I`cD_`I_%!O{a&AA3}$_Oz4I2>*7u=`k|^G=o{%gpBBkQHcar4 zTI4L5=g`;j179eZ+03g-WiW>zl*ZzP$e_FuG; zO+oq3P$WcEBaxtQ5vwJ<&RK&Z(I};2i}>4#D9PO-E_oE9u%*bQ9L*=5Op-4i*PLojMH%J}@xnh5a*xF0 z{Ty^0b=%Q^z`giVNHbfE)+TOlvF{b5NE>R8IqC+p*kesb_(^Attbq@M<{@s4-hT2mc^-lmpr&vOV0%XC>zl8_j}S%od)R3IC%SE>$RKhT8zK;6*P z%Av`W)R2@BWF;xjO`<$io6`a$&5>f0ba;jE(BrAtFn@qqjB@8ld1#`CL^ZWffKXb} zuYt@)cE*U2587>>hE++#q6j3Ox-T7dFF;_tC`m9ck-_O&j0Pct4cwd~gWU@l?nuzL zh%TLp#U7AEZlKm^Iaf-0comjP1H>AnqkF_@K$lzr$vQY!N4SCKd-l61g2! zPNNDXy|kGMi2ooBo6jQ;(9Q&!;>03_PSGNp5-Lq6C5l0VpwbOmrCT~<#4Y1HY}Ul$ zR*-bEIo`%rCo;H9i_sut@V#^vw1{JW@32`RTf~{2iN$e{L>_=t8Z}zdOPi^H*o8D~ zzLY#b=Oxe-CzdO;LyKIWP-!+PVY3E7rMt9B_jJaHdmiYpSrdzUK_YG541vl0YD*%6 z!CH(4A%m_ugA8I++g8XHabag-(H-gNW3=d&zmZrP%-qERq+#$-B|{8PpeajiQ0Q~C zyqyVsUMD3C)*$ih{T*h-K{G)j&9ZYkRl~v$EO@YqgrplEfFx@&+)&}Pq0-&ZBHpBQ zH5)0)7O_}^tV(B|*!_meU5gR@fXx3g@)t<&7#q~cdloQ}Cv>g{61hgT1Pu}&;n#2U zkP`=e3=-&HHI@puCs^m*uN20#l(tm*0x+6r?K&u1L^lnR3J=oRX)&T2>B!fV2@acV zjj}tB(R3Ol`rwCo3{#GTanMkbV8wMaS<@4&XAo|_;mjfk<(ZSfw}?UYM7A1GCPzrh z1ha^~ZpV)djV}qf$CpmLIbe=2jsBX<*$Lqb?*l)C(&l#h4KTo*EHji#21SYaMT4Zx z9*9j6BkGW*vkFBfCt)!WfO-t+@9)F5#H!QUbi1rSG%LqS~ zCA<`gRnS`qgXWip8%$NZqFFFagkB@ARZLCys zrjQI%H1`M(>_t568V-P9|I*bIT4BDq)cqi=8<7 z2cYpaqG|{%uiQgER~6hCVwfyA*WCnxtrldF{0K`+ju*^NG!ghGIkzu$<^saZUy}K$ zv}nBBE}gMwKs9EWr->fbL`(}mmU{tnWpVu%UdQjGW)gfmrSHMAUS}zR#mUk=q_}|j zTSFJ`mb$+UGsRRAS+2hk1l?E716h^m(A{9BspO4dw##oaYF9P@bdz_i_h#=c-dk^8 zfgB?r$e9qv@_WiAh%n48k+lGdvnd`FuQQRQ5+o}V^O@63f)7gu$z3jHY3}93?1*EQ zI%`m0VvHG_yjJ8VzzYcefZ#X9nF;V>f)^1yTcjkwO$5J0 zaJ|@%Kv&{wf*X*I+>5og*qFeqC*}cSenrgU1ZE2{V~Dwum=_b6oy1&4%-O`$B`}-| zL=G`2#N3m>a6lJbiHYE=fhb8}I2?=pe+K45Vy;MFINFMh#QckxJ_$@ZF^h?LftW4{ z3`arnA~ChZ2*kwa_=AFoR*J1E7RiIpT)aD1#*%IBVxhlk6r0JoP)#9I;U@aigXEf_{mgz7O)@VpIg*^d?Yykj92GF&yzZt!N zV}?RS+FyYDKUm|AS! zRm$n)=~qD_r;}%;**nBzgqR)Ei2>0a)5%@LK|2D4Arr28dKgf|7odpsbRyAz1Deyx zFlLi0h4OQ+oTJ!k^Ec9x-crayCm|#Z$@Eg07WW__9d}g@>6DlA<^axZ0qfQ>qyCes z9)Z@PGFI{uS<}s*_X?P|mc40@JcC0kj&p7Ip%Hb%c>ly#>i;0-t#~{+{10aG)4z1eEN!Spl z2r^;~9lV1ymCkh0OM;F^piFchuJWBC=$>*A^vC9?q%k2uArjpxr^3cl^>Uvre z|4w0>G1YwWKS_8yHrz@+6mOJgrr$xNMeN@5hHc!06c%B-6>1wjZ0e!t$07SCm7m&s`oE>w@^Er zRvSPUYVYExE5ryw_fOqQL|T2$0aysxitFLD$^&cAy3?6gY&o5gu1E!}VFCAXXjpkx z(t0y!T_zrdmc{O`FeFytsLNo(eY7&$ac&*8fs8A~Z-5WFzlEEOcn&raKCdC_iLCa0Jq zFQM#Z&i_++1MeXr!U7%U=`dG^h7M&xgH9GS!ZHnKZIi!3ht(>qsbPqJMr%!jiZMDp z5uKHY&Phb)C87)B(eSLrh#F=*XhJF&Ua*>h84uPYh1IVSZkU6ZVFtNZYhc!lXB**~ zEi%rd8E946&tPZGsOrrL8FiZEc-$}YGS$u)^H^5Q% zDOyr74hk4_)1MZw9>a9Xy15^fz-jSbgv6JefG^hgQ3zRw*^2E7oy<|mi!^s>^y~n4 zX~+Xz;cM~c1X}a8=t1((s`O&)@5-t^4OseMOaO2;u5@w6^OV2T$udHVt?ZNBzu8{b z{_&UF>ubPwZm)lS2$@r5u^+MjLwmgyqLSKc2_@q^mVq!b6KfWBc&YTAvq;Du=BQ`u z(ETWj{pZXd>2n&i2%7ED8^p)6v11a-2kh4r~zXxlX9a!fs^I*p+@)NvUu7NWq&Kq?g z^LSJImF9gYfbx75ym3u(r6w15X!1FVLTl1^pUs9H9x{6Xs;kUaCeZgHGl`Bq6|~Mb z!jrN@A6bq`wk=I4fctTV6bGuB&{ut``IhvK`XPh*vi0vMrfTqX!U6;w$8$T`JV*L?a{7A?7cv&B@jC9sLb>?PCje2 zzhLqiqbr5KaV+Cw&lnvrn}d!K>#nv^KfKyZ-F$U8wU}9r3J=OacE#q}$+HnwolfzF zmD&cP4+G{m9qr3p9W>Vl!$vI792tI1IG7#_Y&aZrFP}1mBDvDGt_WH^i>*`q`JV*M zPoiA|vG;g}K6Dg16*X3#IeKJ4e&C%h3@Yu7D8yk)W ztjteQ4Oo(L-Ty~aMsc_b$F7d2Ovo<|5BfA1o`i*;k0-|XH(*`U4sr~tB!2+p=z;Bl z*oP?Ds?TH=1;ys>K-+(f(5m)v(+#T_JX|i`j4xMXFR>ZTM^o|-$sD(dOTkY%7;k_4 zV;*BoYF^w;G>hRuy9oRnbo@6w*jE&X2h;_u)H=F}@L#yNJz({68rCWJ4_|=HHrDbw zBi3q!Vkl8xqc3l?ufR7DCF*IMoHyE2FnQo;!^%fJ;J*po@=;jr(Q*}l^}_%TMTOcW zYj7A?g9TuP7{+}Cqa9OC6sAA_OX$bS`+(oZB>jlS$(N2EQ84*p(2r>JG48u~bih&g ze!%=7dc#kNzA8!dRih`Sq3EKQaD%X!R;*37;xuNTC9SAD4OUcUjYdO_1S~&#QUr{V zZLH+jnm}xMAan%!k8B)!^5~+1vFTtM**NCp(a}NEG2NvHt!~8@ELelqObdR2gELi8 z!I<>X6IxKb=zoUwV0+N&`ZN4RjmT_d!PxG|v8d6PJ{tR;_K^j??%)r&KbVk*`PDG7 z(mEmvF$>FPgF)cSfca%{zukf6V<~7sS&pX-AR}Lr!mNUIZmMBeS%x)`({-}`k)CK4 zN$s<9e=yu_j=Iz34(nUY8-ei1bi=*HQI`r(ad=8rad=!hYI2ly-=&a`g0#?BPc|@k zSQ)H^O}Z9Z3^`(;{q$t}VJ$QUdyXy$W{sYB?x^sP%L3u+aT5BocB9{BeuP^4dyaya zMjAPCSecjp-y~L#3a4TLSp#Nhge8vw<%$u7S|#nj)Y1pCjpS3iF=*qVruKp{`J*Q+ zK@3uIM}>U@(q&Pi4C=d~;7;gq$ag?=lj`U?|HSca96K?rhf551iz75u7U@x=-+`bt zF}>J+D3~%41KV{*px>r|yCvu-JW!0|-F11SvjzvvZ$#)$9aH6ZpMNtR=m%f_k|rDHaXI7+#*k)Mp=_x^NG>j|P?kz@lmjkZ zrMMhL%BE6tRH~hU8B$A>&;ga2u5d!73V%JW#R9uyQB(Bmyrw9={!c24zRvj(vm>v}$l4m6 zYq*;op_NpP)v-kCcodBpo2Y*>VO@s~anNv#IB3|vG0ahlVJ=ZA6S0rO|5l+9Fk1rs z4jJwPhBYbAQTJz{p|JP@DiIQ}qh=;T`AG#v$|SV3NggiWn$dsjnkoa3kPe4c<)g?g z?`;m_{7^r1V1L{Zn(l2_?Hian&<{(RBk3b9&zxq&TF}O-_OxvUm&eANqL{P_bE$yL*_;FoHi>1}9JCgeLPcA&8GSx-8#7!J{ikZyN#jH9e$@)n z=B%R~sK`3$8Z+#_E=Bp37~#w;BXoGUVIFlnaY_%?bS1a7WB6rma!Qu>T@Nw|^lJ%n zu_K%3L9rIu2m8U@QEYDunt}G4*=Duwio2^r!OtuwtmVjVDIJ0MX zp`&{4J)4`qI>Y{9^WJW?t+pZ8{wt%+-fAB1+iV_h+jM@VGnlas9Am)Y@nKQdXGA#D z?hDtQe8XF8)+D*%s~cXRP+x5BSXHzTf!GW^daDFGOXm0pnOm z7=(=d;h7mP^*=PUI8-DVt`HsooH%HF!**8mbYc_X#H{(O#%)`FEYrN(Wu=)EgS8R8J&1qi; zwt*M7Oe<=R^zzv^DO=~;N zqB!CP`po5R8~YxSeD}eWk>Q!$?Y|p&Oj)*}!!nO2ZrNI2-{nb`ZM4QXD^Q=g_RZe# z%&WG{s=2#)Ux#J3`+`jwn`zk*XqRLe*($*{#J&k^1LwE-tmb_Q%MLs`I%5+oJJ|P# z*E}eTW34xXOx0fd`l9gcF8{a*+m7a_!*5SmcKciYj4iOtZ!Slv`^^>JwvW7hkNPt{ z@_}=*5BcT!?Hh{1Gf#SV^H`HM`t4ggY^?cO*$C@U`hN30$^NZmpXsbYuR(?R!wUzW z*K_*4UbI%9eTQnUGtyW4GTKUN`=LK$2PJTD_uID=h39sAs_>CN zdz<&e@b-=>?K91vu~Qn}>h0U+H&=SwKK7fty?u}QGmiPNDSuM(A1(~P(W7tr!a(zv zFg(&>xF_A45ka%{n;&@lelPX@DrK_M;}5?v?Dh-JIpl5r@+_adt$A-+ZL8;vl`DK1 zUrSq$leF*q{*3QZDxC!=nL(a6JxwT?(|z_m&3iJ?9c#wb`Z5mDvP1s9>-^^X(9GNS z2e9~3;8rUNFHHT_Z*I8|Jg4~WJ7Lht?1Y|~zxQVxkOsAQ`-1rg$@ZOO!;EiAMnxo228fD)^ldkLK>(a@jKj$|5j7g{x8dSUItBG$-e=pS1}s&tNsRzxwqLos2qAwBu)t z!q7;QwsskR*9j(h7B&5xNpjp+nAsS-IDDc(b5_R%8040KlOm9}F!R*DzR|oLR6NBhCH{zx^9@lGDAM zq-ZGpm*rCqq%0iyowQST9 z3?H49EgN-$vR;nKb5E{Vy6oK_DO>PkWzk0F4r`h6LT<9MW&7VUf2`~PDtqLjm-ls2 zcKz^-&dTa$KDTRq-q#W>vhN1Z#&z5ZiNHHpSB zJ*D`MCn$`Go%-&6{*yhO^v(V7)6V+Jfo5*k_Q|iDd!n}OlYc^6gWCS~hBsFJNZWx* zTRr7uuvMbZ%#LV##S_5^BYpH@#QyTPWFXox>wwI({C}MpUD*@lx?cm zbc0W>Jg|;~4u^gDYtYvQfi(Y__cNac>1kXtQdwi*e;K%{%U7EZH+Jggq}In^W~oD*PN*5pr6o_Wjb}rb!`bf zYv%0u_yj#sqIpo%b?~ZxCn@^z>S!lL?eO4Z{grK=N|g<&ykz6%i#w}ab8|$g+_u@5 z(VE}JRxkuBSjUWyo`^O_P_TzFg6T#u0n2fpy~$@^Z5F0dXwYXCrbC-P=EO{+wXg)E z9FGTu@L^)OV_GUs<|BpEZ1BZk9|UhB_W6}P<$j1;!uRU2{lR_~*JZD6R=cXfYFAZt z3eFgD!+Ck1H%PC+mpk0^q1WjcP9+4*o$xEVaIC_iqL(0gvWi}S zXb%-V8_`S^?TzS3D%u0l?kbvwXok1xixgkOozC=k(y55dNIZvJ@|&br%G(%xBBdc1 zN@1i6B3&4R}=nP_-C?NMGxunEw-j09jm;yBYhXrUsT5ZP4dH*_%rs*jAe-@88cVG zUn{N)@yo@R#peF1t;N<|*zv~1a0&aO*xXz7FNg-LP4t(rSh0D$Y6h~$j(LYTUBck@ zg)jPUh)kH(QT<%o+iXeubLqx-X&!*V@LMu~C%f*iNaOW@K&Uk<7{1_dIPBGFe;u^$ z&BBGRGF#=t`21FGgdW57;Vb#!?HTxA@Q^_+KhyOLntNisE5K~D`g55tFi;-An-nlh z0>Ne#^1}w)?YPl491`N+^Ck{K0{Efug?U^2W%!WoFISSzk}mfNF!Kce8vHXS+EramGACAcm(IFlN(;j_!(cp-=!$H=`nGRg_0l@%1M?;9lpb+aZrwbT!=FJbUQ<&rOz1Y13KNH@j|C- zbb6;u%j;lu&Mi7oK}qX%qMV7zdzIlR6tY2LcHo*P2OrzSqEYH&#yGgRsS)Z% z9*YEWpLiZe?E?1w0r#hlsR#IhQ?|G8LU}-4@T#yXUeu9yDNCN!l%uPuB^{?39Cf8A zq=0p);l3HYsZ-sajfZ%0jBuU0)?l`(x+{hisJmsDrckGt$*=(WOkAm;f0ZKBAkqj8 zaoX@M2%fSx6{peYkbG__e~n zh*`eER`nb*aMYcHYy;NKFqH#FWp~zHj+pT%8btjkjygFcqiQj}6rvXv=3$XrfI0vc z2hL);`C^3iV0J0=NF~{ppWKR*2*%((&Z4aE%6n zW9tu(AhcW;ksQh4NXiEqbUoBlCVF!ovK1AiMR67w)*z=C+mTW;!AwQe<8nvm_ml#4=6#g($F=nDDb8}`Xz2wMXi|ha;Fu>KC4spm>Jckt zOrCoz5O-+sVDUG^#613am49B82ubA;LuF!zc=llmkw8P_N?`n`wzlL{0He?4e-hcj zek&VBH9(Qqp$mq~$PEDJH$_s=Y2)WPI?d+|vi)&S62y#-y#_8k$hF~i@dh%-=jANJ zOvR^~m~b+UJ0_Ov+LPtc%ZUhZ^l~}!!|^1plTT7*elZZ>;1@u%85DDop+L1W~<}yJu%e9%S9^$Bp-PCb$%GFr-Hpm>y z#oK`6z;@Mz>~y!CWo76~862rPUx5_d^O34NR2D z1P@i>v~+Pt0%HwnjqprGcJwmxfK0eZV+~#VPXb)tr_fF&OSXlQl7`pGwCmF_NRYf) za=04Ef#jSja_a2&>I5?r+nB(p;gKt^(9v5RPh3Yc)au6jE|)i0yYPsp7)YU5*%oH6*uj#~uU8_*LatA3wVCM)s2n4lD<+4LQ9axVakRpJO zl-cdJ6sl9|m|24^X2as<0Kr@g)j7XIRIZ2AVnr^A>YP6S8ebK8z{7uB74gVA|9O|? z;BPQISBi?d1Ll8=`yDHGe_!k<#Cia_qtZD68bM5e|MJm{$}@S62Mr0Zed1-DJTJC? z9dPfMusoW9z%g|^I}EI(c6?~71Zi$oPQw)i&Kh$7m$L>7&O{;8@~g-MOPhe?^N@~d zxrBt&iAc1qGnm8@Y(0?h1e7_Zs%6JgwZ7s;_z+Ry%x;Ezt7BS(32UahV_Cnk61BL{ zxl=M92lHCQg5lJG0i24M_HTkg)5mbHn}`!%2OLklMv%MZ;f$cWNk0--8}sx?fnrY+ z#fmUO)rPGy-SXgkM0?dFaY?0W1o#lYP%reJ)T=*~B>J(Kh8Rl9ew6BKo93vcn>>w|IRChB%d)vit zAi==eTFsUmXN_EaJlBKS6ssi;Dd~}YSWUo318IeM2tiYri!cXa4nj`6*$6RG7G@zt zE```Ob~VftYF(17X=l+hF?q- zu^g*LZ)UU16}>0m)I>FF3H|#;B;?o|6Df?g7UcoMP}+phqtk{COLSPu5Dx;Ck+@s~ zD;TnJppe|7XY=?F_pyK>E@9Xz5tf5P5LpP*jm4|6bwLBh0gDu4gTPCHIDi!O`Ajj+ zy05TcTijzudS?@GWO07OqFNTshs8qcQq-Mc5e zWrRB(%HSy73n+rh*=JBH9oQC8i=l|adIz>e9Ixm^Ek4s}1hND-A_A7hW1)Yi*CNg) zAzq89I+y6nPDCHaKtOcmNM5jsEoYvXuqczGO5!1j7znja3g05`(K={)ag9#b#4VEb z-6AgT45#sF0BLE8x<&NqOeJiRM4iEoHysg$7KaMcaY*KUUBzf*6&1$difVms1|GGP zpgD{uKS~3kqKfp$=cGhu>_Jo6J20m~L-7*QxKO@df_I3o9*}5gCF+TZYFgHhm?(+3 z4Ei@>VzEq0Q8ZqR(dcF3#RNuXauw3iFT^wif`hIW3fpYr9O71U6v&I>(4!n#7I20& z1}~V7pz?H_4NA6V8jF3srPL7B6H5GuB*crnstB!H%cB?Yei7wk(8CTUChkO8G2F&73$4H= zlchcQ){3gFnyaWBeX1g0y;K89Q78Os$^1^u|A)@}FVViLOvIb0PbYwghjLJE=*d3!gE@}Svs?&-nlWBv;JR}aTqipmb&UY}2S1!ce+U8fwE!&3MowZY zj*R`xjT~*!=u(^*#31yf)QwZN$1pM68tKK>}Y8+1nPL5%dH!E6gwF$S1b07d;y%RmwE&MWk%&&w zROR9ah>VUG0Zk$olL9c_P`E-21Xx_cKe_mWp2a3vB%@oR1H`F_NlAJQJDG2}7vnGH zp=r{PZ}sl@uE%~U}A<&G--0OiHA-A zl8s7Bj=oxBa){C-S?}_(CZlyZ-Q(g_%p46{8@M9k1UrQKt(IaIN-;df+${bADq<*@ z29iQ#X_+$7rYYK!c*UkpK-W+>?Zs;vwq6sGLHtbvw`d>@5wlJJl0%$z88lJzBZxIg~LNY?xykC<^Gt1X?QBN1^XV zz{j(=*Ej|egg<`vY7BYhvsb;DS*!`&P=3uwe(vf<5b+K}Onih`O+iWJsVccrCMz8E zG!^*8kO7ri#Oo5_t?Zo){JjL;hKJoiiGfs7)=J>Dl{Y2>?~}j@mA+*5Ujry#q#Bp> zBGqq_*<5i7UlIj+Rh^m{xcE9G4vvGx7Mgbg-XhX?X*)qDwt@(f#ReI+i8ToMbVS&PJA@r#5otjq8`daIGmkXGn6NOOggqX*$ZG&J!n5ULEo@6UY(wD8 zVrX6PD(=4GyH;cbXFJsno4_I3q%vC~PcR{6Dx~Zj+knIa5f?G5q_(?4@kAdNJ%ADE z3G_}%nX5(e%ch7TA@=akF8=wHe>U^aM*Pu2rEw1+9mzn~)<9VhH%g){Q5*%A>p@vm zK2jP9O4+|IJAsm2Nt_8_G@^Oa2}##vTjg_dDB$RwRAa}Fd&CGLWRK_uM%g3UunXlv zKCx~u0uj4Fn`lO?qerxff663!#9|ZzdmLmSpBC}FM93bI0M<#M>=A7pJz~5B${vvb z{zd|2k4Uil0hB%BnxytVg1N?f*ZFaZ0Z9}&XxZFXi#uQ`djj_kDf@X+ASQMINV_&8 zR86rz$xvde5V8*h2fyL0fmOI=CFfR5LZO0`$sWwI!{$(;>mmeV1lhu_lhpSHv5QH| zl}QTp1*b|Ldr2jG%OoVh;e?LaFiV!2ycg@iQcit-!nM~1!0p(SS0jYDv=1b|4^A^H z?H@W`#^ppg)_xV}gN}NBAcmixoLIN==iSx3*}u9x&>Ty#YM58h-R=ne9?w)s96fbU zUxk^O{i+%v`&A9oR@!wsmuh-sYQReEC_Hio*;R98-xI&PowjX>I>ipe#5Vr-rH@3A2EZcifIBkL<}3ESDghUN)IuT|6a02wPX>LCAKz$v zQnrk`rg3zcj`KPE-%#cDTd}8TIMATlO??K~J&%#{ zSS=l{(cU$Wl%a#~xR^C8!E*t|AryT4ZmoKU^9x%gt@%5w;cgYXo$f9=0 zy8@p;=?!O9-9Q*xPe;DT1@o1lq5CyazJhSuRVE&~rL&sv=ycqS*N~3vmECxUIC?W= zK{g9WOb2F3SCkzgixG+`fH1Lui3gdm(oTMX0X!5~sbH9K)c>X*b`D#x)8iH*=`@1u zUHZ`&7kIg4yIwp_DQctkBBES%$RUQ!U7ReDTcVeWQboqhSv=x9DvAMWm>33(aP!X~ z{<$ncD2;dzgpt0Ocy;zPTPz}QastRI6fXlvoi?Gn=l_95xz0o&T+Ax$I!AshXcZqb zX}Mz0Q-M}-x=J3<$#f(mwbGNIx(N10FbS`6lJ2MG?5D;8A?Iv6wD_4h`&kgFIlBks zB+c2!fv73KoXsjpp0jsL#0hiudI`L(YGCp_yF>!7b=3X)A|)a|0ly*<_(hMo8Ug)a zLyIth@HH0r>tfYI0*-evP6wUUhkUhok99z@PsLKt_M!nxgdiqN4>>$ z9!9P*PFEQIG0)q8BdAn^I7u}-J8K=H0lmnSlKsWV8Njx?K! z8q(mnRiSbrqYcg*H^#!KTI7J33C^KPfr;N+9JNcq+`m^gyQ$0 z!jw^U4t1#GM=Itypts}|hk%XjU|UFZW#1qz=3Eu%UsTTHdwy#fS7lJfF}00;Rf{L5T0L@>k9z|F!whU->E|hr zd<$~wFKgO{C$6!vZOJo(}YJB99PJAV`+!DQ06hKdnVOJ3! zYs{_U9ALy52{fCS_!rR8RicXmvvT_)8hulXU^@^qNb|DTjzDac;*@)vxGJP0A1Bs+ z>|mmd!27w!fx6`}`5R4`jUVM~Tyws%0$|R@@|LrEwWB^=lA|=RZk>E8y4zbbVTk3L zgFr0#HRJK3>TjTY59>v*;a)ufenm1a=B#h4IxVz#j*RpOEoK&2FmK{`LK-U@j}}bn z2l1s8A9n468%=blQI^X^5JvLicy6SI7j7qHDDDN!0gm^JA>ec>Hi)G7eH-PB6U~y- zwf|WqD78b-0xF^zdGtvfy+Ja*q8S?$+iqX`JqZQ+$n(-OU zm}BMX+$zWvR!o(e=}g7s*GxBe`8H3${ozAiNZR&{lyp8NJqcEv|LV8h zhwI8H{+-uL+(la1`&CA>$N}sEVr9`t`AWQbplyqLMP7s??Dk0Zt zA@>3s5l~M`!gpW~8p#%!9y(m9)(&r@_(o>t>Z92Pk?kKKV6tE*vdNa>&aNy4pCwx+?I%^(6=fz*g3{01*oTaM*rB(I-D4zj5B;4;-lqgVrv=Xk zb_r+Z$OCwTkG+LeV=954QQ%<3FitZ}p*WV99A{4KJdV&M=VEV(k2ENPZxNNG@lH69 zGVuNx0&zt`PHB1cdhF}GHB)eAy9j5<%Zmq3slXfTN%O$8o@$a9f1Wx#u|)ndLt?Md z?G&ED9$ALH&B$_?BiG+b&%vb?RdcwB=9YB}MwEyJJiZd)J=$_x)nhowUcvM4m5KcJ zh|^_$@|4TR*D>q8+-v^oG|p)_3g0Hy0_x}E>-o?mici{d6r*@CA1Ds;X$(7T*dy+M zOnyPeM(HjTAI9%klA4yM!f>x})ZZb8F1gjbvE1mlg@eCka_pBk`L8}(7b>36ng?KH zIC=++!6Shj5HaZ{CiVqTKrSx!ir$REOCYBUMzX;xA#x)0;*vy;Oy&}9gmJV2rl7%a zcd+qVx;e(fsb1$?t-uKiyi5%=Pl0q``DsU7ugWR`Z56)lcd6m*YqB7b{3Q|@9KCxt{BG_)A^*McPVY6)Wr}0yK(9;s}iq0 z;!BZo6$}EL$6J^S>AEsk`Bm{wPPVvwZMZ*j)c+k5P}GN`TcjxiO%#XJ<%_&DUabEW zbv_X7F3to_^u`~JmfHVAqT56_8SXUtmtcN5lEQ;F3&75QhSjiG1`C=P;A2R?)$)kG zd%a`Y`+WfFx7U(C| z)RC#=Ygn&x-tyy|ALyL3Bt*^>AWl!@tR$FfBOf;f$?24c3>$QYh)$2^jrgntcuo>{ zUOdiaiyltc5-5ciK%4ND1A?(O7}Q~VX*nECl%2muE}{^_!Ij7dQ~-xYtm?dAxIB+v z%*Gh}@wloBMK`BBYjZY!hmgxIa&QfLOHW9C4Ewam7{q)HyB4GW*o=>M1~R(Qn?;*~ zX0CcYMJ1yHK=zIz`^;$D80d?KpqdPRY;7Q~X~(x*IILANXznsth4@KOEMWRJd&54b zJ%3}U-BWdT0uks7=hG3qVvVP0uy@&o{UY0CF`sbST%56&jXC3eRr46m9QC~+O_u@k zWqBI?@M^XyWuw2U1S6aZ7)BDaR#3C%on4G&@J7T^nCjaq8b`B8InzC`|&V100eZw#xhD8y9tu!4kl|lSqnDy9-Mj|TG^vrPt-z5`On*$H(Vicc!oX>p2`3?(G z^{)j5kc{&Y-0kBi7}h`OEnP|VKo><3sv$*clqZi241JWsQ(ea{)9o}?gOSP>tLa5S zA=P;B0X-((E9QtHx3`!E6v7x>+XO3c=#TBhTy0p14t_S&&tHSfC%Sy)`{=5F<8}19 zQH53HsUK2sswI9Au;gTR%89`V@R0k!+jbIWl0u`Byc7?NB)wZfD!RbvBRm6-Plf=*wI zk~*ydljsg=Yqso=j`?_+lhg5RkgIK#In7|5pbFp$m;tcYdWl8H)8TKOj4)RZo2nuBJK_#qLS1l(%5YL(5oiwsBTrNnB<9z zKF~Ek<_o7@6=Yv3wr0?-!j{x7_E@Xe{WcjN-WmN3p4M3t4EH`?q}hrbi!yuq9P@E& zel70prW1wh_+Irh+>Ve9BK_tXe`99G$Z)SNK`0ElODMMpKjV#u(fsZZ76nH$`gTbGK;CypEZvS9xPiUh8dg_}r}zZ{#Svkp`jl zRG|Go4XOFDUA%sl!tdjZ_);i*!w>lI1cg?2BrkjN~S{! zj5`&^Nxl8c-YiDReiE$)OwajACyf5%_id)n$7jdPL*m;uenXO8h^^OG?p)>sO;`!c0-0ByCZ%(Zt6a( z8`V|Gjq1PhcXg8+)fhG^X^8G0cD&*eHvywr5gt9FWyu$*)!w|(*BeU?f zq`Gag)x9GXLaSTKR>zW;Wi=0Z<{#=9Un##%>x|*ED4d!O`K`FA9$(ClXi4p6kKxfL zwn9s`LU-H4tN2)%T)XmUo z9MgU{m0eF(zG|4Glk|^kj|Nxj4G$@hYWl4P8t)JHI>U%`(gLD@q9+0XF6gn zUiSjoc9+UFi;I59!u=vaj%ihxH_=Bk)zEw^F8jr&i&u-}z&j>{AnZDu?((h@@j$#25n5?qz|a4K^Q^6O`hH+4K4xFG(IABjGOtiWryd73|*Mi(sH&xrk% zF^3QJ%*zBLpfpbRaZzWhoQQ>)Zhv4c84*q`@HrMavDgGDSSytf(Sw#^iU_CqbEH^t zonJ!a_h&e{+jTMzQjz>xC4J@|aRs7YTxo<4ka<=;hvMJ~?%#A)w`YgCT{@}zEZCvs zxarUjk8-6Ja78*Df~coGuIKyoOC#Uks(hj6AJ0{g*L|JzEKvl~NeucTm870efl%s+ z>Avb2tz#XwWTm&x}++m2>)Es&MP7#3Fh^Ec}DGcw%gl#z`?&ce5e$_s#UX5dc@{||Ba z`|W+Co42-=cOHuGi1{0b4EHw-Im;Vc?i;KwyHqvDryGvxC75%1+W8Dyg+Cmy`vzm3 zH}P)fc_-vG`NG%WUAGckZ2BZ={=gu7M$nq8roBekUiU@iB_JQb#lRQ%-%e=7_e)mUJi{c{<6~O3)N954+;GUABGDc0-2TPXv5rvl}P<9;a zN_=kYwjFhUgP}|ZJLcg=Oi274a{eTPx8?{QW1iqhD$qfRa*VHsReAP7dE%rojLRCC z*Jp5Yk>TAiWab-;>Yh0KC;4%9S&g?vjeX9goGi%c*-=P&eTG1u*S)+-K7Qu$*`YC3 zP4Wp2X%4ePJ1UWxIO@;9Dw>TY%V$T6@!4Cj4#cPACsLz9Kyx~6q~nVNbLh^Id;PF%|TPmUdXx>|CeEG zRDhs0bOE`o9?wf5Xg|1nz}5|Bti9^K!jA}3Jq(OEM3^?4j$Ju0PG=0An7fz$(4(V$ z-;0|IIy($GxoAW<6OWSvX?H4Kag1up@z8aalqL!lBt9Mroz&yu4wb}J+=~$N##Z@o zv_=kxv$T@ecUH1XhmzmYE31`!0?bfNw)#RmX&N63p`cwUxPsIe*v6_1q4LZ#7339o z)Hv**BsoGCDT4SwI7}s>;1i&e3f_lt@DEzM6+Jo?;hicM7D$qI0-V$W!%>O2L?^;& zDO!QPfT$7hJ;ahmz~xBl(#F77rmNMLa;LMD)g}kP3N-*;i~;aXd$bTuWZ~vSyK1LE zYv_zg2*R$<;Mx^8Ns#Laf-va5I80JJ4kob@C^$?|+nh(xK$`GVAn_%G@Bkb6yM}0w z3LIg0Mt=Y>^pU1Q77rZ1lc{&8@D|O3prHF3JY$Os6{+~v;wf{~%>w}~{!o6e;$nGt z(A@_Am1F)v+`D?HKR6t9rlgwA*Fi1Z#QLV{dtNEWO{bkd$WKFtIif6z!y8yz7-mVC zidfZUhPk*LD+=*~G>v`*v$g^N!>T15YaLuPf()~^T0%{&BW@Bi$N0P-A8+^~v(6v- zwd?#A*D#BMq%0bw?6;YdtuhUFHmj~c(VzCHEc!P1W5v#)ENj2i zu_fu?i)`60-2rhA`hiCz$5sU5yCICz*wz{h5b|HLQ{J$qD?<*VkV|o)92Z8hOjPA} zO3-~!mhWoVuuj|1P)3#E9Il`+d{(Vxb{HT$i2qi{vk-qo$MYilFz@kJS~;HaEiy3wjVlwan*ktJ|G(@I6-a|&?ko*3h$kyzBvryeNV7gOgN2&R7TMVOBhDR zW4K_Sw(nrKuE56^-jq#XUtE~pm zT%Os*v1qe3b0)KE{wzIzt+};1k_9h=CT!l7mA|1mnr&{gW-Fr4v-43jirwsk_iCC_ z$w@QFA}NK6s|~yItFSz)`M$hbi(!juZ%k-IUGp-#U|C3M6_dBf z;+G#3-vJ6kkt`8e@!>%|4QsJ%{pJD*zPma8NJX2u!nnJoBjq()efV{lM}21d68UDu z=gs?4?%meik9Rfueaf{h_Y|AyC&lD(+|3a8D&oZErsl6w#3%(`B7bsuyVxG5+9UE+ z6e8wm5lb`#ttwC0kiaTJUc4%k1|=MYET1xSE!SC&x(VIT+10NqCifrrTE|pwD$5EE zz7uPkC)#nsOZKinKRB+@BLeR4@F@76j^4!_9rI^YvstF7hRq(gOZ36P5O#xAkWh?A zG-9oI+5QAuedZBI-5)`azXszOyxjVG2ko0k4=NSp5nQ~AqiW=VYgCQgS0HPIk9};o zQbtkMr5ZU}A*pYcm`OC`R2Z0SbM?3-haDzW{|w-w6*rq0eWrb{FM7!{2ObRdg_RWG z8h}6)Q5aTo=&Ky+_ej~Uo}@sspGtPo$uo7%EMhfI;?*mBPO{;G4PLxj@;)7z_u}eo z{B^6Le1>Y_70gb(ZiQM)n@KXfXSF{0fh)i#C&9B&f%xp_uh3zh4hwYXVMyVv-PIU4 zJdM?gIZD3akKb5-3oG4*!#vNq3UDA{C%#||n*cNm-@LobksS67{ z=a-JPpugjQN8LMe-hl{tumui!9BSdgO?jY&2RGpf>U>n>4ap(Fb7@qlDLuMSH><>_ zCw2B2Sxm&5ap>I>WUVbk^AMLylU%nDgerT;g%9T_3|qvtxud;xnT+d|Lr0Osat%Tt zMuQCX-XI%TtN4mZ%XNkpl8+?bqWE?bBw&~c>$^!0kP4>|uNRADOk(CBFEIvb-12-m z0cQIULka#sG$Ii7{8N)4SU`e4GQC4g7(~fZ9%oyTD&hDML@^IBJbY2|5sg9LjMdHo zL8Q-r)U~eHx5#%f-q_k1ecmTb%R-gplRm}51r5~}ITtpG!^|$6xVoFG47k-m2uPKs;pQl@3kMu);TZ0$k z$L{#?aXN_kFLED#`Ofhc_BGgmO7|yx(3FIitc$E(e<-%hbm&>snAy``ho6|;3UYtm znn*Xi+=It4?HEJo1CO-*gc#1BKO<%$*eT}a6U59w+VK|N`264KV&TX3DCD2~iQNue zdPZJB+VK{@iN+231x+5rqgE6$3t_U520nHbb}bKJ@!ku!c@ba9_**L8#CQo7^&MNh zo3I_Pya8^3ZPEqiv5gEnuNv9tJfD7peEJPe>hK%jP3#L~(b;!Hcc3tF6z5qM66(sJk4wMCZc# z#aMYo&X?EvT<s2?rbn$W#ChUBU314EQ5wr|b1)&>AlGAxk`21v9D+fVHNBbpsH{ zwp9TvGNfKlP^{- zGx&>HhxS3+@T7FH3*U1)j+?I#7lKgq#UFX*1Ndg(x!FA(q2yc&PM!}zVNT**>&i&y z^)u9v?`>Y#p&x&h?Fy;jef$-Py&?)(`kl>PajiE?7`3jP61Cx>A8Rar7-JXoMe*+Tgbq)jp+qpK5977PD@V2g?|x-$_)yO93?#ZodJ_2_78 zNGO=CRenQdqE-F^4P)SGXNZ4@a%k64PE`EYDu3ig#d>wXvJ-?kiD+&jig8T-!}<(O zclIUpj2*(=k6vrjP(2s)cn|I&vpIS_&JfA=LGSA~;3;%08Z>MK+|pOs+iGKU1v^5! z05^}1XdHB*rvZB=oHVLELQSjI8nw-g@Tb*kk2B_|!#8*w_c~Pd=eT4gA1-TbL_0VS zL{}P?#nM7sWBD0w{F>S-yeMq8OMT>q(7ihT-sXn`*x$Yuf9cN_vqQYZu%pG2Gflh> znxvMSCjOuRto4BVht9vJXz=$xfe*O%W9fRrcypU%jE^_h$<$4_jQ>gHsJK5UXx;G> z{dwFx+zqjGe?E(R_4tje{Z+d_o<+U80ftcs@8ebdo5OYe9u6A<$I4c~BJr*?4=)Y0 ziCYnsKXQd%Eh=FFwH6wzQT;YElBGxKi^L{ur*rk0uPuz~Bj^ zhv6T3oL?7vIp(*JxZiv7_xbqq)K=R4@`^7`QX>AKjHfzP!`9+e5-1S5hQ6)`Gms!_uit)a4-2+<90@LJtKv}mKE#%dL-tr0d5EovZ% zW^=Jht!=5bl~&uT6%{oRB>04&R`H<%Dl+SWV0{2Z&F}r0Yc>gJzxRE=?%(f^ zUtX}+oS8Fc&ODuYI&)^vnM0YI2_w{I-@W!LZ|l+yaVM3|GGv8$iIUT#2Yt`{FLe-s zUs!(H$jDmiO#ZWL%Rm;<%}5#ovUWE21MkY`2S<}1j9jH<(#1hAlvZnN6iONABNKX^R&C^#aaSSkuXrnQL@c?BzK%rJLQ8H1S5z&+;IZCZ&?@pUR&J2vWfw(C+lU ziQjwI)9PAQlzolgi+d^c=l2Z9?-5ykzp4Gj)cz`6`@0oPnL3Nn{$%=$uS}m6@hz(A zm{45RUR?}a3S1hr%kC1}F3ViI{9C_v`6(jH%3XGfEuJ(j6G zJ{`2j#o$t_7xDR@+v8bkkFnnNxJvA(J;u}?0G7=p@ zPNIjptbB2VZLMYfTkG$>p|u_gQyLeZ6F&JGAlS9mKK*9fUbnxc3hSoA)+M@w_WC*; zW;#t9pRcu7TR-*&)bq4>FEu{mrA|jncziMYNm2&75AV2-S^rSnKb@93sUX^M`T^07 zvxY}I&fCA^ykXIfY5PSxuG=@-@%??G9X~9LwqMQv%lC=4-?(qIedd1c7Y&QHU$lR; z{d>cs?UN3G3KD!$Q4KcW_?FiA`V`0gn7-)b?8&Dr9)x;v8_LP~>9x`1B(w`ouOqmQ zZ$007zEk;5<=eowfpM;h2Tnt6RY>ff2EqCYuQFfloKZ~?D~h7RCa z(a`Ym{OmuWBM}-lp<`BPzX=_ehR|!cDzwjdehSC8Up2UJ0zdmqXuovuz7yJK4c>1; zdt&gg@$FLv?>~W`;S<^?4?aMYi$u8y*Ph6fDJ9z`B`5DyK+=0oN)FpgN?m4>KV>lK zPbnyvQ)i5zNIn)$u z>1v9j8?YnPHh|)c=RV^lSN9g`1EMdSIWIQGFVcX5= z@?erh7j7yw<9eZPup!kQDRAFHeY+!N4lK7{_E?*7m^{S;Xcw^kFac~9N+I~&ULdvD z;(DpzaLU~F8uW!`o&$#`Ky)noLnbh1qWqoJhWoiC%-NbpbW7b|Pc*-BjMTMQ>2iKz z-m__7>_KAgLjis`PvL+gT>4GsG8<6&(L+p+%3VHLP4gBkhYsZ(%~R>xoO9MIAM?nE zxIfCqv859!R=IJBWU&kFHpP~9fNl1$sJzU{es2UbnngPIz&22H5c{(ntS76=9-ktz zft{&fAMAuf;gWmhjUygEZuhW*Tv*~_6ydFnM`whqyNedbzCwZxuET^BR9{`Gc+*Nn zQomIJ5z+n!s2`(8S^u+->#k+UE=;jj}=(249 zo=_h$Q-!lz_X^q!&#PZkq|_IIr{?!3QLwe^_xhV*c%o!cWiOw^zSSK|okqjQ=4(s$ zEKU0ch(5+&gWF~~KwN0+$p47!SGDiak)N@S({elV-ws>@I`Ur&Tmw7uR|l@Vj{NSx zmEV#7c;Fh;k^hgtwFlN$nYx^&RogPWaF*j-6gbOjk~7ibbQUOnU^SKOA&IhO&bRRE zaB2r$%6yY6CmY;JaA24*BJbofubZl;IJ!?QuwPpo$vR8}m$A9UnMZRxHKwhWFy72% zIo+>W8|SjT{lp>J3RC@)z@UdPa9ts}o< z=rZdV)G_o?>mcK2ATRWO^w3A}!AZu4{wZ*l1vVOQb~&a!Y?cyImhOucRF@-Cm^+Zyq z_RlX0wf;-J$Gr>kcus_(a<;W!5pl{mOJ8b3RLzIxNVZ++cWpmKD8`Wpks5yno2lE) zod;6g{tax}^zfDo=bsNiAr)@qBXcr=g>w+dNq&70c5XJzW}7J}?^wg6#L?-bpFTo> zAASZj={Bj)nv8NozrV|#o`?UK4GTK(^Mqz)j5_Ejm?FKxAiX{L^y~NE2MnV9f@rSa zFCd!w{k{6q22T`)e*IqICX)3OaI^yy!*mwG_dxMRCawffA-d@1OW+Jg^VY}8jEu#Q zrKYf`I9w50<3bKI2NPn3_XS(|Qs;sfxHw8YljdZulX7zA$u);c>baIyYlYC6Cw~s# ztaxgH zVKGj8Zv5jG4(@uoTHG%qp<3FU<8U%g$D!Wga2!s-ndNW+ZvBbFd!3uzsU}-5vDA!u zUTZ3{_H+oe`+IFNU4gdRiip7BmN^Z+Fm|y0cZLT$9_>HkCF>$j)I;5DIe@pU1Fj-@ zmZM04v3mkn5>(87kk?=U^)f+-dQEE(Qm|4 z;UD~k?Q|a#$hzE>euY~1k}Ks=79Y7onW$B%7o#e|D@a}PsFz1XW?i^st>ZqFNxIAh zY>uMxbY)f;+8xui!&K%!u`-PF% zUmBa;lM^9)P95Ryp{7wp z@=`&?sA*8YtXe-ecg|6_3(8$OWOYaY!KxF%wGOsP0ecQ^aN!XLYj!LAatGVC23+P~ zv7+!&2iH2d*ukEIiyRzraG`_C9bDjGH89c35lp`9mwe%@mlrbk;#-w9O|I2z`8T&@ zstpPxN`Qt$p*%}-DX(c0RI|LL$WopGPEpHFPu*Ug!(MAVwbZt034<#*U&$QQ&&L*~ znnb;+AxyDrW7}U9fg()6#6uHys9tJy(i{`t1k}ez8mDCWu$^wVb)nuJO>W%&QleT2 zwWp`@ShjuUZC`_e3mtD|a%F%ydSx`3_Sm1U8~x(ENc&rn?~K_e5_<5{u1rDI@gpA8 zR37E`_e7-b^wb!p?Ll9%65)Mwf3rl}4sWEf3yx~Ne6)4DZqn0#lq>Z+@+oHngrQc^{Gg1RmEv#Giv|e=+Jas z%GNgWsi?zo4}n8?p8JlEy{e=>H0K`eI>TALbinMUNxjOQ@k4&};WF2UV?|n%)mlZc zJdLvSwyE^CN^*|4NaatsKc8Acv1VRX@-1FHE(ksNM)deG^Sz#@qsfmN-w%DSGc>Zb zB!b+~x6FNu-M5gh=igZ(p~R@ild-|OTvc|F92>b#;$kYhVLXJnQzM~@Tyrl)RIeO# zBjr7Ervw*IBJMn81{(f%1{DLgu(Ib_jHgu4BQ#%Z9o!J)pD3N3wsKkfoig*yAbW{} zc2CJFEtoqLs~-=|)So$Wu1EzFJVw2PRo@VZs1sg(+wO;ab^dO912r^ni>>1x1Ab{*oR4Azo~(!s{8-&di9^)slm<; z3` z7Abhk-o&afCpm8>Sm)x*9PMy4Z7@#@XMZ!iFY3MW{u|z!4j1rMsYY@VfeNWvEQK#0 zADcRs#L)r)b(@sGNAZRSoxkg|{?AoDN;o$37|-3o#L*7FNnXX9wTUe) z&T7%9tdHxVOBNOHn>~o*amsaiDtcsYO=?Vc%)j29Je;nCX~B%#O$>Ss^&G;i3nrE} zb*oEkS{)Yc2*qO#eUR+>v4YeLhmt%&x4YGLiq!AZ%4O%nssurP1wK z#Y79BS$Q7^(E3Ir+J|4Cm*qJw$Zw=zMWl$kfOg(yHd=1-?_mJZV1}i|MG^z8KgRB@ znXf=i`?cNmuOR}~X2Ry^KJO;80`JTwvmbtDZ~g3<4Rvh&K?sMthSx4ef95E?CQsWK zdaTbn^Xgt=1L>5$K*~^$1{KZAp9dp@gAM)Q*R!v}&M0FsUKTusPX(aWAx2l+!`-RIe%HI1KU;-Y zNLH1{QZv~IWE0c80s(e(>y`Cd90*y+uv^H;7vsPm0~8A>XO}Cugo{$j{yx&4D>pz`E^+grtL zLBP}Tj;Ax=DSbKZIY7Rl-xN)Cd(@UJ4jg>fVw4;!Grhk8k`{RpZY_G+- z%z$_<^YDE&SxaXIfL`&{jB|r}zxEifyQ+Y~$Vs;`>|}{@+oX>b*T1x-SFyqiowmX? z#4U{e!4)Z2_XX)HXy{#m9lC&}226vECE5PitB+hP$#GHyU7wXTK97N|q5M+A_K2rw z`tb_d&E`>zq-)`%P)$Q^g&3U2^*m|uKLekxHS$$$MsK&_Ud3lIG&fpT60?Sjtr*Km z(L224v;F!HLuZj?*p|oY(J#ifb1qJ~(Er{*|0cN-8kCHf4~@sz^1u1KDw9jIKaY$L z^g!jNa;N6}EayZ~C0aD}7o$1`ke=D&~f7 zN;zKfB6p)+R6_A&cPupiv$)DMb4^Vu@4(m^ruAz=tsDMJnVu@`QZM;@-+8F#SNEpJ zW6UTai9Vp&|I|bP0?Dh|mKQk7?=p&LfAlWzI~l-2Qgg`}r-O zT^hQrlm7biuGTI)EeJ(lPhJ>-r<~k?r&Yi0<7wZ3r$3LkJWXMH-!#GmVq$^3;Au%d zJiTm{ZsBQQT~s>|j#6tsN-J%&%8LU^<3(vyKBpkfk)`CDmaSrP18ohu zIt>Xuu*Tz*kvGhaB`_;Q3s=}Hh`EYXZv7>iBIV4o2ZnBbmxA$9Lyx24y-V^i&#|&+ z{i6shJSCb>BWdlbFgnn8(vKc3x;FkeE*l;+`spMJpOKuNt~Kwsz1X-TccmKv#_`JC zO&X1<%3uDbuh`yz9$pD9_)?XhunlicwqD^Y919r;r(@Xqh`P zS~0pONsHh9X~|PCe1TPJ5W`TI03_QZEt3^ zX_Cji=YCvOTNZ3d^5nH&xg}!RdxR4aa~J%;mxhHrIsLHIr^M;20|lxuIAroGmjsc1 zr$|2xA`xe~MGE^a&fR@+borw-h?7#B6MEy!3*vmw#km^LHsi*P#)}$B$Iu!{x?+*kDKOa0^e%U+?hYT^#G=AE(eju4xWzp??=GjEq=%?Md`Brwm<)v;Yj9=1qdU9N+ZfY_1 zztWh=>@m8>+)hj_DOe}1WgAL=UMg^FCbk|wf{Y8oxfy3MSQzcvCSSbrn6BxMGmXs2 z@Qr0FT|FZtCkQ#59(3Ra246x7@B+N%nU_80Fq)6Vu(8ji~08%gII~p~Avrt82 zb6@dnsP%5@PUA57?H#W*ws;lKYJ9uhrmnrBtBIzC&@XMt@=6$7bzD>w%u3(Qu}2?m zQ=s-lG3*;`Hj(T%ogFdRs`G*!*>$->;?`@weO%^gy*FoBM9~>mnKOhJNFT4>8|C5u zjK@7i)*&o(8oa9HIYs;*5ldcJ=q+I}*+XVA3AZwy8dn|1i79^$rh3d&2(fnyS?$?e z2E-kLj{I}yyOX&ytwSesUf|+n?v%jA$=nHni<7xy0~aTAC4q~Rxq}1O9;iKKPv$D{ zawl^~129t(zo0mR!aN*Yf2)p}B9^+;5DvY-uJ; z*8~?{K^TwRv_4DF=+2nW76mTP=g#Q9F*42gEc zPo5MlkDoLtVIm!glP5*W6DLgywakDWR;Ahb*0d%s`L}>3D>!If$NJ(F{&CfZVK_4= z*0VC!(-mv^44Nq5>@jIV`Q$;+9N#f(k4fZb$N2JDgCA4p3=j6;$2wWl zfLb&8Dz0p#E-$wGQSX_J*Y@-ftqByD-YlFhy=I&)y;hvr^j6}|rnlO;U3%-4o`^Z} z?_H@qn6LD7IzDD5sRf7MS8|=`KX=Sp#&?h7BW-Qoo3C2!F_XTe0k*6t*6Lg)Kat1x zvh$-|xLE|rTd3w(2MEV(`vT?M{%7PZ-H~|mC$<;9EyUjQ@%2FVeEcQOFzosGv(}+r z_+;Rs7d{-g=!J^{7rpRLfs0=F+rULH{CVJFwHus|yWWT`#X!N5s7ute2A zYq)Zh&7C;`&e3%3g^vNIamP|OMkEIxg}kjUzn9`(QLb!-_PA^xYQ07{qYh_Pz&D?N538V z3<;+f)r{zDq*!(YoZ8 zmOMmo$J~+!^|`&|AABMmi%S;U@6r-`NEDGKtecO4w8bZF4@c%v@QC~E%`v7){?D!^aAw~h4@6IasA~*pFaFzG10Oj(1+K`u)M~9P|8`NO9mIe_sm zl0#|!20!8zJ6xP4*=XX%uN&9H#oYDKK^C(|kY~0Mg9U=7;Zpf{a+QjY6WQBsB8;^v zzAv7q_}EA4T926R4sbs=zW|rVjuGlNaCgQDd&^oOM0qOm0zSRvavgxViytiqlu3`q zs|bM z$ZR2bGZr+lvla6e*^)7>!n2w8#GA394PL94)gP1k#Qsy}5UIpxHHiZzkYZQUH`_T*wCGpNO?cNVr+CA%<> zxhG{bBa*=M>%V7S(ib>#MbFcH`(deJ$5$nvjj7`3H7bKslami+>)>_^Oi0EL;wsHY zRU?r-egCenn0@nYwVr=;=mmA*ii;#Q}TOao&h!)eefv(-@T&l*%v?O!?w`D%~PyG_o&>2j%sB?}pUk%kW+ zL(7td7^XPQ>U}I*lU>!x9o5MVXxuLR2rtzu9WR&J-v{P&;(OL0POng_@W#!YEe=aX zAf>m;_7zsIPxu9v+UC6v@v~LYL{)6c^9Ba}#Y-)=G0i7JaFNWL4k&}Bd0GI{s~kXo za(n&U5$9%?qE=3Y*JZ=qG^ZVZraANYAVze4-*5iNraJS-SEW*6=Z`)42sXb;mM$Y` zKWM~hWThU7!MB_7OeQN4R(h$thy)>XpWgl{p|kSOu+g%tOf#RYnWN=(`8K?$qihyG z14b-PQ09ShwV|8Nr73C*NAKp% zNvV=cV_ol3*lz|4Xlb)9e@3$kM*7}Dw{@F4TWNhmLh;#%L@r*4zS4m{WaS++XX^ORIwyvB!h_DWVp zobQG_O}kV%^Xxq8E3@$fmB&4{PHK{uA)oKD^?@6uvwLh^;4bQDwG~m-KA~9Nssy}C zv$yO1ntl|XrDjuGGm`xkz8cSMGq8#$X5q@7o-f2tTWtwoX&R1`$$^C+<=X}!4G-ifphGq6OD>nli zk@;5UO!JtWXWQvs&=Ac)m_R0GBG?;~htOaqdLx zk}{Oau+cF3=~SL*4)TC~V!cvj4 z!wu3&oQruRdkTJK*rttxg_GU1O2xz(fr+xDR~t_?l`W}vd3}RjkN+c$=&NMBt-6ka zV1KXbi4y3j1AX#68V#J(#*^3A*Q9QMwd<$KgJQeBK@Ly6jiu;y!WwGL-&+$T&Of@c z{*52Yf@5)2?sKEJWX`mxjWhw;MBFE1SNB!WQQE5crV5(cS3$o>=j4q1SB-xh2gpdI z2+zN4jpeQwpNb!uQ}NpL1+v*!+C*#Nw#t`P$>&I?3}I6knlsL6DbjrFYI_^S-=Oym zX>yv-m*(NZfeoT&tChPXB7UmM|c_u4`;wx4gY*K%!oNFSZ2o5yS%9m@vK{rC^}2K~NY&^GX0P;QTD?-#Oz5SALKb5x#tBYImu?CHWn z#phM%+{uUpx*VFSAcLgy(=%8Kqs;+~+Q(MlY7Fz;TuqUUeleO{S+#vzRdP*cP3WPn z%ly{Ua&iWc!^vuCw<)En0rxo|+{ANFkM zeN(uSmi3Q-Znw4JsuJ-%-j;vBEAVU8GMN9)tA&1GrMLNt%X`p_^7D^8Ty>2;H|{;1 zo37I9U!3k@cI|d?ZYZo`;TsD*u$|qWV)L(!WNj4V022xHIM%Ug&x%X441WTG&J7>3 zhhNJ7Nct^$ftY00UY3}uU5_(t{@!I&cQ>QZj?Mr6b!w4A&(|k-MRk|UQKtsMclhcch?6&I4r=pXLqLD;I*6J>r zY@eC47YCFopakOdLsjIt+VP2x{K~um>%FI0s{kzdW^3pf6-IOhq$Vv-h8EhKOFPv1 z56D$L#*CmRyI&D)Pgi|sNFF9?tGc!z0Qdj(EKL6&e@urxIa}Mfu4=muy3}ag!IM_0 z?f^rr%N<~h!I?e4Xu_>OE&ZCaZrZJFld?#{WvkcCv@_MAw|c4UWr-E0=R$4zoyI7V zgM4A0F${Hh?(af_OZ@Zd1hhK<1?j8i)ziYBjrrdz@v#Z)5pY`yj!D)$no@%)D4fo;+;_zJhol|oM!^RdWS zuWZ`h8dk~*m`X*&jU8l)7!uul#nK<^@c_i$7`g3j=XY$_wVhu#)3)>J`g}t>KR*bb z+%MR+bIU$gzHg8n?+dTX$8hQjH6(2~-}Saw*5n}-eq*O*7@wM4>sL7jOmi)6CU2Q5 z;=!w()ya=*uH4*ohCl1Lx;W--Lk~UCEi}aYS?F z%S{wkY+&L56f<6Yl`Q1B%4pX2Ni)^H;<|`T^Gv_+S2hREtjQ`*8w9@97v^V8eMbn|MONU)wYqyUjti*3O;TH>>$gP$v_0l{gjN^cl65 zW4*$o=GR3-t8}nyiIbs6YWia##%-(kdRrMW) zFgTHcp0%zN=PRSs+B`mqIy&C(r(^nMo;J7c{g;vo6zydTxt$QYd}}ReahM8u`*j54F*=r71gmxzyGBS;J<_ zZRS4nL!x0l_)YAV^08)8JJYLlu9b?O$ew!oJ36wG)zn^@`y0 zHXmJRI|G};E39#gob)>!-GNIFs`XH#wNE|RIc}9xoyt=<&=~DZwxX+ z_3GELMJ(lk^z)WTy6{c4?YGmf@Qpo@J@ZRfV>ebdvUt(}~7A(nf+ zN3$C|>5D#q_S5M+?7~*(uB<|bDAe}y$JosKOta+BoV|Gsn069L^tF>#m6Bh12qPdJ z<8g_zO>f96ysx~dy8p6ZPuVP&voN{_< z%JE;($75@-={lx_{Zx)=FJ)=i@(y~~QJg_cv%0M-5voakkU3DOlagaLWj++CNq))pNy!o-e^Qg&T$B27PpoUp zDU(uHeY+>N=1Xhg{)R%*wa2$3Y?6(Sosk^D9^4dZTygTDZ^ej`P}||QOlGms6q?Hx zB)x2>x1Bm*6jX2cn+KJ-*&Hj3a z(5**kxM*2k-cMj@L!IplH1oEcQj@zewv?R<{hdO)YX<_oa3Bs8pL?UUuLTwuI6vyHv9A5QiT{l(h zDP|)vZATwwZftdZU~0jMwJhfuj>b%Oz3cgnJG7fQhA^+?DVS;Ge(UCGHy|%n3dK5_ zew7W4SkEdMYvVA12~V;1f_b{zuEyvSg`r!8lg^Oi-X^SF)6#UpJ;+eVjy&tZue_c( zzB|BX##psfVkoHg^ch5E^Cvx)B8&NXoD9@3atZ%ny0m5uVw8PA7=fmwdH?gtu60m{j9a+pOSo`hV1RHC@y>3*u_TU^6PfZvi0%* zb$-4;zuo2M63f%B`I%(>cFoUN>$huuj{e`x&o1(n$)c9f2-Lee`2=&qSn?}2C>gYm z?EE3~7=Kh%^Yx`UiJ4qiWQXng!kom3dUWCMFB8u_0I?5~xSsug3VQ$7AFSuBz%!Wc z5N+WvBv4p`ePF(I8x+{Rr$V-x+iz7%*=jEQC+%-Vb*bKoD1#?D!Lowb*xy?I+I~z` zWlc_AP=(RSUb~#x`r0LbS^KMj=~ax1l~wt-Xb?ktYW!>Hqp>=;={Gcae^LpPTqeFZ zma-7W66-3!VI!CIv&8xiOHFkz$}E4Ab?0I8TMJKTfAyAoSqfDRyyYG~z4ljsk;9ze zGG~8vRA7JgCe4Ry2Hqt7Q)`9wacLmN{9B}asLkRXK7?9M9vGU7!Uh44mlM!$6}5n( z=V&4}@Fr=##*+5a&k*Z_rFdrzvEEb$@QsF8_q9#@6!gpy;Z0YnskJ z0lu^(sGDFdxraEn2I;0+gLDcro5^ie^Oy9l7a101YL3a+Q&VY8e&wfpP&GJ2@scaz zDMkr|zfK&V6DO(gPv6!Crv`)*Eo(b?h;{a)jt?udq`ij0q?pvrYqNG@!r2<5ZiJr>kN5qk< zNCcMLor7wlO{>UUL`bA{OCwff5lssItV7*xt68Qv{vr4O!18}LANC-7FtkwE(%E1@sV+;fJ+cqjOL#jgpJFF6)FeP z@ax~;enF}l3McGIR{c9m;#LIRX*C&Z81Cz;#$GTY^s{Bzcs6&~f{6RazH_O~#+!V| zMpe&0gM8G(BJ-)nk=ZEOo2R2lN^P4v-Mws>LOkhjrTr#d_6&7gi8%m5IzOFaF2-f1 zDC^qIQGM=Q6@-m4)q%GP=Te-Rw8P;I1#mL2n-WDntS@r0dE7?sF~j&e>;iM2uotrA zJ)9AOMPV1S96Rgy`u*+I&s&~%xxYPw*>QJiaKC%eH-$6u_1^#9C43k8z$AQo;zoo7 zV`wZj0dQ@i0S6;oUI~M00dwj}{#8eD9?AaoRx^pAhY8*kCZk6Q=57>l;zwtsjyWnT z-~4KtR5hbcFfU|JDmyQHm-!*{$RA--IeIka?UpOO#=CYKA3bJnr>Djh$5N9K3N3GA zI0apwPt7kWv6|$!Gf$G((U~RL@zc(C0(;R?e0I~ymL2;9xeCplO*51dQOnk5+Kn#i ze1?o>&pdG}rb$^s@A+9){IP9cwBJe%5P$j=kFzEQ?s_f zF_yVUahG}hW&E0aqRiW+{5%iy0iHi%o6P3pE>pi^*qC`Svdpi%mk&e73pOW+n(2`^>p7O+ zo6Pmks1;DpI;v;@U`=mFwF2}0(>CLfDGJC`1Z3JF;{_wk8ae&&wt5X&eWTiCO31%K zgW6LUS!w#XKD~q5A2m?>;SJVPgId^fW(S%A^C{_SP-|VLn(-^I`+nap&f|_W3k~v#({6pTn z(9--TA39<%nw6RJK1rLO(}JY&AoO)_=&| ze1XmHMm}E~a#sgoPiMpIkjqfHB=G+$AIiuLm1QOjX`S1@6wFb*eoeV|?(oGOfs6RU+e`LV5QMCARF?d@Ixy zSgQCDBTXVOM(5eA?#<@6dB>8}W)}_O0}F)bXjdGt+Y$`_JGj7W2HQ}GnaMVwa>GS5 zm!n(~5p%K&FE?Xw@fzCelK(nWlNc?=4>LQNg!v&Z=Ur&_1i*O9If0)_q)|TqbO=Sp ztN`TYhrUR~=4JduYmzy%&%4w-Ce%%qPm@o8K|?3U?8MhmD>HZ4nA^>^r+PihO&gx+ zdL)ZOi<6cx1s^Jxr3TJL=zOgi?G2Am}GKA0oD?l-N?3{bSO6H^mJ8KOe~za5$mbtqN>#YFyHp^Ry(R`#*Nj9f13vg zt!n3%*(Nh=clJI)#kObvE&T4z-mz=(WJ987{})_n(D5|@;`s=kdRXXaEE)Bmdmr?a zG8jyVU69GaZ?{p6>^DJyCf~FF)i^Rsf{J$Ygnsogd$Zb*HoP_e{|V>XI+kIo6v4as zi4uMRb$o{6TxqEFhJ%4qORecZ^Ls`S0R^m(%+DQAr^%u=4bAoaeNu~^*}>Zb^wR5t zxI#A<36n`$vDea6z-iD~mIf8dsZ{8eTf~E3x$68r;j=F#E!$g#tZ*MwFkCQD@?9K| z|E$Hv`8`J#6vmCHxtPh8oy7qjB4~<*!#^TS5-DtX2-hnHVAGR|8BjG(2ta=i4$M!% z`+F{}t&DUnip~C=4nId_aVr2)y6vk2^$-{%-r=Ik6?$yKt6)QI#~;S;gPrLS2L&`( z)b=qyu0`0D8^4lYc(|DVr6s?(#Nxr;T^0^6dJU8;w|@9;#Q=P?OEFRRhpHI>YWieE z5Nc0vzlX<1imL_ic>{&Mta&V@I8kn2vVJm=WoCGsd>|t8u;w90v0lLa4yd(pRMofj z_n{6H$0|Jwz49jkA)%W@e?sZbphwN7B)RmnMFr}Iw|vivf(bMY3XkWhr@^o^f&Kg^ zxwT`*UmbKR3++La7lSAt@j-fwR|fs?vGSBos*9sFN zmdvBHy%=gcj9TEid5XE*T-?7PE`+5_fjIcv6QE~H{WQEa+S^N)^bh(dI#;nmHVRqF zBS{g%XV$6rG9Qf9N|Cp|*MF+~oA9rfe}nq9{&9Vlf@{mqWweQw3?UmiE25~TsYMR} zP(NgX#}OR;tB96Sx*w}^d%Dwh+Fn6;xh7<6S{9A<3PWw9`+SKFW2cfB$M;@ERY9n2 zKZT~IqXUoL;UkiArnOV09%|b$n4siaESu^T+7N_Z=0aarD9l(PaO?0U|M zFHh!x&!kRPcq2hV`o;a5SHnKnn$bwx<|VH|pXHbG;r=l9nV+22oxb0u(rq>)lq~Ol zdoleT#SM#xc3`o`H`QEBU09_dz~o$eIR_1f1|X;UkWfHiPPz%FQ+=3) zGpqX0iCceCeOT$-I9KCzG+xH(XspHQXuOFtOGB18vouPx?$o%0P1KeZV*Ze57*G0ZFPWD@Su-|(8h{v7z)=k@AB890?9{t8HZF;m61*N$3 zdnl;8M(Dml#nUy)2^`XYK15d-q3op38U$L~8&UrrOEuJbF9O|b`ALMxr_#3XpyJ~G z)Iz4-Vqe(}wff*#qqAyI&7u=&UxmHdLiqi(D~-L`A+k3cuXtbfX5B^4iuY$68Xx(7 zz(sOZm#n8gU3L7JTfClUk{>p1Nq)F}O~o0*LTyJuof20DT*XFlx{CF1x{8hC%vS6? z-1<{h&3A4DAx)djQnP9#J;PrZTsW=R61ph`s?(uc4YqXWI^B1X`!3)cA89i!;#Q*k zrU*xpRr`)pW_)Lt`G(R;wU#InX)cL~mE@D=Y$e?CRHxVS2I9<_g#+fa;GI-XXimp8C_PMsLW}K}&coR{rFlN)D`Sxdb?>=^`9uvPR z^x2PEep_p4+lz8B$E(&@8a?7ZdxP6gmLfGK`p2a0exhBmUqK30e$B9G#fIsF?M)TV zcr)(;hHm~nIkQNo;b1>&CfqiI@3N`FaM^6f>9RQ&XEvLwaqCanT$^=&Et~gPqMGU6 zakR3zNwun4(KvT>n1>Yo>S3&BEGrLFLgKfgYg#4OYTFhM*XFdBd_@Lio3hfgv)Mp9osrJ$4>I$GAypmKg_C2X&cA@h zGX>M4dwIOaZO4wpv6_lde%zCyY>8GD7{seyhM+E!GD&%C>;+sskc`h2T-yBTX7FSy?BW$Q72f z=l|V~-KjfWq;+Oi5NSl_Xwn{$JEdgE=r^)Fr+294`yn4UPs34bXBHvxtR@D z@B#;Kb8wD>je`Rl8OTZpZELW$mpC|^*F_G_=Jj3&XY;zi!P&gdcW^eZ^BkPbYrBK9d2M!Z zHm^+%&gQkj!Mo=bUBoh{RpD$V6eQE z0OfI*y$}nd)pq>KciFhfZnKp_B)ihRl_suIZm>3q}%O$8xL4Npr5d)lVLxTj(BLe)&(_qfb1uy-O zatb?5{n=?wSger&JLid=H!PLK0UlJ}3DR7(I!I)xK*!FoAjo$?zZ2+(pW7N>zWX=6 zE~rZSL1e;w}I2{pxzfB>*;-E z@{)@@&qcP8R!kFzyB5@Zhfn}@^9PGiIq?G#507G}-Q-w8yl^Hw3aY@u;k{l6zzu)3 zUq695RfXKCaGncV5d=|C#X-OxF5tf{n7t6vZT=Ai4<$LJaEm}c{4je30@o}ORh}Ay z0aIjAgO>r!UKX)(evIb&FBf3*`EQ~G8#u(tv3szhP_BYoEpoODTv;y=-Nh~u0sYI` zM!D#R0S6ZI7dC$75hR-Jz?ZwU?{$%Fr1P%HrqkCb7dZr5))f|^@@=o;no57=n)UC?7)NsB$DNZ_tPZB!9==wn!c> z&=1#$3BVuN$XFgznJjdGqMEw|_?5?al=U^1hAYpT2uR!gneL;9{m7s#;MsI|cZa z?WAf{KIy+~?dx#dPP3R1+j}f#zYf=__zyT@0{S-s8|A#IL41q((;%fo`{nQZmd~Xn zD_vw8>Fle6NUNQvt@wyM{mS(F3Jb4zij;qCQ(jzR@yOQQ77o8hm~uJG1zXy{twHdc zF8Bh0ez;u(30?5tBD~ZRGn*WssOEJ6e&yv8D4>Ow27{T(qlB zQoh!vytu^Tk;&N>4lgH6c|OktTiU?i4}u?Y!D9vb;mbsj&>I$t@KQ_6JmmmIHA@8e zmDR9qIxG!W9(NItzHm#>%!5%Kt1-eouwNE0APNG02m-!YU4S&U_0L%Kk8G3=jKac) zDPs$4^1-_x;_Y4whkxdT;cS7n&kr%L{nJ)e?aAt#<*XKP|-p9!M8FQ_?`(|BGP5i^O zE9@^Wg$7}Nbw56Lnlt){G|79DyxYu}KJR9Euf{u#wagxKP+v&9LLMYUoL(>BOAA;| z=L`Oo3v3jy9>BbzpI7?O7ARzzL%T%4!+n8^1fT5!&lhkffcd33eSzv;=I<_0 z4cvSVU_Q~$HtTH*Lyg+Z1x_C=4qxdD*`bhW3K^=9rMS#P`uSTQjwUi@qJ`I)d+rs( zma6UhCs_Zr8J;Jzo_0Y07M|&)QZWxa=P8vT@;p-`PvB{X-R+P|-`0nDuQ1=1=aqe! zR^~k~TwD}^abis`%hFs+QbTb?KPVOmLXi##6&lm1>dAhEYTxsB09x#_LkP0?Uj z?6x1Pn3v`c+^AM;Hw+^A+AtW#uPR#a1~aJcawCe!rC9E;%cfMb{jjPi*IOHRjqbGe z*)WsD(Et}K%Nsvpiy?8dQY>v=VvqAeZ8J1i^qW_UzTK#|+qqbxfClzky1dGqoCP_| zr5EJLoQsYns>qNwm57qvRKl6vRKl6vRKnT2sf1g9c2g;E>V_!#bLoZT&EBY}8TlR; z-Z09^gUlR0*)!G8b%C*brrpUZ!w^fTbqN=k*aS2W{7D=i^71?S^gB)4$e_e=`U@0z zZ1xwyJ8xwq!JUeuVza-@iBP6<4#VRyIpZTYdZ{2U2r-$&WkYV|Fx5+NZ%`{_4{W=_ zRR(|~4qoZtatC)hSjh>0iGxcW%*4jVFLp5HXyGCUFK}?7gXcTAz`^qzoa5kj2k+3A z^qL*KOTm&GNu6fg&U zX8JusJ04O^I+XH6>`(F|)50-z7MP{0>xmN2-1-BBSsN-k32k?woOj6>{xu5qD-YTr zBv~(d&xVK3eG(5w&?hX20*!!Y1o+{9QCtE)xm%I2Nn%cMMC(l0xgutib9v@lHd^Ih z#xc@Bk~sf8#D+ zO;WcJPtNr8VEA#8_OBPFp^VF>$l zacuChkzJae087>}QdB6`CiRl3a?xL-CG~c%GyOLvlT=1446`@>y{dDn&aOg3*1xEb zdJEJz6XkGV3dy^)L|eLw6TIz&9dwRVWBzb2xlizTaYI?? z!JWZDR6M!C-19pssOPjk-EON-Hv?Z=^hz8fmBA4Jxk&6C!rpwramvNyy+h@b3yzz< zyf@oo?RJ_`4ee!URioP zL6lXY9e0AB6a4O?U!!5%v)b9xC5TAuHL2yX8lSR&+@>aQP#=|&Xpeb`a{(!eu}^fO z)qyyi56TPIs8}>qZ8wjIIY0c`305x<;RL5(OtRjxr{P~qV;Xv2nE0G`>eH(m+PR;N z`;_&RZs>uQuGOMzGOv?3*V966KifB}Sa~K42F(+3w3u*>*;CPpDxh-FX_`>vz7pu% zdzerx&r$)|TmCMq*C=wJy8SrYNGMEY2NCmqf~4zoly<-LqU3(0FVRK0tTWrr6$|Uk zBVeUJ+eabMk_a{`LUXr~jHqbHG{XrOut30`4hROzx6DVs4FWBUtXB-FrQ*7XIN ze+rZLe@^ThB>w1#&9jjf2a$etk;NPThT?`Fevm{zwu!KDB|OUO3k!!Q6DBaA9L`Y; zz#_+zu+2q5s+&(hf{*T>kqHjVX0gIzSz)0UccPf>V%!T^NjMB}TzXXq;*?KaFoS#8 z&EQrBiXq7t%ypK8HM?>q;)ZL^Ug}IF&}5mhcqVvUK{^VlGt1;z=A~jN;Y-_u~+k5THyz)G(@n=e z#+jXtYsRWSO~*BxwQg!aL}-z!3~^0%mlWIYljiSx24fVJ=|$8IYEi?A4-EK@C7;iX z=bpCJ1EBQ1il;cF3`#%HiuS00hAUM837S-2N~ruW*q#INSnigZijC7A&g{vDDY_(T zA7VUpkDZ50e}3ig-V`<<16Z;(*+6#YHkTbp*dSDHo(@OZ5}Rw$)ycIM7T0>0iFxsxHTaoh+L{cb+q0~ zO^7Omsk)3)#IU(kP=l__)NlonY5V(2^5BBu%#6FjuKkXzX?r)++C3Q7s3!Nq!QXzR z4!gu0LBqzT63SaOT+6<1iRyhG?Y!2|~-V*0je z+zl^yaj0bk%{^XmRY@5JKE)HDAw!h6qA6}h!e}I?DyG@puW`9weGng0C_a}m$!E76XqbB(SB-bWWMoKX* z<-?u2=dl9)#{bk}mzFGqLp}WvwAi^NL5sb;Bxte08vxPvL!<5Ik4v4l-7#L~4 zA+P%lgcNL zJ}%U9jhb}}I)!ZFsN5R_BmTWcih&QaS}jC&oelH)Qo(V|hC`D?s^GZt$)QQ?-Y8u~ zO^o9Fvy2Ht;_yJpy7hf{w#pgOLDHiUZ71PK>t~6l@?w@!`wPC^+`bgt9Vxb7ZpboR zv~)+z?|#lOR6Q&Rt=5M|{-Xk2rRP$9BH9~ zrZBx-|3!iUcR5CqOuWTS{VXt7ZMw9KF^t?eLgSz2X(*lR-PHG~aoLUfs zPE%+q|CcOv{zKP#mq_YbuSujADiah%HJ<;uYh7!*R)%fBSSni5?o}?hDVMJEIv(mV zv6kg|>NTI=PUic1&33>V{|Eo6*DSWZ=6@~chm}ao=Ss{EkeDARF`p+fpD!^#NMgRX z14-=e(t{-C)rAzWOCS20{Ll6x1*jV-2K^|Gm`_b+>9K1snQ=)l^?HRZo!D&DdvhW= zIWrIA3Li5y?S=FX;0cOB<-JgtU+*!;^wSsP!LjH8>M{G!V`%aR=)tjl=riZ+LG|?O zGiM9_zwI-{**%u&yrg9gueG5>gS*kHUt2NbZz zKc?jWa)xv^v!oh2PBs1Jdb&*`z2O$~jfx?h*6-mS;f1RbV&xBgP2F^B%W%a{{O z)&!lUn!Zv)SNYLyJw=n@SiPMlAH@uYw+qpftD@}|%^c3gr|XzV?t)-JkSMVeqhD!D ziRo3KY;^lP$+%7CHooZ_tU4LB#ssAf*w-tcqqkRRo!5f&J$Y}aYIX8HzNW`x0LN`6OO+)b; z)HGWjUAL$r+&;*Xlz_nAAG7rE{3CR=>^6Scltc2A(pelfcGE$aX%VgwLieeK3T1m` zTu`&9s!gBjer{ku)M^3rDrNrfj+4Q9B!>{0VL^JDRn3ZH<# z#K2BKXb;Otd>cB)1(A+Yqzyu}k%pNHxl`d{{1s`1K;FR>wjX}~X|VGHulJ73=M7@Z z0hc?q{-0_Fp8?wJ0S0ar?MVNaz49F`zNJdGI&e{ zE1b!FP+&ueEjT+e7un39qozF9xt!H`sl_GD@`=cYEY#9F=nWD_)D7Xc+Ze34%*JR? z9ChX}7rkDsC1Ub=L8w{!>pO(XOF1ggT5~=-^&(eqHrfE~7iAOfwmztTh>K1KY!mQz z2dH92Y^wS7EvS8pyLB$GDx zTY}%sRg4{$7`h+&c4Ney6Z7SYLztS5I98Y{)lqx0yhR12*J8c^Iy!Ah+yf$$%AKO7a`9wo&e?Hjf1} zC%7ec_^GuS%dzfVGnNrLbQETeB8AadK}V|*FrKPB>_k5PkL(9&*nN!ih z=Lz!IB|~nF=YH0+A@ukT^DGftcFbs;(z7h%$>S00adl#ACMNLD7Q8C4K66rQXVVZ+ zR#tr)om-jLc+j{}iD$+gn^=)4CS(L5orJVj<|PXCfD9Y&J{+>a*x1s`=C#h}Wce&m z3H8+olVZ;dcbUr8iEzw~&eH;yIlyN7+QS2!wfvb1@}UC zI}yalBFBir%;(N?iSsn#VB>C{ieaWsBzn*UglwMcN6tI}pz7!(B$iy4iKzV+2qTDL z)4Btg=an|`iKS+;*SX#NL?}KzPR2vt;|NZk)9~bd2@VV!U)5MQ7R!*CVVH&FJ=H=p znNS^tJR>X)3@UauzMDZXq3d^(((5+!>=z5TB2I>F;)gguMQv^aLkj)#z7t>+_Ak3l zicYk^GyKLMiSVfNTTN_LqQcDM&U3Bvv}JeSZk~!^j;SG9P!d88I3x)h*g_1I-FiY) zc4w>Xo@?ukVbi)0B+Bm3q8<=hDMDL7OAlZbnk~@(5<<2>f6gJN3iMle{^tT6NT>?* zT4C){pr=_Ty3Hx}yUu)1#9he*90J$^eFBW&dg^|{#oHFfy%x|2^;@}+)}?kXW4nFo zPHP06V}dF+5$MDb`?<&3Nv9WEZ7(vLwz`)=rspZsXF)4%wTtc))gWZPLdq??Ha$Sq zb0dJct`B2@Forvfe+#%k71FV%z+5@D18 zkqnuT8JGbos8~=4At8}$CNnHbC6FL_cpN{}s+O9Hgt|9|sJp65LGo^$TG=bpQ7ODznn-U)^d54 zR0=MUi&%ndG%>}UMEj-XA{N|Cv{69wg+s`RSd|3_);fEbt;%lOcFmeWaPvz&rg zphv=q&RRN{QV#4_pMFlWJ)mxbqc*B_%a|5>)HJy8B zH&tNfyon|(+Kzw2OKm0#Gv_bBQeR7GY&w{^oFa29rxxLRPXdo^f|OH69%0vQe*%wT z;^exOPAF&QYnC^WTz@gOA3L`3R}>zBddyN3?PvgW^{pZGM)mblzHxZtVdd2zJa4ufy0tpRpfUv*{g9EhVpIQumMqjxVul*irMMaj_qd`~; zV9+Ory3ud**x4Lz`^Lz_sqP3;PXFh+nn{DtNRpyS%;~8(InB{5#b6a9c#8)o?nM8A~_v3g=Dy_EY zK2^JODc@owcKFh*e<1p&YB(4n>3F)DTZ8cY#PYn*axr;U&6mY-rIiOY(8#Br}A%2UmNDXoV(`c#o;wq%sNvcNnz&bc5T6CXCBoA+j$H70D}9mLC|-W2Gic5z9Y8V&)FFCfd>nkP zCm42h`MoCGDTJ<*ujtPUB1V^wz67 zhRw_0B69o)hf_Y}^lWD9wK6k;nT2+&EXrT$&z$ZV;lCQ=yg2VJGaq-*HHLgo3=hVL}$8-ozp?+@SYz zAfb^Za@8*vv+5eiec#8B2rRd*fD@19j^^22k~fgQzEU^AE0$-8uae-xEb;uEBv!Pu zBLErB5lu%>v)HKqI$3*JELC4p$5GeLfX=auC|Y2zSF_2BmGr44L?;zjlWU-+VZmK)t%P2iu2nf;6^p|R4*$iH4t7byXsqVDU2rG zs77|AP?uTXmaf#<_>Q2JAUd6S2j7xGNUy%ZHyYd5kw!aHk7_raCrF5vGeuV$gnCzN zKh-NvAbg%A!9H~qFX3rXQ3e$jsy*t9MF<3f>!@Ov7HOiTH62xvh50fuP06v(K0(Px zJ^L(P!M?cI3%jE+{kaY3UgIo{R9{D=l-BdDVm#`-UY&dzOC9y?IMM>b4LNC!6~E$; zKbsXTOZS41Kd))5!7J+{^h)}8&2x~6f@de)f!4=V%x=H3mnikkDeW7wr}deCwzzsn ztz@vF?Oc`pBQpXPlW@g8e}uV8KMJQtVI8Z+Bg8SEWrNj++?;{g=lDgnO>!gfHowuN zFRDF;t7w~y6Ta+i^RM-Xldqo`PHx7@E5Sa-F>g2-#*o|`8-J4d{Oltk9N7>3`HeaT z(b~tKv0m#c%+0Y#hI{m}Rlg|JvZh7lgWS#pcu*9UR+#y63iWP2mx`Cjee8eAZT@mE zBMI3@S+ciKb|<919{(+!&g(oyeg@S+eh~rkQ)Knexs*pNMVGGTDlK9iqnY(l)={G^ zg1#JzE<4YI!}+Kw0rMPR($A~?Oxl2X-!}N>V>7JVSlBz?n3n1@a?^aqWM@9A=xYLI z_kiiE)=TxdpMY06IiC4EV7wE^_%e|FuYe=(tAJ63HQFs{xQ8h}yE=8jNBPDs6wpbN zkT`z(dcVDiWi6~{qo1M%&=hxPSNEBJu6+7NHPVh8%Wr0bhX@<%*b}p(x$n5=5kRPR zK5@irqJ9glID5=z_iFEr&%-I~nu+miwQvDoHam~1?eoR?Pnc7b+L}J5%OEle)j!eK z%vq^v^GG{d)3U-A->~ava3*qpO&hRii#6>yh^0*Ng52gq6sM(*yVh+;wzYh;cCk0* z@Vb-*$=SPV&;;Rfk)=dIebIa%NqsA<*oH9b2f^8VUUt1V?@wa5d*Rz|(q&`4K7q}w zUjz26IWbdEFRE+!Gi-rl|A~7*pvhdlbQf2lK@c8O!yZsW5FZ}1IyD~)JR5K#9Bczu z)fM5WzpYHcEDRtYish%+tme-srhzqVvr_UgaD0C*F6o;z%kcKb-KNv9WXXv)qTt2y zz}#F2h$0|&g!Rs}-h=oyy}hx#5H;oGpFXH#`gxK!=|M)lb-sB=Z`|#^Y)(I%k^gQ8 zO@pQYm+bo5H~HF|eX?MA+{&r8f#XI@?J_W^#;x=d_IDZRSe7X?3x+6S=uj&bQt!ZdJt%&$=p)%{}oUntV9ot`PJCd{B?@Q@#2QD!$vPdv&Z-$bWoIUymqe>Y0s6=OOMk~LtA7m zN%(vN3}Wd|PE0Ffb!YT1#h5nqwN5xf$df^6yoFhXB{Sx(@|2#t+*M7W|y%uoTwS^=2$O&usX}aDb20p*2kvc#e`Y86WmVxODa28N`K2h0Yn0DVD4?lOB zS&BM0=XejQBi6AViCEPC#}+Krz3L5|1w*g;H;gEYxBcqd+XY0gdY9$7SbK6-d_&B0 zv*kH6?)ex!vHt}js<+{spLw)(tfdYSM~C^0ML7T{2rvW3+hUKgX3Q{VYBsrKvz*-P z_5E*?aZj1H*k;KEt3_RY6GMnl8_((2n8fC7H<2*8XVj9oYn8nWa{pg(ZAWK9MOK-@vo@jO#w3)AH2!O~Ig z;Apmk(m09Q01_re5~e{;P=TqWSzZA90CXayaOrZy%nU=!K5yrmv%zSH*C&*10qwT`j3bDSK&x z8yc#?uBsHy>~e6&IS(0J-;IP)C+$&XPqJRln`Y+r$*%Vz6FcfZV6H$SSQ&XtN<1Ui zla-k>{3*U%m*S;HP>isvUn7ZH)CVG!s|zvkd9nWd?yvguC-Rwdup4YDOL%eO$i$&~ z8-mlhgX2S#O&$(-)lu8A?Ty~h_h@o}-(V8qCM|Dp7?;NFjy13Z-y5z;^%h|wa`-Wn zeCREX!g}{mq_taCyZRPEbIS$N@}X#P0rMct1X_bPyq>VU06qoK2_aw}&jO@*ykYsm zJbV(Pd(zj!2|i8QhvqSGwKk7UaKh)pv$T0^!zT}w+(l<8_+cJ<`GL?C-eMj-s36AA z(J=jDx^>V8yS3a734iSOg!wRZn$J6xWZtI!jW^SuvC&qd_nI%pT4)rKWHFT0h>l&;|8t zCkxQ4el5=s#PvPDtuK&1y9+d-#QdVAp0%1v334< z#Nl_E(LRiFsQ?%mpL#MdDAb}JC7ZD8cbxgcXO<3Rh80LK8VD3l+0l3oaxTITe`>Qt zQ~$!E{!Y+cms!-;;4{)YDi;=0O@{f)xo~Dq4=qqFDAjA4?7(AMhW0X$eS*;B?Bi8b znVGYrOI%SGXyvvLKkRB^oEB*ok6J8V0}D|O)6tS0Odik_kCCDP6ddu&kkovH1YuYD z-FQI_S7>%OSnMiz(I#Yf9oj2@CXVY7ywti3jxpni1^Pn47xn%}M%^iVj#xN@Gz#Llmx<%|(Mq4Mg-XyvSktN3XE)4k5Z;3Rm7B)L-8R zdIP40t>Gw!qfX9+h^XtQ@~vZdSp5TR-PlY!$j()knIdC*9ZM#*={m;-13)@9juqph zo%RmJzN7xRbI9FNblqC2g*{e|^)?|NK;0Zjt%E?KcE|EZ;2PUqu@ADLO~>Yrk05rO zrGSM1X;C1R0EKpn`yhUD2S2uvc*D449K314UBG}%PllzhFUB#gn6PO`U#KzS$Q#wa zO333t+*gi8U7(d4cWqH?fk-6}#QIBK({w;x-%m(YALQ<^_JQuDT+vO*`N33xtqQa0g@5hoN`Kj8{ZYQk?^uF=qAA(}OMi0Q?s|L3ad zH)w3*n=xSw-zY|~+8i`3jxc|MtZxipl5ARjHqQ2Ptmuc>wt8T3Byk}AtwSyIqrTM= zGLgB@&44sdJ@P6Fn&n-&v-sjIL7U|A$?R>8 z6}QsvGGc>$f{4K~(yH8iQnC73#j2A$XT^C|Yn}^F<=M9*PeBAv(yD`=7*A#Ktd8?+ z)I3+6%5yKQH$hH81W(echoU@@f#`vIvl%8XQ`W^NfFq)z0nUv(dlQ@|Td>)< zmm=1b|Xopaq2gha;Opa zNBCX=iVXz;MqR#(HMbk+h+{XfBcS^RPveJcfo${c-0SV$mUVP|{pcQGbFE|fK?hvh zwt4$uTPLpm`6&&|Z+z(Qx7{7ivu7Q}?#GZL&=1#~El9~iHxNr9k4+5E=z;N;W-JY# zgYiU|Aw~5WZ-rJ_l49vOHGr*4%vIEj_e!lcFGh>4LAW(cmgc=(ysu+Gyd8~Eo3|f& z>c648nqGuY-3VX$EF8?2HTr=rDmTGvZQRS=t}ajTX@XDIW+*b8({=)-z?v-fytlmury6u=wSQ@I0_X+LKprihDYVFeAynJ); zgnKQA8{GzqkX*D=Hsc!9vt#|Ge2xG(FE#77(D?;N2EY8I8TFbVjpL`RT=zg-;`*PNx=qKmGnIvhmbU&GUZ-rB|J>oi^ z9BYp(BC?rt#qarYorjki0y;Q3fTgC2HzI-ZjK#NZS8|t`idLLMt+9Cr`y#{2{^1Lot@iQ9aMa`+t2eD5<~ zr&81+#ESQbWq*P5{6BWrzfJ@+7gkimd>AZd*uZ+65y5$wO%6_AH7%Z;A zfdkHF>H6AtKo9r&2VcfkUKxd!riiwLI{3ZzelWos6^o9p7YhOLN3KV+bi*}zX#)mS zppjXrSV&=&=J5*iTK31am$Bt( z=bA2m#(p*8R%96DPq{qwN_>!SrcTRIjSE2&gsnl3+%%ytDH>x*;JABB4>W;J4O#NW zDhkH%zfIHO{~5@B`y39EgB=6}n#Wwj1k2|p;l}}3N7g@U2biJv7V^Cc->mi70_Bgi zn1IzDaDPahz!`= z%p@)P5rZ(^uq6XVfpg%B1pN3LzGPQcuWf{x$c&jc1)GJj01JzUHOo^2p3`O$8v~DCznwD%8!!g~C25z|`4=@sIOHQG=-5xWyis>EAEkF^%y~af) z>11w0wD-USZ!tG=#~cz`v;lK;H_Paj4%G>EcK1_c;5`YLC()(9HoY4H8UN;W?T)-2`)#0umosJ== zgRlauNRp`dlm5gq&u_@fSN4X21Y8vMoW2nG4Ue(+%B3s}t^1IFBtmRS;_+`;4#&s; zAu|YMJ967+&0i(WTi*kh1GqC#wc&U)*yu#gnP6z|?w|9GDS;@m@qY8+B(?KqagN@R zToT1PtX|eWU@@p#v&hq)>|ms-MtYk$WspbxjUGtd$sS`3CC75ZjIZe=CfoH=!p25- z`+Kz65h+xS*jnbqFbixD`bVu{_IE7za|3L&ocn%SN5gyXFc^h7c;l5)G}Y{3?-CP1jMo7noW;%BFIe z5)Kym#&NgFSZ92LML_6py`|lC+2}DoryeGw*7`N;67af2nd~=CThui zb}e2w0Wf$S`iK4uw3Lq}aURIgfOTZZM>6c+X?{qqVf8NN{E&eEG%WGKmF&Qk%zYW3 zdW<7_&Zs8>_SK)noKZ{706!b#oHL59pXJo_a9oZ${DY43MT1a~^5+dVV335dLw5pi zR0bm~FMy)~I)R0DZZ1Gh2u!tnF(EMGSENJF1WxdotbI5kuzwY68+23QgwMyt%+bT- zr=EscZC&@(Ap3izUa>=)jJ7pTM6N6i_T5P5cGXjqt)=v=tVTVzNB!ads2((QfvX4q zy=eSmHp$WOGD}M)e20OY+6hSSS%>2d#7Ds$PC57C6?W0|R5x*Q$qrzo`FL;y#+4va z)$n>1iD!$vyCcD_5Jt{V5|~cXOl@Rpx+1>>(`0f9yK=;~an7+Yb!~+g?P~v238Uo@ z!srQN9P?Jm0636T9rS-Kj>yOOmzbM~4e>ALzL5Sq0V_0uQf%vsS((YC@mh%%N{3$*nx4aE; zLAVJnBuud|QpEyXK8rBhaweMkY6=Kvy+dO^pla!ZEfa^{BO^>|8QZx_?}ztsT%BGY ziA7Vg+%fVZ+}P~d2HyNd)_jQlW8=x7etl-->?p)b;iCHc5i^Z76E)gE~T zgNOPQy0f=~<^mBX8Ql}z-(ZU*@}wLG9d~4DA5ongSJ81G3zzQf=#LL4_wX6raIhe| zZNB=ADUoj2@0xGlAETxLz>+3?k7RP5?~9&PH~2o7`>RxQ%U*ZxA4k?6Y&jBa3l0>lY{hTd*IH zb@owgQ~xm<&t25o-9UVWDvbP$n|Xh_{Y!v3Fil{U;_u8K-^Z%O~$wdQFQjI)M2QnyQ&G|kcWPK zZD#8r42)x4{=VRa2}ke@1qQ8gpuF4FCqF~sYP1Bh+d|vCW_=^%1o1+gM#xe1=uqjk zXc3a?8(_1jdOS|`f#0m1hNI_#=ljg-^mg_)1*=VM;M=U7)zO!)=2|Pwq6H7clQiW319Gcl1@$)J=7}4YLI;ck zp)Y_8w>H&X+_3NeWaxEo_|8&wH~VmAE#@|k1}AoyzdkMhfeYjO|2gSY{!faV#oyS2 z6~Za%Lb%1Y-)vAb@TqRX16f7<+a_we3E+)Mf4_Mrq-hWCJte+#5#N2m%VY7yDPiit z1r!KJ)6$Bsl+X_ajDw-iqFP|+S_{E@TVItp-zO$;r1d_(`Ks1#dvHI_yFDHMvn0Y6 z|F<9^CI~w4e@Wb^<>15MZ@#()>BSU%SgnRv>+j$cP2|s%L8sj?txk4wN!(7NjrZ(Y}7K`Vt>gTrsQ8$4H4zVEv5ckK=wb9r?qWJb9CiZ0K@N zfcc}vll^KYa#3Rba5T)vP@`H41na7oSD7>YVR`wo+k*zjJN@QB^;_TsvayrrKWe)Jri(iGH&{*908D3%6+k6=M-3v8)p zVp@(Y9r?2o&Tr^sG+xbx2Uszo_yfq+g$0(zL8gu6x-bsb#X%;dg|I3PJ`@G5RNrtN z(<{}E1e&I?^JZC8+xW(>rGBrxfmqLeK4scxxd5CT<=7&tqAUbfsuswKl)siFw5`F7 z{b&AOr(V>=31Dc{kAS1M{*9DaS#=ABqNB!$IZ#x?TgC$=Zj@cs%i1Ao(_PgQ+F=AF zVota?USIglp=u?31KF4+{YiupOlQcyyL>^Q|pf#Z%?Q{T0tEx-+_*n z{2ujzxb5>BUj!d)eKmof`^G6=7Ca{Qg5dCHG)uhZD6N{`gNC%fqcrBNSnT~#g6|T` z_ZN6Wb~&@{y8=*%?cKV;(m(kxJ(!XL53}on2EM=)8#~}qVjOY2_=e-9Cb!Y-Ub>k> zpcBJACt-E*`|jq?Qv&uK&HGc9Zl(Lu{kC>2YO^10-kZ`(W|Qnq`8dbH_^4C;T2f#R zzo;aC*zl40j+c&ljNyGsJm&BbC7xl!uhT9s^syyV%$6>g8cg;r-GI3%n{Vk4(BkQG03xE-f3o-{|l<{mcMhUv%`_Y8Y&H95GAZ`{q1)O;*X9%uHv$KCu{ zsypj=^Wik}g%{}Gyg${GwG|U;2&*aCo4su@>b;OH4@XS(~=4XP0O z>lB|@`pm=-z9f*OC%RG6NN*n}X@kS}tc|GX28zdi?IHFf6wg~8@4zFTMhWMC*B=BP zMk;WLLi@U*h`Mzs2MzMBd=edN56(jg!l9?|;Pk8=$k1|>|7WTZ{xAZLBmF?sFl>B3 z-LSGG#X4X_{L#q$T>YFVdWZKrf{n9y)Jufw-$;#>Tj&|PUM~~AYE6{lr1~Ae*7v>a znIn*;{5n@{6@TfKr>F{ztTuR%wO+u7&N=!S(`UgTuki!w#lP;Rysk(2l6sLx9GPA3 z*Un+QFn*3)a3Q%`w#~{OPRVd$w*5H+nt%_~=j;zn5zeDf9d86Vs^DHs4A7Xar{Mq+ zxE&`yto{xl)P(#9oTZv*mxXX1N&=?ASR^3dJ?U<`iUfnE8=kr*oqcQ4ecnpb;vd>{O&}sB?eXfc6AoWONx^5&#&{X0R$5}qa zaOzKVfsBn82Z z@1b~WJGn(me-~b`m3P2Kte{O@KmkmbOXP<=SZB2Vm7*Z+P1lvXDB*hb8@gcdDn;D_ zt~zJY79{7;c^sV)mDO%UC5#WT66w$5HUMdieuoOdk8B3BV}hpui5A!h3aOr4FETJQ z=L5VT=H((LR#~;HDv`%^FFaseNHcwue6nD`dUpHF%OLE%9|%2XQ9-|7_#cORCEd}n zLOiy^5!;d1;iX>3L$du!NT4(03^8yk6@t4^@wZ;odLbgI?jy1+40@I^{3}VUQe%R^ zd(@wD6OyNa$)nRpJq8aVo38h?g#X41n;Iab8*CYQXl^A#FkMf=Pc*b!N3yR3OyXZ_ z;V4Qe7Lrp7p2j2U2!+Aa`8*JmXo3}*;C=d-uICa6z@|y#bISw5=$iKn zBJotVbASi2+RslRVD`!qADoQk>Lxxd?dPBT7pDf^wB6dwBc zlz`c*Tg>N^sLy)q=~&kp(H2WQ*i2FW@H`!pgVbL5(D4U3LQ)A%eRR@+-+UQJSamnA#?q-s27T#sQTZ)dFG> zeJ}xRQL)=Z%U&#wo-`s^y8|53AR!VByin#V|dNt%L-`T-Kc5P_UC_6|nK)n159 z+EWCV+T|jGrfV>LQB!yzYqT<}gL0z9YUlp56j=~_-)P1SO=#D-T9{#YQDpqbN(7nqDBC7IwHV9n%V`m;s!mA3OV zVM5APn({fkJdJx*JE8*D6Fa14LgWxGXQdCo9kbGXC9{00{*I8j03cS--NK@dy}2C6 zA}al;`ZrLZx?Qsva*Nu^PnIj6s*ebouEPtp&sq4yo#6i{S=GUQsVuKSyTa)Jqa-0o zJVJ<*ak%<8j7aQJ55Y_8awB9$_y_QU4z3aVk@9|tj?*9DkyzgM77V7sJ(}`qP5Gl1 zZw$UHlQ@A&T73y;Xkak#`)K?J1fO;OW|D+mJ-17Y+Rsk{00D70%3Z1GuV7IcbmcV> zndLhijhtfu5F7_qn@Q5XMXdmbfLX$Z#A9?aa|SXHOjNVbbMUAlvh>J5B#z7RpOuxmWJ|Lx~{@WlNksR)P(L;eup4|qY5 zhoE3Mrr|594)r13p!`cl^37DgXaS(GtH(_6|3X|Psdo`HT}kwX5fC3usu^sESZ$M# zssl5%l*veKgZL_{z>v`jZ^nHu02lPTYlX+<`}qD;%@1HxURx1#Mc z*J}G*WMSn2OAXiJt7JIh5W)c>Y|cbYHU?xWO)w-X^o?Ya4d(ka%4nkeTf!5RF2oMI zu7fjT8##%^!Mb5n%Q}ya2a6*w6Fs=z0^HbJc0XI2XN)EXT0r=x8|Hg>=ZNXgSH0AgMm}8^@L4urqT~odxDAZ8(+jLO)Lu;E9C1 zoj{+j$c$A;erU@&6%Q_FY8{uDan%slQI16@vF4&~j}Sdg?Gv$E*eGu}4@my-ob*Ak zPt^~6^cwZ^8CWU1S2vJ1J_f1o7E}t2b-e-6-+wKZ%ORkzk~9iE@^691JC?_Gc;LeD z3$Ji2-%U#;Pjw$WttQV3g4r#OWlvZfGI^>@DYStZycAUjZ_dJiE z=rO^w@q%UUkk^@JQ>y_*uC>HErRMVcRVKmfm zY$eyR2;C0x=O=Q&^A_@CMz-#3hAEN#Ac~}(5lBlF$(15yk2*G-m=fv9Dhv!ndN&cZ z+aT2!ACU)Wv6#aCHx>q|SK*>wjN|008}QM3n|e6z=2dRG-Kb-209FlrEQzB`R+q`g zu2#P)rC$*qt?1#4Fw>NcpKj}Omik5n-PH;k5QI{-$8zC~bFByQh};PA#M@H+KQ#u` zmkJO~M`|xq{h1#P?ZI4r=4xdwC$4;o?aYx+*}c=IvM?}ask1SPre;}Csk#wRj=9T9(>~J(J2SMG5 zp~2T$Z|tDIKsH!6&F|%gE&v3=x$U7=fA-!5m->uNtxfKg)e>UpQuoS*U3_7$gcj-p zPxs2yh8@97GW`(2G^Xo(#BKuHWlw}Wn;>D2_MpNtmZG^VM7@S}< ze~M@_2OonTG48^ZA=AW({rjGPI8uxeh68H5IOCWB!E94G36yFyKg_NlR`P{)^B9_B z(lz9xa#ioplg6xrQ4V}##BD~@nL+(2i#U7K&+zV4e|4yjcS#1ts9V%5AN+Ea~`_W`vFq|$~zsgg97`kgqT+QD)}lH88a zuz!uUs7wVyOsD!Sk)R=oLz#SVbP6|DI7zcXT(FyoN*a&F9@riLx-_-kLUpQJ6FK~q zA7)o?1z(aN+Yt58VjR1HQk+`sT#7RlLZrfgN49!hAS(>v4CmqM2{@}qqJEaNW8`~} zdSEE2g(g*PlaF22I4fe9RL0 z=!%BRq7pRfZY)P2VV5}tf;c5$Y1A!eaA8*ioLLHUBV@veXc9J^*J5R~8jvznZT_*lqbtiu#;XFObG`RgoiTR^SueubOCs{4Vu1 zaMck!TJMeyZuS>}PpG|cJ>B5u&!NmH?$$Rz{t^(S_GG?)4Ie!8arrQ!*)ftS-ISP} zu(DT6hy)XS@+y%37D9FE5AL*X|3uyVC{U2o*bvD8qR*Jg`5#B)CCHo6McnK`FBZHu z6~vq7W4a!OY|!QgywJ5d7eQKO`E-VEy6%7nvTJNS=!n);k|ukUFJnC@chNoUx?}?# zFjjLe0H0BS&K|PfHl!PPZPcFXDd4U{65C`wmC*w7o8TnvdA2m(A5303Lo3N^BYYo# z1D2YwFSram)I2gk6cQL*U@{*!HL7b_CVLndA`R{3Gk#$3R-_pWbBs#!o`sdFwveNUlg5cJtK3OZ ze-~07Klvjd)h3@-ne?E1>`@2NX*=C`9OiSPgFnR^;%KMoD{z!R6F zeU>C6F-1q7D{&SoPNt|ZK zx+BE7jLdO52J+Ke5D6{)&_i^;4Ifs7($q)%kSbz3pjZn>aF}}1i9Demw$M<`v6f)H zp=RS^a-G7fE#Fi%LZFJDVgFJ;tG$vQjRkYVH zkupUhLb7o}hQ>B2A15V?psqZ}7$VFPa@Uji;v60pEV+8Y>E)g_BC?POlEm!wYvPAp ztN4;RK!iUU;rAs2)76A1W;QXQJ;0}~M5d*Ks6~qLYtexvhBGRLYhjG8r$uMFcsB|} z`?Gkd@2LaRRUq^*rQMKeufz_WF4rJ&X4Kv$o|LX0O<%0(Ux2$MPn!DAz*u5q!~h>s zelxwh#TeBKBWmI;9a%81vY1PxG7%|#?rsA(FrsOy58ObpnG`rb1usx#$2j$iaT)+O zDG@fR!xH`x6gY!oZGLSADe7%#GN96ow742_Vc{tAQ$maOS+5*t{*u}Gr# zcBiVV5?q+=7RdJ=_0HwswhkX|$GY$7F&}Vb%8y*K>OmNo*ivo=hH>)^t5!wlgN^TA zXR)qc5jMPn4hI)*#Gy!N0i?o>I%!eWV9w4=bW#CMzk?@(3E{1NE7W_G7kG$`q7GXR ztD$&V?c#*+oD6TgP{hK!nBlDmqm!AJyE270adU+k)>S%Q#MyV4 z^R69XPDwL97cY@$f zFN8=@>EK|kuF{R04bR$J-;PDF4wBok+F^ftH)Iwt3)kASHiKKp;qUhmWy?a?yMzZu z@xSwSM?LzkzdP==_#o7@{G-roQF-eSM|9dz2t*~`j>AS&b_|2ZGnDC zeghllkL8EQ+OcdNVt<2uyjpBuzY{*JOw8I06m(t##(H1(_1^AVz1dhp@LlMI{Om2E zXIi~r8Ph{|C;{w_kX_bhG7LF<{l3+b3!7s;;|GfqCEtT|3H_6t*6OJqriWuW`#XA~ zpXz3}8tUFIokZ`>{oc0sef@^{v0I^EvpZZvb^DDLUrSR|?)8Cio~Rp39-;1UeciYC zx*x*{E2CCCb4S%SX?R*r@|h}imE zqIEP!W}roeF?1A@QT^ipxlNIFICqTKle#^Q(WPzPjAO=8<6R$)sm=H{5bnJm2MZ(x zFtx!cbC~XWIQ#4;d~LgZ^(WeW`gr$%Be2_-@tx1UVSL!r*PamK>tn32eK^3b-?vyg zwS05<=JwD9-ulgBy#3He+Ucv`a4c&F{J9FK`%XWAe&71L?`-_gEv;(b&d;$R9sB?D z!;9KO7y3Zx>vue0Y{YJhV^9+a0#JPS4?K;>g}}S>^Fa5Ff#v7<%(F3d+qT2oZ;Q{k z00S9*)Wyb!0pmyjtA3Z4L1h~D7|>^vH8tIROY3&%1GzQhgmJ{!Ovy8ln7w!4?Cm7P zK(xVZ=reY}$7kPSX~R0~-Un@XGd6hb*iqxT$nJdwsFGs?#%_$^==Q9qakK14@$US> z*B#N_<2O+Z1RRg-447#(w|U!k`ucqo;5ntR2pl0%V@JrAMeOif8JU(9pkjBp!#4xr zX#Eelp;TYL?SXK03RD9>zp)|E{Rq^F==*TB5Dxxqz&jS>4ZiLlwf_45fALKiAL5b| z7Zc#Mk!8r10Q_g7Ou*n_QX}bb@g>`4f=ZeD;DA?AHw#U;CQBPV%+wnGhb0bx>d7 zqT*xh#CU=03-|fdXAI$PB5WfJeXpzi8E$JL79j@vuxQRu@%?^2WANLoPO+updw)i& zxA}`Cl>WY?C8*7pU?}dWI@}kWo4-s7*sD@nyIK4L+51D^xBek;|^uT(iC@ZunN>|gZTq0;{(c}=L>?4Gq_6%@aXr?Y48Mttp`_`;(P`plUr zJj(!^R58#nl*G-gNnU#^^z*UL9HUo@h7eZ37|4Nw3E|{}?5RiIVhI<{S%@K6brEIx zC*s6k-^esP)pwVk(ms*#Xc=EJ3sStJ(A|$(L2xEViF=ip-jgdQ|JayXVtBj2D$r%} zCi{#@DgN-n9|IX}zUKBW7||&)Cv;hP-dz`!nAIn8S1vr3+qm$@5~CWYIW_(0YkxO% zz}P(Z~bQ{VQ5_to^^PuBmXmBHf|in!HRK({A94mNX z5ETArQTSp+$Y(mR&ld{}91X2-l(nR2cv{UAnwWikuy=_$)!rp{<#0Rh)5Y<)ZewcK zF6j5!ahqvVvOoLV(EEP7VuX9@nCSR=!_$&+E;7t$>;u^4qL?rRCpNCmS3WUVpWwBZW_ZW; z1O2fNQ+23LRnMPcO-R(P4hQn#icFZAv=xshe2A9Z=^xAP|&=wRFO~~2a zj1THtaxui{%h={~_>KYTEKDD?doy2)b**fO_!lQ9cG{ilII4Q*G7zW0?_4}KA#xY;U zk$kMku5U)X_z`gUcpw(ym5X?_Azn?~m!IOnD4tz(e;O`qx8xiDa@W5JF4Bl`_`V_+ zZ@83Pybhnj!Tam;4KyjC?)}P+eTu$t@53G=A_}vd$A3?4ElHE0e(*N`0D)T}FdAT= z`kGI|s>fla!xu=5QCAoD>eaeV_&E7P2~3gxo#ZWj->zSX>86nesu5LS0aalG{SqV@lyJ1xBYGRQuH>l+o;B4d{$!KGoCBUaokbQB^WO9Ep6v|)zC}cr7g1XynVf| zeM9>OtUrfyFuk$aZG7t9xgYG0hVI7M!!5}e>|u>!ovMAf^-Xs>66biA+H^OL_0G@Q zfu@kLv-Qoa&8@$2FMY#~HcrV{^PbrZwsi$i+Bepp?BZD75BVY57mu}nI^@qm^(VVx z$=mWBxtM6rO=&^Vk)D*>fKlML(9Uxk?;^LR8@T`5vHTFEHMYSZV5PmYn(%buD2IEe z((rmM;0p&Hq`68;JkO}|^z_glECDwmQV1-nJ8w)t zfh+;v1|_9niK5Q2KEhoO9MJ-Fg$rkIThudv@LucGs(B2b9y<5uc+;ZYV z3<dUQeH(AGu`{3>WL=$A$ZxgFPGRw=zEkuS6CaJTaP=O7b%fF6su8W^M`;?JF5) zK3XD~slZ6T)!n{6Kl?;z9dgK>b{l4WoZ%(*QJ6HWy+s1K2_|#QgTAK+Vk0n}UIpPk zso;}7U5DpEcz6Bp@WvVG(;@)blCC>h*4I%2WoL*QBWTbG}gzH?N4_G7o+e* z5IrX#h|R%DXy7<@px=x!XKG*ws+9!$85i!|9r5pdBan9lyF(q0l7g(>h+T7j_VLhO z@^yMf`4O#jP_6=g4>0dNMdKqnDJA2wdPBNqH>z#HPtUh+!u4Su9Jtm8QhSg(eb_l& zeiKT7q^ap?9$ad=3C96BsWqrA8{g%8n2MS6{A9dv;S|Pm zRdH`RxmM8$#`MH_f?&+=h~CRI)y99T@V#4ACt%#>E~^^=a`b%}{LUW?bU zd^ikkCkQwwCZIr;fKP!kRz7@lj{XRDZNY8NETF!Gi!LAj&l1I{RdY8!|4aFBEsRGG z`&h%h(WRV7ZxP4Dx56bHShw%NN{t!zKaCvyTAuxwRntR39DQ$7mxkynIK&mq1@F#acl) z9c5EipCV*hH_qv67z)mBrJ$s$2Lq?4xf+zZ+!DMDm0*VdCWz+7x~SeXbAW4oBmXEk;miICx0p& z#$)M+KNVL`uE(~V&7t?uubi(NbZDnT7T;^pJDwnmukE1Mj=_NU&>)8FCzAd4&%O00 z(-!}X*R3G*`jZ$YLsf!ZRF1&@@!?>9dtlyv6>I)AKv4GHJUtK4szHO+KL6x(CX)C zCL@?t!hRH#)G1=E`+Zkpj36QPH;J`i=nH)VTFY@*OS5pa^iFcs(6gBwJ=6W!xLyIh={z80HFegX z?oZ!iO@S<^z@8obnuvd=!{~A zu{q3ZWO0tcYupaHT9Dn2q`*-Z?OQ?^<6wrN-Zw$E3Dj4(_crPr^yr-0+k$<3=4kZr zMqiB;8rOo$;;WIv7GDcKi?2?_0=8=rJoWu9^ld-Fbek9+PSave9G%{w|DAZgM&Dl0 zfiXBefL1rgRXi0?jpt1`p*tA4ABDh#a34t1XSZxvi!763A*b6*dS^tn8tTYH+dGYin2v} zmMsOT`~(iC(D-)p-J(yHY$+J5zgW%EbAl(X96y zwWYD?Hgf{jlwvX{`&~@B1bdX5 zneK4%W$c!C%q7WaJd6U|d(_Oq^S!8fHarrqjJi=>*#B677w#MB53SzD08G~dbV6nH zG{OPKy&zIM;f0m=dFV-4ZT13y7`m3O`;Ya?Al3U^)hFd}opI39T#`7mZL zb$3Bs;rYqIqi!}IZD{_F>r&!@JeNBf79(X*4`L2y9^}A4IP1rrT>>c3W|ic%B#*bF zpVO3&?qKqQ{jEPkJ-Gw*WbeuOj%T*z8#~?2t=L}u(vE!lZue3&8<3>+Q^?5JfjaYk z7$)oJK0SPh;jEHz#?)J|AOp>2KRT!@x)70SV25Kkn$Ehu@nmntD)J`m+HPV~Iv>s9 zn$5&*jR>3i>z1E{@<<2DcB&{abHSHMXv`xzeNfUQ zvo`=F$K3-_Q`B9D{>l_&`N%XpVg+a&^IhFSreAJyD4Kp|br(m&9~o<0=eB$dg11IK zwEo=2ru-yoHQci=l4+CMemnq;NpgD8wrO!=4{`E>U9B^rfz3$Gp5tMy@8%m@+|6Gx zH8QNH6v4trD?tRF8cfNgtHkJaT=g)EVnwW}X#WRSM8-14) zH2X$FD+&E6`@58kL3)f9H&l}BvA-KY0X~b%gBOXugw&JWvS0`IQ*fVy#PvaNWuaaN z2NWI+eA(>pjteIb1HTrx{RnlQkA!aDC@iwu7VK@EmKe{iXNYGRSYx0o7Ef~RO|Bp0 z+t(w>{WrjJo1$_#R-D5K>Quij>!{YeevS=~9;Qt++%v`Pc;-07a@&t(eZ0nU zKg7$zAI_4J?y0eOgV3PA-E^C=36D(hgzQ^H{MGd9*W^ zv@>uykF9@j8H4vJT&{qlC$RkY0rJY!?vw$P`9!KV1#q}RtLWxx$`jEDlP)?#!#Repv z(DtPMa_X<&=`S22LBFv6%GF;>^w%u?b-Vs5Rh0tdS@m>F5Q{L5C)#hP`Gqk+pN?fX zv7c-_59hd6!-%$`bYR_|cz%K9KY;#!JG1}!Yv6zHnf?FsNBCEs+5b!WPdu~#JMKWi|HL!<7t?>p znf(LwKl{x7F8Uuv{n9!9?E_ZkV3opvd*peqJXgu{K6&0R&j;oCkUW1Y&(-q$gFM&B z^I>^DD$mE{`Gh?GBG0Gf`8Rn!E6=~n^96anD9^R>d_|tG$#b1Nxo^CEz zJagqaR-PVtj+3WXp5yWKhcEpI8)e;7+6TOa_o`AhWg@s$tGyH*N?YV(LKq>mMRpKE zU&9vJM5v6=Izk4a7YO}@&|e5`Ahd?ihlCy^bcE17gu21pBRKQ9y|gbOuHP&jL8y|@ z6hd~{hiQgLjNLkHK7B91`#?==rTe-LE#eVP3TfWJqTqH zLN$&U5ju(ruXGlngM{uN^f{pi2<;;D9HFg*HWGS+&@Mu+5c-PHvxH6(dW_I{DAXgX z2@N20AE9drH4>Uh=q^G_2=S(-(mxWqjZhPzS%kO`D{>>DOw@o8KcO25jU~i-H!_0I zmxP88`VXOWLOEz>MJ^_EC!thA8wj06=sdKHB0r+W*J=K33{o-Z(-`y~p}C~kLTCY@ zCPMcRdXdm$gq|X_j?lw|-Xru7p+kh&z9?-c)Ig|bH$Zm~x|C2gq2Yu|2;E3%2B9iK z*Ax0BAupll30+5MC!yhl_7b{+&|yMOLO&3?fKZPVKs^avM5qg)D+wJ#!>M#6p~HlH zg!U1dMrb!7p1>d3MrbLajf5T|^ctb33H_bWn}nVqw3pBy2puAHKcTMO0j(r-A)z`# zg9yzhG=fk$p#Y)Tgk}+%MyQI=L_&8F@(>CW8cAq1p-e)5C3HEU9yin$&Mh9d7Tq#n^LSp9a~;iH1Dds zs!(MRalNYcwBA$7?kIK+@>Eq03__4%=j^Irsq?DYBIs4M86>Q+2>r$Li_4u=CC=-M z=Y%Tf6jl~3at<0WKyZpIoa>8=sv!3w=WGU!Xd>`a+1F_HMM7F)k&Y{?sSSd+W^k33 zeqyL%c5w}*2s!y1>Aaz`tfZ=@!dVjyiI(B4MKo%OR&JsB%PPu(;!KGx08k@PAnvQud{FuZa^w4$)Al6Ib_ zEzDn5S?nyV6|1c*tbmew_)46MV5#BR)uPciiLi# z(9y=lyn95=n|!GzntCiFJ4%R-4Au^@S*$EJomluP=NFcj&2d&$7uOWBz;V`A7Z;V4 zloihz=|m`bg_V^ELOXV}+)yQoqFSvYsAGu8^k49U3(AU$HC9agQ}{E7C1wwn3HqB> zJj522HxWmdlp^ja{3NH5)OlKQ{|o+U#qAWnFis5KCOK1Qt%?w`>}(jAvm#U;EUSjS zzz&9Y)IcYF)x=AW|0j79@J}yqC;n1`B@j`)vHYK))0mJ^eJ9X#h;NiXa$*7sa!#gX zdntc(L3bTD2zS=^>B2rkN@<&kh9^e4=(Mss6E)EZ--`cf%3-aEXxV+5_-h)`k&aLY zJwz=!8lLFm6p}ORr8B)1zY;0;b;49iasOYnbBcZw=@Zow4K8NSiHM02i^j*2CuCJH zx-2}6iAL=ukw+{r0G;>+7gWX5FjiSPYl}*YQ5+)`I^mZ~&2`4mPmfR?8Fil5D=qK@D?n9we(NEO&a!YQd#QnrO6y3RduvkE@FzEKw0=5t=9DRE6$9R0ARp z+ve_XdC7R4&JQN%&s^*}FB`o2H z=03E?&>?X}ZM3mhF!2WHr4pJchhk=zmlZkvXaH40iD+_G)1|f)!a{wZjmkHUa!s-1 za*jh6VU9G*MmdY2d4v;9*{h@BSWKlSGzi5RqEQp&X0z#hk^#xlFr`YP42Ga9RP4-~ zH2G%V!~#j)ImN-kvT_!>3BNq)b%~Uxnif#4ejhYiQ;Y^V6xNYmtaMOqhO?A?J}PNJ zO%<~f3S45w{HghhvRXE*6FJ2ECGR0yrkb)Ki$5zw2n72r>;?BKWFearinR=f73R3UYyRF%({NX$X@HD+b-aiYZZ=W0omQ ztl~gMHOw;6H6A2-n((AXu4n2XpsEU#%N2zvRTd(oJPh#!YeGdt8R^u)Petdg7&TFU zTYu+O&f<#dAXe5-DMC+7kl+k$)2oEVLkDri8L5Omhm?;rBj69QjYH2k%CQpKN1{Z@ zr^Gw4P@oXc300%KLShUNhOvC7wsxKYM+7)CHjsm7skHim&Yg^tXqKF*MaFz4X9NjCqHaK9VAc z;7d_i$3ht!@6cM_wH3%YL!7867f4>RGN;paT7%T|y5ZV^fu-MkW(a3dVR=yq)dkZ* zi==zslXaykW~d1|<@ZI->cXOV#lc#Z1^f*dP&))RF( zoY+#*^ohnPQg=eJ{I!r#gzICy=uX(IuTE_QCnClCnan6EFhrN=-MM^=#aBxkFaJxF?_v=_jLnwHO&@8!#xPx-N}$ zu_|R?NAg7eLv-^GWio9fk#Rzl6P@*_V!UjoV9r=ko`@M|pv!v<{*|C&O{g?bCB}v} z6N-Dt*SUgVDDmG^v{BKt;6DnlAmZK8z~OJX>#;N464KQXa$GIhTdf2UGJp|VEB{C< zp>vhztF+oE(#21xh{V#wa*7vLBj2Id24$4h7NLJpJSQe_jJ|x4#o;tLSJ<#Nj?>5E z8Dk|tG=IhH6m>CrBS=HE=4zs;AE%){w5WQJlFh~i=pWduiq$67XS4vp>_$;}NUC6q zMKnBXXtp-aSwmL+YcbFkYrDegAzSY&tgf>4?!W^2K@WgZNv5+p_EpX(Qmno!tBf~- zL|>)@W<>;sQ@vj3d3|jrb+DRq8U~z>zIJq!bI#L>tBW-g~wU<>& zX+NoC%A$(dRcJq9dSPBiH0p55BD4Z3(C(-yu7yaq^TAp7P8e)h=!~u zC5Uag6jdRmG43!ju4tHsC}Zp*cQqOd6rAy9lUgz~gvK~PdEugo=uAc#M@c-zXwQMd zUsx+C6{E74ig{>dkHnmjWeszROA0YqpQk;dwva$ViBFe;QC-0jghQaP5*^eU8|IsW z3`&%o5Kf}DW3*zg4$6+c(KoNO=>)N?KAL~ZYV&Uo6_!t}vSO3ar$W|c z*(1iUYX_SXLj+ZlK$3??ML*E$)7+&SjQn0vxUj4uRN<7&h*AvQvjr$Phv3x5gkN5) z|0cE+3k)@UbnJExQzF_WK+{qtlu#?z6mt+jddYEyaemrDIyAn3c73!Nt;-`RG*N6I zT&p!(&T2MZzs31+z!XNr`iNP=V$4Cpnd5x^{3$c@CQY2;^WS1M*!CuXGb|_*r<-3TF25%C_;n+Yj&Mt=qx(CLhtuTfUR;y@Hgs z`*~Y?lho?cojrfRKre6IK+j*4kL^b*yk2F0@>sr?x4qBuLC20h%l9hS&G$Or@cquW z;8|W?m6u0s(@S^4SlAW>Po(i?17b z17iMDe{2u>(>eIM(Qi=w3n0#356(vZI&6^4o+neFg1zV7l~ox3qA!krqq)lJ`BqDAm7;Nb;(M3=qd%vjJln^g z*$Mma+xkO$&%xgM2l3^DZ_~cmS}~n2Vcl7c?=!8$;+J>8piS~o*2{Ihx^@C=((duF zTY21u^Z|Gol{aqirrYgi9j4v;V0ZM~4e3M1z~q%fH{I^yemVY5fZcv*OaZ>vc^-Jp zdk6P0u9JEgi@ALb6VmSKu(RNX4e3tI%e)D=Uklg$ZpVydZgdRNF6ZInu-ma^?)B$2 z%5}=Cq3x*!&b{BG5vj^&-}&Ml=~Z;=j}wl#kX#+%d|fo`jznKXE@KE=MBi8 z8?(=Gdp7br@l$N_rPod6WM1e9NJ>xOiK<)`JAmxB3ci9UI_2>MGNNvB6~!P!(EV(T62 ze;oF%d@P-Qmgc_5;z26zdJSOx{qQB#(fH>6))*g~Tz{+|SpV^`w;KFS#d$Pll)LP< zQ%wC7^vSpIH9yPWZpyHqZ-oAE@cV0==QZc*OR7U_$a@Oq5vJpqfc()bHl*LeXZ?Bn4=bC{r|g3M>-u*c+{j~n_rdO> zzPa=LIphz=KPJw;j#B?^)z6-f?C&p;zw)CEY2HU{if^SUnsUyW;vZ z9KRmBOzg>Mim&N;NpMb{r0j~!d)j7Rb`p+BA% z_DZL3Wb?vnL$@}i{ax;Z=vM>EFWNhueizQ?HBQ)czt-hGm(lLyusi%<{N56&|Eyxu z?JnLdr@ipb+jVQtYr)rU_yv)?15wi^wiza5eW-(-xj#&&+u2Xo(TL-PoUk z{Jt^!)UQ+h?DdEFry_s-Q(gUG{-wz8=*IpX$Y0xy{^LF9zlQwP-ROVPgMPnlFh64Y zoSz>+zYJfvdK>3?spGah&&-*;rj;lMo z@o^8PvTl9{>%lqc^gmgyXnKy%;zqt3?A_fr@wcfuQJ((;=j+-_ejbPZs&mun&u|{; zi*vc-m;OBr{l({{(|1$-h)wsecw4mZ{B(Lnc6~kc2ggqx^p``Q-(&qx=Q#a874{Zi zkWRmZI`f{&?U#-5i`IG%qkI{@N;sJ7*BG{6$ckUv#7y_^!E&GLIPSLF4)51~l1}4Q zrI&Zfk%+`Z+^$qM+`Um-+BdvmMtKJMcRcJA{4AaR12pp*iT zj_S!jZMW3fBE{n zsp%?BU)A(&P5+_kdQE%byT0VRpQbx#ny=~Jnigw%kfxI~tG+nLfTbh2L>1Uc|&o=hYa(tVb=}Jvk zX}Vfddg8*`rZY8Nq^YNY?;07F_I2&X+rcg&ly|BepE-pg?adG75=3Qq zf@_?&H;#Z2UJQ8$5)>gq%Uzg?glfm)2&xd_x!8s8BcY@Yhd&FEdgpnkODmC+2~qv| zVIEIdC2Nx^2`UKqP!`oc1Aw)#f`Cp$^(R%*fYhIdXe0Hfy*1kf&*KsY@)b zx$rL}qj3D1Y6TEevX)>xz>cBh7yt|o7Zw1}+FzmOp9etS!~j1eV;KpzXG{1?sQZMH zzXA*bkTRR$0v9z~KFtc%iXkD@qBaJA|5iZ40eG3P6^IwfBs@8is$Y?vqXBRwb)iuu zuTb(s0FJRV8@CvMm5Ss}fT$Oj0q__59%Y$T0A%zXg7*P-1K1ht2YvB)#!5x969BDA znV~8XcS-;XArVJs1K@7Xn?(Z)RZS!p0MtOzANGU4tK?LweE|?nn*peCIMhTk8i38}M@}^4Uj_e=VlJzRt3}eUV{~3wu*&2W?-Gh={6^Pe+DL8Cz!{_Ce-~fUbvekH1rh!sQJ_5j>3tUxLMsA^Z2RJ5_oD9G+pF=k|8(>H% zSpvYN=1WR`1Hk!H0n@?j0JJ8O4*|*mB|r>QX?7d{hkqdroC3glL~)_izy0iF-58yHHi+gsbG0_`E;(DNgz0OYVSy>VR&1}a!ZwIPU34b>K_X-~z5_5mEQ8Rsp~_@-vRi`W)l7iHrNGH<{pBM@QsxxnU9ElJ7A zh{&x3xlZ$ibg+vcF^_+7^_t+y6qz?f})HCxvC&0I1eMwQ~W6hmyNgQbNh23a%n}8GzQL(zgMo07xi+n1qXDGyuKk zzyIYuYzav3Fy6o|QN72H9|ZHPdO3v4bO z{Q)IUBKk`bdEf`#!e_M01wC%zCz@gndcS zhk!lC_T&>BgXk?Wg(zpdroF4T4K89|c!!2cJYn$#C7}H%oZuGSTSU-~6WpG9!w7zi z6I>9TplTOV?R-Sh(Bl?Sbb}|RuLj_??-aW8XMo=WTtsj) zrXCx&j=pg_1$$H^&jMg1xiT*)5Nn?T@WR2%Ua$cm8oSJ4nVqDi3ZzWF0thkn0N6Nb zLWu(Dk_iBGM>^{ml}I=8;>j}iBlYh@L`Nn3Rwd6-@(iMgs+U#rH%i__6gm2_O8SBW zpR5lHt^cJ$rRREE-`vLG+ z?43)=vjD#g%lr+ULwCf3zF1pmKs*=#Ad3Pryukoe6Uj&gYiO+;fc1P#a00+EfW-u7 z1MqG^B(G+d;Sv{FO9OC-i3dBQAW4*UXBfa(012~Hl0xb?BjUA8!UZb1nv%;Eh~x$Z z_fxVIQFPU3JLtjVl&~EHj}XvXf`Bmhl|sQ`P0WtIT2 zvp!>)KLW5G@n9_gdpn>98vxiPA{m0}Nw0)LfLS;bNnco@Z_?6R0jTyHr2Yd6q|9Rq z{z%CxM3JL!sf7Pq%l{ul(M@h2=+N5sNd0XQfms(=Gb}te?mUjh zfFSQ3q``}b*ldxk1)%9KN>FA!z`3F13{+3G2eHrx_X0%IjQ<;v{qt8!-T~mCc${DZ zz@Si)j~p71FdTsONTuZfhXIIzivc3ut^;8INO(%i{28gwS3&3q7g&&G)==^>qE`UK zG{0hV6u_JNz?};K2H?6S;pcGqQ~;4|j|=1VD)1fvpw}W<4S=#P1iNQRh5`%?C5L89 z8UWyg3ugnc*<$S?fTB?HyKKpm0N=%mDd8QAWu~Dq<3q_JfT+wp024yVX8^NNMo2tM5Cn2m{vzu3qfmHcHM%6b&T0 zK}i!OixK7HaxG!`XwPfKnK+trkLIPl>-<2rH)LK}fLxi{RcKOhC;-Zwcc3rg-q zMAH)DzQ{WoOd0X^0HgsUs?R3iC5DrURRkv>;({&VY{Ze|S_Q1v|0Sa6=Ca%RINMpa z3`f9-^(`Pc5fLTQ*cO}&!6D&N#F69{1$QC!??BXJeUPQSVZp$BoUoQdaQMR!jlv-T zU7ZP{`vYJOg==v5=OCJhLqe`@KJvfLZWoTLQ6ON%Ql}AcePPRPBbbkf-60`tvqraW@07rAv|ecOhaK3BLp2A}00x1z>xC@$fd_PuI5rd=5^7ldwiabNYM$ z&cN|789WBSGMf{u2A~Hbc}D>-9^nC4=~_D4D^Jx}&(;9rArTMwkhCAbW|W)@a3+8R zKHJbykqiYOqY_2|RN_nwoCm=1DSdJA~eYbTA^=;QbPL#6$B?C8mU@2?}O6bvi`xX{bxc>0=UG;+Z-&@J}2*qo@+T4(8hQ6hlDB&fJl-8h|2seThbR3VYn9Y3IL)qj{&ef;?C~@Dnm8?1_n z=wOV9gJIyB!Kic=052I5j>k$s)4hg3QV#&3_X*PA21NY;u49>d6inU$;86gKUhg1+ zH7Y41_#XhyUa|H$08RIS#Lq)S(-L+9pjsQt@K+4VRp8A8;1C;63B?55CgA@-fw*%P zK;-ozfRDqLo`uJ~j07OMO0EPL0c+yhX8?3(OI!nk-7%|KW*J+$4*+MmsPQ9YdN7D; zeGo;B>kq&(yCL;=K@_bS)Md{-PiqI^{V)31y9~F;!OH-10PZCC3A&mjUP15(00x%# zbAojWMD1YQ$D9O-SbGG3YAdMrdjK%(EhgBYl3x;VD#0(}S-l*&cw66AyL+CSPaTTN#WjE^&A7hF)G#?0XTLfybM4`Me-WJ!7A`} zfiL4j$@c*!g_4^9BCnqUC=Mn61|T6~ZL@vxDGQn);kf;>%KQ+ZKn32N0CNGP%=YN9 zQK4iCKvYi?K(sua1F!|uo<$m5f{51z3Cv-8UZRB2mMZYp0I>iUv7zXl)E7j0irb0eZ_J_7MTU9~^xQokGhZuP+Cf;%e#U8JN#Pmj%JO0X0qy z)p&9Ujth_-Jcg70IIbgjK|vwG8vwYrILTU^U>$O0`hawLz~8h8h6CU>!iD_-#)lHV zB+3VndVT@G#?`XSa{yb1lD`0OT(?ldPe-uyxH8q_>ZIx4JG`U4mNH)QvX0iQ4r91&Y8fwWR`2qp1nWAsk=UVy8k1fH-z8gT@J5s{iB2zUoW$3$`-w)Zr@i-ZT;}*0fI1MKeXNv&F zg%S>;sLUDw_NRm|5YsiWwmEwGAb{V|+93dJn@ElT;N?aF@5@p7m zux&5W+S>q8Js$&*!#5}iFa~}aTH}8p!@}pnZvbdO>Uj(xY8>xOBH!Lnz&FCddjPD5 zziASz2jCL;G3)7vh-E~w13=WCy#S&zqXEdl7BnzFyG#c_G`ucSiB!tr6}fYpf?p%` z??Xi5B|NGU{(obiAJ|2s%`gOU#vNSV(R^oBdWhbXeP6#y&UnUWn5;XcL%@mk(mXg7gkO+d^3A!757j6^$o86RI&87gb$mN)T@?MHPau>mgIKhpFcQ)41 z;C!4=O(d7$gi}Mpi-TVWl8{|<{YLHsq|=oQ79vUZ#*MwHv)`9 z_A**~2OzTc5kNGk_=zs=KAZ=m0I0?(7EAzOd)5;i3BdL|Lcq6=oKGSN&?B7P5{?2u z^PPk*5u(dTxc-RgDma83Ce4eW;+X-(?c zA7C3-0)+vhGBW{K<|~$YIJ?Z#0L5XMud>U02d3H~*$x-5;5-1_M7VnH0btiZ#!
        r=hU=WsC8W73%6iAt|0FgVB zR3co@04PKm3FiW^9+6xPz!85mO@9tBB$VueIlx}v&gI~EfQajQfZZXHaGpx8LF!+M z2y?@Q8&z^IC3hp@5-;I5DtU&Im5BBTCEOj(de&3&8KS5R?++>28mYe(qDZo%O7@~; zhypQKs9+)`2O)}lo2HUlN{&N>M!L|hk_#z06H!#=rz*LHl3yT-%5WnqeS4OYCl!df zmlW_jNPZ`x$l5xU^oAAxD}cz_jyR*WeJL4&C@NE|lF5{eLxevUj#Eh^C36*ss9nK% zl$?nOQ^*BgglPIFl-!Icy0&s;P{OV0K35fjMmB-#4Z&OjPH=*|2{`o$?jYdoAlRA) zIBy8HAmBhHs3zbLCYVMr8-RCf5{6(VVOjKMVPpg)03<}hcmUqvoShHJ5ehCRn5ke1 zK{LQu5BJ#weEjEd5y|}uq|74<#M;vUS3*rfO};DBg490|5!&Sfb?MIONPSu%IE8@r z3EBznNAwYZgzoN1UI~Jyq`f7f7EkhVJcuG(1Rz?f zUIgG0B9eCj#sQ>RW;m|JQJE5eXh9mM5~*|=z|X?*_9ps;y0JG9!$YWyUHUXq|8YdDRKg1iIw@I$h-wnns^kkwK2;!+UT8ZFY=hL_8WG2y z1bRz$cANB^Z%yB{aJ;t;hLa6;2dC|RR`?{$Os0mMKbfUf}P(|Ce>m}Hs# z33#JQcE#F(0OV~lQlF1cFyz8CfP9=vnI-_tU2i_?IUj&c;BV{&*Jexj_!Kd^65#aE zz#$k1e*`$626jca)4*voz?TH{O(X{aupX&&rm8KbS~~zb!utYgz#CN>xQf>JY)o(m z!My;uns`fChR-WBEt2qaFe$?ghU7p@f2C^tZAzcdP%z}eHUJ!!Qf4;*TH^-oU~d2p zYmpoRusOgiq(LPj_JRcFP;DM1jG{8F3PkM`fT-F0NlLco1J-jl0GnM3Z-XaP!Y#zX zs|xtfm4p8QV6*?pGMhn{j*4VE1yZIE0DsQ(7?n&y>Q6+(AtqrK0GlmknpACD*7E}Z zHbEr(N&uUEFVcYf5Tj-@hibo}gi%z6`>zQkJPSZarMFirkfHo806CCB{v`m%s0`Q& zw2)nc%IpBZGW$?67*WJ18^r}>e@YHV6qTt1V3`t1IK8O0kd<;m5L`{b zaYpbi0mm}|w{H6E3Icvrz-N~e^e0%0h}|f>@dp_T0r)?xgQ4gGR>}{3f+7HRiAcuc zj0U6(H@rUST<>gQ=Hgm~yJhbzUbD_X6b2|x}cybiE0&P1{~F4ga;!21Y*<60z}!ERJ$cLk%62K;h) zL?S-{WJ?P%W`e^3z=;dT0^m;3dk8)S?Ev&m)Xo7|2(TH;a5pH`UZC2}i1rC3696c= zfszCwy7NB4d_?$j2F_I=rmq9QYU3m~1E8_q{Yd?L5n)`o@LQEUN69nUl9yHTH%i`A zAcg*+fbSH1zN3ozhwT9NdLi|9L=+M7U6lx<#Q=2Y)=^NK0PsCrQ$^Co!G^1?gf?6* z7T`=I?*o*%d@zH~A-y6g1-L4dtODToY(z2+JpDVAjKu&g3(N3pz>7jjKis&G-kT5w zdjfD!NT>!l3TGm@4Io->p90uBl>8Imcvk}7yutFy;V)%s0r>g4g!5pZ#EXPq8Qn_- z-a`PRwhoD@p_3NQjd!Zw4lR?Cq9Q$oq<0Fehj1>pK7;W>bta3=Mf zg!zw|=3S07I2}>M!OsCWLSE+xxfS60u*_5}yj1HujAa1O$IjXk08r-@Q}P%9dd1tG z;57i$>m(ZhXh1@rp{^crXD@(TkSzvQ0dOdbq!VDYD}jX$Ch6PWNd2LRFmGL8L6-R* zB@+5KYa00&EdV_^IJw_$FcZ{czWSGbytMfOAg5k+2*2b^^dFp``eGa5QY( zF$GzlIG+l@J{4;h0#t-$o(G7m{R!a5p`@%zML9XJ(hbBeMq;+Ftm zNpO-I0BT(cY*`rTRz4}SB|v#7nFheCj7Tm5;Bb*}3jme`CwT;bBuaP_pbTeHW{={m zLEZ=uU7gPY*fV7GwvsHa?*l+%U3eQH>YqNPS-Wt?0HCq1o_PQ?EujN|J$DIG|3X9@ zd=jou$qkfTuRtWXD|nES`w?xUMdSu%0KlV^yn-m23v3}J4^#3FL|95)2rvsd&G?ht z!9akBov|vJ+8dH;far3V1c-XO5#X!P+C0o88j!hg5da3g3l9LS#Hn!I-TQ}VpY?HJ z5uR}La|563>x`Q76Xu4JpW|e0*ga?Ta(DZjkO999b~2V7rdS;a4K+*%rPF z=?7;D?KeYF0#DHM-T}xCZpXGItRp{}ARdNGNZ~RXnxsZN9!0%Pi=LF{)yY-T=%%>_z zQSt@A+)y$LIV{tR)SrWhE2D&yRdO07+#!8bDA{;B<$LEG4(!?_X0U8#V24O(N6ePa zq2zj;aInlLcoiosC*fnn+u`76)v{eYnw4zw-jJNnGJNHQE0T8=0q4x20KXszcbagc zx9sT@1C(%I06|{>|0@OjoZH`8n=Gbx1fberwto*q(Y)Y`)YBmmwOar@L5 z_C*@hBiaw(7J9%P11$3@B{v|VZ<8tEw|Y7FMD29|R{9=N|6N49&`8)Gx|HmJ)c>vm zk?f^_-_-T_6{e`?rl{mNN{&PnU6R=-X#yo|F2TVBKSIQMxQ)Q4PaK6a2_8h$Uus0e zw`sVucf|9PYZAX5_zOM)VB@}nG}rIf^%@P8;)57 zzr+b=x=3zQfW+LN2n+i~0ylE8%#SEJ7ZI&VV9jJ>5hXVv+Diqw*J-SMZGqg#OoW~Uo^aLSUd({k zCsHnfUz%f^`Ifu)Y(z(@zZ%_B=CeojjFWH#dn2N$83d(> z=!;0oa6*?Q9F3TgIXL`Th$3I8OKT03oQ9}pU*OESy@JodVpc2J+zWB^;v~8OC#>c< ztOvoJIEmdEOF2(rUg*nlY9 zXy&#t{M{JdGloaRa7hf8EB+sBOJhAjo=dmabWcr-H9c61mo?py@rDKBMVtny%M$_dd?F1gb-rU*A?u-AM=lK7U-Bvd`mK$RJUq$xcOilU!DZR?Wribdl`9&iNyvY-*%b6Eq z{$Eo5)7KF5|0ZY4@qe-BSL1)uhVpX!Yf%1o*f50khd7=_^6lO4AA7iI${x?5yiDc! zF?l#|^HttCplkVfeTIzzW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n? zz!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$F zi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n? zz!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$F zi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n? zz!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$F zi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n? zz!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$F zi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n? zz!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N z28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0eP zW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@z zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em z0b{@zFb0ePW55_N28;n?z!)$Fi~(c77%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(c7 z7%&Em0b{@zFb0ePW55_N28;n?z!)$Fi~(cd|33!4Q&`@Vs?fLM&8v;q-7yJ%ilDJ=PBl18%&uS1-r{wff49H9Pv1p5q4(}ZKl^NCQU!4vO>mJ#e&*o3w6BKPk!MqUearEr@#38&B<7z zd?H$lW;LbU;3#jXX=|%W&Q7)_n`$v2*7dztm=(g0Xzj>zs0YT~8qnGzGh<5g9B+}= zx`1R0i)?tZHkCjP^>dmi>+o}gb@gp6&233a≪8rjx;IqAJ*Ipd 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 literal 0 HcmV?d00001 diff --git a/osx/resources/Credits.rtf b/osx/resources/Credits.rtf new file mode 100755 index 0000000..0a7a358 --- /dev/null +++ b/osx/resources/Credits.rtf @@ -0,0 +1,59 @@ +{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf270 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs48 \cf0 SABnzbd+ v0.3.4 +\fs24 \ +\ +engineering: +\b0 \ + the SABnzbd+ team\ +\ + +\b engineering for OS X:\ + +\b0 osx.boiboite.net\ + br41n.com\ +\ + +\b built using:\ + +\b0 SABnzbd+: An improved version of the SABnzbd Usenet binary download engine\ + SABnzbd: The original, OS independant, SABnzbd package by tdian\ + NOVA & Plush themes\ + Split & Concat\ + py2app\ + python\ + Apple Developer Tools\ + & more +\b \ +\ +web adresses:\ + +\b0 www.sabnzbd.org\ + sourceforge.net/projects/sabnzbdplus\ + osx.boiboite.net\ + br41n.com +\b \ +\ +license: +\b0 \ +Copyright 2005 Gregor Kaufmann \ + 2007 - 2008 The ShyPike \ + 2007 - 2008 br41ncom \ +\ +This program is free software; you can redistribute it and/or\ +modify it under the terms of the GNU General Public License\ +as published by the Free Software Foundation; either version 2\ +of the License, or (at your option) any later version.\ +\ +This program is distributed in the hope that it will be useful,\ +but WITHOUT ANY WARRANTY; without even the implied warranty of\ +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\ +GNU General Public License for more details.\ +\ +You should have received a copy of the GNU General Public License\ +along with this program; if not, write to the Free Software\ +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.} \ No newline at end of file diff --git a/osx/resources/InfoPlist.strings b/osx/resources/InfoPlist.strings new file mode 100755 index 0000000000000000000000000000000000000000..28faccd214ed4751849a68ed3092949efdf8f220 GIT binary patch literal 148 zcmW-a%?g4*6h_b5rx;usJ$!X=G4tJf<_zEOo01SH7^o?^ zbLB%zBU{XoNixuz!R)+GZk_X%=ju^F&Fl} M_cm4<8%gG`KRntQL;wH) literal 0 HcmV?d00001 diff --git a/osx/resources/MainMenu.nib/classes.nib b/osx/resources/MainMenu.nib/classes.nib new file mode 100755 index 0000000..a48bc27 --- /dev/null +++ b/osx/resources/MainMenu.nib/classes.nib @@ -0,0 +1,18 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {shutdownSABnzbd = id; }; + CLASS = SABnzbdController; + LANGUAGE = ObjC; + SUPERCLASS = NSObject; + }, + { + CLASS = SABnzbdDelegate; + LANGUAGE = ObjC; + OUTLETS = {mainWindow = id; }; + SUPERCLASS = NSObject; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/osx/resources/MainMenu.nib/info.nib b/osx/resources/MainMenu.nib/info.nib new file mode 100755 index 0000000..9f8fed4 --- /dev/null +++ b/osx/resources/MainMenu.nib/info.nib @@ -0,0 +1,21 @@ + + + + + IBDocumentLocation + 53 83 620 303 0 0 1024 746 + IBEditorPositions + + 29 + 233 546 207 44 0 0 1024 746 + + IBFramework Version + 446.1 + IBOpenObjects + + 29 + + IBSystem Version + 8S165 + + diff --git a/osx/resources/MainMenu.nib/objects.nib b/osx/resources/MainMenu.nib/objects.nib new file mode 100755 index 0000000000000000000000000000000000000000..06bc903b196c2dff427a9c83a69521421fa5e95f GIT binary patch literal 1882 zcmb7FO>7%Q6rOFI)NPy}D3o3*`GTs7Q#qAfu#+mP4{?A!a6v+Adx*F7?wa+O&|J`j z@d^ovAIl!q#uZUipp2zRi4jva2`m zd+&SSd-FCjOl}l$u0&jHSajeK(-Mra(X^hLoXuRrS#rf721Va97ESAc1y!nn%T&2U z94jzhtg#ab2^~x8Gi73A3RowuY0qg28GhH8_S{HXPZo;>GiwmjvAv4NH1jM6uf93NATiH;XUUIQT)} zlx56eiIG(TgQ+~uUbhVQy608c=llye0kAxoG2g~Hofrgr9vdx{GZq+=Sy}P~2nZ71 zx`o)yMwiDDum!H|rJzL9HZ5~O<SM8y&vu^VK%@ zo4i%$o%LpvuS2J_OCH~VH}d%EL%s*`BbVUucpZ$fX|sSYl;X4VHg-L}{~hm0$nzd= z!TV?*$(0p@aSit$Ca{hMWxol6&6h%Ofz((s_H1iW~yhO zmqL$i=`kohLc^|tlx=B(q3VM$_LS0OwoD3`^h)y6o%%imi{=g+4JB8aarobu&C8;F zPW-$eexs-=?oqTTet1^=LecwT^)>MaMGaBc#C?iB62DUPf!LwwW3f-Qh}fJEt@FZv zLF`fVp14cVhoW;${7%tLu|6jrT@bqzaj`ZiHXQLM)rQ0tMem9S6xGGbGh&+}Pb{Bl bQf;h>svz2UYI4fSI>xkXSa{x%KZL&kTdzf; literal 0 HcmV?d00001 diff --git a/osx/resources/nzbfile.icns b/osx/resources/nzbfile.icns new file mode 100644 index 0000000000000000000000000000000000000000..389c99019264ce42c6465011605e064b9f0e92f3 GIT binary patch literal 114788 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
        7V@w}^&_f6a_Ji!Bx}V6CK4J& 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 UND;VZWoobSbpjDYKS4nL7xr>8a{vGU literal 0 HcmV?d00001 diff --git a/osx/resources/sab_clicked.png b/osx/resources/sab_clicked.png new file mode 100644 index 0000000000000000000000000000000000000000..41b29df34784beed4a20fe52df1d79787db64400 GIT binary patch literal 388 zcmV-~0ek+5P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-3Q0skRCwC7lQByJQ4oaZoo8bcOTj|KLhuKq4Pu!>L=dsC5`TeRs`S>DHn!Rb z7XAjoP752W6b2L#LbUj1ZSLSaa)JpiEW?{Ovu}6drHIh9k!gnbVGjE|?67`i37V7M|o88#Y>D~5Z+ zt)UeWs$M3;nc>~ASu?f`L&Jq3FZoF?oY)>24vX`yVPxpnwN10_7ad#{csxn>+j2UF iXG6D1lVj1Y(PKR+P8^0000KLZ*U+XT^3wxIiMvWi1f9K)kHE3B*g9 z&w+TuDJu{yAX#-QRS?g>lQZtk%5B95ipc56ivNatqG|?=-TOcrG2=(g8u7{ zH*^fW({ORy@m>}YfatrcFHcSYAYvADKZW7TFhuv@eK!o>PQvj06uKUvwd$+~jnBIX z(T3l8olW=p2cYME&pJN01FXVA+196xhmh z&FuV~Y1RB%P?xsj@xM~urUI~Pax18mSCly`rSB!og{m{2Fej496dwQ%b80VDf=2)V z03c&XQcVB=ZI%E4bBq80_A&qffkFTPaBTnp<6i&(F?av~6LkA4Dh&Vt0e4A6K~#9! zoRTqUT2T~+zk9vU-lr0@kq3fwpZ~u~MEKuQiL(Q^3wk5q7LYV@7C6f1 z^Sw+ab01fvlu|(ugtOV~0vM)|>#plwRw|V%*L5dxOlvLE>2zy69^U~wX|i5>o;Rvi ztFMxPh^T(Q{}K2Zzt{1eD2fn~e9B-QhM|q``-Hrz+i~)}h&UpmQmu}nOfnq&0U6U%g)c>-+wbwT&^?*4m9A2)@lDy#&|>hQ=6awOXG<#H77E7z}c?TJ6{vBft;f z{Ui2LYkgWSmq)!`?`=}Lh^ThEy;&-ierc`G0WUe+04KRzZqn&=4n!n7Cz@unxmPF@ zZh$l3#WEAWSZn=mxBFQ{)*6k*p|#crz9tM_Si6qn{PsNW${6zp*k3iqcfj{W-|;zR cmw^uh0F-=mpP>P{_5c6?07*qoM6N<$f+>)T;Q#;t literal 0 HcmV?d00001 diff --git a/osx/resources/sab_pause.png b/osx/resources/sab_pause.png new file mode 100755 index 0000000000000000000000000000000000000000..e40dd7e24c291ccacac5e8269d573af88bda5ec0 GIT binary patch literal 1079 zcmV-71jze|P)KLZ*U+XT^3wxIiMvWi1f9K)kHE3B*g9 z&w+TuDJu{yAX#-QRS?g>lQZtk%5B95ipc56ivNatqG|?=-TOcrG2=(g8u7{ zH*^fW({ORy@m>}YfatrcFHcSYAYvADKZW7TFhuv@eK!o>PQvj06uKUvwd$+~jnBIX z(T3l8olW=p2cYME&pJN01FXVA+196xhmh z&FuV~Y1RB%P?xsj@xM~urUI~Pax18mSCly`rSB!og{m{2Fej496dwQ%b80VDf=2)V z03c&XQcVB=ZI%E4bBq80_A&qffkFTPaBTnp<6i&(F?av~6LkA4Dh&Vt0w_sDK~#9! zoKrz-6G0SyGqYxQGa(H%k(>krNqcG#1ffX0D0uKxAyn`xNGM2QF;r<7G*DQKNQfs7 zg4clg1A+^sxrF8*l1dPJ>NeGoR@`oqO=iYZLTu85J{Xwy9^dyqKHfu8O8DPElL=$Y zr>ZK|G;NBp-|x#&mA&E{(W*aiRz z0DwpRU@#cdb^SrW@9&D?a1R4CM-QZI5R5M=ns%2lrcO;Jgj{GH9P~WS3yiVqS=q&6 z@gX53;W&;m1;!Xlj1cG;>$AKOLIg0zl2SVMV=P+;ApxQDtrr4>5Py}%lR4)SNl6eP zXcpF|X$VP)zwYmk`^pQ(ZfUx{crg-*4L#3iw_2SUScwp_eX4r!DrSv)g2)wbmX@x?e4coTg9Jkxc=GN97 zDdm*(Xf(P!;C%7N(a~E)QJ&;-xorXfP^na$L?TfS&dtpsfVCaVa*pHiy~EvI0RSYQ z&#w?do@0QIos$zYo6Xt)0A$2mtJS)xRBA^82tTEdZ!Roc35Ubq)-suO&+{@v&ff)E zt(Q*=g{n3QH&mWapWpTqO>hnlXhB$t-%pStelQ`ddvdEWc1X?o`##zf#!sdPhA x)z#mQ^PyU;ekzyC{9i5(8-_tA7wK&L834TO+tk#9daD2c002ovPDHLkV1nLD;6nfa literal 0 HcmV?d00001 diff --git a/osx/resources/sabnzbdplus.icns b/osx/resources/sabnzbdplus.icns new file mode 100644 index 0000000000000000000000000000000000000000..63c21c692a4465b3d613a71c7068a8204d03f935 GIT binary patch literal 117188 zcmeFa1wd3w^e}#RSsFw|>_ilhl9KN3?(S|d0Ckt{QWS#}gGM@}L8K&A1QbybL9j5$ zz2DpgeCjLT`}w~3{~f_)=FB-~=FB-WbI+MO>tN;T1)Xsd=OVNyo`sJ zW}Z|YcMl0>LqVG^ynOwBVr=kY-GJ2ZBy%Z6!50Zk<%5gC$y1?$G z<8iPs#C1EVE!eCt6?QG}F@go4Jx7ni*~j5z*t7J_H2~k`VQ(pT$kNh^S;WTLWOE#Z zMq{8r6huVm>bm1M(lRpA(=$a@y0Y;OyoANmFT-{#`AseGr@6V$pJ3aS{I;4m<1b#k zni@3%T}45AiXU|M^;bvPN)rP(kW}vNhRTb+PL4_#&{bA>g|wm@Nzq~0qdI&-2ciAp zO*Lf&Iq4Tp8tWSy??FN2j>Tm~m*S%=n+BQJfvyII6r3=*dHJeb^-@?M($z!-?gJ{W zNLS-mx_T$bv^NEI`Jt}jz{mz+&OjJ6#P4c@wZqt3uY*unh>8fpKDpc1*W1_60HLu6 zTq(#G=TCHs4gpi3paark;^Jar0%SoDikJdN4iQH~C^R}AC<7KlL4?L&h@pK4i7==T zhzJd}kKrKI{UL#gMiS?OVtA_-fy7Zo&*Z`l0OV;e_fvyz)#PXoFdW1mKHE>j`NQz&%^aD%Vn3i;IIZ zVxVMDFcgi-g&<7ydWa|jLKCy`MDn6}n2ACm5}jcigcr0u%|DwOMy{Wn=JN?oL0m=>Q*Aqh!v95)#p=va|xV-pb>gniUPg`Sk z!PPWx9TPKCYZ(ZlFi-5g(=rTrE-!q1J@EuoXlSY}Nr^gj%+tjT5a9E;4dVmh4fwgY zFP{wF?evpXkkE|}@o_qcgATG<7vPr`mzEY6mli+GJRk1s6uDAe$$$E^Es!jtv`n@I zpg%z{HU87gnBq$qR`GG%2BC4#Rur_J+d4D-N?8sv^;}MjjuV)GVR1$Z9K?=-sIU-F}b1DS*1`oRm$;paC42sgSqWv)JfxuaXVR(Xo42Z+< zG9VrVFM{STtiU$h}&gO7z+iTQ;^4tv7z6av4^(hI}x zm{~k*3yNM4_wf`a^lg5ujz0>VN_(Gj8) zs2MC%RFTvuDs%)ygxO2KCt@#p-!3%42)3}CD9j4YCdn!YVB4^&aodER!OH|Acq0qu zHiBVnlXwO%AVvVs$gh=cmwLWhZ$^I0YP}t@&)~(-Ws)U$N`BjF*-phrpWlbflD>cY zaZF+RYT+)mds8ohCdglmPfWibRNT2*yj$z;=y1RYr$g0e+-3K!0`}F>ey zQuXxS@4V(~rmL#}>@E-@L(E{GQB(UJT-&VEx z{FsyezTU15HtN7Q10jD>DryQQ>x$}Ix2kVmj*18mJaxj$#X*aSl!}rP17=7eDIt*~ z<^|b#xz{cyolA%g3p{ny-C0dYLQ+EJFa(iG+QvtQClwduWnI6Tb{SL%4G6;dIh*Th zs47VU0tZ#YTN-LAE6R!svah9IJ|7<$p~c2=NYKhiLvcF}651o}*VtHFQ(azMkd>Kw z@k~q@M|N#3ua>^tW}tH5XP2yh&&Y#;uJ+c3s*?Qc>E{Jr!LYol(nh5Do5^-a1Yl3a z;5^-&Y%R?Uj5#Lpu;>P`6JbD%Av`cF2pfC?l8(j&1z}G{93dD3F8GTv;PAv>*@EZ) zZ)~9jtnQIS5IP6Kpde;by-t?H#88kR^A;=$kzz0j zNQKR>myuZt2gwr#IV3VFDmDO;KOYel6&92rNQKOJ!J!dfX1wL)Mfeq1+ULPKj!YV0 z#sdrdZ!@02_cNZv|2JklXTm-RgY1I{2~G5ETG(vruK#TVhiuKjqVjcG zf*a9a82mpDM-l&F|A2`SB#3NH1AgEC2IR2;86`CJ1}OaZ@D>`XbyUc(UU>Or^ewVf zex2~}=drQTmzOcnx(Tps|8c^@3+!m<1iSJ>4zOzQpIZD~1+bq>7gJ#d*bT@w{SWCc!Nq`mBRu~{V9c8^2@VD(l_+R@l{_>C0_@@g%zNG7@|17N|fgHS% z=KvvIP!WQ^`41pWY6wh+tv}IDj@Va?jx0gBmx3_oD9^cGKh%g z2p?a?5iB3^5ngVl4X6?bMRO#8zk(0PkLG2j0b@YJ7r>9=J5t7v<-_u$k1&wj1W#a~ z49zF55~x$4jnUDR6$Bs@_cj2b;l~M(2&&k4oescZv4y8G#~k&<_^|>gCei|kh>TA_ z04s=5cRSzr3O5ab-<($z(_^_OjKsjUj%#xPL{7#hC?q5x<9Pi;B~03SR0GNFDS#+I zxv;R1ZtzQZxg1Xp<8w?T1%yQoV)7v}GJYWuVKJ-p#Y&ib8SZdU5D*b%AqN0*P(xV4 zDQ6h~@NkcdvY?14E9Dn}Yc2vk+vl9S9V&bCG-o?KG#3eYW5FWx};$kvK*8nbRq5wd^5EhpZmpxv#f^pYX zT}(oflYk)#HeYhSm8$?Z4RJ}SuK@n5fG!tJ0N^5Eh)GIGDxAE9C-kGsRZ~JrhMOuE zd0M9smy(uJz}BvTv?Qg!fFxvOrIiBfS3sSvT2iudJnL4l07ynDxM>B{@eN240fn}# zg50!aWaW5iR=e08)+a_y)8}P+DF= zPA#r$1=Q}QE2p5yw*sP+Ra8>YNa$VxwYljjC@J%=&xOcQ5CT%vINMu=4C)Ir1x$%}3))-_l$2EkS7GwXD#}`y9+ZHmRvb)*FLgIm zQc+t2DyXO`>m(1|gi(0p`E_}+ry?!X%TQTWO?bmfbCguoRCH2@3y>OEnCA0v-L-^3 zzhl1MMyhHWUn;4otLmmd%7Yx??7tKKdQ+%6B8R38xt8G7913S zJ8r73p((mjmr6xLQ^O$Z*);<5Z65~8($1YrI(IfcE+#rM0#pw=VWy#}Ew)-)O-ozD zFlRiIP5o=-fpf)E-U>}Rf_ts_oLXbF|NwvMJz{zL|${;v0ZrB~Ch zWTvNFzIZWd6(u}0^rVHRj^5W8#)XsVFg0XScQe1RATK-X#tPPjmBvLyL}0D8b@U`Qt+Y&2S6AD#bS4=- z2$1H+TFXkyON$Hh^Kw@4E&{x>@jzx#IBRWPJ;_xxEj>LQ^YS;BU?zaJ_@b+(>Q;4S zSqZ?*C2&kjNxp<|jEjqj3AEAGGgw8W*4ES4v#5M~5oX52%dZBS>l+$sZ&g*6e}f9d zayB78Ha5skPv1~_g(bC)fuWv7)jPoQ-Ee!$?b}U_^>sDhVP3v?;oR9Xaq%JcdWObd z5Dks=ENebofDe6o+S}INey6pixv`=4YuwB$X{pHwZhS(hgMpEW3>`r_)Oton23B<+ z&%>+>lMlM@c6W6E?Ay&v4Rtlul>|Y7?q0uoB`t+8DrdtT4UJ4>=~AHx6ge7Nr)Okr zXx%WE2y-mG9=+G!-`msO)z#j1=L-d-*E!iYzEDU61dL7P=%5%>6xbL>Aht}cZ){>@ z+q`fFK8*h`KJ@V6;Qju--tN0y9p4ek&AD+sGXp5dg>&a3osCV*YJLG*tIU;<6-X4ubw=5{Al>$;Ddqwz7=AvYyDaoiyK!FVi%K=qFhYPEad5k zD5Iz$@<@mTMXP0IU}zAgPi|~xZerKAG{3kU1s}oBy?OEM>C>^%M)TA7=fg_~l{$<6FL;e~lXdN~9Z zz%PD&H~sSE#Kicsu_up5K(p@;^Z{W45v;Yk4A2K!yCTXKbSLxsJe z$U~rrooTEEshQ(l7;Ng6u!{jp#EbKDpWeU0&al0jdbvUyG#-cq$oDJS6=fwi0qqs( zCda#*C0G!d8wnAIAXJ6zEn+P(7EV2gqfHddoWS$HF#q|}#}6N7-@ko5GyQ6E;>Gh7 zvHV6E(EyNrOhecs4fr7zi8;BcaVeI~(hPZdV{yydsX&1P`-d3&=9m3TutFF+LmuQLm7< z@r#OzjEam5jKW4^BF;XA@nNtuvf%|%`Sfx2-5bz&z~T8*g2*4-Ta^ld!!5#qA_C9M zNIQSh&BNW@&DGV##o5Wp(ZK<0k9Kgd#ag3GxkDftgqyXEO++^s!pX_0DcmdUGNjR!2oUvYMa&$rwUV2wa!Ni2rr4;+@X+9Z)2B}QojB&>bL^3Y;0{@k|$vNWmpUkoRG+15IQsUlF%2R^>V8)Y)*H8XP6XNYI$j44#)(E9E>la(L-QTA?VMY z+w}u}BJwiQQj!uN#33RqBq+q?n-UWfMQF3XCm3BvM_c9XkwE#^^BX&09f|FH>w)t- z1>OsU{e|ueLW3U;-s=Yg+1_@$(;tK%!XYZ)?(#Vg7FE#9lb!*NXd9VLF%T6Ar-6f$ zqm!L?DR8%^z>XpgKBP ziPFS@;0>#;qmz@fgInH57@rF7L4^1lAu#13(G6JA~J$Ks%0j10E zr{D#OPp~NjnWrbj;XHA!#4d)1KnU$DM2+4hXY1vx_1|tv5U>e{*9eYd| ztwf$#b9rA6 zFE3j`;ABq&u5lJUH>?-N%_DmjPFdUvaNoas4d&@*Pe&gime4h_*6|hAa=sqkR@`I| zDg%t;0ZkA8Q>Xk+WCQ)W0-_(w^PuAh_SjqPZ)C0(a?Feca}BKF>*!fnS=m^aq|?kd zo0=MfO@)EJp019zmZpZ9_U=_Aa-^529UP2wsLQ}B9fpC>RS*WVB0(?!mdL6AOb7#^ z3IRL-d|rmgfWr&5S_gv=z@#GaN}$(CsT7D_qrtzgb8B^%;ijatNZ{i{>O`&ZSxkZ{ z5dB4>d_bGO$t{H9V_*ycN~jHVG-*Xgk=ozpz?g^Pp~dJ05W6siFssxTl2&wah5GMu zE3IFvyMj-!fmQm^3(!*NHx!UM0ff@;abv#eM>HJv9bO7p89Ran{)S6{5+n?)^AB*rI7frA z4FF>tjRBs`v@cftH4RW}4fY2#fFAs7{{Iu)A8R|{@E866_xx9N`fI%h8lILk1TX(? z1pi_b5KaHu4!+l)?`eH2{~yuZzozh4cJddPzy|-yMt)ce7r*asDA;^{Ye9e7ihp1= zf8UmTUypREFaWkpF}&%58QU4M}KW)=H(Rs3D<%L+-bgrsj)lkamF!b$@};7OkdL?{R| z{@0(s`LUP2@o2+P3{(w#+Eu`(O-#PEd<*erI=YP%M3oSllHp(lGnNU%xPLntaA{*G z4>B?ytY#!S$gqp56oM!l8PNxKQvg>sB_oar$5_G?z=&aDV%$b_6GD?PGGdvC7#Z34 z%7lpoxtKu?#jx=vzzSqSACXlJ)y~zzs4I%FB7mKk0^3p0%1PHa)?dYb%X#}PEzDM^aaAg%EF=Q4i2*boTc*s!pgRn6nMEwn6a$H z9BQ5bLg2IjU@WX``v8oB1XN<>(C}V^%_l1Iv$CUREpX>`v_xSx)yxDlgH5iJN70XV{ zt?vtV>x6c`k5>}>f(QO!=Qi+PgT0MY5@hE%%s`;Y#&MW~$M9tTD&Ff@B|(nEoD3i) zKu!u^hk1-o_rc}J0L;V?KnGSphdB@Pm|%P1@+GhozKT&2I?Ty+0K^5zN!d9$5A&J^ zbT60BQ_L;Dj8Yc<3dF_9YaZA&U;c^W)w{<4#Kq0S1Y!r| zq?`!IHsa27`4q+En~`v3k*`2J+yZuyw-N5CPvWn#SK zIo0_1i|LUFWl~0csx*fLPd=C2pK42BYgZUgj&2vEw_Zmk)iB|6hn`PJ4=$VF6M^%0eU1FVym@KWV~2DjIjIJ`oXOG zWP?Nfbyq??txa(zl*WeodU{{#k(2TA^YaONB-Y)#-oO3+{f?6JCta*9EG;d}O-+oA z4D|IiCHVLSSP5M?!Y{xt;&rZeAhUN@Uw_~2yx0@YwzhV*)>an4VTM#U(30dA5L~GZ zf>ivX-bppRSGsri^)%gxKJMZO9<}XlZIJqANPQ!1DNvnl9U>ooK_Pz8qZe!Lrg!b_ z?ryjdeZn0)s=5G|5COxIfMKj71&%8r2owl{fY`B1w>mp7bsT8#={Tql z&140M9pMEcV8TKYzA4phcP_S)w6!(npAYuO`t9^RcJwzyJK#q`I%cLXEhsFqiYFo> zB*k;Z0LBsQ=$HdNe5iV6!04-E+p3j8B% z&}=KKFUaIbs7_P{ceT7Op_aI=t}6F(JT_`)L_~N9U?22*0*(%LSQ`=(1rX8Wq)9~r z-4QGCK2e!~Yh`C@II0TL6XSqq1^ACZhz7JG2#5P#cu47H3sq=7lo}3GpCu0~~)5;bFh0;s(SBbj;RNQ5-}NX_CRp2$4{RlT(sz5J4h| zAvbbMDzH_dmHbsz)s;7|C!bGDJbMNNYe36Dd?#X! zvM6$hG!nSesRboPMZ-nbiAe&wVOiI+a&MNDS5^jAkych#loZ@ZyNJEOasC`2ztZAw zr~{85P&a~_g7(^*Bg6$5nFS(5Fv3C{RN$l@@F=g7l8%$4l#c)o=W92zbMtQ&<4T2q z|1;-WdJ2d#UAlN72_X+!4}vQ|tiLth&-XZRha%*GI2YG&q@E9q&e*c4_E?Yck^%(o2(D(&z0 zMd(h>)~b?crBVEw30`n!1!)->De(Y_5OGp5*=XPd&dbN<3g_fxXJy^Eas4`=PavO? za{1Dw6}cqD0YzCA3qj>qs1u~(Yz<@*Bo!u&l|jpj?IU=?4*?dkI>6@5O~IiqBJ1-- zh1ddIzDRCvPBy}2g-J$wDk2;Z<{=F2SE48IKqOBPjf=Cbu8OLP3RW3X!YX1F0_7oD ztPDy5xQ~G!oLNyuR@O8MM8{H6($a#{Q5kvIBJ53UphUT*Fxzb}3I9Xnuzz$uN) zJ;%YUg(#_$t(Bz(n23!G4G113oCaE5MGh;AlAsTPHh^Qc3V@@M^X0O#(z5dMii)60 zOlfg(NeQ-?sOV-P=qV}>jFt%KCL+p=G|)>#!_Flpo&kc4i2?Q&8WM!eJgcL$qFrFV zBg~Y9^+gw}L#C~!C?_i`C$c>R+J%Dl$;rye$;g-`6qOVemlT(lm6ep1l@fl+u%*~y z<)Wg(!h(E6#E67fI=sdiSPtL}%o6zckxA>6{|TVhU`cRw0kfSQn6Hq91gungy4u=W zs`9cpITQy8K?~RMN#W#3WsG8q%K=Yp1ymjYez6tk@^Zjev81>dbh-dUHxWsH>G4X3 z5sfFz28cZco(>KR0lh{d49Aap0iAcTU0F{J_4ITBQ=A-HmTzM?IN!g8T>>XhBC8ix zR8?M%twdE-VyglwaTS8)<=`ce-#7w>NJkM7BSwa(5rH9LLJNr1Jj4mMhHR`XEQbz( zEj%^7rn5O1SfrcUstP!Hv@Gw&C}=$;lemJSqJpe8uJ9I^%Wl;KRAX;ps;jFiE3p-9 z?%Wo-XaXa3E0r!a4m40IUHJtf@sz4%)v@&WT>O6pnz3G%W|%Z0UlC% zQIH{*Q}@lQtF5W6tHajf>aaDaTeq-PY?T$OdqCQ=gKN{9r|u*rZd zg`#nMLq}_CTicyG*j7|a3$}>^hzwy;T~$%BA}G*@6`cZ;ArKP?lz{^hu`v-}Sggbe zB%O3sLGu;)XhEESoJmRgs5D1=l~)@Yy-Sf^((gV zl~;@qSNUt-^zS@r1k3*w+dyI{E0X-zagkrKjn$~$Uq|KsG&VqpJpPqe_AfC1fj{^! zsDO3+S8U^}y})--xSthA_#ebue#JJvi&Xz{g!`|o=>PTD#&1y%oO-0Jg%?Yfi5Kxp z@(@uKL`($f&yJ6kJR=@^1ji#sD?o|)%O{UZM=>MslOPl*KtpvCwhp8C=FZ&Z{DAt3+ca@m(_G7CBG8M)7 zr3IM0Mvv73iNc&4rCFHkl}@V#!dKH%O2Ju-e5=(0{^SdZrROkbuN$ux@SZyxTN;On zN!KG3An*J}g_lNP!jjZi3s{2#PnTjbr{lppX`me_=n!~rF7?G650hCfIOyZ)Uh08y zJ0*$~07uh4N5?WdjO{W0)%-4V%QAC}sSDR?eygs2nI1;Rnq`&1CJhahQdNwKF?hk5 zKwyKSQkgtPPM3Z)Pc1H0B#D#2h^y>|P`4m7g`jXAc;f-f4+&s}h?Kyazqi1P1)K%k z6kJ?9M|k-J1rE^>)q>Cy)1f?OvO}!woLtN_M5qSv0yq8soV~>K3`{J0$!>#v{;u6w zJ1{%&^;fxZ5RpU9*}%}N)tG4T>PZ=pC!CE5UOfv#$P*skR-%Nf@GrZK zf0_p`ouE-gUjpANTNdz^A`y7kWbG`_N?{p9OhQA7L4()czXg;-#H1udL}*mbcYt)z zs{{;y5D^7}&LIa(kZ>co;DE3+6E;Yzo1CGq%glZqDnbr4{n~i{I#jfBnC?#xNc=if z1m=oAJlgeZU5ygZM*Jo_vC zlE5zs{NE%2aPQ5xcUt_T9B`rk-_)6Z(H7zz5@znc{(k=^9dpv>*#xfW`S*#4(YIyd z!=GKP@FzDed@05+ynB>uxb5G!fLO8O9eBeQyrc8464H>x$FZFMc8bRs+y!qP{tpxU zK2r$1$NDc4TIvqq{zaPq?hioVV=6c4zhDpT$VP5%`yVGfJQc79T$uJx6OrxspI%z> zj~a!CTea8!(-8nSO&0u&-h-Cn;n%STzPn22?}dQ^_pdGgqkjHrWjww@hWhV0ep`dc z;g2qK`BNT$1;E1tcHmySf09rT<|KIO@UN);I1CRz#W8%ji0Fr!0r*FK_<8&%qS*eK z0-zw`c*50pKiIYuH z{3ZXNI{*CAzhCQK!E@4U+jN=rvL9n?BDy}h*&i(ZEe<)wSCR}Kj`A$RDD|& z;J8K^eA?Pts4;>=nqMb6$MSol;0DdL^bCA6$WKd4?wXv^2>$H@F>t*7e`ToyCUH`OMizQNPPT~JE{HxU{z(yZQM3B`_TWx+=3?GYB*Z704VFUN4 z{4nOvsW^58v4nIq$GK_T>h?CAea0W42c_zTl~H31Uu_Zj#} z@xC7r!QxoKQ8Bu2z7T|DhfUjeU%>GLg#KNXg^_D6{ItJGpCAVet^TdKe@E{hV$I!8 zwdSPxruPIZT(439zFOu#Pak@cOj*EPy}wInYRUAO|C&AiO>3;~LF7w2exFd3{P8dT z+XmoY)rF|;U7L8nZvu*(6*ux<+Tqf8*-4ole-Vr&-RIH!Zx6iuz2p{0^SneiuPuAu z_nwd^-fG$M-52HjJ>4IyF+Y^)bY$c26#v_HU^ePje)>Uz|E${Qfn-Y#aQ*flCL+vQ zBH5@`2(Fj?XS9Ey_Q#%!=4|VTSJ`~m4DeNzza>PfOGO#^W1?D@W^7 zS5jJ9`qirOpFI~Zy&h~TxRRE(!eixj+%K&`LnbeN)^U>`7zyNC1n=^KPOl{lxajrs z;#UcLVd2kC;Qn~W9+Yw4H#!RzV&t-^gr{g?jz(!XE!_iO%Hk-)F{_t*UUYyJ6d ziTqEqzt-Ph>+i4i_t*Nnw*LN~e*XT>|FGsJ_|HDS^*^8>&i4P!{+EnxtHCG22!L;? zvjblm_`fZg*)e?09)!Sta|W#$#ee(xJ;UGpk86I&|Mv4c|Koq#*z>}CghYft2mCgB%D3ckA&BpNF> zXU~;UT@SMKR@OGQt1ccCi14n~22M{z(+ROJK+XzQgEb&<&F&X+$e)C?hOnB&kfKmu zeqc?A3Y4Qzz?%(jYBGjs_p0mbo3H)otE=n7*3bqBrDWk`VeP|ql$V{0ofD3Okgh>i z&H(33cLURgyt(iJ*UfWBLT5x8ZfC^jEaSPlwLEpWBO8VWg?FFB^f3lf5$$?J&l35{ zHfB&ti?!U3x}n{*aO(#PJ?GwBOIMBlyP`zX*p}}4={*-NUly+V^m@AcZevHiRW?7Y zW*suu_CnViO8j6Iet&ZFsNf;pmOJ8${RIckRJSB2h`iR>o6C5^MYVOvSXRhueBnru zWBca-!F~=kxmm0EaD%?85wGai0uf$Ol5zQ`rY8=hY+shA=h1EJZoq8F&tj+ansm=F zSvIvujz@Fzg!f==l(`+`u6?T9DPdlFVx)f8o2c+IznA;ZYQf4*s#41N;rt{Kn^Z!W zc}@x(>+XCnhS|E*Ep9IFZ+oP#+WitI;u8Yxk=&E zslc#ehb9;K@pYG|g{5^wQzDB{{v-*V9~U(1ZHX=#$VQ1RWOO4u>&5SKbt6W5x( zkBHiW5ABNCG#Wh1W%sJ=tv8e2QCdfn?POcF*B`mEtb3VWS@zQ>5wT_ylaC2cWyMbo zzv~z@I%SrV`rspM@a&1ahNc&|Jvlli*p8p}h6A1T4QcY@K9A4mH+JdU1vN_|HB6^~4(dH>m-r=^PQ4JHPW zG&O8Y2e>_7j%{}`mio}VyDT?=q0v=ne@p^CYT~Ib{pSQ1DYJKr+#-vP7qdK??-8p% zS@I#vYJFm|2X}UlgFMFx6{+UXy}h|%(uJ%JGIRztf{D+K?P8m%%rF!u#2n03x|#e^ zgpSF*Sim^hZ4X@+I(*b9RhaG0Lg~RriQ`YS#jojINDWGFLlI9LYDPW4U2A_A;!W-Q zqFPgq$kMxmGjP^*#(-x(8*fnJ4Sha}BQ%t+Anznp-?U>^sS))EWwff2i|BpE{O-HO zsmWF}jaM_I214AtZ+qOVS*P4?a&~Z&gs$RYdRgf^qj7SH&!bN;y*bOkdsQ1hy55~r zC{{FJU_PoK<>V(w*p@CyQs&h`xHyukdM{MYi-qKq}q38yQz)W4my}>SNu_ zEe9lo8AILQwxO>Y?th`DJ>NCgzzQ9B!g#SE*X#Tr4&E&*p*zY(^f~pDa9yom!}IOyuie~Q5~)$5 zgHjt}CcV(ZEO(8@^L#iDx1j)2{_v1emOA3xw#d{)WLn7!%kvUzs%qgJ%#?Hu!Sflcx<4ms}8c!m2EAM6!pV>5us z&cI;_!**5yF4%P2gJ7xG z78i#PF-^ulttz|rD&>B3lZ{MSlu27*%xHUZSmt19@{EmhI30=ZIBzYh!NwPcn>YKE zR=wp>_dEVTyw`h^$;SLkuZ5hCHrS**a_+F6j%Yrw_n|ScCwfAngF1mCtS|lYja`j( zF*X4Q(gvI?q(tbppBXEUQ8I_!J_zuq-Z-lm=XFxGNtc~HD*B|QXIqIFwb6%+EApuc zXNK8YiIX3TQjS-6Q=|_Vl+3g=&Dewv&5#Zio%eAQuIUvwp7rxhgY|ox3_?c zsf|KLBk)SX$ms@mX05P;?Q%t!w;%P6y~ex}7^$qiA8zeZcIp*zbDsaHkxR5zmCKHz zM*{D_n669w7dP~c@7eQ7(Yfu~VMiFnE;HiI)(u-_4LY_q*{6zCX}~+g_C6W>s0tJ!EygX;Zx!xex7`O*j4f zh94U#rY$Y+XA_;K+HSbFkH*yWsa1r}GT8>$*x|(DwSza>bmj+zZ-Ip-Ml$l2SWQqh znUY%R_`R&GN6s=TcSs7NdV57u^9r8!#^fs)vkZhPLbdhtm&xo;Enf)GS=`}+SG>V) zt|7~6u~pP&rOpmDoiIkY&jb~GE019uU|MLe%`j?(H2X|UPj3$ z+m7U^AKfNA@hJQKi*ibx0FRzZ3XyFbdZ+xFx{K+gmmE~i4t{7H+E$s3+tGDLrd3w@T8a}A7~tMD`2m~s4A&f95S03YA6!#67gUQ zcVh2P_^5Vr@fd2NE%#2=tGmw=OwZFTPK*{@epk=e!jUnyeTV(#O69Flw6Ry7B{k9| zDSxyne0%he-{!4V?=D^tk&No1&#Ov3`oR1o^$Ab;lj*uy3Ji@C*NlC3eBy9Ebo^*? zPGj4Gmp0oFx--~ZpNna%@7lt8J?XKYf_Kff%@kccTOzIvH!bYz=4 za&d%QXW3qUtMdEc&5$Mdq&aj_B-bA-O%T$YZfwYu#x((`~?m8 zknm@5x4gnOk^WQr6HWV`s8HZln6K%1SQpn@4s|BAoC(qI<5%tE)w$V%<}0Nc&N`9z z0F%K=!WgfUtAGEc{_9sMU6s`mmHUIo#;-nMKEYa|ZOqj=R-`fK@?no_3by|M*P*+v z7s;aH9^9?TrJOHN%rwE>S}7v%G=-_JMuTxcx`ytb%0-*xV4gl zOl0RoP@Y9rk$|mGFuy+^RvG_t_+e(>JMEiqT_9X=Cw=e}%9 zZ2onRJLi-n4GpL0$j4|ar#`s37DT0HGgG}@cuc4H(P)=Jt=1&7)Jz|dnk7?a%;-fk zsQ0p1y3jM-`}xJ?8eJ}*qWdUElRgGaaXujHcz0m(BKd%7qvz+ojF(oGyF9$T zS!rb_*z1bsruma-SuT3%er6e%V0*YLR)L&D&NjzJCO~dsN%X3(-mE}H*y+)sQ z)0|xQOk}e5*+mB@tnoUU?E~D(`zs%v#t*eoZx<1^${O0Caj22`)~3dXTT^u29>(1l zeWpnenNQ0D0#$4czqW7k>Z)OwtU-Qb}o3ak~_{_}BQMo_;mctFov$Mxf7h>yX z_+!T7RR@)C#^-E_M7It-ny))#WgjS)a7@d$uc5V1z9YDeD!t;|j$Qln2G)s*`-KZ_ z^l@-HtIfO2QYJqrT#wIR0(Wld;DD{{Y%;3W9i#diPX6M*D*+x)x{E$y0n9ZO4cblBI%00eVrjx&om|^j;hC`Q^u3;i`&-R>>o`Ryea>HLG<~{ zT|8~q9~sX|#l_`tBqjJ248W(eQY5I8&Y9iT{;0;5InCQ3UF+{LG{-!`Mb=2pV#u<$ zQV*9b9~yW4;-aYfcv$szzXB-B+G*q=t*Lx?ZR(g;Ka1b29VLb@NBqp7AB#=Io6O>& zz=QNBNzZLyDdp)5p17;7T_ZM#)-ZiSClR$rLh@~bM|#!SBm8u4+L9wClhksrki0EA zw-HUZtMBHdCo4rV91i7<8;dA9LDk;TE zSwj?wALZ%YPctlkzU>rUp6C?5NI9jwqB?}`YKBOPL#eT9!28<_llpmsLeryO90%RT z!n!=8>>|kYiajJQ?y99pK`*S|4Xa=zTGr?5s5W@jjwyP_>CG~&pVzN$9rJ9O={+tw ztetsWbN6PFnK=JTsNIFVMv}QB(;FG$6OG#j7$^j-diHbe8$abTp`uURoMc#K!4*s# z3oCCaexu{3>3jPq2TkbmEZ;JI_Vr}Z##>BX{87c?cMT`^YGZZ}N~i99^3p`!1+&-`K*hn zx1Jx!oukrSOdvAbA9>aLQ|#pJB#!eGnTdI>d=jWgRUL(niAR=$d(;fxCaTnXUeNNU z(Y)tSS-8a~FcEWqpVX`NV~_ft1-TM?Kdv`VIk(mNrpzV(1Uc~z$EP8?Cw))7p3s`j zyBtThqh@)4ETRbGrN6A1u{EuiM?EZzXs%i{u$WU)*UY^0H|>vJ`J-tg+c1(pr6M0g?u>kuDouAxcH?;T|Qcm z*Ea=@+}pN4gL&r&dx0!d|PxlN>`EWck(@52Extsr4#DHi~ zf#%Jst%G#IBfScH&oAtxPrALZEyttAo}*Qa+P3HMSWVvj!MSp(eJpr!G0gx@3p4sN z(&T!vd+KWAHiil1sWg1lKYUUTLz7*9CRQk)DU$kAtHvRIH+g9Vv#o^-iCXi`%X1kG zL0kn-q9&7D4{ze!TM99l3bb^bsO0EO|8%8aR?yU?PeV9KaL#@SCfz4oLhs#JIJ|FX z=p)r+qxw=R>(6IwUFDCj32YHE~ z-<#E16)~sCaWLF=xXx7az`@R!8!ET5@+|Gcw*a zM`g8*vnFr8_1y4=$}#oh(vboB%d}6T6#M+GnvS~Pf6Ox%*-oOtu%qyfPx+zwbSzqAB+rql}K!hoV)yyT3KixP_y^u^xujMNG!dB7XA?a4T6SfHtW{HIt zm=t%s-Tz{5LH>>eqC-umTZ;3~z1mBor|GEdm6A_JK5&VZ6>BDYx>Insj=N>2S&{j> z2iG>)y~;@EZ1hmk2zRW|Xt>meexGX2wbO{%zagw2U*+ScIWGQzX7Y*Gm8Z9Ps1s&3 z-?4S2)H_3-yIq~MJ>VE!Nrvbi58ndGq@jW98+rGM-jMW`V&vD8s(LS*jX}4~HXXd2 z#q0PuUA*pU!ULxCTTQj~yeI2ltKfIGjv331*)_dAo$%zbOxfp0Tyu9$n)dE<_Ip6; zZB_ix|9AwgTK*a4`!TjsdvzL*r5|4JR;;o>g_G>6iB8jy5@4p{?M?N2Q7b%pOITEo z_{E#Wz>w>ohf<_zc@r8R#>I@@bP*Twl+jh0KkMCS75{s+ zjnCyu1{A5C<4R9Ahd;S%tlioE$aAEUqT#O4jZEw9k4AZN(;JbauB$3p?ZmO-o*cht zO}sd-Qa0=Yeu_QrOW)PKp)*WVEH_2T?XC~=T5bze#_WAcS~Ce!k74$<4G9zhj6U0P4xN6XAU zo32KA-e*DGkxMn!qTkJCC&TMe+F_9(^Yur0cIw?Ly4{qZWame{Z-m?Bxy!oV=O_D~ zURaiqFlx*8VL5?1U4~ZQl)rnZlJuzGzJi$!jN!$rH=b2Qyvn4=A$cikOqGA+ZsGy6 z_3pd4-q|+x)^E+pR$o}p>-VTXmYhYl(eeXXHJP(~V)s@})reDNygR=FeZ9Aj8-yXL1I5T}mV(ePKvw|D{7V_E64n7%K$2@J)1_DNwQhd1FMN%cF zDEHqv-6}n}H>QgAk`aGd+=hp_@0DLxJaZ1=*t@%uuDLt=LK(Zl z#^@;z_LS!|AGYyj2~E2xd$tN{?eJeR6rhOrevZRC}C zP6{=C4Ac%Nxy?a`@76=K9uG_tKNe3Z}6w2;NrzR3Q4PIJfp(=$6+cM=QC~IHxJ@ zdcRQHW&E_cPLO5ZyrC~%3XecJ=^iJ0&d!EkNRhu zAB0+NUCu8`l#TyT>`E=fbG7>9y1I`gET7brUJu$fkB!b!StNGNMJh^^Eb>J}sb4o( z#O;+bXwMAEDpYvsdzf8~L+|ForZMG9oKmW#dY|LWAAh=E&ilx|{3f5?5V`HHMFnT| z{=#@^w;i7{PxsPFT%K@zk{54&A@u#E&jXj4+IQs=J_1pg*X#4#t)tRTNAezhOB2x* zu_tO;UNqwUh4pkAZ5>Q?ud?nvd*x}WzMHgZ{7`p;a`Uk1e&M@;lzxvC7yO@6UOz5W zaIe4cjS18I(cL!8vkAUwWIIx0_pmK;iqw&7akL~ED|DIU^l~(XFjSarmaFeRZYy>9 zT|uAR(3~Gx!_#vbeR`YjD_vLFCOuqp!RvWvHg{S7K6+)f<7ZlV7^C*5&}|!Kc3F-( z^Pr`N&wsa=k!*vIG`(3Y>~*u4O24H9uTnt%+&x-AF0Q@#n20p~jE4X9R5Fx(p?~6m zlT%uxjfN&*wSN8veL_m(_Cuz5 zwr!%yp%n@pO$@0mdP{yLdFoZ79Y(15j>RV|r0t3$Ls!dZwl>XR55C+t^}=JT>M=Qn zTU^swC#nJuM{i@oem2BCmv0nz>3`9aBfMvL&wJZ-YKlY8St{kjccAW5zfb7SNa7&9 z;qYwuLHy|*<~o_2cO=`6DjuGHraeu>X&Jemy_5KM>CH<4(Kg+^pT~+X+-E3xdv7W= zi~8zuA_v-!rJ?WCZeIJiA(!_mQJO#rv!>bvZO`rw`->ZEd*h_NUY);UQI<}2GQ&OF6>RI1N&!!fS8ZBFF(>!?s`ZYxq}I59 z+oYB@PWO!GNp7L13s9(^y4v7S$V`Id9+QS$rNjoaLkgq?rICGHE}OMasFdD*J|Xll z_3`@+^tU>WrC)X*Cai4x%vi#tFL8-iQc_6lDyG;(UGsEHg5>4{(ws6IV>fA*htVV@ zRP%j^+HwosVLxYKbG9&_bL!Ey5)Iu$7Zpt$b8Oh0wRmq`#UDwj*Ox0Dg$>`Sv)k7% z8PejW+>2}2x9@vXO@DoS#`|h)NrV}ET5i1t>Ard5k6zl{miiLJTgxBHZ#3LdTb>Sc zO1SNl=`DJ@tI@8jR^J3IjCXhJj^=rjwd=`t-|ckO!H+T7+66r$Vz>2}Y?;`P=f6|m z^)RVE(=$4m+w!r@u{Yx{?58RWq|+#={GrzaMUl6Q<)l@jj@Kqr3@o~w)lXAT&z8-d zuJW7fOnLgMs?ee_?lac~fj84a+7Dx_TR)2M-@VJBP^9U5`EBobskM*)u2!|h+w_*3 z&66J+Z*?}l6`FsdjYA(_I3Yt7v);V4wqdgW{wTLpqljEX^>kN|{yOoOZ>T)+!+!4K zy0=T3Th3hTi9{KHJjuuyRVlG_`BVs}aUzcA!`qFoV+sn|gk5vyPd+ELnnoW#XrU(3 zI+cId9?CSkqWsvx1ZMyqXxX;u5XTeoYl|Vb!PEN(0LqTb+M)$&( zTW3tynYBC2YWEb8^4QRrX@=HU2GPozKV*;ybn>V~i6?i}DEuz~Q$Vc0lW0;rnos86 zjyCgpBVPAn&=SQqOhb~+{y2hub^z;$-lIkRzsB`k5OX|??qD~p%pM|EW_*Z6(>G}~ zW-ZHrrA9REFDy&^uernR=vp6dQSkeBgwT;Fv8p8qG}DQY?4C{oc!opA=Kf8&r9;gI zDBdsn?Dt7>uxNYEqCo{!PRH%id!7yMf!OADG&TQnM9mG@2p%~9KaST6!3nsa6!pF* zy4bP}1EajX?J=mxgMk4A!gQ_=+oWiMHrXTPGStJ+^m}9l;v%#V8#hDKb_y`wCQwl7 zU6tC42r<4HXa!5PekS`=J(sl zIPBBg_u3~@Hl8Jz5E3sSwUR-aas7^zg`LCeQe#))_`2PTtkW8NF{L%Y+vH{l_ut|S{bK6 zs%(2|zhl%{PV94HuClfUH|-%>~*?#ORKuYh@j_#8Q*drA|7$YjQ)${-V` zV9DG(SaR}(17$J)3MJ!Oeqp7{KO8BRLJT6cZ)h&H0|`E)H+2? z$>b^D)jLYE@sQV&Ti)z@$5?b9fToooMCDONv=XuD3<51v?st#S@HuqN|4nf{A8cM{ z%bZ?Fs_#HuLgzQHh? z6CFbL^+TFK7fPJl;F%r$w@9;eM;VewjPwE@^q>j~t4_;}pzQHx9JI8InJq<6Of%tq()}?78efb2)!An3(;)7t-Ap@xAX~eK=OIG-IW@Dk zbz&r38}x!df;Zn^#ksC_5-N!u_$j~iE=*9!Bg^GCyUhNX;f#8ucEE7nO?^IKH9nY* z#+oLUfPKs^p>Or15Cibz#PgCLVrbm6g1Lpj@2fJ?*>{2--(`tE`@svyTm}3R4iwN` z%7n}XLaO(a7b(o|@PUU>@2BYXPe>8P%o!wGZDDzCZSTy2r)&~%UU^2JX;U9eS_txe zv4j*y-|e>BZMP6Hq!#0!&e?(ZRWPm!(3*`NHyO39cyWIIcr5$xGIvW>+}t8;{;D0P z6Y6Y^HD|GYSqraOqS7L`Qbyy6s~J|J-k4hep&I>kNcJ};kx`#9W; z@m(gbhfz`H0o5Y-!}qUfo(WeJhM=?y5p5dt<*QL@aoPYqCTaxO3Mv*? zR61@fURgzv9G(NVAkEKoSh*3X%hCcp!FWtiG@)ho8K0h)D-ix0Z4Rs_3*cX3bOjh_ z{U3%lIHmbDw)3ze0dfHT>9)^V#bLTdp+%35=kVINhFbJNR$cX-}gCm zhC~&&ivKYRfh@>Yu42v@eo31T{O!UM{i&s}FwJu*i76*=Xr}Kw!VKicTsSsb`uaqf z4E?YXgmx6w5-6tUdc7NR%rZw^=5Wy>h`_;}A>Ky3@bUrKL=CdCtTNNOmBWeDk&Z%W>Ht6LO~gz9bc zV5=S)N?$?c-oM;{ZRq+_&F?({ZG{QkSnYL}ALjW}+qv@vA)fUSSxLxQ3UHgHGH z8-Ma{M7U^*k~Q zT0&EAxFsv|O&PR}Er;UYV;5E8!CDFEO(T%Q|4VUIIc_VP-t~K!fq25(R3fd#1(Ma6 zA|1*l)C!;U#%vb0K&K;(|20s_fN&+nv}@1#U9$><+eq&oW@zz>DelvGzw!Iy=Y6tn zM(Gr4iiH&%0rZy=@`qw?^#I9*D>CbXqm4&e*i*gaeUkV&vKPw7R(miS-^<+2O$ z6Y;UioIr=lT(^0OQ~Hi9DG+Al)3oS(w;#I(&dj{`bbWlZH&rwfX?D=+dUV*1+m*s( z%fDqE_!ZoXPl=V|eG^!Gu;^U^j=V)nL?RFwA!`%C^=@<@S40qfTawV8P0)m41fShn zCa7+9(q}{alURp%r4-^wC%X$qoo@dnMe2d7sKK!GB*5685X;feYy(H5Sa_`S4@5XW z>-Zo5*t07~L4@(Lyu`8!d2nm=Mn8d%?WPke!dS%+Q%!Fp!1~b|5PI`KTUf$!FxErI zG<5ZZb_`v0{TMF&5vS1M9NscJ&*1URR;oZNM`9>4#Gg>~z6?pJ$P@>?4TD8*OkS)C zlN_vplXh5F_py!^**CsX(&OE!&Qm}xd@o7Mq{)XOrAzd%Wg4v1+(9VZdQc3^B<{LG z^TitfK=@I#HVA;GYJMFv}_`Rfn;lcwKdGtzK_%}U* z66{8XGZg0FYj&O~Gg^H}Czb5Zc;kAsZE@SxcRLc+ja6!zx%)kkJRpFr{;^9m1pNY} zB~GL3?1Ibm+etsL$a}U(j!<>N6TtD|5GVeO7`>GflZl8^Bt> z*|i;^5RBHwXvmBZ&WGzYy>rT{IWswK1*{(KEU}ZQ-#4SfUkS4gE-r z8;=R^6<~2}-)z7QB%V2CRWZdh#8!NZ;f-F*x+`6H9ly09h^x9och1`M4c6+u^e;dC z9mzR^I{fRY7ggAt8IB--G#6<+dtsCQr2CsNIQ(jHW#i;g0XaHE?tshQ^kWlAMVfzE(H20zb%+cPVG$AW1N;acbw0JM+(e2v_`TGT%Q z>Vq9dza2pRG9R%(Yt>j6ELx5zhOTp);4ZmtuWl^~;5YI!q3nU?LAEz5GN{d&hu*^m zPh4}=&0cz+R@5O=TB|^o&R~P#h(Djau{xLaF6bsWazNd?FVva2y=c(?fTwGwZCb#6 zSuL$?dGE$Igh_bww`oEQ-=S<9ALVzAkV!KSz8&2kDZu41Sos4=B`ov6Y7NcKPA>$& z9gaW$f8}ag!zKakyrl`IKlepv<5+r8=8Kk!+@de~_gy0jUZO_q5bfhh?RwEjMI4Hs z+;`NTgAZJ~asy(y*J8OLoF&Wdpuz;OAHXNP8^R?NcwD=4XiSo~#k_|_`Y8Fz8C(}s zm-&1<;uhTm^=hpJO=W(l6#X)Mh2?aSf4y+pOuTk1F$-mq)A{ml@==n}9#(ug%n0g& z7{)NiZOP1S3B)zG-B>x7F?=G0hWkn`doKe!*wWmtZvtB+_heQfP2f89RtC;=SZI;^ z6krJz6cO5Z*!r5vyP}siiQ}{993z?85MLN=HU91k;@>>&`>Y0OCOa4}-)+Ysq zqM4C%!iDU1A*%!Juqk7}J4cm57n-w;HN@|oQl==(pDbe!G3iiq%-ZmYi>z?p+noam zX+7(zIH(O!G@lGDP~&NBqxJD29}WVs@)0Lk|RNDu!vL}{G= zIOHJ}VLIv{ZmJughe)R|`tqB*`9aXBqklTqk}?B$Rzhw>eJGZwi<_=w^jVxj`D=pm znO8C42T=p_P2ECA-$C;4D|*0A4rjY$42xEbK806yHRvU$!vQ?L^WTLKQqJk%w*OFh zF-y*Cf;b)~+Sf5b{+$~5dO#_14caLJ7y>@SRUr$q?Pd74Q`6h@!sk+X6_6;$uau1$ zXIVS_kNX!;7rZ@RI8ZSx$5~n$RvA-ZP$QCXNc?zw_e<=uAAe}z{g^O@E9^gpu*2=s zxcoG_A8lN_X$1cl{#9V@?Z}a3FHw6ufT`t+&>`v1XhpXx05+$M5i zGFmCV`DLs4h)kh4N9KhZIFYb(xc;rNq{u%(+6sV56+jr{va}LH3^-~FY+ScXD6t3T z6PJVhg2?irt=7+?1iCE)^L*ctqxF+TQ%Ffl{RfDxJ_heZR`!5}%kgSyrDibMb?8{@ z4PU%af%b8CA}dZujB11k-`;@u9fC1)2a$v5MgGDIh8(x?wPwTVE)Y`r*|cV1>(T+w zRwlCJGVq6RCbviQGS-`&efgL&%6Y~_-1>y6G9c~|hssqV@C|YC6hLS1q>^jHlk{E> zF)?1sjhx=!kqOn^Vp(@I<$Y$6RcCf1!-zF7=PQpWv^I4vg?lzY3u?wI%u`a(jxc6m zJUaq^KHnjXt_=8;Q0>thjv|wgw;d5xL8mfzKnA6``nLEYf|TIj(95?ArvEXDw;r%+ zi8$hgYs)KoHw0)s@GN?emjvQ>=DhdlzHLOYko@Jo9o@h9an*+hY-ZvSm&UWMSFZaO zR5I8kT>fy>u<-V+om&O>W&cmY$8vR$s6xPVSkmxPQz-2eMq5_166jsk8|YyC|$q{S3xwIr4@)72ELxgjU%%L{DFj|y|&Y;IFz^u5UT_31ehvS=33{7=VmH0*p z)Q6Z!4tFh4O0e2U!a(mg9eF$>;ilY4Tvy1$ofqk8gLt=|SC4w1O3~iY`m8xyKkdzu zoXtNIFZBI!Q8usdFG7G;LuL*OIyhf`W%7~J_KT}!K0LCO02k2*59}RBq-j+|YQvJTcGvA+vl+m1lN-HxGj+WrH?iPk&EzHM|Ti(U@ zWIuD;dcbLYO1fTiT(5N_LA>RUmPApGFP zsM1ZsrKma85o013-SxR>(F?C3%qr=ZN|A=z&Ho!F%F-`|^DKL;bta`+7;l`TBi6e!>3Usy}Z<*e{=2N5kHK zt6YCpvjF9ih-G75TcN7t;yY)=w&mO5l_;f0>HjP2cCRB7CnG5W1{_grJfuwNDkx!I zbimLw6n5PtDX5w+jcnG1#-2!`tstm7omw%RV|e(_n`Vke;4#-A&P+nchzg#LsxRs& zmKxWAz%{(v7!;mLSw!;u7L6wLkFJj#x{yp4LgxFD)wN{vKmZxw0m_+)!aE%oj3MR= zg+l{^mqb9Qx##yiSk_S#guD9omSWFdZy=(2VR4dkhXC|QBGfz{9Y=SLA__BL87rqj z^u^n;d3ZU(<2z|X>km3S{V6aW2&vaTHmAuKZ(|%ss3ns|qI~=Yxgn>2{;c+`sN&^z ziACK-{OxcpX%T4Nq%`90@^Y~b-x2bvCd@4AvWkM}9}L-BtN2Km-xm{*Gyxc4o)A{2 zMMv^3r(L!MftpW>GhwLJMV{)2h5jmE-j0v>rc6dfKLPI6fCP7)9zW@YK*f^KXw%E3k$Qa`OQi*)8V z_yLtIX^;A9B-tiGFQsE06|C)UOR&O;?Tv$oY#k__C0+*YFL!ah0-ALDWy1Q#IgFwI z1ta@1<2x6}D`TV^dt_&O7}Tr<@Y0KkdL`qAixyxxbxOls`&!q(FuNLLAe5E1J_-0najP&Meh6)!e{1Tq#nBQz$dsKL}Pa{v}02=pl)KL!Vl=1tS2ra$ZeVF$2%{^8jP zxe-qp9#nI6WXGblAq*VSrGDX=wY^IZWODNDTwk;7lR}Eq9X5U#f|aYR4!; zIZFzmW<*BMC7#nlVK=`<#x3fAPUc1sB}BH8^cdfNw7}WP!C|JJVy66?V@-lv7?Qf! zVT?yDLs%?2#|==dH^13vHV&q z&_m>*4WrkGWHA|8}=vvasBVgcLTGOWJxhse9B z@H_W>F!}SWSWgaLY?qUfny7R%3BxF zYyERLr*0r^m}h-tI^n-G2XyyZ2xDxMYpaCoeQV(%y0({A!FngHrPZ#_8n{lk*1i%O zr=ZkK)#ouv%X_mmaw#iFN?H|w2XQu0nc+KV)7dACX(xw z?g3+@0fcRc+?1Mpyng8c{#pE}Uj^Y+PqPs9+OY%~?QPlQ?y375E6GE_ktuuj2IMqh zB$fM3YCz9r2|J*nfzoG7U-X`T)>5!iwjwE~lrmggJ1xq~y|u6OZ9KKmR^$XD=jJ&< zAE#AFlGJ@g1`bt61-=UKINa zH!3RTA&@d&RYwHX)cI6^D4K0)=RQtRVY7m!wFp4UpQqXmT4{QoT0HT_iGxo&UQ57boI zm}*_*5Oy;2i#unzS^agfs-u>Z1poj500096(g3(AiKvDs9L}f!0Kv23Y0k-Ewt7%I z2HawYM`esAE-}L%Z`A*P|8Gl>%X_z{*Nogzj&KTsa`_YLH^tc-^x&_*PdDxGD*n7{^9SHd}ru{Gs_~8-v2` zo5Vh@OEbU#E#5kz=mlic`dqn$8U^n;I@Z$5kqTo0Jq)9|e(J=3F_v?g^tm2Hj>;Y= zC~>IF000>WPIbObL4D11!PGUss|+D%Z`Z#0if1*G^A_VA&ABi!{_K2h^YzgJB8zBN zWM_RHsO3m5cyf+X7^6&7n6L|ttmWM*#A?JCrfH?l7(3!1OV(lZ&@#zD9pEF7hvW*N z3Fj*{#hAYWNMm3M-3|9rd}PrU;IN)y`m*w4OHL+{iqxDZPB%D{tVZ!EX{1t|^&Z~V z1AQ#T00000GXmZANj>tR@>Bo-3xsKQPswzbS(%XVxuH5AVfORaFt1=jbN^5755F^e z$ID`iU(+1xfsh>N(7*W;&LrTHi^(r;5{EY9*^~NjhRc0-M>R=D$=ov~0RIN-=+8hCx=hIQTdn_H=-{~imxqMFv34g%e zV6~lhxdLlB*@`KeocVbM47ls(3O9fkCx)kU=qLzNJxSjHm$A7hpaC(0qnV4qAO<-l z0zKJZHnzhghc)lQhQC3Ys4LjZcDJEW7a&&qYv_@*FVJl&H1w~hWUAHrFl&n$byAJ5_l0VjzG`iB+q#C*{$ zCu3|PoRt&pQu-No8KjOhx3ZA?Ob{gRIH*7k_0jbr0fykOaH_k9(kot|N5|W((VpHH zYNi?$JK>Fiip2V7iLK3&Mhd2NQ*Axz1{w~QWu3eoGI*pjustiXtumAwm2(iEb000011d|j10upoE;`Jt)C+wAnFSrbAs=kJ*0)T6&)heiBIP~K=%x{Uhs;d51 zfbmsTU~LYmI8!|H&ph+bJn{9xmMNZiuSx(TFjEfqIkss(x+#3*utpKUWE{+A;wAS1 z<@Fwa9z+U@5ycw0YDi;{xA6(*tz%HqqVW(PF?Gs6WQrhM<>}}4elJo*h>J^71JVwm zo>h03v2M+xk)^&qvx@PT|0~4?fr{jwFqF0)+3F@vJ>0LSdghoU5p$hOHEzE007$ zXe`9!*8aH;`N@^6O2pxt zh#BG;n3VT%G5A-n@UW>ll}lP@;zdbM?y);WtM@M-s0%?pjgP?RB$g`Mi%iX2Rn59s zv`CdsPYLsO-Y4Z)hrded1~C#>RD~qyTVzz2EERlgEN%fjwO+)g-4NkhPx!^{_@8;p zWr1{SNEWl@9tEipiQGZy)~-X(d#vD|Od~y?&pAvT)mTG8zJw%l&Jc3R_gvAAr)fRH z3!=m$cEZH@uL`iucfY{MQ;pWb2nRr101`6SK@9r#HRVpTzX6ESEX63SY3gq8pj_iR zsl@3uVanmI8{bexo}E%tR7JwTb8w44FhH+-#RWUc+{NcQq$h}T*D}jZ+qvkDRP{)L z*#Ub%Y&jfK@$94lW$Nk5ZS=NXb_HXZwK+>j({|&5rTde1*qzI9g-}?au z_~$TKXL8=Fpg>Ew!w30rfGd3Wexctf?pcO99G|^JeCJ!ymt;-A&o`7h4>Z&Q!$pn% z6pL{BN$jVyqKin2aR)w@5Xo>Zu%;t zaHkTp9a_vL(t@o*$Zwse+A=DE!LW;%P}9Idf?fvwdcE|YN9kI(oy&YPYJ@R25311J zuQp~7$AEO;=B~($NAPY&adw}6m?{WXS);o;1y*Q*fj>|u)a3##;E=^K@LRNZRHe{A z=`Lnq1bP%xTiY+cXlLv_EE71`ThZm9ZHpBJgS_+SxI)=p+IcbC&Ssiy-DaGkMnEJA z@jn3TQc-L9yQQl8oQN_7=g6%Rd3S>;f*rl1lU-wWwLH$qB~ zxPu8nLbWpskVWPU0^mB+>xuqRE78UmaKwVu5t+c5t?How70K;6#J(l^WvVHHj-+6d zmIw-|)I~rM5+v%%#H`ChxJ!Rvb?9za=Z`fZBN@V;62BJkucqTbaiqXwUYh>46{t%* zUG!6CGqUy3Ll5{}P$j4vAes0md$`8rX;ygfXy_AVXq{Rc^su^47snJrnOtLa9)Wc}2?fp39S zB9j&dH#pNp)gVfzQTHz5`m|&A>wNk8Py2MEAGcsXZr^_0lKr}Cg8BB3>d`6kbZhlr zVCAN9F#Y>>yn}VwID&w=lJ*Hu;hwb!B+jq^58^&DiBkVBJb-}0E!d;HOkO7Il?qrh zA2hMQ9LNy@rqc{s8wbbyT>RgRa`e+HvI`9VI~_l!Dmql@>464%NH}XPqTTy zGd*IKiCGg_jG(|EwHU4?tii2HS6+rT6x;2uZ4l*8Md8br>=o;_YMVr0;)?UdiD5>k9<*R7`(jQ-Fb*=jH}34K`2QG2`={eEgP%LCWT-1x80}CnJC`?UeVO)l)@&#R zw0d|fyI*G_wi=4w;``V1m4moa$;RMs`TVSsE(n)+%?!jt)MIQY>>+`JEkn^5Z$`+; z*8!G{@DHND>!@vX5ok|}T-k$nX|;U63y-dSFK*ZcW*~gho6)A-kj)DGSk4y`ez80) zDVsD(8L4;gp7%a4Ulm3;_Qw6z%kFVywJh z_}#eS(O7~~S8~9^hdEQo&qaGD`%ZynEL^Soymw3R<==MI>WM8A1^yFI6kGwhLGOWB zo|v{R5$v6#yp4#Y0p%#okEo-;h>G?~BQ7CFb?f2G6%zQ^djraG_cfW!q8B0T1UF`9 zgvE{-H-&NByxnEucC~`$_26GA$>2VOIq8s#YOWutlF(%mr4qSKkcq3kk;_Fj{A~Yx z{`zbL&pjf-Xo6}k_Bdu-tz-osmNcc7F!3a_N1jlEi-L-ALj~$dYso|!wk2&?)ldX( zvDDuN73c1O^`mjHFmdcDU;5!t(O8}yxgN7UZf3@~VD2OxwJI=E{{)!Rge z(~!OEaPVQ}Q>gHY971xXe&8;{+Usr|8902U(QmnzM96Cesi3C-B=FnTbH?eLtb*C^>O(ABX;{seE)Xp4w$p3Hf3j@bpqLp_jXx$7sC*HNuZTh zxlzE15)Abq;XMe9*SB&X8CR@O@&a+;FqyIDTTz_G;rN1ePte1out28mtiT4H3Y|7PYJIaPV5qSq0O$2%|7@y>fqrT;6&#-=TI0>}DGTk`46wK5Fkznrj45DPq8V3c zK@ZzgrqiMtnh^v4byEp@8SJ}6m4W|%|0nF7BtgCMPEdFO5C0^k8ATm+!E_=sKzL#< zpX-TIaOe0s%Bw#!UEUVptpK3bea`&57&~$CG!~;0>nu5G$lpk{fA*3|B$7!al0?-s zA6!?Fn)1TrBWMIp5&pqPt;G|YV1VkFo5&WL(Fzeb>|3)zXafZ2RMh3}^i>B~+4?WX z=Fy6bRAOiYmSe2tT{ZIvyF_i8)c;aaEqsOW_v^N>d=4wNVlZw%cvC*H`}&SAI%!$sQM<%0&i!XdBO+Rpiwc zae&qxpnv~=^F)S2gho)Fqa89$xvY?Zbsis$E-vS~MNVC0KmP55TU9{cNFy$}Db&mt z*(oCiVIb17jS5NV^q+Pi*Y|K>>OS(IzO(VNwc;&Ni=v<1o8F&u-s#8=n(lz!VFWOL zD1a7Q8ZY|L==A>3OAX2DWfJCE38}LTAK2#;XMoZxg|~o%DrnqA&8Zd+^h}Kr_+d5yDBbb7 z$30;s2pAoZqC^a98%mV|mq}7>9S}R%;5ckXmTj}#u`I^tT>7}^>{whj3yw?wVN~9V zFJg2>XyjU^jHot^OWj)nojr}JaNwznR;)NL>tnL0XPfCi+ZZ`^f#e(@85~nrVzya> z)4qxSA-K2itJ?vmA_=j<8?<|tdFjs#ujwzi3QT{gz^=NObz4t-xyZFz_Ub0|38+A2 z#of}or0B?tGy}v1Wjvj5>fH`#o6j5Ub%2)!zWA{`G1uKc=V(tw>Roqb!D5;*0<$+k zN9?I&)cwZ@oeZr5Low`L#wDVJBD?=vCDR))bqaQO_W{(2ZSK(!E?%r6&DYBMq`4BPMM{CtX#}URk-jR_@ z6#_~%>NlH`M0xJM-bd}XK55IvgeGO0kCjoi)RH~UJe}#GdctIa8(?sr94jcYBt6wh zfH0qRwsq|ZDaGb|VY3;FS)xEGhKn7>lzYP>giG5xVQq;UwIpnw!~<@L_Sk(#E4$Fn zozfwrP~6bxP4rq;?{|w_R1lonv_pA3<(ao;!Aw0W;JvwOA;u~N7x>SPCBaaL^m(eJ zaTh)QsWAa|klB3Pd8O+Xns%+B@RvZW;!&%EKP?zPl3)xCNps3Cz=w!Vf~O8Rl|xv!hgUKz?d-K1;8|waEc|F!~1K*>i8Ih z(hV$GFwzzyJoZwET7V&T1F$^Up0%yWM&(@`I~!j=Y}G-q`P+pbAbPH>)f^@@1bR#M z04H^tRaYJuNWk=MlDXa|%N=e7`E^^uKdb$R?aK_G-kP`Nm5r5InT)Q+j%hr!nHHYs;8w-=VOG=#W_BSR!cXt~aLf_kru<%-GI zINV}H z+%6br9Z|b#xPs3UYf!;YG!a}=*tas`u)JL#UA~hxPA)DJ&nJD4%$PLsUqJR#Hlt!U zu|VB zcuzPes2lEuEJD>X^IDNCXz?qv45||GJ30~bT;Q$NhwlJf2X?YO#T6 z#?cP3pp4}DV^lrb0%j!;Kx}e$qc=zHzo9Vs{NRt|&eiRv>eY}+V(^QJJL?5+G@1`& z4RqvatCzJh4JQ10nw)^f;{Ibv9=K$dsd$JGsK-v!`{Ex)J3K~7!!GDjDUBj*J3zA5 zCg%>8i-3FxtIyRS(fv~TriL~a#iY>lISlbE%8YPCS97qo6g|a>Ie9qxM66+OxBQsM z+ea_6Be%#SuHF;s2_Pd8e1)oIQQsx&J(f+)wWg2q)qCuk=S4Y{2zkp2_U>o+YoXE~ zgKA9iAa3=3Leae~r1k<-B*3b%WEC`48BDvX%$DB)g_N&wHNWjIUdJxA9`53TEk3~Q zHs>Lq-(L&;+HOs>W*J~ELDe#xo)oD(E4gVF1lMgjbKWjW%QTazl=2;7Kw*^DF3XWh zWcTS;{abZ`jn0QUq`uQm2~W3>v!+Ibb`q z0agROnz95^0bh7>HngwdtB&Uk3euXqX zK^lgCrydRGslr~wZ(M3Y(NOt%dqo8odgfm-P4LOg%*M!L_sRv9A&W_d%f!HTEr#R_ z#c56~`cSCJ5mY|$w{~HPyuU@^qHIEQ)(QQHhNx4wo1O5p344>yQ-FX+kxPVU<#dqc z)DZwP4lh0UkPx5(x)HIXM|qSWJBP50UuVze0)eEyPR|uAIP7TE)SjKKjDj$Nlwa#2 zfi*Ffj1IcrI8M}=)vYv+MXQ?4KK`35wm#_cR0G4~(bZ=HDq%O`O5n;$og(dHrcDX0 zF+nic1H4i(X<^?MLHGmb{or$`0f}0)Y91k?B479wF`@R6(FGFL^j;&(pNuDgYxbkj z%FRe>KmiSO6%xQ7)jx*C4&TxVf^>gSpKTDf(2fL{Rq`zTeRTpo9|H@OOjg-H0P1l; z+IwAaQvVeMIbeAaw1Y{B%`hbZtNBU}z~c6YphmrM1N_7E!leO&{hfdm90kuXW%T3}rEb2X0Wx{Gmc>afW^t7=nlf-A5TW$_vGY(v9UUbc$zKL10e z-?Y%FD`vLF4XPy-5Eq=TI#s3FV&|87p(WQ2qIU4i#X4u?`3PKoe=}hnVtPLiu3E5H zDV&?Rw5d3Z86hP7;!;o~3Hzx%V zp|wpu7x2F_=qPCRA1DMTkisgRxpW*b111V{c9?!1<+57v3(_W0Kzx zK!U@jWzYv(2Kh6E-7`l`MD1p^@-pAlwnxq=m}#VyC~}OHzvZ{ETaZiT)PT*mxb5!b07B!2{I$yiK&!uq|01$&ou+`A zZIntFJ^%|(1B3I?!JEvngU3>1zHYq%ZNwU`58G9a+lq#rNSs?jY#qZm9HTc{8d(CB4prl2J`SY@>apeVsg&`rTL%j?@u%?Acj zHKrv+X-=ClG1VQ;lHJwIQu0kAL`h6pMCdIW{gqG$EcDp7oTW|nm*Djj%w@uz&RkE>eSR+ZyyJ450g- zMR6;~-VtcFX`t>I_r1Jwouf?|qBr)k48Awi~WJ4|64tyXs%P`tL?U zMTvD=B?hb94?y#h>YI%nR z{{ABDQS@ott^Zk_?Jk&w81}c;V6qE`oL3`Uviuw1woe*b@Ugem(=79+j%<^AFxdgz zj#29JKRp~lJmr;=Vb5R*7oO!fx=+ugQeRc{o>wjkzqn8&zy5TPq}~mZ6kkfL@k9~- zO{b+1Ri&ss`bE`nxVdpyN7b)+mNbcXCXsl}Z6dzHacY=r^5Klm^qr)`cABP#oHWR| zmb`DprMZI8Ke5PxrGvH!V5BkdC9s9Uo%-#?*Pd%V;EAbXqoJV^ni$@ur0G^yVTxV0 zUZSi2BW!?}ECr{SIlKQwO(p9N?o*uu>;Ezk*}~iu;Yf2m>v>CCb~e?42L0ylH6zJS zUUM2_o^+%~1vqK`d9|N=kj_Ko!g+WuBMBKyPmi|)@PoO4x-^nr_t$3^`MaVf3M(qy zwtDg+c5NJoUmeQb7+n69$>1;F>x>XI(Mk_wu+Q&Pwk=4n5J*>7;&_ zzXI4)!DO65%VLFsE%I6kIgcZ#B4oZKQ)hv?n?-vZ_QvM8KExI_BGvYUYIXp7ZsfTN zT?fj?m$-sL+hAFfRi62hNt1MtP`HA`?E)oK081&CZwu<6(Q-zr>`rs)k}ABlEGuoE zLoaaa;0A;vM#i;1R@eVYoeEQhP5f2h0ijgum+5U>oq?<`i_{i*8h#-p z>YX%Yy=}jww7lSsXE*25X*7?v^o&Jq?~)6G6v+?QeJFsta+9}MF2KeDkMj2Dgz?l( zSz*|%-h%n2EUH;UCnx_LGA~IFWPCLSzKNdZhm}~eN2=w#rG(E06Q1FYQq3nN4W6m( zletxfZsoOlp6H`bdOCqb54bV^L5BwaRQ>Bj|4mK*aO6$=c}Y!+blVg4M|)OkG|~)<$*mQeN|6Jh5haNIH?~yk<(;etF_9?`G_a+~ z9$tX3-{+LhaSs+JP*<=M5dT4R@<74EQC9SyKw`I}Ko-5ZoDh)iLL&wYdkJ;+Dg}mZ z^UP#eCGMykA-?P*aVl?w>)x&el9Uzfwqc3Y6)g?rI$>=|=(_0(Ig*1D%WNlE`5y&4 z(sbweemu8WO}T(8 z26djrth@A4YK9ugns*0Oydjd@dO`0ri)>X;pmS`W4(|VimxCgq|ykD0w;m<9E9PGY?r5S+)SY*mY^*^S#=cU3K)m+q} z0s@Lx=(|**u+@mdRQ)x)*Jv7I33!=f#=3%Gv%?*rEIF2V)^9+5%srZsWRsGGGt%!n z;Eya)=Y&Eo&Pm!f+znSI@DzkVzdatNr$Hp@hkTTAs9U={{D=TfciDg;h)=AwBk zm20*_7wb2J z##W|lhVTe^|DuujoIq#VaL7VZt=<5FbE3a`zF!Zd;$WJ;YihsuHNy=7_bHoGLOQl z;B*?WY~r%1I?H6zqvA=WR+pBPlCyB|fKw;Ks4!5)>)MI>$(dJaBo;W!z(LN{; z|4a^#Og=_>V|c!*=BK86k2aHv7J#QQM`qVDE?yE>(V22oenDqiOrt_FJuH{n2a_sb z{6V9%A4MPx?AQ5>BgVOrl{1@xKTi4%OpvmRA5}|^l&*6{b6oiBzKDmVI%Q_t(OX&V zd#c*Cu%>7$0)Ld2c)o8M3ns*{g!f%p9uqVP6QsbxYZq|w2G4=I!lQ4}WMf8EDi8y#}B!L2ae@w8|q zzCW`c!+U5iL;d5pcz6%R-6L-e(Z}t?_5xHSz^u#qr2?wZ`Q2rDt+1hNQxn<0 zK7|ICOUjOoC|GAmQx8owtt}q$VAV3xx0ArrXTT_Le~WA8Ax?b8T)9@+gSeE zy9j(X5%M_ws~6O~;Tq!AJ-cz0v;TBPi*(^^)3u}ZWg~G0xUYd{4a4d9|5kM)NheN5 z8N_R=MLLR2T`N`bm;mzTtQ<|&dS`6(Dp`E2yYN+g@ecwr$(C zy~?(2ckOq72hrzrcXY&=k(m*hKjzHmiHyV?;~rOi(~|y)-EWXV)C(;}zfxNYF^r4l z<_8HM12z0Kp3Nn(g~R#@t)5>u|9#nlslwk44=X4asApn?Xpi5?2l@l|kB{Xm=@xit z4TAH75!h5WZH+QDmL!^WJIi~g&pMV%VxN0YPqD=#;4p~`I5VG>q|rZy??i0ike1v{ za$HB@E+w(E{E&~UbsvBtS}{y7=?>#~5tYT2Z8b(2uiRf*s6u%t1wGT)UXyeBfR@Aw zs(nM)6#KzeY8waW8-ED|Yc_AH(`X8;yh=W#s>B{mNM*+XkMqJ9t^)(%Ss9Bw!ef|k zvG%1WSa5vOy*{5n&c75@=fPBkKHJ!GL`h43*%aw@Z#T+>jA}l2n%lL)|cak{FtA7#defC^&z>0hI z4A?l4=VW4-BjG%pXqW1brXLeb%4rr&i>*QEPVMEZ7$mnC9|$E{all4hyaOfD>h^`p zrL&@Ok^iN_5$PRDN*?%v3KWzEmH9o?Z)%SroC8HQag?xV3^Q#3Z>}NA19tXX^Km`s zFKkOSFoY7^<~j!7(sV7~LvRN^@+v6~-!T9a4l2mEJYnYM>8(WvDQ!biB+qczKoJO4;t+18nG;Bhe%220^Xp&DVci#PhyP%VC=pjc zC}*s$WlB3%jbJ)EKIMeSvE=h%{m*~u!{ZfTf}t?WKw_mPE8JP=F-IY-p``{C*LayN z!_0i}nYQSrK`QyN&isDHV<pb|M1Gg+Zc1Oj7?p=>PM(Fs17sUii;0H!q7?pEqdnBMe&@426^ z69?^V_Pgxor62gN!R~k*PEdPZN2*?3Na@?>;UP_<3l7y0gt$NicM#J6qfzYb{)%mBl(PYlGSV zw(vReRg*hEPHUU0H1Wk;o#Z)WPo{=1`Kdm}0Zsj}7&hswN95rbt|MxM176c_hdfiR zh01y69V`xw28+u-HS-htE!{qmG4A=9=bfsHo-oHlXVBJBI!aYWNco~H#D2`TFEI;? zHkkxuiKfzVEKejzqg@#9JI7OU+#6N$i>sdXds0`U^rH4>;=KGoGF);9i)tX&qEV4) zCyXLnrZXDcG^I$CG4Fq<0c_Gz#DyYo>mWd61y?!-Z16d6)(dle66tKNT%(ER}*&XrojPFY3ZLwn6ItihL- zs)F&V;kq~Ko+AfoI(td}nuk>qa@7PrxgUI9!ZV_d-=h!Hmx45fk}io`E$CsfDp!Ts z@7@c@NTPVmAn$z59m#pUONA>qXy?;qx#51V{(wc;0RYzQf3EKTpJ0)H03ko?|0%G@ ze|7iM>A&s&w*P++EV3H-AFxRO8-naXBscr>mEPP)-N zdIxytR^56t*Vp6f=^y_}`_@2ts5UhigGwP9b47YxiDr7gIrdKGBYakv&^`dOz zM2N+9G{z0s`HR&@)53RI8`t??oofygG*LTp>64EGldFzU)Fq5<%m7BEsaA{a;f^Vk z9!GlYtH=90P+*{3vME?E-+}KZsr{vC)~~UG3RY*P;YlPS`#8(XiuYGd`XgDdlu>} zOxAAwcSQYWVLHdM*}iUXZ0cI;r^P&fF4xxP&+LY7i8>UuQ*p}+T&iJAN0i-+O>j`z zW6%J?!TF@UU6-Xt)-F8Q3r^944YsS+youR-0kSN(>fPe$RsA}^_-UuTl+`V{r`ZNR zY`iMS4x&nG8%XS$(kdNNs_&Z(C+dPC0oELPu|WoQ`T5(uYOgRV8bzoIL^hN!QvyL! z<)z!@uvksKJM&QEHVZx`zoNKBRBr3jz~N+#X8M75W}Ee25pV#Zhhe0QKTUYO zHU;i76@KL;$S)d``2rO+p{lZP#L>Drtmm~v@4Fqki93mSa^MP3V?Xo zR*AZ@vYIiMJ!%2PyQ=Rl9gA56h$dQNEYNe$m(E~f<}v%^z|3@gPL}EajQZ&O1n&CA z*io6Xq;!Dtxnd%ZL|wuDbtMy2Hqt<^ZNCJyX!3?@RU~*ssHm}K9`)_}Jd%nSq$8_- zr|6i|koSk4P#Z>~O*5ZPw>?kTRDt&e{2tc|j1kt+O(tFb)q;^bjC!OGjn^J8X#n1+ zNC$21s0Maow}C3_{OlV#&T%8+T{>_t%l$*@NQ9L$114+s%p>jHKG=jADgq^7U3C8yqB zMJl%%r5S=>Hf?LcL+fMV26@W*s*?@0OkBVB|AzhqVXR?9DdJM^G>271Q$OhlG1XRjOUF%cUCJCtr+<)s9TX=~RcPHQHi+J;? zMOEufiS-gu4_umttet|dH9OVH-veRW(226{7e9`o10+Sc!~^fF32gNl_`DmWR;g9Q zF+t{K6z%2X5fCH~TZFY{$^nEz0omcXf{-XmNKl}K8|%S}IyNTMD<{3E2yeq~t(k|S z2FJ-UTpC_MaR3Mp%ckL7{?D|J$BzzQ=nCg5W1|W9ms6A86Io)eQIW^CN8#K13mL`H&`|(sGBXtIX$7eT_z`U0#b%9|EWgn0{_f9NVj#ufQXSRi z&_(`~py+#~;D4m!`){-lQxWIQ6O`P_vZ2|vXKw$oP22ekCBG}6`HiWp`ChsB}z7-tS_#3I6WGJS-vGMTM|F)(Zq=|)1TcGS#07U@X{-GJnQ_0@e_OGSBRs37HNGz``o~4I~XZm2HvyDL~I(X$yh{~q06s_!r2}Ot)Y+r{X zmJ`+iR@Gxw>e7)6O)9P-nZD(*iv-Q5mZ*|NG$AGoGqj;cGh zVgj&Q)(%#>P@b6ukGURy_+u0v)kj3sid+ScrI|Nhs%8n#_=p?0UUX94|8L+23ufW# zuyU{mj=EHkvaYCye_AVLZikcLb7aUa_dZlKTI7*0vnRbqnmm6k_9PhV&j?yU)ip!@0 z(lf?f88&ewLx$tY`4k~dA*hhXkY5ajEG zSJakjdeXeR@{H`d5w~u{n(ABzm`GpE-jttD-5*@#o#0ojMeI#B;`;l6A^&_a8iN}O zwyMCRK6|X6ZTG->o|Y7fYDPG+iR2?h;NER4stjZuDm|^lh~2)1O<>u%o!FNMrD$mS z>Tc1?n?8xemw%N$0@!TM<}G8V*}sXIYMxC^GlxRsKUG1mfl8+SKhPg& z6yjbV$gs4|M5e=@`971)EH`10Y49|xP}}^rA$#~`6`b6ag~P@q{hWQ9pNl$%ihTli zYaLh2>36gD=h1K|$*DJiFzB%L@`QVnToE{fbmdYlJ`5_xe9Buy+_DXgiuh9V5WNf9 zMC*ieIm&L9xTyDbr+XW~wC}A*E*q>qP(3;)al62~u#8+{m@X+|?>D^5pnln5=i;7V zf4NJ49T|m8)yi%HTLhop1jdMVL=#{0i4{sPo3)}<1N(e?E`vzS^s|_|tQ zIJXR!R<8q|96C3j@LMptzb$^w&!i6(g>j4KxfG^5dK# zPw?$~ysx2rcv-y{W&uG!zF<`*9_};AK`d_nCB3g>-xI+v*r)^?M|s6$+G1m7Pkbb; zZL5(QR@iW6G&3@i-`;eocvitrEOB||&+6f&MdGk>hlNcVw*UAjVM-jU1rexIEQJb# zku6h8{M#Ry&fz%=f^6xB`f()D;kJdEJol_)mVQ9X#2F;T(fg}W?0)vI2|=xmxl=lW zac1frG0qncbR`O!JvnO`R6EfSS?Vy<2M#?zDUDjboN=R!cBRc{`0Fs@5_8t$&?H6e zNx?inc+G}KZfDdi1gUNi`iHh<>n(BN2{BuQqnubHnc zL<%RFRndffU(Nd1b=^4tsTe)niXaI|rsMK65N_n_mcla>r3eka+Ln`|cSAUih1W04 zs0{obV0XYrt>4{Blp=NR9l9BC=?xh+f09pX>rO{@9Y%KZZ@ijE|5yIU(c|SdIA8v} zH1vT}&+<&m=iZ1*dDUdLk=Qqjk}UeZ`<3IB9J?5+r3$Dx{aKzRY%i&@2=@N^<}JW|Wt(76(^=wRt+pa?iCqK%SoH{QeCRCHOj{N}Ryz zp5L1^up?sQjn`#~*=Zp4acBouh6$MIJ|>21_uVI{^&VFp%{qS|>#LRbfdmJDbsCkX zx*w(sI(jkl=qq(&-(}B2NL1|a=JF(3S5sM;Wl(XBDFI=){Z1}r9DVNz=b)oX&16L5 zw#O4X5@WS|4K#OSWJ|qDu-kj`7pc19F6Til3R17U z_Ce@fpdodU>0M%O3Jf9iw~TAZp!WA~#|n?IOG-0pm=j8Onj{f3o!H7^;6-S9mh|T* zK>AJ08duB|Hyu5av~^vEp*I=xd`DUe4oz{7HQ90a#$l?4E=7*niVc=NP2V=-YpKGO@d3)sqbd%_Xp%0CSf`q1XS(fxSSY_BZ?+2`e3JdD`ZjTF&L6j|1tzZWK=OpU zm!LEv=L9*btqThC#HR5N77*(epX$n#t(~VU(`SrJSB#z_pUsjWbo1uO zlwi9df(SeujGHQV6BaT8Syt&}{RB=$$^)QYPMI7IV2k;j{3X*8AwuJjp5phwC&bHO z`<$(Be>`)%!wh@GbS!O55-Vdgf;K7<7aO4b-rkB6lD?!T&b{<154~2%R`}Skm(IKT z8d83X!kPfUaBwtde}!4Ip6>X`YFI-?8=7&fem)BRrGOyC-p5a7>?L8^uP`wwtnB2m zaL7&IYAPQu8k!Adhc<%@lOvJ%VP0~R4$lT*m<&AhB(^>|f@nLT@l7jEDD@ZWJxxF; z*J|h)9GcALmZXW1sEHQzKAw<`k_S^_pQ2{hGk{8fS9FVDzI|rMFMXQHKr^(G!=i&g%IH?nELP1z; zhIjw^4V(IRpte9Vd1O~xbk}6y#`}Ly0r9VYbE^gXnC426Ia2f>Uy>+;bjr5%dHE`27316nNyai;yeS z8W3e#F{)YjA5QgKoF|j2<`<7;0H5y?W zGc2SNaT#5CfJ(A+PXF4wZ=gKNYWl>)bJe|c_BQ-d_2KdPFdr1r@(rQYS1-+Sv<`oK z>-}1lRt_dmnvo0;M`^pjZAaEK?)@r9klm~r!Kt#iLn2A@cCzW70K-sKy@n?GzQzM9 zkf|vbLGHBE!=e}TNQXmx#b((aVC)R+LF+FGRk-u<5mpQ&c_hBJM zpgIrKkS@0eMWcJr+X@-4Vcge84KMQW4SMiPrq=k9wr*I1H6p*=i_+ZTvuD_8m{4T2 z4g&aTl!k}hdkDMV{0nHf-h->;lcXCFq~4-X7ua7v@3L2A-T`YZ zOL%REiRM5=25^sJM9CHIEEGh#_E>ngK*kB_j6bibqX34h$zR7tU&;%Z$WBEWDPiV1 z2bSb=f<@)HDZu-m8Sp2ZeEzg4r>B?}L3zRMCAMa`?Z}8~Ng;Y_HL_Z_Hz_#+Cro3OO-KX2ox3Z1#ZQ}x$^ijUUZBTD>IUlV($X2Lizc}aMe+Ph)vcw zp~yf86A3$&ga3#QUX$1WFr2bY%OK z@RJ^huy8+Ct;V4E_P!{v^u)!y0Kadvqrdc_aV-=iWb}gLhv?FE$FS4>FQ{o{gN-06 zJES#ftpJw$Q+%!ZZV|ol#6g6Nx8GWa?;SF~KM~sfWu2Sjm!Jz^`4~$%Is$5aCc>;R zjV&V1m#h3KM#sgNC6T(cAj>B}N4_|HtlPjk9MI_qn*KKaLW&c57rfX$D|Xc9PBwjp zB+EGkv?5sSn9HI}vhGlg$6?D*Eu;Pyg48@>1`Krtf3_c1$w)`Df>!p2l1TM(Wnmtc zpO_8naf}QC#=>7#%hF$7t%RQb3!KkZYL~p4sM6OEMbL3k_);%QO(zdDphd-~=!3gy zWIc2*YOFM`nG~`kq!a(xo~1+9J0y`;nTT%S0NxYV>Mx{foodKRFUyz z@=*r0Z|j<4+h$IqTZm$OwkV~kvUh9VAmWg%Q)_`I7r zg3&5`MmaF~r{|P@g*0I5&9i|;M-a(oblh7;Br{eyA)(1@1+k*#4Nlfay`DFb+UWry z@d@C)oU8o@u?u)f*4lCu3vvtUils05r*0SI3kLiYRbySm#G4t30$i>aF5B1c(A6A0 zO%o9Px^BnrtJC4Gp-#tyJ@rHOb8W^!ux1} zY_nh^$#3G@o|u#e6Kh4x<0R^9egt+Rp+8edw6CwZq)UUkX9 zsGAOuFhaaP_x{*Z*p+4EMMQO+=jR3CI)AuH&=Mis23Q#L$ngAYr*;T`tGB8y!mm?);HJVVf0Ra zrXtFyGu=1gvn2<*4i=?pT5psF0f&mR_&K4u+?`|-8EzImF8IaeipItcx967n2gU=K zU!?5e-j-EVtzZ{t(_kUJlgs=?VPl)XnB`2;|5bBBhA0|R$4c|ckQ_;XleQL^$4sM^ z>o*)&rf?GtOw~LcR6Po~mM(&fm0*iiH1^^OpM-qZ8DbR|65uJ=PE47cXxWVMyZdsJ zFwIy3;>qX1562&z0f(20lUQ~A4}>{oF-%#pMYeZ(a`AqQZ`BI-U+oVNK7Jl8?h*RD ze1Mdioxos)fIshPS_W#fJX^59>WC)l4N^nWB=lZ4WMJELAv|6e3-GUZ)US&X^8o5#tkznohuj-qi{peAI zqHIz`aqAg-8eqj{a-Z13f<6+QKVXr1Tw8T`uP#761vd(2JKa{_V4L%TvQ=#oD{ua_icm!QUeAZ<;FlGmXn9EaolA zRa(}AN1GEGt-@Sa6s2^mSPQp*y37VOfs`DsJ$j97SMf5O*usG@if@2U)XROIn{XCn zgU#)u7Al|%{j63o**izJrXwhCrw4r1Y|lxX{pSi+{Jrh;+{5^{tqS}bsXTQ+W-%CB zRV>#~HO-c{VnK%IG-WIGOGmzV^`MkPgE-0~XfzAlnom8xF@QG)_s77Mvw#$UtCH~? zR`Sa}k^2G?#&FNDKJ*Gg?U;?B|D`zbZ-py~LZ6nQLt&CPRST6pGKc^Gd8f7D?%vad z-L9S*wO<*_^&bbq3e)DDy)1;CMIc!a353g;$QL0w>4*l@`N;>XAL=+KYRIyk<|H82 zUPLh|VUS}TK1+DF%TfYW=_ORDUk_+m6an1J~)5js{Ol<^%5_~)lnLqHMS65zZsk#_oL zfXWT?A+Y#}wm`Mqrd;Vt`z*V=YF?r7wfEA`BNcK_>{I96hF>_zcmUkF@vwrv-Jxku zwPm8s@?yCqmvX&5B1yk}Z0h4lNNRJxC9Pz?_4#)1e4-BsmjPb9iwL4C!Co=|7x0>d zt6o+RdWQ-nqG;I(Ea8?NQKx)MIMa?U*b3wfNV~;j^Y2sjSEK7}N76t)jDLZUHH=cg z$u;etvuso`WWYlsOBT;6%VeQLD^UxNe49^xrh>F*s#K>vj@%Ch-t0Y67Io`AQ`S%v zfEUCIL(6qg3oHGu`z1=vKu{QnquHrDMuGQVE*Ah$lLYV{RBEWiGa|699{PWo7%#oWad&(3ssQvwPu}zUQ4i%%bO;Ju= z&sANF`ZlY<=L0)>V{bu=Z8VPQ_@oSxSOBL5?<$_}N3sob?*@%95BBqg7{)eQ&z#WF zE?nZ-F!`G7gQnQhe(jWa1fy1eG&?xJr~AmF{TCzi;*3KSc5IEFTt%rsthF!+L;>$Y zC$F>GU;bd&8(ToN+drzKVH>yru*%jYC84X-h$-T=!JCfZT%P^hP%{6T5{2(ex0E!%euX0p|q@Oc@D!^ZzT}Hdm5j#Ba9%qoSJ;**}y+4oV*0mrM9bHVh&|> z7R4FelWKgia;mXr&f%~fb4z$cFQRh)HJ@O^Gdrip4(+zyytZ+a`IRPC@%c7q>JCI2Wp!df%dstU1ApYcT0^Y^c#5wu%4Vnd zZ^&RmrEHM?$o(t1`Co-9@B!7=Ne>1`iT=CH$cq}%GovSi<_xiWvK* zt<{IGhdcEvOSTbg2U|l=#LM-t_naunNS#qiYJ%Q%|2SwO2KV0PSRnK-(}knu=eAT2 z6Ac3sGT-D8L4C@>gf7FQOxj--e&onlN$l`~HG!cOjyh|^s-;vZvm8rcUP*;B14T^` z-gvB-^F@zN6KV~cowj1}t0rd}_#|}`Cy9Lx>MFV}uXZ(?TX@kx;-+&iqZ0?4W4W=5 zK9uhcuzgCQ-t5FfmcLK4=l3QBqZq~?rEGITmQZkUo2Y(tM)|3`jvlO1F5o9IB%`lQ zo5hUCh^x`owod@blshCd`c{WhW6hl4)V+%l`ZOI27D)^_6zQ-MI6n@ctM3z$k{A`_ zcA=Z~faUQT+&QN8fcG~(F5&nQOZUXz;_Fw4eRGJN29ZQBwgGF;=|%dmI5@FRfg705 z3KA3zik%k(a5GbY)ButQo`qVeVbn@?@07SK#nzMNi$sUqXJG+p(b>y4MgI?$3G&V|)J!A7-{kEhlZzK>Rt}usX@>fkk_h0lI0|pKPREf z>l0$kela9N#%NrVH)gmgADx^MP$3#b+;Xxrn-8jw*tbxI?#ed^M|mLTIZNMOozOI) z$TNzZ=of^o9HeFgvtvmK_CEJ~Ew)ExkSyf@QWXDM3U$P= z)E~gE(girQHa@>@4wxLEg&l$A^6}rb7HmrKBMs32Z>UVE2?4k0 zotZQL_%|H%FJ?Ms>;{m0gAG+lXQZ?^(T~->{p#Op%NgR-02f+$^ZCNz6AkfUI|uHR zUXx!AacX-~0t#6jc|$hTNG&zXvJXLFJVDDW&wgcz5ib#1KI!rJn4pf{dkG}KsP25n zM6PS+H2h5+*U)iL!hXeaxV|OH%N$LM}ToYu*rCgdF4aHi1;T z<$~$054j1Eh3^u6tkQ&X4Hw%vcnPK_aO|5Yo!avVBXszFY<*f=+6rejbg;W$u5)ow zaKW0N@AuT8o&TEAeC)NE(rCuFkUh*;c0i4ePt^k-(ka_jW}k?JPq!H_VrzGv*~~O# zZ~UX7tClK~MJLX|;``3@Fr6h-UG^-(?M~*J+QW+W1KtLbl`2kiQB5kcY)M>MQNaiK zYKYS0fr6C^#Eau_Ftz(Ig7og*<`h6IGEZSp-9ylLvl)Ag2FmkPzJ==KvpPBiH#~CY zrB>Q_dMU3mtlklJ^Vs{3pqk2FLJ#K?$52T{2&e*7h-ek)u!CJnftIF;OZ@k6f3b5Ti0r-I_W9_jJ-px&6-z2=bETq_x{+C% zw4Z#nLs18&z8JtbNgnqAeJH& z(c|buDu+LKJ3YGf9(+US!blG}{ic#QtX=s=?##R2?I}QKlOmshi2H=PhC!Ll|J@+a zK5v9(x;v749y3JV^<*giDuh|XXLx1?0 z^{I?A!AA3P3y2l9(2flC9W|2(BPp}9T`5A?6rjA*NYZbG3_HXT4S{s3v%0(hn%17AI^n6zP?TF?j^ z&&i-U`r|-Iq(mTvlzg;?YV7&gTF+j(VSu|)A1oOGH5Cs_RU`Py6M6?gMSp9BSLqg7y|dDKk?JN51;J*6P_6$>LOqnZAMw z^|S)+aE>$Aucz)BgG&tzqcDOgNX@nYi1)Qo)7g>cktqA@mUH~E%uZn9SYkJo3)Y(` zxmx<*r6H#|p_8P!^5Tqdtj-4=T{jQ>L7q`)!fbZZ9h+0D82J17i*N1URn>>rskZ}S zB<(n5EqwVPE714hUE^BUhJ_>dxlwPnjM4L*h{v()yR?EN%Rv_X{S#9jDZ>GE(gY)6 z#xgvjkeBSI?yHP2gVo4_F0@<1iLm}5Dq`05o(wk~**yGliB3(x!ISb5Ad(3j%p4+s zq+~oc+Tu3rEk^THnAb}a7ZZRBaT0yudMBPI9H2q-%Y_g+L}xXMwa3VHU(E!ZFbsfB z7MoYSgYYNJOaj7d)o7?!hS@Xb5|lm$hDf9P(T!>aJ3YV+L*YxH@OgQAJl-)g6?(kE z7vJDwYB4#Lb@$J3FHX!K9GLxYRjscalJ8EoPv>k4w@DIA{01%So|mtS-grcnS!5y= zu4BK_&cJOFDPRTxJIE?}udGGNyA;WZj1tc#I zj%!SeLUd$)-{594X=Z+(tg5xCD5Qk_$HQt=>JmymEHZn04LoxI_46>&yK@lz*t3lM zQQB2ezMt;M3Z2frR;Q6k{&7q2ff@CagJo!A9wC(qxB*ZnHaR>pCJDe+&46(|g>h3A z&uP6yM+`sMlr#B{WQ5AY<-A4S92o=}O=XDAO2#^H*3nEtNxnFeNBL_^s*m)p)Hm@s zf+6uTk16`CzoX#A(Kd;eG)HY`otqjH8{>HG!Y7lrwq{6hi3E)nBtcv$0P#Sv#!}MZ z7f4a`EPP`YT6E@7_K5=kUD-gZLuqr_N>P{x1`kNiz{rZ~Me1{BeaZ;1%bW6r##c({ zYFNpFV|W_$fAy$1`7h?CO!B1j8W5sxYcEkKETJHbF84tmZAcQPVDbY7 z;&!3vsmH1!Q}+mc#kJTZ*|O*8`gO~hA{RkZw|Aji125rtU*pJ-1`D`4BVkg%g*>Ly z-98iure{q&Vu77f#Y640*LRv1Xp8@i%YzHI0}NOQn^F8Vio#*6SnbD<3z?vm+X`jz zTFrv)uI~+X@%5Nftu#MzI)CLyLff|352JSBF}4S-#CIsE8Q6~oP}g%zlkPN!nV=`2 z3h=(06Tj~cGXSkB;)f4!z?;2sSva?Qq`zRuViQBVh&Y+4qBrLsEHT}70Bqv>`gIsf zfuf3VS?4UPd~c`a9p|>o2)nOuYNS1TyEJ(xO$0A}+#(b{z)o-TZN$>s5m`tqY)^kmZ5Iek#lY`;>3aJp&H;1e4t7JnW04rCBIX9u7129@{ofn+6iL+4s z_ahM3y?q^maau}j*PH85o)8Oz*RNMwmgNbXYi7u!Z%Y8&W40NGxw8yd@3zAwvH0m( z2_&TF6mKkWmAY$bHk2EpzgkCf_`j?Sha4l~@aZT}3=F_a68lSckLDWLXDGEw{E+Gv zSuJ0Zg5$2LY=wT??di%?gIGU{W(p1D=z6C_nsSCk)J1pQSl8*TnsF90M?ch^LZF-H zhNi+2DdxR&A8!CIOW+*`zQYMG-5vjo+HISs`;C^8a{T!}4O`q$Z2PubpB7H2&~e~CO^IKRuOtK-OXec?sMj!S z#t#@ET#_hFx4XMQV*zfqyD!k0yJ;e`f-wc&N~vM4k}4}4u^!8&(ZOT8UZpzB6&t%| za7LqylB3IL-*YMc$fMO2fV-&Jl|kjYUxQMA`i%pal<;h4Q90wO*t_KOZLGuWj^7Pv z2lq{aExg@&j}INKil0oZOj9-1Ftl$phK0b@W*eAo`|s&Dl1}|pdImjv|GWR6g9Q(? zA5;l_T8v~`F{sQ4s$ll1;dqI=c``74aCU@^mhAQH-~5`oy8K)T=MBe`tvRf(dtI}W zC_#~#S97|NV}B2fU4WWYc zG1g0O`lf79OvwS@LAilk?G-_2%3oN%6QdXBH=Xslrl5x>a#k@Ag;*81ukl4NxFHmN zeD0h!I_ttEHXhY;@Lc|#^j5F1E=XqC<%ocwEQ!ZcL$mG2>C%{d0bkApN{e^Ru4t*? z-(HxVCYJnv06y`|*!1-CbA{x+?mcKfZ1~7Wzuh&#Lt|Ur94W{}{U$91%sjX5-ygPX zxQL#BHsB`!-^}P+5lNJ3wK^CZCK>**d=SpeEyGIq0szPj-65_vwgGr(0@yl?jO%}R zV+BON5d|YR>f+TKYrI>U zOJY8)TEmRA{LHqn7Ap-2 z?@zq5;drbwe*FTTkIK2XpB3QU6zv42h@0sk5=d(L>*M?JbR(?IL{qw5g^9Nhx{#Nj z&j6=mR<~$>Q(opnQ4iW6yv04Q$cJ=}iri^gDAgL3Hf>X~pLvjB550Xs5586k&K;-j zbDc8Hy7Uo08SlSfp}kwvxoFepXr0ymmk73Akj$t zb5uuc*=l8KAq5@OD>307)eT@3Sn}o4k8kO*0X{AglD`o0izb5}Wlsn0#QQ8aG1uE5 z(03YWNS{{a$8=iaiEZjDqt7xDx&64$9O?5X)E+wYPCZ@Sk-1dNQmN|01d$cH#I1$W z9mHl~U>9RZG4D-ptI#+wuEv!8;?Q81bN`)N1j*O- zC^nHf@$Tjn$WV?+{jF2928MY4{E9WG62}wUkOWOpQJni~n_HqXt2zfgcbtN8gqq4` zEv@!*=`s_oh4NmG8XR#Kx8i5!mTt^kD^Cmn2~P+BOqc49FIYGRA7J|O)fgXO%6k{n zKmRsh%Ea$nkWh4#{EGeX0VAtSUUHEQT_iD1$!~$U9JvbPUOl3Q1DU9%YPDGp=LccL zW@5K`Zos!5H)mv3dTJ7sBhh0*K}&Blh>K2!k0gX#c3(hOrEvg=ZmnK`PKqJ`5Vhha z2>@{3u|J9bj0c=;Wds0uwhW14b?a=m!+d=Xw3;%z+|+w)o$$;h^63O97><>a{2310 zYEHlXnfX4U1&~zKGy3{8)Sc*+62b*4EQ-TP&Sk#IUHl~9Pd94Sh~R|6S12;^8|E4B z6z)UD*?kop&ax0l{q?VN1HpN>GR~l4s z5y&dWS zxr;W}pO)+IW!#amdT||6LrjRxyV^tX?K|Z;el;$izz;xidpw^g4@)1%QlzwpMeMwg zda8$upq+Y#HJL&EC5nC}!Ih3*tHJXKA3=6l&XWZ!5-EK{;1a(lUInZ_9ZqT|fE>;U zGFq$0{;tw_Xhf(bM}w!D1D<(RVT?pd{ma+ea*C|F5Dz8HFX$(HRO_vBKt?XQ#@iA@ zUw=-e))$yEk^DbD-UOn%3O?+CNJ2%0*??NZ5fLP8Mx8x5@+83C z5YndHxETZZt^9i+b}+Hb@D{74Y%Uq&^5ra6Y}~z{*~o= zQJG}Vm`ZKZ8-`YK0biNsTRIVOI`$cl`4SJ>d_S6$RuGWINC$|@_w7{f;eH^1_ss=i zX%tZATr>lVJ$)Tjkr`3kl!S3jzeAI7!6^2v8a>^CP;MPmfqBBfDzhh?SP*-~m5n48 z1A{$8x(_lqq^mh*}X@6`5JN?sZ=hr~AAbC|zMQ8?L2FW75<8urAyz`5t>PC%`79pg>!P zw&NxDDW_y~8h@BWEVXbJx<9_#Tg98@Qlm{uYXM@eCMaV;DNeq97UF77ms*sDaG z5Wh*_=`{)Ba&peHOAzvbA;tay#r_5RAMg>J&fV)8eeCCT;w7jo)tF!JO9uZzw6v7& zl4Pf9aBT9@_qpvFX;vn zn)mzr2Q4AQcY@3xbP3-e8Ccd{Di|~za;4k2yLS+FOWFi3j|IQGXR~T?fRQi4+Q1XOV&bZ)V4zX3TgEA!ZnR0{1vCNP*y> zj#1`SeA3gJEYgjj4gW;t+e8$rOj2pi5 zw6Cl`p~w2u&)@Yi$C%Jjhet2&W{qCc#0souYgRywLA*#i3yq0p=O7Mjg+)+6LF*b? zZssNL9{&*^jcGf9`V~hYFU7H{%$-aVH!0!dem(5u`cSlhqc%W6UpoW!m>z3+yG_#B zSm9U`=OX90H1#1mUw$ z*e`3&0yv#s;amTGu=2qCPtB_^i%+^#3v-j!d*ZS3i%Ke4@e?lm#*n`o6o@<~N||#J zA*vv6mk*H(!M@c?ay6{99ES7)G+hz(h+;m!weYpeGv}CX9)96IUJ53Paz4 z7P6`O++!$3*WyFnw)GV}-{Vg?e$b$R#|o0m(k$rWXmNn>Y|D1EuqQkN?cbQym~Hu) zN-i3+2^Fw?J88{r>5Dwkj*z(QE^F|}WmQ%hxRe?!XKF!RQRV(zreQ&K-4^TIl^)_V zssV$y5jf(?2nUKMB~L041EhvTYg)ye9U@dFimLRHMuzw(*;GDNt982f?eK$F!ZX4{ z0KQ{a(r6toD45?4$6(2s>cuv8@*o$S0U~jQh8ru%#g4OVq-vLy@qH04u@my+8{Ldw zN@dH6g#EvGWdJ&fvtCN|h0Wbv)W)|rd|~`-GhlzHE2Hf0W6|c@{VI{Qi0Gs#;&s6A zo|lvf8F0o1&*byTo!YTqZK>@vlBz~IFAy-BGO14lqJEiU61M$?7s+zL8N(8liIhTm#sw8Ra{@0qMMJh3fZnwuR1M; zw*rv=Ro~WkCns$!9%;3&r|; zP^4Xw#!Qy($_?V|xlb-+;VNv5UlO!+9Ml?U8nNTa7erJ@^5vt< z6zM-7tSjt@K?Pzw_y-Ge!leOYGz8Zh{9cHa!_zF=Ml1>sB4(~l%%D=AQ{5qPF64eF zpb^#6*?5O#umh?kU{TeQMu^1(aCf@Qu~gF4PhOk$fwwcQ8X$*?Gjp~pHtFOoaCMl`<}r1$n<{BY zZ)u`h@JQImUl4{G1E~VJ$*gWvG984AyL6(G?qSFh@8{+Wl*OWVN zAff?xK=dnfo1jI@WaV^5HT$Zq`b2TQDU;&aT?QMc?N1l%yI$D4cp@~Nq)!IxHsuqg zk*}gp*5Ya_^lLObU@5bHJ!!j+%U=K*P@cWcg$MxFGX|*Mw+Xn)Bl4Q)H7CU*Wp zw2s!YyTh*o-q&07P1`Q^PTC_JO4`jq);~^pYX$^P{4Ux-X&yhzX*$;^Y460RliAhb zAwOUhyptKyo!Y=9EWaf=RE|;c_c{A4IUbzNu#t=ukclRttP{+wBPhn!VG_2&h_8`z zvA_`T3bu}}{A)MF?EQ$q42Qm(^>o-!r0nKL8Lac;_&u&1z7h}Xz{K#oV-Jt}U&RWA zLC=m!y?jtwb;;GVj$*r86to(Ywf46il=`?uXy@-OC*n`;lC^=1h`QmRfJZM+N>y1l z{(NeO_`ze6u$eX%65K%gc2PHunrEm|_4B z=9M@K7oGCX&S{&9sv}ATjS^yf9=IjT2QW?i$4sj~WcFZQ zSN@UB5cM3!8|XknKwU-Q=|ZAEjnq%82`RZmL+!!F(Cm7`z9u)93@KI|wB0_pJ*$mi zGW)-Rj`fZ4d9f(4g?4DEv74WihZ%ggdA7Pj_@kNT1Hdg9JKmgI)z`2s1A2ceVO^23 z2UaycrT+d@2QC3UU3+-;SP>u@!}Mk68Ppm}cT^+cI7G4cee6*Val$PPDK<*X2hs-$ zQ0(_PlU%m~ekxm&<)Z1glQ1s*E#t(5s)_gD7<)NC^mwyQ1O&1rup}^t+UXEQm0f!r zEN5GzlX~9K={fIl`|nKx17H|@$w%v}WoKs~6K+4S(Y^Pq4E$VAc}M8%&GXOY`HH>* z^LPm}Zq?+(sLb%8OB5{s#LPguJu|)iSYE1cQKm6yM4{z!RMG>56Ch78p?O^<=oG$^ zxLqw@`~kox3fJPr)EqIllA#sP%^{~cCSgIMBUtCw7-oK+b=KKYO#iGvN@zW-os01Qrbt$ZTFyhu@dvs^E5os-^?2tR~XTuVu0hi%eHJc)Eo zmomXutc&E=AsQDfpfwS9E8R_}Z2&M=bMcNsruv~5u8^Or#bCqiJW38nrxmvBxb|u# z>l~BlaYI%|LQC%4^9(|F3)IB!FHD3)6dNiTl}@3CF56I9zgTxdn(P@VK-yPVc)h8N z=dEh1rOr(GLWpK5K{4V(c4H$;yR&lPjQu(mh6Sw)g#(_fFfwJLD@fA-C_Egg4+F4% zeTzLF3b2zfa5zQ}U?E3ki4_APR2@EThw3biW3c#3<5k&4tP8vr z5Nf3Tf2V3K4hd|ba2I2uGTg4VO}<5-Sw>h-)pfCV3Vtd47(C;qnPmCCwk2pBy z&)qq#S5+Xqk~!rzBkhM|l1?ka!d{R-**zu@t9*HOf35*RjXztIUf`^k_-sd^*N_Nt z04o^Y2Jn=I^2SPD9{l<74#-SGMzENlAg~|;MG0CJLtpo5FNXs7Gsu~}7aTKEJm9H& z`3+nz?5a+hnMBBe2VJhR$hrQxL^7k`)1rlt!X-lG*g0naj??aGAr9*76LRLTv@W{| z0;L+4lSFL_(UNjJy?Y55mk~i1>No{;B&IC?km)~a3B;60yLG9j(EJW&5DrW68GcoK z^Nj(Q-B4sB$e?rf;mD))PU2O`-mpE^XR~OeRH1Sz%5kPlIVf0J|1625Pq|*}W9PMr z^2r>)WYbK5_pfxgdCap<_rip;9zV2-q!0ba0!U90-rwT6;Gof}!buE+iUEcpT-I3b za$Eb|5Rr;Z!e|WJp z@++te^k9~uJ@Z3djX#mQ0m9RYm!4R2KlsW?3tmqrUPt@4|H0w-`&<()N`{`{in&=$ ze8A8&YqTTN7#y>B=49-ui4zyd0sCx|J#CZa==V*%adP7z3DYlNSDHi4SH^?dij8EvCF;cgi{kMxq< zfr<8m`1B_XJDc+na&n&$M>_M*a;1V9qc<#2V8^q)w$m4+5z;7-bl0joK$W!Bc~po< zs<&p?cFC;fu8W6M!r7}ZDODk>Z}%L~lkf-0XvEn-I=m+kYfTHFsiirh%{Um;r5+VG z!I%RJow4jT!3f-hjDc?zk--E^i4)S>TcgMQ*lO4>UQ-RqBe-A|XF zBoOL<7|cYcA(G@Sv`c3e@(OEBiOLO~)z!udB6eC%&};Veg}&JEAkoogiIv@qo0^Q8 zP94seP|9H=aya1j^luRA&gl=d(B(vBvr_!W*8%==bi~R}S#@rL#}ABy2hqpsEYI%V z2aPi;=QD#m(An6Rf8)0NV~(4m_L>K6f~ z@^|(oWRKpZY?D4cq)e9GQw2R1fC@vCAPtcWjLgmJCIq)9g+L^;hTOin_&e@ex9EbN zr@{SMQhVAXICd{cfK#+#Mevhb$l>|9_V3mK;qEt8Lpm8U$5_^_b_$=g*xD5H)xvn8 zuxlG+K9jUVNfij#BAJ3bw&RNI_%>V^@SHTgtMzkxa{GBSFIhb|G(heU>z_ZYqu>u3 zp$s`RD}VD|Uvk1yul-+}OLf-+*w%!nx>bON|{yBPM7{e3N;h54X;s4V=UY3D4!2&}*{>9lsblIk#@>2Pn0 zwLwi~5tm|RQ#E%sPM-X;Vi@VOmof$F=%=|z?v^uj^02n;IyzX+ocH)UMrjI zdfutqqKJ(l^K8i@?)`6tEP|l@xWDerB~_}vXA4W~P0_E7W@8uV0ge|DZI5;Ih#xyT z+9%^Zde>&Skz zbiRKCe>5jSUaT^%v=~&G^l7B+e`}gOKK~>8boqXh9VbohXdZLZITj5{a~BKJLi5I9 zep&|3hpTChEl(?H$^jg~J~Vki{G@2Pcz9b=qbcT!|yvZ}&uJdu%vlq&XL- zWBL8Y7;5(b>x}r&g=G)4(Rf#sI%#`r#v^_>W+OVwGM^h3XZoImbR^q zGc1RUv>at7q&A5)syDRnG(>@${@Qq`{v#um=EN=G$g{%Dc9A{QsF>Md>LIdKGHT7- z82fHu-lA-YK%R}-XnyRviYO3`S`1M2dK5nZdeaH~3PyU?73PZI?rD?0u6AKPU(a~s zM=8HN^EJ+T(QYx0$QLa^nSxUszjepP_Y^W^7oX#REA+X|s0v_(*Dd@~|4G#|pE`CE zdG|2_Pw_*+H+t}Tp1QnX*IZ2|r(l~FJvINp`v#Y^~67z82Zg*@pR84w?LQyIowvJ+??_tvb9_ zxDG!k^x&PXZ1AWB)6g)F7YzhLWuBzucO_4g8|EJV@Hip@J{uSN<+lXau%%!l3^|iH zil!5bAor?e{8SLK|7`e|+Utgy`><5|dU!Ycjn;&(g^&8|7*t}{ZB`aw^L=s3LkizY zrHMdD86e)b`&;N0UjQkh%>}jK^rz$i$eWTEuWcE2uLnZ+s0l3`#?9UgTz^iH@$x{@ z`NE_0%`V%{feW)Dn$`=Mw!SQhvq_FjVMhJ_7k@^zS;>IK_u;p0H!JgsZ?As+hCtXC zZ-s_}Ti9RO(@>O`Zt}8oeZKBZD^qeeEF_@1w2<6nU#4)=p*pA{>G^_s!1>2Yx2L(T9~nTu!GPeUfy_pWF!F2SM4&a zN@v!iQ9^UxR~DKTy5VWVu$V%I!FwVfxM8{CypI6ebm$Q9FMYV2)GeT>(XJP$SLOm` z26O_5GMB7pvL@6*DZv9DgOgFcto0ez7|AA4b?arg!!~P>e?{^ctpE#&*+Jyr^mKdZ zH}CHWz#|ID)EVx^5ookSgM$Y}g-FRX;R~5X!J6>}Q#V_?eI!(w60zw#ufV;oke(*l039hl0cw?+MM@JVY4D6Wm%%Gc_nyCi!OzY zJe;8!ALF_*K!@W62nrW{z!~Et)PoX=O>55K3rGZ*u54Bf=S#yiiRbof`55WyqoAV{ z1><(OU9Jb$VD+D&hIw&@+Q=PBLg)|b-!zTacQUq62KpbsH2^gTvcwhAvByq`pI;)J z?2EKdx&H!K!=cgFm2LJHQJCZB--vACv$NK1SqllU8!Y}c-Mp(H{I$zV^&oY|Y!uN> zQF`!KPV%@3LJQuF>7m0%BaRW%AJVbphpm_?fSev*eA{P9b@11ZY5+SqCN8=177OP0 z)}}&URZsa7e%hB-PCu1=l3qxyrkR@;0*;MC)+v0cUVQSP5DuX{!KlKq$(pnLg%pDR;L(BcER=(s>UM1Z#pXWaoOkmupHIJd)Yi~VyAEb$Cp zxHLn~Feua#^8uSjCh(y)b=RD9t!HweI7yZM$5*ez$1lk7aT&1OpdBV|;ct!)IGzBb z5Q8A6>@Wd2j@&`jvCM)y=-iKLT>X+xA|FL+Dg_tr9At{ zLW}42{S{Xz4RsIm69c9Di>aBp0q8=`LISOM+;h*C+|QePYp`2)(I?4h4_4Lr_7DSX zbs%)Y<~&XP>J6MKLwg=u)4s0AXtDR3HXNwP)9i8a7=#--2PuqnBCN~nghE(v$1RAo zrl?~16vmNZ9ts8JtVL)Ph}>dRu%nmL3DkxMjbR$N)U%$?yoa*b31rkh8z22Rd88V zF07gd-0pm{C_Gz7aa86FrP?&+x@tMFMozVB9X9qszYV+SaGH&uyh}k)TW!Rp^^nn@ zyQEwuH{*2jDbhB6u!8+9#Y8kECCw(F<$LPJJ;4DoWi%eV#r2TA$4D_xOwCWd1~15O z7U>FUbtwrYN~U96*c08t*CQFsxO{*E<{(siBsHT(p84rNA5jod6%hpVF8t6L+EEQi z-1mjte2w!-qM1offGEK|7J?if3s7i+BN`F-XlOFOG{Veq$4(|;rx@1jy0ML8HY}0* z!<_$B*k?lgFQCg9rodh~5WlvdU=isqI7%(Ej@#2_8oW>9qH|6`OH}F~bG)T1N6r)Y zL-?k3pCnq7HCy0)n-z?{WT)bCo2N!*mj(Vu&33FgFt}U&!5z%@UM5~%Y}rtB>We<1 zRI?-;ICP@IRfll+uWQ9>EM^eo+^ z(dZ#M@zam1c$@_k}zqL*;a;J~*JZYfFiDt+^h znVRXvubDGtMnvFefax0rY-pH*pgN{%RuYGg2vAH2QOa(a+HhE{ ze%7MA=k9*EGa10Na=M7glcj!fEN;7JktR2j3^P9Ocr!mpAp*#0Kr&2E!9BVM$V|^A zz*WXGJ%(zzra^|EIzI+Sw;vg;pPCx!uOjr%Vd=P{Z+bW?t*-T{)t_f`CRKfw(0|V1 z&;ut+>jghR`WJD*prWu*MsXYuY5n#9o!&+>(PvlIehj7&GKOrkSL^e2##UyS->?pT zr@yUScyq(~eiZi;uB>WOGiE5BcYkh-&p+M@6bh$##uK#CGDfiAEyYBz`*fbiP(v@* zpM_!zEQH>g93=_24`rTzqnBqKVmGokV*cjv6BQw&BI9?6rcM-i_gL<-%9_?iVtG3o z+Nik+m*eM(hd>(G2W#x>%)GvmapZwH4yQiXVe(lmAt2UsR6e8Wm2O*s*K)%Z#Hs(B z7!dQ>k31)R%ZGu7#QX=LT;;8JVrj}=L0lxd|6sE{&X;%miTIYrNQT3#WHWAn6Urcq zhsBv83;HCqwAjxJ-d99+?$v`YU(7bgSF)-5>;;i4IDoWyqEdTm9kqw*#p+0)2`x;9@Edfh*#d4WeD=s2+&K&>pc$_Q8Jy(@&_)Xi*Xt zJ5&|KTaM$=1S|D}YQG_x%kcSWspcBIPK4`t1521SrQdhUA)8>-wD+9}-aC$v@22R8 zcCHadk_mMFLlA}bF%#9`#crn4(KM~EjdDdImvnI3rnR=TSkCR_zC~x_I@2EtzAf`uoq5IeCu|vhL?USG1=$6i0rkM zw_rULG6N@4YAfK;>oyP7H~|!sdP4J2K&CJ;0_LWm>QpKYsxPH|+5AuVY+V&QVjQUr z60d$_AIK!+_1m(uLpmVaPE6P}GcqyRs~wa>G{B+VXqRST!#{qV|0tN)h(;r3kwZ>U zBEzF$TAzkf><$0lvLPM(yzZ&%fTtx2gW~PboxTqs6W*$tsy})QIy^fEhY}4>@kD#p zws%Or?kXyOmB=Vt>^4<4Nj$HjNm&l_I@kU-%|LQ3SYYKR*=WNP=~AO=@rWvktkF9UwoGB-(&r z=VNVYa^`{|x6a8}-w@qNjMUN+#1SMB>1oIkAqBZ3$O8YFbCk`RnRpJauQx>*19A~R zP4Am#n37Ft`J^IN*SR#41M93sysb?~q%mG1d}30>aAaoG!fE!Ox!9RL8V0!wXRuz3 z`Ld_X`B0@oBH9wI5O5(S!NY?^f2{_To^2KOVNm zg6ADGh4ED#xrxAI#dRJhcIu7Q->H82e}2$Yi;L?rpeLpA*z}Wu5iE2=!6MnLKnE;STd3tQ7Ezz#VfWBCpws0-n10;_Z7$^QTK|0#> zFiMgb_j;BMgsH8aT_3Bbe{QSWrsWZuph!wo?N1W;Gbye- z4wPoEbig~G#Un<1%BCo-NejdzAF+LoaVJAWD~zUk^M{+X2hgw=iW5lGN3be+cO}*v zC}VZ~5)zvC{S6t0tm41d0hij3)UYNrel25|lk0=aes`Jr{+Ay>=lr$LiZkeI)MF7WM(~Y|(ltZ8NBPYmylU9^0kYf?bPZNGn22?k@S?R3n2D zB8V-TC(DS5PZq;?ux#dgL(&e*s?L9+`TtRw|KFF3r*p=TE1PXB&|bol ze1L{!y*BAZykJ?4G&|2XS{S$!u=&s*;nM%6bu!PHA06ZBOh|ZFVor{6>rV9ZQ4fmF zDA=KlNKdl-`4zN+VTfYp^=Iurx_Hi+exn_VByG@6UYrrIXDTtFbceS=rfKf`E#)mt zX(rSx-|qiJO9|`H|Dhl0G~RXYJfll)b|8`pFkwlyp5o0V*zd;nJAPZz4{ZQlg6v53XF@G=>;+RNIwf;xLW&5Vi!&9K!Me*?2zsu9+c0|d8 z2Qf86C33{4^j-1jw2ngXHO>Q){koA3LHIMoD7S`0S(_`KW7>N z*Ue^p7M`tgJH$fdYNQFpWJO&og6kyF_ZvTZ1KwC=Bk(^eb%Ee$r*7X~2Bi82+UH!u zV*8Wk_)~)y8WB*ad2}#byDFGRfa_`g@F0nQo~GC;>2GO*hq#fib|0cbojfKp{*CfD zMslHlX>BdBW(hefYrDnYE@u?-HDh+!?YFJoWXfW7o8Ja*U;d}$*{($$g`UiNP}y!{ z&UuKJc*cs_NDht0Y~zxU@?iX!w)&j+^4KV5)Ne!#F6^96I%bHY zp#@K;%cY?v4nnZ5xyWb04>k_O;M-P^Z+hTPsc)cG&J~jS+56G2<0?xpW56hAp1+_h$*_`-@7LuvUZ8`WV?_DJL(~_8kRd=jnXL zF16%kY3KLWliiD0GOblLkfI~54<<7i7fqmeBW-UxN8aLY1uG`z(tuBkZ6pWL58DXp zZ6JNhw<{Im5dIs(0`~(-i^MoqZ0Qr1asIA}pR@LP(&y+s#!(g^g-wJ(Ah;lBbrt3L z85=|~akZuO7LSoKrq*F)Rzlh;&M{P{b_;&Nsz+&y%s)?0=DSo&k@B&H-71;=j5QlF zE&o6}4EuWAG*WT^c}8A13$*7Sl&zxCg&I0o3*ab2z8jeJEM4o4ffC4Ld|KEnv2^39 z2Ngh3^y}md8$PZ=dgBX0PnzUSBqO@P^NerdS;W^n=0(4&yWa+z< zL=da^#8`wPz&cqom63u@lult)u3(2Hw!<`e(t}D1iOl7qy>_+j1(N}qg z>;MC*m8%rbL3Q4srr)A`2>_ufvH?6*#jB;2WbizsM=e)3AN6gqOSqbG?Z-cEq$iroXa_OIfjy+~ z5bbr~I)Oju6jkmTm<%0#mil>26RGBSqj=bbS-8B`l2P0QzoWWR-`RGIx@MP=b}7IB zGc!r$4WEa>U;T!lI!LW(rNt`~Mzwkx(k<9XkscXOl~oFNux>CGn{urz;Zv7fP!Y%h zX}!W+wbSetq=Emk(Qw5aI9}xEjM@7KI0xAQ!=&uV|)AAIFohfo*eBG)tb zJ%MDy`A|0fDA{K`_r(z_*dqb&>=do{aryq%*lI=tkCz>s(8qFQsj9*thY=s4=|x zB7tguS;`r5yVsdMc|#fL@lBi0l#MpKv;C4{%swFR5%3V5=anur4|{OPhMYCF*~?7xQfn;*J$nD!ab7Om zp`;)UU>fUid8Z!VG36*+Jo!SsnZ~WxqvZ11JHuFL<1i{&`~h6X5|6D7(k*P&l_E{T zq~Q5?aKy!|E^}4Y!RVcO)ksn38<&y2L37jY3L?(?0hr8K_3arpK*!9CJ=IV($`qKD@h{MpBV@gZ5q48S-XdRb}n`Im8 zhi|T0SsL@S13ufLibiR{U#-s1)XNAjs26X)d2Dq;a6~K++p`nN?G3i9lS_?B+`Xd| zvEXN*o;pIf?}5q96>-$YZxg7#U`1>5yGFmZQ>!gma0XdoU>`-x?!zY$mCQrm*U@{6Khm)ldKN6-w6Z>xGTz=orKst>?bPn3*O|f2)BD8sRBZ5c z+Tci5u7ruo&nq@%V7bh@#;- z^;o)+=G}AgTB@Ds;0U2-^l+2y#;uxt2;_jaXtk{zCLYdJJ1D64xa z9JL{h+zta7(JM)_BC2RokDscXi^=1(aT}xqFN!(o7%& zYP`QU%L^?BnVvz#4OY$X(=_4PL8H=&)8N3etb{^@NMS*BxubSKA8Q?pDOrtI8>xhI zLlkT$f7pGq4M-803g&?Q{!rxJqyU5Sh7aA^Al1Oyf+Q{*1gt%6`m^*M7GPOcwO3!G z7x>M>8yz9c#_kHt+?4r#?6yz+O71K@mzv7OTr@#sK4>%5S#q}8M2?u(d8*C8#HfG3Qve$7k(dZm0k%U)`R+<#u zR?i~E``aH__?!Hn)(HH)*^68AxS<5R+QLVEg5|_WbQ);Z-6NWr zrc`^9A6*o9BCv#+kjF&bAo+6XO74lG$nyqSdlh^*oPGcG!~l{j4*Pv@@`;Yikg^tw|60|8=$>9x; zOB2*`Jx3pY?_vcKxamwTG{@t)J*xXbLw&Ea-v+X;MwI#_x{5Mq#wW;@@ysEJr(e2k4$oe7Wr3TMC< zVedHWF?Xo3nW_IL(XcODK^?fUqvKCRzKZ6y^LShvRBSH3*rsM3>b}YbSfO_w-jtcr zuVv;vOymapYrbWY&35^Z>Vjw{* zd|djd_J*F3Aq&LlKC>e%hni<#rszWJQfZWLpZzXlf)BJQb0MQ`2uOV`a{EB zrluIhlh%F*DyL4$v>C1$A@!2^^kA?b5_@;iLlT5OP69rH4I|mw)4@2 z6qgsC*3&8LA8_r*O+g|oy4KK$D}xo2-`~qrZe2qjRl+(xdWt?0X2KVK-1XI@w{@X& zBTwl_7oBmZ%B^7Cn7^`@+oSE(!e0b~cH%}-?VnnYRZFz^6AZGMhx3{VNN%O3xKPzs zSB5INX8Xy2QLdGSdxWCzNB2*KRxRc9myEHEO{QB?Lcv3x*vVkf$lBIHhnQJ$2@Xd~ zg7*~JB?cZhdrj#usDL-GG6V<;ou92+ID+_DHzHt-2@QB)gfHLnOYif3%QYQggp6@K z0&7A}amtXMd%ok9aoom{Z(xvpD_0pI9W#ev3x0dNT1_>y|IGA1S~z>*BRl|_8Y{t4e!jef9*Tsu9HNqX`Da@jXKJXMGxHU0a}7 z&*dkkD^{$2Wq?)r{%Q<2-6DkfP;vv+4zDtT_5oLhspqqvP$7~nzSo|XcAt`e;J|X{ z0bb1<6;ojgL>p5G{9CtGZ{z5&VVPb^hDo}fC5v2?;bDaTk(+iDmmcpg^)hpwA5m+_ zfQad}a$JQWsn4MCgYrg>GH~%XiJt5P#XlNHU^uL4Ei?cZyMxGdc6!BE@Lp;m5eoQu zX$ueA%gIpi2biM@#_)4vHuLIMC?vDHWvXI*?xPBhL+L?PA|MkjJd`U&kPJ4x_#Hue zz@2BxNzXIQrFP9g!%u}6H!Ehv97=U?X;!Ax4Hjxw03Vu^7Y>Th9iVT*$Pbj_PVQZSXV=XPSXU*P-5(tDP#Xn~&dk%F!W~n{g^rwRuV6n2{ zF=R7k1x^d>{Kgt}Xd}V{0nDuG0T24XF2}h0*_e4D4Db zKmAt^UZVd$V`JBP1K9=b%@NZ9^5*{n2)I=d7kO4^PaE9wF6r4mv3a?w=vGvSJRMf2 zENIO&kb&c63b763K*i+@h#jy#k{1;alHHORvCq2)kehT9ZDR2ji?q9W0}QyA5$9 z>x7X!muD=XXnkD7oA9(C7T(P&ee#!1_&7aRhi z3GAKuh4^&}F!j`l35|qdWu?{>RImf^g}}jb8@hKQsTYQQf{N?eG7%eB^~(vabsTgm zZTdHeLQw8_D*l?bgz%=OX!9^j)Ad0z69#3VP;up42L#OE0*tIe{$eEij=SHNYJk6g zXYAnil3$cF&<9KiswBV)w0iC&$wi)PZDv|vAC(@uw^uz#PtOHNKSwUXI1GMw$0pVQ z#BlJxlPs;Uy%5aOr(jRQG`7+5kR@BkCnX1PFvhF!r9LA=l2kk>OTxLr4(PP2puUyY zt+pwA*lPq&polWk9cKmAL#{@#d8t()xJZ|Ga9-A-Xw8kOz2p5ACgSkwRsn)aGcWtF zCZ2u?r~v<_kN9+(+g@&I&$b3v@hF~6T}(x$raBR$ART~TVZB6lu5#{`pbL2+^TV|p z$=|cCI=Zw?Lz5Uqt$!G-Nno1q@IMhKW>+FIw&6?QDHoU}$J;;fOUG6=a0}VdG^lxd z1fwrM=YzR(LD0QMjF@$yVPk!Ff>x8R+l+>gVH7p!~Yj%v+ZV6Bx z9%|3Hv>&F2@>6%OFZWgKxpIbV;gUCR=n;_A;v>;(MA3S86jBNG zELBZD7IOY1@}8KNHO7WpP^)Y}{2+eNqM38S$5Sqv)YYqq?AL$27)hGP98_;j)AAd) zLPwwCrD#z9>DB2Kori)h*gp&FzH*UZy?ja|wI-QCp`3~2pA}+%W3Jxksk|$rCa;q^ z|HgD5#IK(`=^1PJK|UgAdVcw&*U+)$M;MDxhUBI%GcuzZXJn;9%Lm0Z2cYd3Ui9sE z@w)a3mxVxKFCS1H{zhkp(5J5mE_p0%#5@}89J2JemMBe+&Wi+bL`&?Evx-G#U|>11 z>Q_#K7txukN7(=};}YlT!fsFORgi-i+uZsyWqjXhEXT^9}ppdRKTms)mUVLPEn0>w(&XBt2m21xR^mrhBCAOf;7fyZAtp#tE$PM zCiDfj#oMlI6WpIs(~Cc$e$N6!@K=(yyct&R6hY+t_Sgjo($;BoWqs*3q>+hz)QB=X z1Z?=Gof4)3TVVqRT8Qmd9bV|YJzx}oYV3@Lqv#+^tL5_d;gGf3)^CcJRXv~()W8SyB`h6K15{j(Y*yGA_hrqXT)AI8P>m4Ef~krQrIKQmA_ zHMv;qf4+UPIU{XvZ6 zh;t~qyx%)QSW<8$_3=uDVx@PoE`dxj8xNSG|BJ783=$=XwshOJZR<2n+qP}nw(UM` z+qP}nwr%(8i+Ok6#EZ$O$jHi!s2{Z}sXNsalx!+=_y5?vf8`jAWijzs%^m)z;; zs<)0AQBSnAxfS&5Xh4vaY4$_#kekMOepbu{J~AC@K5>9@NH87cTa6MubT^H61ZtW6 zJUo@rcd%zd#HWfN+9yU5Dy0Xb)o6PB@+_W%IwAh~LSh{pF^qbo_emFvj7jBu#6TeT zoRBe(y!QqC%PG+!omv?LU`>I{MP9x6`iv`njCF6PBtf}8Iy`ja!Myxhcc_7^r%0fN z7p#kpxVj+zgez!_k4ab?1z|V}{J0ehpW5jNQy%mHB!~Q<*PVN;r+dAQfWy{Dv4wyzuEv zamtvj7(V?U-ESmDBH1Va;(st=y*ZL zr$TWv*dlEeo#BPh(~lwz0yQ+su4ETX))( z?}F_35{K3;Q?v&F3J6RrRxBf-M|Oqy1bh(aX_p;@Uo~aJ4pK4eXmEn?`YK8vg{m5= z8Da}AHLDl2%ISh49llDsoq9tRy~@3@(rHP;tfNY$1mbT}*eET{zQNn}@#d ze8T$Ue{q(W*dP2gBzVq>U$K98?J@yv#AA zKe1uKl*?nT^-eQ|v}Tu6=cbN5rw~(Q${BDDoYoeN-v*$F!$^on*mL^D~W{@8QR-6eb1DLFUpl= zVY~sSC$6`3`dtp(sX4U+ht1|Ko)$$arfH8*NN7#$ZC-cjNSK!hRbJYT5rl*2iXgMy z6kn~BRgW9_PB*BcO}|aWflzsfUTQkj&xa4dcwg}rw+A4k0yKF(UBk0ZeKNUU)XDfr z{GdK2V_wNx+Y9Ur6fBhaO+}Zg)IYka?N;%M=8iD0q@Vt3?9TgRv#wDGyulXG+MElD zSDcZPsGcONX(aGV|KI7f4R~0L>rZ!N1CJg2G4^nLDudRE5b}VzqjlNvKOL zPY=bST7|_FI~!N5c;*bF3LT)=jCnwGZ+lLIusPw77(F0JWg{JZdET73@MfM<-?F+E zKrw9tR<=m*4WV>c3)X|9yoBwOD{GP8Kn4P0dy!sUY5zvD|Mwv%J{i7~u6#w{rcR|J ztUCEZ5N2c>+;DdK0y>{r8+#@#bM3p`&@CuE_TRd-WE^Axt)9ddXFN&QWSK39_F z*H+VxK{xtZGMp0lImj-XP=yuyK1pYX7Lei%33g}1jmpMHpq4JbV!X~mBnEx3`)Ewx z258;W595aC`m3>-8AF@Nsb#M?C&4Cs*n);yeg;{ zf1y!NWRS|B(N=W4Z*f+=?9ej8e^j}^Pxev+ZzKX%U9;q~4Ez(NFi;#3I122-2#+6l zD7c=BjB=B@lBIk&8<(n5v1}7Q#gOF#MNrJ`|2}9#AULz+d03*hD8-V#-S`&=?EY{m zpDJIzs6**^b|S7Hld!w6DVp6zb{{*jF}~c6WDzS^8x8~8CQZU1KgDM@MvJ7p$`aoj zt(rIklIjz?p8Ptb8)oh;`D47muN@)?z+o5;+XRjkM$~L~naS1qZNVI@rvL73pdoXFv&G!Heja64aAD<0&j&ms>B&t- z7M1Vv^m00~j36YOr)kPXsKx{CUZ$(-Y;U2w)n;^kQ4nvxcIP40X4=m_gY9SaeJx#R zR|$QYW?u8yyzgYO?x*NQ-YUgIm;;H&K%Z@heI}|LMIrg@I7m-_y7T5bC1(-fY^w1* z&gu;MM`Vb;#RGkjz;S(`VI+B z!_0o4GWtxlBiJuMm`MbpXz4|qCI@eyp7o3J_S*{%fe;TSs!@r^OhY;k|uFX)Xx+h0UYPi5kLIne18 zrCNS*sedFH?(a~}PWPSIk{-48&53Wp-B-)g6M=8@er)`Kx5gfPXr<}QsfX7GxKGt; zsJGq^%W-!V6CCT3g3ngUFK^`FutZn63!hx#WajMH>z(PV3*~z&X1O%3>Mvcz33eyc8zZ8{Og5KS= zNcqt%7O@j(-Lzms$zG0`#6iF{Q5Pb?N`EPRG_yo6gHd7yyH^2n0oVfu;`*IYs7F~T zsj~yC--$VlA|msYBTBbbC{Rn~uNCw#{YOHvJ$$y+iz$RyJ<~m|0zUzC=r);^L+W{U zGF%XO2qPRT^6i-w>rDh)ktEjF4Y$Fd(H*mKKjZu3pT-se?=UMcm`_;}`|LSqzl|9K z3~~Q|XhgL@mWz=iD1|MWPR9;w1UCPs^%w8(Fd}6V4VoZg&>u9ZMJnj|V*-YZh{j=+ zmI%Nc@kE#&e>@O}{B)D(vkV~}t3M%pP}ygTF|WWbY!v%=YVq_vDW!3C#+Qcc#G8;@I@~1NKxZ&f30>KW$-U z{}}MH+@6DwWXD`|u5uc-2=9b?WdFf6TtR)*bsCw!2ThO_FtRD$upfu^BgH1a6!Tn$ z1EE`AD~u&;4OMuS^oI{;29nspCr`GbbRjjNNp`1bm+#$k!R>7jl)3;xzQ^2WWG)~4 zOKn4RNx=viO4_`KF7>FaqV>$LkaVx6*KY-n>gQV~fS39)IvtNv;RMnQ1RdA0)Y#sf zqO!^%;-TIOy14WLFn1S!42u1pHL#`u#!>L2U=OI8VH^(#aRX{sW(^jSNzqjra2P;a zSCs9eEEX+6ayPcB^@^Tayu;VG2d=LU5 zrdIYIS5sx#soW5V_5t;U`~2 zd0-iqv*@iUc-|<)yvq|4^ig(e#lu13Qr26j~p&pV0vi>#K&FD(cg1 zF#$_R-!lQt)UN=H5p+IF8=adjR;m-&4j87A9Q}Z+6D>XXN9j#|rbYN>W^#6n?jLYn zK_QlxAL7ln0(D1zrBwhHzeP&R;HGc>nxgGGXT2-e_o@t_uR^UYk{`4$-vvnNV_;zj zz!g1E?dU(%4-cPBPW5Oe{7*_aYoO~Y>M%Wgt9%?D@0 z{P*q{_qJcftRY)n6DZ+iH-8jHgQSJ1F z)G%%$f4)DgwpHLMZkd&(n`5q*G#Ac78G2jo5Eif!V0TH=Gzt{icY>ktc<|Q)gN$bt z9d2Wp8Jjc#%H7V#CjoHZXxpv6UC?QeH@fCv^P1I!De?wP`$CH0-%CjTZHei)PJOZ1 z$iuuD!B&xrjiAe?Gm9~(qde4NfyQ=@St=BF2QaAc*e>D5HFql0K>`KZo^vvoAPYs* zGWn%zHv>fn8Er`JG3&IWu%YY{ee76Kq{d>N1s@u1m&C{nd_Aeuto+5l&Tc7`+&~7p zyuW|G%IMPe@(b5Nrxsx--ZbPtGfQv{lE*dS{^&*}!7_&k2;m@}1ozXc(jo=soAP@g zr|KFRJa&`}8P!Q{xh|6Mx|@a87l z)k=`nO)Zv`;U1S(34DO2U$zDr+-T>2{$NZ$N(QG1QnO>?RM0N^T{lDKB{godO)Cb`kBLV!S`e18J(IQpB6u>1=9&}}XXj%{C{&rPlIyfEN#>6tOF9OaC0s)s6+jBZ z0kwkbiF(1OL^5?nARu1CTI*$ex(UG6`v`9N&C`Yo!W8GMS6bLsA&U3ykXZpf+$JU1PBOe z**yT6l{_X-d2&QjB9!6HdzOrEk50||%!PLc^`RKc0Xvv>G<$0bVCZjq zr3>8w6RU0>ucy6-LhifZ*Zhd@@Rx->v$qpsyxO~?HinuLvRw<}MXNCO{${z;$tN`3 zL5>_)G2r_24xSw5ox&leaR;34GsIG^+!!uN^(#nWgFuJCP5!<4-6$eNJl*h1e&k8f zL>5XGK1P64$h`dX)0q^@HKR!$6n6ghh}6X?Cc-5;qq1QoM8s(b>$psr8o`LNxOfW1 zSZyoD<26o5AjJ`$Wxz(vGE>6@S6;fyz~=B?OY1P@_Kte4W|+7*Vd3c?YHQv1!)VMb zQtZY!s@&R$kgtCfo#(I`;@_;3)E}>srY5R(9S0jgS@yW(>s5BS9ZLtJUXCsc7|7+( z&nW#lvdpC35$;m+y~i?oTL@9_bF8DVm&+65nC{ath5CP6M@OP1R*r)vkSqkg)wK)L zm-|oHbFCAR(UHqaU?;+Q*wdq7BHZ+V&?13w`T%CCe20*bm}L>5;i4vk0b{O(o@Zl< z&`!br&=zJBeQQ#GTOU7TNeNPUU|HoVt}H-VtM$g-a9f~LJq5}qEJFy@w!fl7?u<{q z2czX#Ob{OZN0@VV`$x;rKGl;=dYPt4WxXT;UKFoyliQX(ecKyRSdpI5%@Bm0k1GlF zFRuR4x=h@0hgI2%QP&K5PGRu{_c}qxRos*DaH!WW-bm}Ye~E`c{3(kK>n>26etTup z@-7Asios~Deh!)^d`{UH(?i@oMH)sojNRO?-#?2zq4MG6k5)zvzsMvS$)5d_vYUE9F(YK@?LqaPMLdk}eSdszNs=-@H6s4_-juW$+^0(Ex0G zf3eA9q&c2rk7t|-vB=q+Bp2|5pN07B0qwbw4)<`*asqCLe2zg6hM?Kv>piBCZjLYFK?%$>>yuD z@!r@<)Vz`95|MEsEX*06iFX1T#JIsDCc5_-?BcdZ;JB4fj|gHcQg=WJFB#C8WFT>b zeuU-8Jq7e5C=R(T(^#>bnZt@p0D0|OfUfRqb(kEPg+@DlpMOGpFeQgd_PF0O5CM*pko05%T@Emz2CA|&K6xA4S z^-k9&BWcuZW{WuX5ifz6+9=7mLl{X_;@bkMz0KB#V%dGnqI(TVU7C3MUaE%V>z=lv|q)1xNzk$vF~BWY7ldkwn_<^ zs-qFF!keuxRryyVhJW`M0e38NP(U*pq2I0glVuiawtz!I2ra0IF|K|rK-_dy3j(Zj zzY2}D$wpVuQ=uEU(OUz=7_IXKcOSyTHlL=wPLC@{l0$HjL?#p?vHbARit;Q7R-sWH z@KAHNx<-(r@qm{*?wGf@Wo=VpNdNHu&>d#xe1ve%Ke9tZ8peQ)4*aKL{lBu8)IUlg z4w%Rr2Ine<2TdLy&y9dEI5MRFE4K*%K&6M{cI(m}p4Wzw^Mft^L}70<8X{>$-{E6V z(1cUQFDVjj{o^Gx2-V&&TMNCmLeae#$<3m-`D0esh|G7Eme-P^b^9XVoG6AO(yE_(< zVN3qe>mAaLx4{Y%6CpPLDJPmFUd*9S$(RqlU-A`7Sl`RiYqH-H6n8+5m#cK73ocXeX< z-!kdY{p>#9h7f+_P`M|RYlSM%33b7S9`}L_|9hI89x$?edo>U9-uLEQb#c-&r^Poq zVSk}OL;rW(Re)C^U2Gp=$cKf-4-f{H^+(wTs6!jlg>Z_l4gbg4U&&}tvRhF6mor6R z`Uk(1E*ZLX{SiRFLvF|9m{(-&=7F~;K6(`E@Ibc{@{#0_xhvRDGA@Pcifv7=eF)qtCjb9M9YX+e zxm1JDkAmg!zn_}_3LrBnwU)7lno_tOygBSOC(QqPrhZ4oHrKX;{h#Ld{XLzH`2Crs6PB9zE>%mwX`D(r?JD)mf-$WFevJk66o6%^ z@S(+#a~nv9s@h~Ru-o88r6c6JmE>)}2*=H5p6Q$!4cJz>D06AXyr^jr<_(Ie5b4Hz zb#N4BMhgOw_x|x-6SqyuNdDl%nLZ)DpBmj{0@A=ME6bm}VpT|}Vf&TGk{?+3Xdr`@ zDY2P|{_g$#Ii(>3gC-+fQIo{O>CeICEy^5xLKIBKcXnS?Hdl?vY&P{vE^%#G@H@rB ztN6!$$O|$aQcmdqJi0G+J<_Qq4cJkN&AAUy;g8+Ig(>}1P(KExNJk1Qn{zf8oN)fY z7H<+K5&Zsq>d@GNELQ}ik@}i60Jkb`VfE4TtM--xNpj06kD^0grgHVQ^EBa_IVHG^ zq5QrE!2j{R84yEGQgs9oo{P}U}zqyKCr+nV+ zp(7C=?<09Ix0+7^0utGy8O#HgL)D0XKgm}cZMtqVVeV&I zg2YLzrMFC8iIBN(vX4;uTIX|U>M%3zc<(Z`n4+Xnqx zr5(U|?=DYrJbS4#>uqV=$5mJ99Rx1fmMlE8VqXzgC-^P|!BAV)fcMa)&X4S^&+E))U>%X%tO`HZjrbTF4_ z0?-m-mtPu#L?|)umWF=~vTV%vMiz`52B8>%`vi-Z>6U9EQ1Pc$hS$SQ_;o83Rvy80 zD;8qSJC2w8bOVOs^;AT0e`8U6<%Mq}SEItB4<%hDjGUp|kLjmX#Q+EXD^zYXVQgMy zxrQ|5ZAgX`W2D2Y?aW*cl+4~MVgLpS5(|VOA$=0&(!0Fa3uBOKLeTD zA6O^5L_-BJ)cq)|24i#}*#-9Qou{AUg;rqSz`EmCRELl=;o#rJiIlji7(4k*;%+ty^L-ji#bp;$ZAweLyu0I; zt-Ma0qk-&v2^SNr*-fHBE*QxK!py-KwTXjAedp}Q z*sNy?U8m*V=1#3JA5O#PrrRorkL2InyVSliAqUdAysQpTht}C0&Zp$a`?6-tO7RJz zg%vSvnWv?ZP$VB?+@S(kEwzWN%2^pe8vh_JY0mhJMYNos10d%kcSOoIBof2Zrx6Ov z`4c>({@|L6T}rl`9VSXmYw(o&M-hjAy{51@FrlM=m};CLn7mE;E7Wh&T@-zq=jMa^ z!L!sEB@8yE%vMMuBTeYuTqE_bPp=ngd2%RP-I{@nzV>t&rppuh9`WJ92A4aFKlu|8 zD-6KbHk}m@8UWtOHpD%i^cSBR`Wx!b>MWaDUj8fJrEBk)h^z*Fosc_p;`Bc^2cwza zj}{vPSW!=!HZl?Hr3~Xa?{=ytbI8cVto7yU+QXCL)PkzsnJKl*?CN0^TogHkoO0#n8Ope21vG;#uq+Ma9kBr$&k4F|w<5E5t5)5kpIcrnb z$OC@2rE-8NDQF$~o?bYv7_#!MV-o_Ltq_A{bqr%5ei&_H)tN53u z@rlLa8zWKw^s=CcCV1$Dc7+FL6ZvyDYx>x$QD5f4T?Vmd#&;9|pr1$24WOS%$cddU z!p^rars6E8xYV7MJlpStIs;K-k+SmF2@ggRhR4TLIzrr-)`56O(gz?7| z$-&8xp8pNXeJn&v$uK$__09`#!|@>3*0YaI0S=fNDXYxDC|LD2scJ~6#bCiQv|btV zjFri~^u_#d?)p41ei4})2BJ4CO~E7QqPjQ7Q}=0b=A+kkBv{Ie-#2?c(KGll*PmHm zv;8?Kra~IXq1CKhoX!s}hut^~cn0ans-uML_x+rj^H2!BobOhnFlISRR;N`YXz_bD z_0@7TD)@=P1x)-|!BBr;+B&?N+1byG&`B=4 zkZ`C#8aL>(`KbB8xMT-bGX{0zLs%CuKa&AAz&zUJxii-tg9ZY4rH29fBY4h*o3pYP zqj-hB$9=+)YL`9cxg)@)mzhxB<8Z_C^M35m+5B(COxJ>QSeo7JB{quW?$uyJG)6A6_f@R|K@9Ycq z=jVyqZSk_O3|pPDOF=N#sjRu@;8$aT7ZpI^?gM?q64Lh7(^bYT+J*2ZQDui#lE{Q{ zQz`{JNW3MF6`*b>HLc=bRlj%Z!p5j0+mFm>nw;nBR!)X(I+CBk=NkokxD31SykF2$ z@b~x}HZ;jSgSZo?T%)AgV3!htqWmJBhArbcgP8(C@G9X=xqODByHB1vdK;%9&+fvH zo2S~KOaD3-$(rUEk!o&bW}n;-8DM~NswqFw*68VYy!}wQRC~nQ1#rEW)Q`?u$az4J zVsP*%<)UQdwN?jt=E{amZNUp#aqJl%BA8`Z!ovyE7&7tUzDm`Gd1ckR&> z6w_lyP*`O4US$~dd{^+-Q0S!QHX~NqU!Z?}0Sj`n$96~x225wb7@WzduE)V@4l>*jHp1}W zb6hrIpAQ%Sc@2jrRz1KqO4l@-cN0*Y7J^J!g-)JT6hjV0@_-;Ai1L7uy_p2RJPpq- zt*8QLW`>1_XeufyMgKvW@aHP5`>Fv6V3fn(tK3vBrgO>BtE*XJPc4?Z5viOQqST1{Ph_kLoD0EL)MI z>ya`bK1RZ=hSx{eUQ+I9xMr7t%TO5?H!vgxo9(rX{?+QuVsLw+l1ryb2N}T_e!Jdn ziH3MeN*KV=c?!8&<{kS}wa9uIz-2QijjYgaDLgOvJDJS7=J0KL*yKQDI;u&@G@V6m zyMJ;@n+k3DtLW2MqX)D?s_Rcv32aZkCe`&Z*mU55c|M9hda$@i#<^zzKXq6{g&mi}@*Rb-H3Nlt@XeDcEF0-aK+} z$H>MKY&H)$he;D4X5B?x9W$&{wL1081tWP?RW=H>yOj5~Qn*DMXY`z9MEK_CdTqyF zRFGHfrl%&D#1i8IaTth2!7?&ol8xiz4GUf32>WNW_QzJT!9!L#?h^5D4M1X2UJN%_|s z)b0^QU-26DFEpDWS}I`&_k!o6&wKC^MS z=+6HF6aoPv9ke?p_CBnkE4*Uv7Ou7|eCS)WQ3tEPu5EjHC{_6OyhFhF-c}CgGcDHl zo%M2wGs%Q*M(}e(816vt9z*d>aTY9jHl3IU6xZ~`fh`biKy-iIq0&zH%LO%7(L-e< z8HK>KkKck+Qf+@xFKeZBkERlvbB@~J>MIPMeANU_A$5T#fNFNMOJejbm$#{2LP%T# z8-To3^0EGX-ID}uA4^)GD`P+Z5X5*yLS$Jr!ri3alxv4#6H!ZzeL+Mj6O^}i); z^gP7i5caUSu`pP`y^k3E@EWZDLwZ#Yo1S&w$7E@hZ-Pp2r6DF%1OS=|hcs|>(u~B|5Og0PyWsP9H_!MF68`qlGq!H$%h?@(#XMv5z6|*sgp|4pp7^2 zYuS7YmQS)%dmpACSH?v)XQ_k!*^ls8D?jz zNQr(Oku1K!jhGKI;sdZ) zh&DWsqr*jTaJ~fZQiM#uj<=16iB$}18w)^-AtE?r6_$3MHFbtL-lTad54Zyqe=|VEU{wE}EJ^1jzA9w*ygVs49;w<3a9_`CJ z(h4b}gpOGdN7q)!egG8Jpbru`jVDHww1%zG#2+!hyj>s-PmffGe0zeMwxgnS$HAPo z7$JJz_#1+|o7>oY@^boC0BhLP%olNvUczffSQrxfw_iTC7D)hk`o$7gfIJNSoMrY5IkZ@}y2W=Zfz*=V4pWu}UJtlc)J=i#u+ zx5AlMW!|?!%r>VaulL(i`kv?quLioRTN;`NFS1*vRyI_5C!v(V`{diZ$SZ>a;9dzE zG)zq%NjXRVoSV*!F_;*dj`sz1KcSg3kg`O@LbS#~XBf&3wp>v+@{+;>4TlHT{c)-T zikN`i3E=uv_}^Lp`aYt|zi2DVHObKH}gh6MvX);h|MXk{{B!c-_nVOQP-=d-a?S%`-~a zFduH@&wb`e{&L)V9h^ow87+q(;1&hi+2-$K-Tw_BSNFob>f${wy8i0Mc@{1muTbI+ z^oN7s9R>4V{F@mY1KuH`+Q!r|R_q?N0LE-8bFFW))Ca9#A-L3Yb7Y$qJ_O&F)5{jr z5~SHWoseBOs-(*>N?9mvcL%Y6GU+M>NPT-nCZRlH>2bj12Ul1}vS&pqRuqbPZfhq7 zPM`CK)riIt+0C^q&2V_F(E<#` z;n%mM!<3_-^6?x&b^ECXnmc%;~AF4!{+A_e8< zKj2NHRuys#Gl&xEZ?t$RB|W}p9`xb-GutayfJ0I|B$8?7jSU=HLZFMx;g)kNM(>Jb zEdC|aBca2XcuVnV6`pG~+;KP^{9s_@iGo3q$REue1(|XM4AtTX%_2RqfCv_XAQIaC z2^#0R_f8bhn{(j1;LdRXoKGunO5uh%js41x)WIVwGYNO6j}ygFJ2Uwip`{Ftmwx5PM0rS?--K?l}vV!ASh;VJ02W zZ<+jtWjw&;f1QbRiRF$PB2V&!LUKaIaxg(e*T+|>W_!Hbm*1ekeGt~KS_6i5X}zmv zX&P38V&N7d|BRMLL`@MeJgjZQa1QQcqpeLV zN-z`dcU=Fy{P1E`U`-m*xK<&Mztw}ftByd$s!XQY#;+dn$^S7P9hF8=ABuZ~!9H{i z0?nTNd(uRc#aDXTY4tfSO5914sp%lm%}9DGU0&#VaE*g#5%nwz;LIdPw{|&MiKz5$ z8lrN*A_-m-7dbfB{I4;Io$n|cV3iR}^LLr7Q>Rn_ z^U#e}I#3KmN7~J69H6gK_aEt06F^e_D$Fhgz!7^ba$uC1Y|5%$)EWs`a9*QW45152 zB$T_wx3iqypn^?x;4IQy9ZS-3lQG(*$r+z$`>P3cgDAzEwPr@d)gK2uWgrn1Hs+&fDo6a}Q zRkS7Q_XgG~HA04B4)2feVAm-gl&OiLRVwV4qH2=AkW*9MTT5h}3AEok;9wdWBp0VT zqU{K|`*U@at=wX~`(l0;MesI5*FJq~Wf*$=owY~9^Lu|lEtO+_c{DT&1R4OA&*?0t zgl_FW(MbjX+Fg_cipT>&{OMYCGg%w;3X5^x%jcj!Gbbk84U&d|UB*jM!!M;}!^;Y5 zlk3F_Fw5l{zcda)N_l1`4Wv&BH8hpz)sHp!4snIE{Z7Q>AsanF`2qqC1$;B&{RJW& zNt-HCX%g#Ng5eR&(<*3y^Gk+V+C_r*rhDX4t9X6j;ZQ217O6MFScP+y%z;b9_4!}W zNED*5N8K>OpFyy<;Wp#*n$`D!1oYO3bj{#V+dmIZ)L^?0lFKf)uea8PHQT0|34G9m zwTBPJLir5zl9P#=P8(r7jl;p~1F0;=OaDmD3)9#@94Mu|Glr3l0=VlAn}BqAB~{Sq z;mNk>r|{u)vtBANlCm!}yvhkEj>d>?1q{Kgi$ia$DOZnrl2~8e4aSD0TaI9%FfQK~ zn+kAHoRtZ@WG!n6)rR8oBp?6EVEz;32VKkA`o(zCRbC>5l=xJ9i9;YXf+bT4<+6uV zJ4#IK(i;g)8fIzstHJ`851Iuf22qA1g z>)lYKs=x{A1$wE$Y>d=`Zo0+kARq#l{}*vN;2U0EV1djZc*H={dEKg}Y!vSWv*vH4C zrXnK1Orib!%9EY$q>|ss z$7Z0<=Gr|47|UyFkF&p@@VYxYBMpCrQ(=Al+XP2tfz|@Y*gPBq_+2g`(@F&42U7qF zK=F;JrrmguAiArnpp=($8GOredMssilWjph2Q>Yuu8ZBsK(tYPVYe8)SBi#%FIdXs zKZvtbNiCmnFsH>6T!k4>B&^c5b{0y>gse?*pCB-KhHm-N_nF6(o%@D}#X_?F04(b- zL{65=SkYC2iN%)VP0>;g4kEAMRnQA|ANZ+G{X}w?b#r73#tslo?BQ}$S^l=m0W}rb zLkS!&#cwb-MF?OOR@MSk_2wCJvzI|5FbG|zZW|*W?e*1*+cR$~Cu?4qof*QzD9{R8 z-(!e?`Tr6p9V0A(kO$bddu{Jjd5xw$w31adswyGcLs5SBWcDVvexG#=D>-|KGWY~k z50D#t=mEheXlzT}dqssZ=b(dk#CNU3JWq>dMNcFnR54Xecg+`87S63Gy`@Y3c#GnG zGta%apKNfY7jyC=&=}ITAjB67U1Vyyq%G%VjDj3(VP#DlO_$t(&G*^dq`$sX0+aLD zQ!4J4Hd|Uk3Ksqw7|aC}Rt3KiWofC1$$eKvXV>G69>5k^EYTKGLd0C3;2Wmbg}qdG z1$K;UxjjN?;*{8IqgC`GhI4}^rTBglt2LzY;syf6ZYti-ETA&QzJD}b<-5LDoPtu! zE%5Pj(-^DZC@Z7$F0LiJLen1B40NtUj35BO9JWQU{RTKL2#_`|LlZ|@RL|j$CUo#y zJ*02+`cJ_V+BnDXI`uGk*%R-*z4;GZq}){JePCIs%V74komg2#AGOaH3*Un1j4GSS zXOKgp5wOfb6%mkLOHMkoARMOuC2wjkH3M+!&UrT2IXyGs7T+dxFC2Xxe~j54x!!p1 zu>jsZ5AIy(=<3{Q?hE@S^eNeH9JAB{p@0il{&S`8mU3f8|NQ$LLuO~}Jfbz}iT^;v zON9SY1J9ck@%$c0)hZxO6g%v zCYuoMem*I%d{crwNTVU+q~&XCI9W9uiBsO|kye-btbu%DViCqVk4K&ms(*s22)G!; z-h9FA62gl;m1CATCLYOJj`l|&SlWvXqRTL3{L*uWUnRE_2k3ROS`5c5MWE}f(ynZB zC=uSdDCNCeaZ*CMxgKg~P#v6MZWEUS9HZ~M!4ak4R*B{_^WbL@hOAN8x`DrJ`Gar; z7a8Jpn5Bd;W}?guEDq{CO19jA-(P*oChiS#iXv<~*H3;s$sAW-ev&)8@`hZK{sqR) zO*-m`Q;2E*XFXJ!k(It#@HP&(%nw;HvJ-KnJC-cXF@wz~T@E!I@7OZPWkt;0TfQ=D z7r0ZCe0LWUG-mBG_tGUVTe3tH|y{`{e0cZHywSt@^i#uCp zRvdpl_JuAe>pg{+Vh6Br*?W%iNJ^Kl*yMI6pMzt4B5;Pbdq2KoI*#l#c=KPkt5#qU z&6(nq(gUasdy^;eO$s`C^||05|f*V1MD9~q9alG(w1>t@rBJdi@ce8FSMhql=pyTOm3b%#je%ncV7BIfgp3P+{F2p5nzAU3gL?)2^hB3o9+s~+y82&{;ktz z`YLgMINntO=M+C9+H9YG^4OZ2+By5@3rr%tMdk`dYN;uTgvFwCBn9tEx=@O@*k$wJ zR6Gwmb_9?0Qw_>>2qZVk7}Fhq4h3tNWf<tg@5aOU9%Z}t3T&tCRSFhe8==)K^-FR0?? zB&$42I4bZv`p-}Uxq4(d^6Eq`VwRhMHa4FT#B%}9TOpC+@m6 zfLTOEVnB{)RxH{B=w2mzBMjM1#uZbnB3;G~>O*o|(q^Wv5lvecX12%|_l}M*Ad}Z_ zV&lNn2Bg4WR_9>cGm1YNyt)5mZf5Oufz84C=Av&P{+(RpgXN~+a$?VybNCgscB7H8#>ehT<6Jbt!IXMIjG0ludpZn1F$Y{?s zC0nV$moh9p=$J@1Vwc}Ceu#|eU04t&Nw1+_rp4;@co18ni#3nkBXBj!amt)&pmSQ* zSfa`My{iTZfPO@(2i8qhKfWIwEYbW361(Hrc<6#pVSvDU1l4I_u3JAk7iA0ccmTYI z2wsy0r}gSSb`T{|KZK)E%ec^KV|4Lst)w(7aw}F%Wy2uj$laR%o3lQ8sB-0 ztVocjzK2tQ@jV#q{cM@X63TH+CyCn%9nU${rTvb}9^s=h@FmA=`AAQ&1rD*C=1Mhe)HTVtY*nE0HLisR%3ei4& zc`H60mC2gleX6oDvK!-Yj#gFVUOs$9ya6FVeqxbbqY_I?5)YwY7M zu9ny!ynpCJBRyToMj~H4i1J8YLM71kqW_tj&o!6eQP>tHZ36*gx)G$|zi}eh=nHus z^m=t)XgaVB6a;SUQKol(+r&ayMedioZQ3&mu!(EcVqnj*(7?ljt=-g21xPB*%!5Pt z`bYQaikwRUvC#Pclyz27aXo7m$KATo#yv>z;32p*4hfA13l?Y~SkT5Df;A8zKyY^m zZh-^{E}?OEcZcDB@2opBYwD@0&O^yr>pYxq@87nzbm)lL|I2B{zi8gML&<+Ld#j6{ zk4>i1y^MJ>okWmdtt|o!jdy4C z%96^Wkj*M+8Jl~j`wyN0N2u=Hi}M#oTu1K3XS<~hvYtZ2zpqosaksey7&A&5Ep(#= zKo^-&6WH2RT16S&InLAP>E6S3v1ulHo{hB!b=8Pb&` z)g3WuEk{n@L)DBNn#0Y|y&g#PrK-{-(yY2}d_*LAiUC+(sfD@kJhmcpm1<>Usx=7c z>sqxQtznMSTgTl}IQwxg+ri@po^*;lGPoAYhBE=iQr~U0Z;W`xUY7J)EyJXZMGZ~IkcdJZ1ZoZFxvZ`N?53Df z`Iq-L$rk?3N%N?nl{Vf8mTBhLvcI)C-!^9e)B$X=-cwqHJHB-S>3=k{HtjL>Da!i1eiE> zw%A+T)FBd4M+*fcMeW6bj&P6Ah#d`?@0Vqq_N`v#{E3^mJuWULmB2;w&+tm6Mb-yP z`|olcg?V9%GA!T7$^LA8ar16&%_EwNPjnx+QSnC(?ggCGzu!)<5|qx`Px1XdO5HYI z;LGrHPcVir7kT%VitDG)62D=38#!uZPiYQR*;hVJR;Pz~H~P$W1%7b1He{olE{Kem z;gLEYiu+8vr|9mqRY2#~!xUcUZ?XMMGt!YIMr|D7yTb>H^v?V0QcR^f$VrP*h>M9%iE{##A@ zBn5P-Z%lN7yT=Zoqn_ihE`KRqNWunlDRA#Ogw%AHOzq?< zZ`txlO7Q3Rlm#sX(CZdNrC;^U7ivG}3k2#hZ#hYY`*SC#rZNj9Qte)^f}Zh&6Z&g- zNHuJAF(MTcCW1z#w??*eJGgrjhMoMUbl8tsRhSsG*#tVw!+`Z($Ca)lH=V0%f zmG*`O5(;Tl1~(Z$ZjZY6MB+-xzHyJs52y5~UrzyZw8|l6jXA1sxOP^A{R%E%5OJ!h zUnaPM^2932m^f?Po1(5|WRQYw`3Z{cFQ|^OcMtlaY>4mL#{HDfeRT*smL+zahOoY%NO2caEPUO*m_9qs zZ*Jp*e|&aH4z~wd*nzl4IcvSo^_gLVsFIX9ML}po#$r}NcW0zGqI$GMT+>c72$Zn$mmUb%uiLuJFU#|or(H<!7 zx8j=2dw+F6D6#X4 zGeWZX_NlkOE7zptJka?n%b)3${cX z`}9?rgn!?fL~FFNiW+QLW(j0jofI`fIKQO$wH zp8ten4=IyjBWlE!G?TKt?0=!T0DMS z{XU;DLFAV~TpjROh4vEEQLoxp_#i6soM>%VuCvpFkZ00yi7@;vFJu|SAO#ndB++;n z_U909h77Fgjm$`+ped+$PS>>v?JKrQi2vAbM;8N=s4>^*EL52_X|i(K{|&5nj7bij z?3(>3jXQP3KqMzRXcAFrSHwEKomYIG;2z`6^?H7c9dDPL@Ktf$G-=Y(h;=0v z@^3lpe4I!3;ljI50J=mzYG%E^yo{7yliHG}RnqXh=mS2l`4(PZ>|ZliRxhX|w=xYW zDk;S;WXba(b`Hu8mCb1ssxmX?m|T&7&P~~9->Xwme(mF>h8UxGpYV>t|`RG7E(Uh=@4AHBJ_s$1E(rnjVf77x;;v-fXum<~6o!0G+(7=BW>SB>TrqsfhYtu1eaWuN{E7*ApY#nK)Gx-hVf~ zsYrbm+u-l_`)Tj!RTaT4kCmv7YxX(;mnt{$9N0Z}vO#+jT78>uc8Dnd@;Y>^E%;TC zO}}Rzwz1`0KD!I-uS;P-&1cJ&d}%K9bSkJk#%I6>*=72VKLfoc0I4w_@RqX!Ol-O2 zxP%P1NZiXxQ=R<0|G++wx80BQlDRIcZSc6* zS)O{vo;rI#=jSh+xm`=eWox?GuWo4W$P6@t@~3UET@vopeh9Khz6WA zrxZ<=BEf~Hu0>A6Bo#$TAgms$-_{;^q6-jou+?QkiHU!y4fds!1y~Nys!W#VjWuPR z%+Ch-72dJuas-D4tW$_=-ly|I6O;$NT9YSJDBEh=7!KcHw#omI>vF=S9jwaf!7QE^ zwls34;5@##vEvdj9ZIENDRCDhWEm9}m<_O9%VN zs++MY#FG$na{5qB$UppidI?=J9CJVQE1C5P7PuhuE2X-CY@D4FK2j2O{8W+jzqv;j zeXpZ&ptV$AaSL}WZf!5YeWax9_^Af-uRO+nM3(G?JO_HfkH3EDOF5OekJ9Lyc&P7w zoc(hdoK;7^2W1%;D{o#esPn_eM*0-t$}`ypmST8|D*KWW3ZsR`U!LF@EcmQTAADF` z&?V?hexvTKN<(h9hS=X`6eMPu>ARt0l`ILZwr;aSSvaseJs_X|YP)+VG_f+yO9o~A zO}d>1YE5m`N{_(o=JFf{&8TP0AjOI8&5Udm{XEQQ>HSvpcgTX>Q)R$Jovg-FnH>Ys z=Nn}4TP4;!2kkj}rkzst-Mka`Tri6-*N*KsS@j*+*tWG?)`Cu%_j9-?P;mGU`NvSDwVkJ+c$Ak7bAY_TIB5g?kMj$>UnrTG#MpJw--UQ&OcPon;j z06eluXqFG)ri4QJ2XUsK+>>@$U$^hK(cEaSk$DS#(+<cX=zGyW2Jz zvo!ylih9UqV>&hbqea0c@?|>Rp=h|9PKERkslSr<#tTBwhpF&^yDLM=VrAkuL7+au zpXB?hG~n1Z5|G$ zZCd}QwS$@PsC#``g|HN4iOTZ56#C^?!i~t#VRSy{b8UusQL^=GMn5j|)N}{R9xbgB zHZ5{nxdFFCmaZ2s)vuC4+@v9|%DFQ(m`FZ?p5Kl3Y07`Xww?!J?Cdbfg%25_vL;$L z>#yTtRvcS;+VczC@Wt~9#E{m$5r|%IWvF{5ZY9LF;GI;BkRv`1LbZl6WM#ZNG23j! zn{YCY#h+m3D(K842jo{yS4A%B9a=}CntsnznDO0zqDKCG>-ql%#r$WA@6`gZx=90o zr_=u8=3Q=f6bx)&`T4+pe4ly@a<$b~1kB`bKk%+UoW8i$jK}fEc9Y;m_$X+8_E=71 z@E(Wcq#Oz}4@5(GryA!q%A6ZvcfVG!uc(5~?xAQ$CqMQ>eyvYnn53EhnNS6J(RNj! zoOa3&rCZdGC%$Ix5D3>3S$3f#5uxh0=f68#? zP3C6<_`VOWa<+DQxaZ_WM^lo{=(CQ_07OAf1W{irYx8)T5LlgJ1AB|8O)y-3o;{z_ z`UB;-+)qrF+vD#GEahjP zM+3g)2W1gpR7_U(B*gVezckG=t<>r<$Csekz%?~7BHkSKO5A(AFA|~RL`5;v+40ND zc_!5sU|n=CsB(O!*rc0fvCeR3CndlPZU9M~#RKqL;)q>MGB}Ti8B>e{99x=)QbzR& zPTzzTgyV?RB>a}#L7i5-LUo&0^Lcq^6}eXsCz;|o7IHI|g@tlMbgmsZS_L?EsHJh4 zEVGh=gZUE2zG=(XuFSoCJK2S;Vz!DrJ6qTVLZH)&vH=E`G$2g__Je0elu+yw-WKQ+ zQy@nm-9EPuDI0d_HAHUFb0v0|9J^piP6X2hp3NC{=qyR-Pt86pKbb`pHcG1NxMu`e zbpD}$k!4lwO_eAcQdXXPobsileO)9$&fq%&NU}*lSQ`pHo>Y(cLx9fQE5<(uYZ+`i z3Oy?*Vt&Tz?t^MBnbYpcGTzIZ`mdC!_Y5|OE>_J2g}I-z^!9{Is&XnFLX-pPS@K!t z93kRHMc{mpCC|hs$oM4=#giKM)F!O}XucNG7$Niyq6rI-YPpqz*qw zIiP2gKf!d_w?(27NdBK$TbWmakMgDVfBSR)mt$9TEjd-;M1kPSeW-Gj=@|LuSrzyC zeN`h5`icV2;dGP*&mNFkqb$cjpyNrMwS}HeIzIRK<_kW?{QvO@D+_A5UtdjrvX!zK zm2&9+Ukf}h2^A+lM-rZ@+xiL6K|xVg(QQU)5W9D-cp2{n1Wcs72FwS&S^Xr`f}wdB zn|UM-G3k)@d+RjNawgkrqR)x3CVhnOt%kaYlR56m)ri*rAQ$qgt$Vt=rIITgN#L3W zT)cv+>QxV3?E^+_(6N?wZOcAd4PoGDOnqI4yhu40S`GZC+JijU^U&dC!}w2MNS{Pp zVwdia8PZ3Y_N;+HqD72O`{|sR0Mo9d@H=y~w@7{q@N*y`GacRDU&$w+Bmem4NXeu@ z*CaS4fV&+q3XycgRWdk$6b1TjJFg9?0u><6o+A6NN*Kx_d0V!^lvPfZ;=k%lD0$eF zqk@Csi4tE4Z$-DKo#p=7L(hRsON~E#M_T!K(d%&9X}ERsuGB(xiXf! z^&n_ZW`cPh_%Z1&ETKp_Z!b#j4Xwzscrp>{cz>xki;(2>!SGI;tW2LA*c7%&sT3HQ z-1kudc3PulO8p=`pgdE-oO{K`6~yN#t3k6fenjTAmnM*Y8rcIkCNL z=78+F(zJ~4^2euT*_fex&Hs~p`d|$9Rn(p!7mZhB@A16Bk8AHl;49KS^9e@mU+|$z zZYsVG?#}A@sGj{Enq^uIZlyB`js2i^p8Dq+JttZ+D@IGYKPd$0TxoEx&q>&Vcf34{ z(se0K%4F&>fC&!xc%zP}`tfPhGyHMJ34#h71)-&Tez%NEd|>%+6B2qG>#`Lu*eI_4 zk|N-#96LnZIQ!6#t7@WF+9n*bf{QZwr8N(Hg?r+|8gSoHtC7q?=!9L-`WHr$CaI#8 zg1wKHFK!BwGT7uy)6MI%7xoi@XqrXRpV;K>k#4t!K$!-_P3CH|Ohu-o@Mc#Ka1(`X z3}I}h7=!loY28f3XS{}sTFl6?9uV1*Rwz%<hSMot^W3TEcgo&wK1d8tPFfq)MGsPm7+o`( z{Qv2oCOS_OFt&L`OPkS7;5P$_w?5xb;=Qn}Lh2BknhH(J{^Z6-DC5Y`>&o(|cP;96 zo^_V~s3%7Nj9_Xojh3|FpjhW#Ds~2u0yj!V9bjegVV!@l902X3C*bPl9kTx5EAh3j zG>r&W{+~2#<7HdmcPLzXve?^m^*YO8gd-rIuC9w6fxK>ZU2~>UYRM!mlg`$?TTuqh zjQ6b*S>{+Qn<_|d|0gOS+4s8=Rn;)Q3?d~QJe4-@y_388t(w;kquqm8P#5;v|-ln0vX}k@6LW` z);+PULMMwU&}*o$Z4R!7XcaVn<%oTuZq0hf7dHMTB`&XpRy8YF-oM-?t9Ws1PSJn} ztHIFL^-Bt~0i<}M6tm@Oxct57qrF*&McnY@esw<@IuN7!tR|{8j4yferIb$lkk2yf zfC9^sVkff9g80<2MyH5OhO`^2Dyy+q2|)V}cdC0ue`nwmFY2zSwSE2(oAH2EaTmOi zW#@%!M70ZKh3_hn;)f(!OZ6PJedK6{2IIMQ$Ti;qsgjGqJ@#NUXG!dn)Yy!{tBn_n zux{SmPwdd|-ckjQ3$$PEIZe|fB(&fe50T1h&F-VivsXIBwik1^h~;E~)CpA0SPNa{ zn=#kf+JMVLU&0Rh21Kyg+Mc2+njg}h*QrNQ3n?0=Qe@TA@Lj_yCUgDD*RcZ% zeE36}A{AJT*c%60{DWQ@ao|viU%RprEtg)XbJXYfpvxGOY+W=gJyj^x`~6+Q#eGJD fU6l$;|7A)+G2Vqk*3*ow1yuL> Dir : $DIR_RESOURCES" + +if [ -d $DIR_TMP ]; then + `rm -rf $DIR_TMP` + echo " tmp directory deleted" +fi + +echo "2/5 > Exporting last svn revision..." +svn export http://svn2.assembla.com/svn/SABnzbd/branches/sabnzbd-0.5.x/ $DIR_TMP>/dev/null +SVN_REV=`svn info http://svn2.assembla.com/svn/SABnzbd/branches/sabnzbd-0.5.x/ | awk '$1 == "Revision:" {print $2}'` +echo " done." + +echo "3/5 > Cleaning up for OSX binary..." +cd $DIR_TMP +unzip cherrypy*.zip>/dev/null +rm -rf *.txt *.ico *.nsi *.zip *.tmpl PKG-INFO setup.py package.py Sample-*>/dev/null +rm -rd win>/dev/null +mv osx osx_tmp>/dev/null +mv osx_tmp/osx osx>/dev/null +mv osx_tmp/resources/* ./>/dev/null +rm -rf osx_tmp>/dev/null + +sed -e "s/trunk/0.5.0 (rev$SVN_REV)/g" -e "s/unknown/$SVN_REV/g" sabnzbd/version.py>sabnzbd/version_tmp.py +mv -f sabnzbd/version_tmp.py sabnzbd/version.py>/dev/null +defaults write $DIR_RESOURCES/../Info CFBundleShortVersionString -string "0.5.0 (rev$SVN_REV)" +defaults write $DIR_RESOURCES/../Info CFBundleVersion -string "0.5.0 (rev$SVN_REV)" + +echo " done." + +echo "4/5 > Installing update..." +cd .. +rm -rd sabnzbd interfaces/Concept interfaces/Classic interfaces/Mobile interfaces/Plush interfaces/smpl interfaces/wizard language osx MainMenu.nib cherrypy licenses>/dev/null +mv -f interfaces interfaces_tmp>/dev/null +mv -f tmp/* ./>/dev/null +cp -r interfaces_tmp/* interfaces/>/dev/null +rm -rf *tmp>/dev/null +echo " done." + +echo "5/5 > Update to rev $SVN_REV finished - Don't forget to restart SABnzbd !" +echo "if you have any problem http://forums.sabnzbd.org" \ No newline at end of file diff --git a/osx/unrar/unrar b/osx/unrar/unrar new file mode 100755 index 0000000000000000000000000000000000000000..33dc8495e901d52d80941966b84de8164e465674 GIT binary patch literal 440184 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 +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from distutils.core import setup + +import glob +import sys +import os +import platform +import tarfile +import re +import subprocess +import shutil +try: + import py2exe +except ImportError: + py2exe = None +try: + import py2app + from setuptools import setup +except ImportError: + py2app = None + + +VERSION_FILE = 'sabnzbd/version.py' +VERSION_FILEAPP = 'osx/resources/InfoPlist.strings' + +def DeleteFiles(name): + ''' Delete one file or set of files from wild-card spec ''' + for f in glob.glob(name): + try: + os.remove(f) + except: + print "Cannot remove file %s" % f + exit(1) + +def CheckPath(name): + if os.name == 'nt': + sep = ';' + ext = '.exe' + else: + sep = ':' + ext = '' + + for path in os.environ['PATH'].split(sep): + full = os.path.join(path, name+ext) + if os.path.exists(full): + return name+ext + print "Sorry, cannot find %s%s in the path" % (name, ext) + return None + + +def PatchVersion(name): + """ Patch in the SVN baseline number, but only when this is + an unmodified checkout + """ + try: + pipe = subprocess.Popen(SvnVersion, shell=True, stdout=subprocess.PIPE).stdout + svn = pipe.read().strip(' \t\n\r') + pipe.close() + except: + pass + + if not svn: + print "WARNING: Cannot run %s" % SvnVersion + svn = 'unknown' + + if not (svn and svn.isdigit()): + svn = 'unknown' + + try: + ver = open(VERSION_FILE, 'rb') + text = ver.read() + ver.close() + except: + print "WARNING: cannot patch " + VERSION_FILE + return + + regex = re.compile(r'__baseline__\s+=\s+"\w*"') + text = re.sub(r'__baseline__\s*=\s*"[^"]*"', '__baseline__ = "%s"' % svn, text) + text = re.sub(r'__version__\s*=\s*"[^"]*"', '__version__ = "%s"' % name, text) + try: + ver = open(VERSION_FILE, 'wb') + ver.write(text) + ver.close() + except: + print "WARNING: cannot patch " + VERSION_FILE + +def PairList(src): + """ Given a list of files and dirnames, + return a list of (destn-dir, sourcelist) tuples. + A file returns (path, [name]) + A dir returns for its root and each of its subdirs + (path, ) + Always return paths with Unix slashes. + Skip all SVN elements, .bak .pyc .pyo and *.~* + """ + lst = [] + for item in src: + if item.endswith('/'): + for root, dirs, files in os.walk(item.rstrip('/\\')): + path = root.replace('\\', '/') + if path.find('.svn') < 0 and path.find('_svn') < 0 : + flist = [] + for file in files: + if not (file.endswith('.bak') or file.endswith('.pyc') or file.endswith('.pyo') or '~' in file): + flist.append(os.path.join(root, file).replace('\\','/')) + if flist: + lst.append((path, flist)) + else: + path, name = os.path.split(item) + items = [] + items.append(name) + lst.append((path, items)) + return lst + + +def CreateTar(folder, fname, release): + """ Create tar.gz file for source distro """ + tar = tarfile.open(fname, "w:gz") + + for root, dirs, files in os.walk(folder): + for _file in files: + uroot = root.replace('\\','/') + if (uroot.find('/win') < 0) and (uroot.find('licenses/Python') < 0): + path = os.path.join(root, _file) + fpath = path.replace('srcdist\\', release+'/').replace('\\', '/') + tarinfo = tar.gettarinfo(path, fpath) + tarinfo.uid = 0 + tarinfo.gid = 0 + if _file in ('SABnzbd.py', 'Sample-PostProc.sh'): # One day add: 'setup.py' + tarinfo.mode = 0755 + else: + tarinfo.mode = 0644 + f= open(path, "rb") + tar.addfile(tarinfo, f) + f.close() + tar.close() + +def Dos2Unix(name): + """ Read file, remove \r and write back """ + base, ext = os.path.splitext(name) + if ext.lower() not in ('.py', '.txt', '.css', '.js', '.tmpl', '.sh', '.cmd'): + return + + print name + try: + f = open(name, 'rb') + data = f.read() + f.close() + except: + print "File %s does not exist" % name + exit(1) + data = data.replace('\r', '') + try: + f = open(name, 'wb') + f.write(data) + f.close() + except: + print "Cannot write to file %s" % name + exit(1) + + +def Unix2Dos(name): + """ Read file, remove \r, replace \n by \r\n and write back """ + base, ext = os.path.splitext(name) + if ext.lower() not in ('.py', '.txt', '.css', '.js', '.tmpl', '.sh', '.cmd'): + return + + print name + try: + f = open(name, 'rb') + data = f.read() + f.close() + except: + print "File %s does not exist" % name + exit(1) + data = data.replace('\r', '') + data = data.replace('\n', '\r\n') + try: + f = open(name, 'wb') + f.write(data) + f.close() + except: + print "Cannot write to file %s" % name + exit(1) + + +def rename_file(folder, old, new): + try: + oldpath = "%s/%s" % (folder, old) + newpath = "%s/%s" % (folder, new) + if os.path.exists(newpath): + os.remove(newpath) + os.rename(oldpath, newpath) + except WindowsError: + print "Cannot create %s" % newpath + exit(1) + + +print sys.argv[0] + +#OSX if svnversion not installed install SCPlugin and execute these commands +#sudo cp /Library/Contextual\ Menu\ Items/SCFinderPlugin.plugin/Contents/Resources/SCPluginUIDaemon.app/Contents/lib/lib* /usr/lib +#sudo cp /Library/Contextual\ Menu\ Items/SCFinderPlugin.plugin/Contents/Resources/SCPluginUIDaemon.app/Contents/bin/svnversion /usr/bin + +SvnVersion = CheckPath('svnversion') +SvnRevert = CheckPath('svn') +ZipCmd = CheckPath('zip') +UnZipCmd = CheckPath('unzip') +if os.name == 'nt': + NSIS = CheckPath('makensis') +else: + NSIS = '-' + +if not (SvnVersion and SvnRevert and ZipCmd and UnZipCmd and NSIS): + exit(1) + +SvnRevertApp = SvnRevert + ' revert ' +SvnUpdateApp = SvnRevert + ' update ' +SvnRevert = SvnRevert + ' revert ' + VERSION_FILE + +if len(sys.argv) < 2: + target = None +else: + target = sys.argv[1] + +if target not in ('source', 'binary', 'installer', 'app'): + print 'Usage: package.py binary|source|app' + exit(1) + +# Derive release name from path +base, release = os.path.split(os.getcwd()) + +prod = 'SABnzbd-' + release +Win32ServiceName = 'SABnzbd-service.exe' +Win32ConsoleName = 'SABnzbd-console.exe' +Win32WindowName = 'SABnzbd.exe' +Win32TempName = 'SABnzbd-windows.exe' + +fileIns = prod + '-win32-setup.exe' +fileBin = prod + '-win32-bin.zip' +fileSrc = prod + '-src.tar.gz' +fileDmg = prod + '-osx.dmg' +fileOSr = prod + '-osx-src.tar.gz' +fileImg = prod + '.sparseimage' + + +PatchVersion(release) + + +# List of data elements, directories end with a '/' +data = [ 'README.txt', + 'INSTALL.txt', + 'GPL2.txt', + 'GPL3.txt', + 'CHANGELOG.txt', + 'COPYRIGHT.txt', + 'LICENSE.txt', + 'ISSUES.txt', + 'nzb.ico', + 'Sample-PostProc.cmd', + 'Sample-PostProc.sh', + 'PKG-INFO', + 'licenses/', + 'language/', + 'interfaces/Classic/', + 'interfaces/smpl/', + 'interfaces/Plush/', + 'interfaces/Mobile/', + 'interfaces/wizard/', + 'win/par2/', + 'win/unzip/', + 'win/unrar/' + ] + +options = dict( + name = 'SABnzbd', + version = release, + url = 'http://sourceforge.net/projects/sabnzbdplus', + author = 'The SABnzbd-Team', + author_email = 'team@sabnzbd.org', + #description = 'SABnzbd ' + str(sabnzbd.__version__), + scripts = ['SABnzbd.py'], # One day, add 'setup.py' + packages = ['sabnzbd', 'sabnzbd.utils'], + platforms = ['posix'], + license = 'GNU General Public License 2 (GPL2) or later', + data_files = PairList(data) + +) + + +if target == 'app': + if not platform.system() == 'Darwin': + print "Sorry, only works on Apple OSX!" + os.system(SvnRevert) + exit(1) + + #Create sparseimage from template + os.system("unzip sabnzbd-template.sparseimage.zip") + os.rename('sabnzbd-template.sparseimage', fileImg) + + #mount sparseimage + os.system("hdiutil mount %s" % (fileImg)) + + # Unpack cherrypy + os.system("unzip -o cherrypy.zip") + + import sabnzbd + options['description'] = 'SABnzbd ' + str(sabnzbd.__version__) + + #remove prototype and iphone interfaces + os.system("rm -rf interfaces/prototype>/dev/null") + os.system("rm -rf interfaces/Concept>/dev/null") + os.system("rm -rf interfaces/iphone>/dev/null") + + #build SABnzbd.py + sys.argv[1] = 'py2app' + + APP = ['SABnzbd.py'] + DATA_FILES = ['interfaces','language',('',glob.glob("osx/resources/*"))] + NZBFILE = dict( + CFBundleTypeExtensions = [ "nzb","zip","rar" ], + CFBundleTypeIconFile = 'nzbfile.icns', + CFBundleTypeMIMETypes = [ "text/nzb" ], + CFBundleTypeName = 'NZB File', + CFBundleTypeRole = 'Viewer', + LSTypeIsPackage = 0, + NSPersistentStoreTypeKey = 'Binary', + ) + OPTIONS = {'argv_emulation': True, 'iconfile': 'osx/resources/sabnzbdplus.icns','plist': { + 'NSUIElement':1, + #'CFBundleName':'SABnzbd+', + 'CFBundleShortVersionString':release, + 'NSHumanReadableCopyright':'The SABnzbd-Team', + 'CFBundleIdentifier':'org.sabnzbd.team', + 'CFBundleDocumentTypes':[NZBFILE] + }} + + setup( + app=APP, + data_files=DATA_FILES, + options={'py2app': OPTIONS }, + setup_requires=['py2app'], + ) + + #copy unrar & par2 binary to avoid striping + os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx>/dev/null") + os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx/par2>/dev/null") + os.system("cp -pR osx/par2/ dist/SABnzbd.app/Contents/Resources/osx/par2>/dev/null") + os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx/unrar>/dev/null") + os.system("cp -pR osx/unrar/ dist/SABnzbd.app/Contents/Resources/osx/unrar>/dev/null") + os.system("chmod +x dist/SABnzbd.app/Contents/Resources/update>/dev/null") + os.system("find dist/SABnzbd.app -name .svn | xargs rm -rf") + + #copy builded app to mounted sparseimage + os.system("cp -r dist/SABnzbd.app /Volumes/SABnzbd/>/dev/null") + + #cleanup src dir + os.system("rm -rf dist/>/dev/null") + os.system("rm -rf build/>/dev/null") + os.system("find ./ -name *.pyc | xargs rm") + os.system("rm -rf NSIS_Installer.nsi") + os.system("rm -rf win/") + os.system("rm -rf cherrypy*.zip") + + #Create src tar.gz + os.system("tar -czf %s --exclude \".svn\" --exclude \"sab*.zip\" --exclude \"SAB*.tar.gz\" --exclude \"*.sparseimage\" ./>/dev/null" % (fileOSr) ) + + #Copy src tar.gz to mounted sparseimage + os.system("cp %s /Volumes/SABnzbd/Sources/>/dev/null" % (fileOSr)) + + #Hide dock icon for the app + #os.system("defaults write /Volumes/SABnzbd/SABnzbd.app/Contents/Info LSUIElement 1") + + #Wait for enter from user + #For manually arrange icon position in mounted Volume... + #wait = raw_input ("Arrange Icons in DMG and then press Enter to Finalize") + + #Unmount sparseimage + os.system("hdiutil eject /Volumes/SABnzbd/>/dev/null") + os.system("sleep 5") + #Convert sparseimage to read only compressed dmg + os.system("hdiutil convert %s -format UDBZ -o %s>/dev/null" % (fileImg,fileDmg)) + #Remove sparseimage + os.system("rm %s>/dev/null" % (fileImg)) + + #os.system(SvnRevert) + os.system(SvnRevertApp + "NSIS_Installer.nsi") + os.system(SvnRevertApp + VERSION_FILEAPP) + os.system(SvnRevertApp + VERSION_FILE) + os.system(SvnUpdateApp) + +elif target in ('binary', 'installer'): + if not py2exe: + print "Sorry, only works on Windows!" + os.system(SvnRevert) + exit(1) + + # Unpack cherrypy + os.system("unzip -o cherrypy.zip") + + import sabnzbd + options['description'] = 'SABnzbd ' + str(sabnzbd.__version__) + + sys.argv[1] = 'py2exe' + program = [ {'script' : 'SABnzbd.py', 'icon_resources' : [(0, "sabnzbd.ico")] } ] + options['options'] = {"py2exe": + { + "bundle_files": 3, + "packages": "email,xml,Cheetah", + "excludes": ["pywin", "pywin.debugger", "pywin.debugger.dbgcon", "pywin.dialogs", + "pywin.dialogs.list", "Tkconstants", "Tkinter", "tcl"], + "optimize": 2, + "compressed": 0 + } + } + options['zipfile'] = 'lib/sabnzbd.zip' + + + ############################ + # Generate the console-app + options['console'] = program + setup(**options) + rename_file('dist', Win32WindowName, Win32ConsoleName) + + + # Make sure that the root files are DOS format + for file in options['data_files'][0][1]: + Unix2Dos("dist/%s" % file) + DeleteFiles('dist/Sample-PostProc.sh') + DeleteFiles('dist/PKG-INFO') + + DeleteFiles('*.ini') + + ############################ + # Generate the windowed-app + options['windows'] = program + del options['data_files'] + del options['console'] + setup(**options) + rename_file('dist', Win32WindowName, Win32TempName) + + + ############################ + # Generate the service-app + options['service'] = [{'modules':["SABnzbd"], 'cmdline_style':'custom'}] + del options['windows'] + setup(**options) + rename_file('dist', Win32WindowName, Win32ServiceName) + + # Give the Windows app its proper name + rename_file('dist', Win32TempName, Win32WindowName) + + + ############################ + if target == 'installer': + + os.system('makensis.exe /v3 /DSAB_PRODUCT=%s /DSAB_FILE=%s NSIS_Installer.nsi' % \ + (release, fileIns)) + + DeleteFiles(fileBin) + os.rename('dist', prod) + os.system('zip -9 -r -X %s %s' % (fileBin, prod)) + os.rename(prod, 'dist') + + os.system(SvnRevert) + +else: + # Prepare Source distribution package. + # Make sure all source files are Unix format + import shutil + + root = 'srcdist' + root = os.path.normpath(os.path.abspath(root)) + if not os.path.exists(root): + os.mkdir(root) + + # Copy the data files + for set in options['data_files']: + dest, src = set + ndir = root + '/' + dest + ndir = os.path.normpath(os.path.abspath(ndir)) + if not os.path.exists(ndir): + os.makedirs(ndir) + for file in src: + shutil.copy2(file, ndir) + Dos2Unix(ndir + '/' + os.path.basename(file)) + + # Copy the script files + for name in options['scripts']: + file = os.path.normpath(os.path.abspath(name)) + shutil.copy2(file, root) + base = os.path.basename(file) + fullname = os.path.normpath(os.path.abspath(root + '/' + base)) + Dos2Unix(fullname) + + # Copy all content of the packages (but skip backups and pre-compiled stuff) + for unit in options['packages']: + unitpath = unit.replace('.','/') + dest = os.path.normpath(os.path.abspath(root + '/' + unitpath)) + if not os.path.exists(dest): + os.makedirs(dest) + for name in glob.glob("%s/*.*" % unitpath): + file = os.path.normpath(os.path.abspath(name)) + front, ext = os.path.splitext(file) + base = os.path.basename(file) + fullname = os.path.normpath(os.path.abspath(dest + '/' + base)) + if (ext.lower() not in ('.pyc', '.pyo', '.bak')) and '~' not in ext: + shutil.copy2(file, dest) + Dos2Unix(fullname) + + # Install CherryPy + os.chdir(root) + os.system("unzip -o ../cherrypy.zip") + os.chdir('..') + + # Prepare the TAR.GZ pacakge + CreateTar('srcdist', fileSrc, prod) + + os.system(SvnRevert) + diff --git a/sabnzbd-template.sparseimage.zip b/sabnzbd-template.sparseimage.zip new file mode 100644 index 0000000000000000000000000000000000000000..beb4b10b4dbd92fcd99caea7acb35c717acf9eef GIT binary patch literal 466185 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

        14f7t$mj|$RVR(SqutM87p^A|+0 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 +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from sabnzbd.version import __version__, __baseline__ +__configversion__ = 18 +__queueversion__ = 8 + +import os +import logging +import datetime +import tempfile +import cPickle +import zipfile +import glob +import gzip +import subprocess +import time +import cherrypy +from threading import RLock, Lock, Condition, Thread +from sabnzbd.lang import T, Ta + +#------------------------------------------------------------------------ +# Determine platform flags + +WIN32 = DARWIN = DARWIN_INTEL = POSIX = FOUNDATION = WIN64 = False +KERNEL32 = None + +if os.name == 'nt': + WIN32 = True + try: + import ctypes + KERNEL32 = ctypes.windll.LoadLibrary("Kernel32.dll") + except: + pass +elif os.name == 'posix': + ORG_UMASK = os.umask(18) + os.umask(ORG_UMASK) + POSIX = True + import platform + if platform.system().lower() == 'darwin': + DARWIN = True + try: + import Foundation + FOUNDATION = True + except: + pass + if platform.machine() == 'i386': + DARWIN_INTEL = True + +#------------------------------------------------------------------------ + +import sabnzbd.nzbqueue as nzbqueue +from sabnzbd.postproc import PostProcessor +import sabnzbd.downloader as downloader +from sabnzbd.assembler import Assembler +from sabnzbd.newzbin import Bookmarks, MSGIDGrabber +import sabnzbd.misc as misc +from sabnzbd.dirscanner import DirScanner, ProcessArchiveFile, ProcessSingleFile +from sabnzbd.urlgrabber import URLGrabber +import sabnzbd.scheduler as scheduler +import sabnzbd.rss as rss +import sabnzbd.emailer as emailer +from sabnzbd.articlecache import ArticleCache +import sabnzbd.newsunpack +import sabnzbd.codecs as codecs +import sabnzbd.config as config +from sabnzbd.bpsmeter import BPSMeter +import sabnzbd.cfg as cfg +import sabnzbd.database +import sabnzbd.lang as lang +from sabnzbd.decorators import * +from sabnzbd.constants import * + +LINUX_POWER = misc.HAVE_DBUS + +START = datetime.datetime.now() + +MY_NAME = None +MY_FULLNAME = None +NEW_VERSION = None +DIR_HOME = None +DIR_APPDATA = None +DIR_LCLDATA = None +DIR_PROG = None +DIR_INTERFACES = None +DIR_LANGUAGE = None + +QUEUECOMPLETE = None #stores the nice name of the action +QUEUECOMPLETEACTION = None #stores the name of the function to be called +QUEUECOMPLETEARG = None #stores an extra arguments that need to be passed +QUEUECOMPLETEACTION_GO = False # Booleen value whether to run an action or not at the queue end. + +DEBUG_DELAY = 0 +DAEMON = None + +LOGFILE = None +WEBLOGFILE = None +LOGHANDLER = None +GUIHANDLER = None +AMBI_LOCALHOST = False +WIN_SERVICE = None # Instance of our Win32 Service Class + +WEB_DIR = None +WEB_DIR2 = None +WIZARD_DIR = None +WEB_COLOR = None +WEB_COLOR2 = None +SABSTOP = False +RESTART_REQ = False +OSX_ICON = 1 +PAUSED_ALL = False +OLD_QUEUE = False + +__INITIALIZED__ = False +__SHUTTING_DOWN__ = False + + +################################################################################ +# Signal Handler # +################################################################################ +def sig_handler(signum = None, frame = None): + global SABSTOP + if sabnzbd.WIN32 and type(signum) != type(None) and DAEMON and signum==5: + # Ignore the "logoff" event when running as a Win32 daemon + return True + if type(signum) != type(None): + logging.warning(Ta('warn-signal@1'), signum) + try: + save_state() + finally: + SABSTOP = True + os._exit(0) + + +################################################################################ +# Initializing # +################################################################################ + +INIT_LOCK = Lock() + +def connect_db(thread_index): + # Create a connection and store it in the current thread + cherrypy.thread_data.history_db = sabnzbd.database.get_history_handle() + + +@synchronized(INIT_LOCK) +def initialize(pause_downloader = False, clean_up = False, evalSched=False): + global __INITIALIZED__, __SHUTTING_DOWN__,\ + LOGFILE, WEBLOGFILE, LOGHANDLER, GUIHANDLER, AMBI_LOCALHOST, WAITEXIT, \ + DEBUG_DELAY, \ + DAEMON, MY_NAME, MY_FULLNAME, NEW_VERSION, \ + DIR_HOME, DIR_APPDATA, DIR_LCLDATA, DIR_PROG , DIR_INTERFACES, \ + DARWIN, RESTART_REQ, OSX_ICON, OLD_QUEUE + + if __INITIALIZED__: + return False + + __SHUTTING_DOWN__ = False + + ### Set global database connection for Web-UI threads + cherrypy.engine.subscribe('start_thread', connect_db) + + ### Clean the cache folder, if requested + if clean_up: + xlist= glob.glob(cfg.cache_dir.get_path() + '/*') + for x in xlist: + os.remove(x) + + ### If dirscan_dir cannot be created, set a proper value anyway. + ### Maybe it's a network path that's temporarily missing. + path = cfg.dirscan_dir.get_path() + if not os.path.exists(path): + sabnzbd.misc.create_real_path(cfg.dirscan_dir.ident(), '', path, False) + + ### Set call backs for Config items + cfg.cache_limit.callback(new_limit) + cfg.cherryhost.callback(guard_restart) + cfg.cherryport.callback(guard_restart) + cfg.web_dir.callback(guard_restart) + cfg.web_dir2.callback(guard_restart) + cfg.web_color.callback(guard_restart) + cfg.web_color2.callback(guard_restart) + cfg.log_dir.callback(guard_restart) + cfg.cache_dir.callback(guard_restart) + cfg.https_port.callback(guard_restart) + cfg.https_cert.callback(guard_restart) + cfg.https_key.callback(guard_restart) + cfg.enable_https.callback(guard_restart) + cfg.bandwidth_limit.callback(guard_speedlimit) + cfg.top_only.callback(guard_top_only) + cfg.pause_on_post_processing.callback(guard_pause_on_pp) + + ### Set cache limit + ArticleCache.do.new_limit(cfg.cache_limit.get_int(), cfg.debug_delay()) + + ### Set language files + lang.install_language(DIR_LANGUAGE, cfg.language()) + + ### Check for old queue (when a new queue is not present) + if not os.path.exists(os.path.join(cfg.cache_dir.get_path(), QUEUE_FILE_NAME)): + OLD_QUEUE = bool(glob.glob(os.path.join(cfg.cache_dir.get_path(), QUEUE_FILE_TMPL % '?'))) + + ### + ### Initialize threads + ### + + Bookmarks() + rss.init() + scheduler.init() + + bytes = load_data(BYTES_FILE_NAME, remove = False, do_pickle = False) + try: + bytes = int(bytes) + BPSMeter.do.bytes_sum = bytes + except: + BPSMeter.do.reset() + + nzbqueue.init() + + PostProcessor() + + Assembler() + + downloader.init(pause_downloader) + + DirScanner() + + MSGIDGrabber() + + URLGrabber() + + if evalSched: + scheduler.analyse(pause_downloader) + + logging.info('All processes started') + RESTART_REQ = False + __INITIALIZED__ = True + return True + + +@synchronized(INIT_LOCK) +def start(): + global __INITIALIZED__ + + if __INITIALIZED__: + logging.debug('Starting postprocessor') + PostProcessor.do.start() + + logging.debug('Starting assembler') + Assembler.do.start() + + logging.debug('Starting downloader') + downloader.start() + + scheduler.start() + + logging.debug('Starting dirscanner') + DirScanner.do.start() + + MSGIDGrabber.do.start() + + logging.debug('Starting urlgrabber') + URLGrabber.do.start() + + +@synchronized(INIT_LOCK) +def halt(): + global __INITIALIZED__, __SHUTTING_DOWN__ + + if __INITIALIZED__: + logging.info('SABnzbd shutting down...') + __SHUTTING_DOWN__ = True + + rss.stop() + + Bookmarks.do.save() + + logging.debug('Stopping URLGrabber') + URLGrabber.do.stop() + try: + URLGrabber.do.join() + except: + pass + + logging.debug('Stopping Newzbin-Grabber') + MSGIDGrabber.do.stop() + try: + MSGIDGrabber.do.join() + except: + pass + + logging.debug('Stopping dirscanner') + DirScanner.do.stop() + try: + DirScanner.do.join() + except: + pass + + + ## Stop Required Objects ## + logging.debug('Stopping downloader') + downloader.stop() + + logging.debug('Stopping assembler') + Assembler.do.stop() + try: + Assembler.do.join() + except: + pass + + logging.debug('Stopping postprocessor') + PostProcessor.do.stop() + try: + PostProcessor.do.join() + except: + pass + + ## Save State ## + save_state() + + # The Scheduler cannot be stopped when the stop was scheduled. + # Since all warm-restarts have been removed, it's not longer + # needed to stop the scheduler. + # We must tell the scheduler to deactivate. + scheduler.abort() + + logging.info('All processes stopped') + + __INITIALIZED__ = False + + + +################################################################################ +## Misc Wrappers ## +################################################################################ + +def new_limit(): + """ Callback for article cache changes """ + ArticleCache.do.new_limit(cfg.cache_limit.get_int()) + +def guard_restart(): + """ Callback for config options requiring a restart """ + global RESTART_REQ + sabnzbd.RESTART_REQ = True + +def guard_speedlimit(): + """ Callback for change of bandwidth_limit, sets actual speed """ + downloader.limit_speed(cfg.bandwidth_limit()) + +def guard_top_only(): + """ Callback for change of top_only option """ + nzbqueue.set_top_only(cfg.top_only()) + +def guard_pause_on_pp(): + """ Callback for change of pause-download-on-pp """ + if cfg.pause_on_post_processing(): + pass # Not safe to idle downloader, because we don't know + # if post-processing is active now + else: + downloader.unidle_downloader() + +def add_msgid(msgid, pp=None, script=None, cat=None, priority=None, nzbname=None): + + if pp and pp=="-1": pp = None + if script and script.lower()=='default': script = None + if cat and cat.lower()=='default': cat = None + + if cfg.newzbin_username() and cfg.newzbin_password(): + logging.info('Fetching msgid %s from www.newzbin.com', msgid) + msg = T('fetchingNewzbin@1') % msgid + + future_nzo = nzbqueue.generate_future(msg, pp, script, cat=cat, url=msgid, priority=priority, nzbname=nzbname) + + MSGIDGrabber.do.grab(msgid, future_nzo) + else: + logging.error(Ta('error-fetchNewzbin@1'), msgid) + + +def add_url(url, pp=None, script=None, cat=None, priority=None, nzbname=None): + if 'http' not in url: + return + if pp and pp=="-1": pp = None + if script and script.lower()=='default': script = None + if cat and cat.lower()=='default': cat = None + if 'nzbindex.nl/' in url or 'nzbindex.com/' in url or 'nzbclub.com/' in url: + nzbname = '' + logging.info('Fetching %s', url) + msg = T('fetchNZB@1') % url + future_nzo = nzbqueue.generate_future(msg, pp, script, cat, url=url, priority=priority, nzbname=nzbname) + URLGrabber.do.add(url, future_nzo) + + +def save_state(): + ArticleCache.do.flush_articles() + nzbqueue.save() + save_data(str(BPSMeter.do.get_sum()), BYTES_FILE_NAME, do_pickle = False) + rss.save() + Bookmarks.do.save() + DirScanner.do.save() + PostProcessor.do.save() + +def pause_all(): + global PAUSED_ALL + PAUSED_ALL = True + sabnzbd.downloader.pause_downloader() + logging.debug('PAUSED_ALL active') + +def unpause_all(): + global PAUSED_ALL + PAUSED_ALL = False + sabnzbd.downloader.resume_downloader() + logging.debug('PAUSED_ALL inactive') + + +################################################################################ +## NZB_LOCK Methods ## +################################################################################ +NZB_LOCK = Lock() + +@synchronized(NZB_LOCK) +def backup_exists(filename): + """ Return True if backup exists and no_dupes is set + """ + path = cfg.nzb_backup_dir.get_path() + return path and sabnzbd.cfg.no_dupes() and \ + os.path.exists(os.path.join(path, filename+'.gz')) + +@synchronized(NZB_LOCK) +def backup_nzb(filename, data): + """ Backup NZB file + """ + if cfg.nzb_backup_dir.get_path(): + backup_name = filename + '.gz' + + # Need to go to the backup folder to + # prevent the pathname being embedded in the GZ file + here = os.getcwd() + os.chdir(cfg.nzb_backup_dir.get_path()) + + logging.info("Backing up %s", backup_name) + try: + _f = gzip.GzipFile(backup_name, 'wb') + _f.write(data) + _f.flush() + _f.close() + except: + logging.error("Saving %s to %s failed", backup_name, cfg.nzb_backup_dir.get_path()) + logging.debug("Traceback: ", exc_info = True) + + os.chdir(here) + + +################################################################################ +## CV synchronized (notifies downloader) ## +################################################################################ +@synchronized_CV +def add_nzbfile(nzbfile, pp=None, script=None, cat=None, priority=NORMAL_PRIORITY, nzbname=None): + if pp and pp=="-1": pp = None + if script and script.lower()=='default': script = None + if cat and cat.lower()=='default': cat = None + + # Consider reception of Latin-1 names for non-Windows platforms + # When an OSX/Unix server receives a file from Windows platform + filename = codecs.special_fixer(nzbfile.filename) + + if not sabnzbd.WIN32: + # If windows client sends file to Unix server backslashed may + # be included, so convert these + filename = filename.replace('\\', '/') + + filename = os.path.basename(filename) + root, ext = os.path.splitext(filename) + + logging.info('Adding %s', filename) + + try: + f, path = tempfile.mkstemp(suffix=ext, text=False) + os.write(f, nzbfile.value) + os.close(f) + except: + logging.error(Ta('error-tempFile@1'), filename) + logging.debug("Traceback: ", exc_info = True) + + if ext.lower() in ('.zip', '.rar'): + ProcessArchiveFile(filename, path, pp, script, cat, priority=priority) + else: + ProcessSingleFile(filename, path, pp, script, cat, priority=priority, nzbname=nzbname) + + +################################################################################ +## Unsynchronized methods ## +################################################################################ +def enable_server(server): + try: + config.get_config('servers', server).enable.set(1) + except: + logging.warning(Ta('warn-noServer@1'), server) + return + config.save_config() + downloader.update_server(server, server) + + +def disable_server(server): + """ Disable server """ + try: + config.get_config('servers', server).enable.set(0) + except: + logging.warning(Ta('warn-noServer@1'), server) + return + config.save_config() + downloader.update_server(server, server) + + +def system_shutdown(): + logging.info("Performing system shutdown") + + Thread(target=halt).start() + while __INITIALIZED__: + time.sleep(1.0) + + if sabnzbd.WIN32: + misc.win_shutdown() + elif DARWIN: + misc.osx_shutdown() + else: + misc.linux_shutdown() + + +def system_hibernate(): + logging.info("Performing system hybernation") + if sabnzbd.WIN32: + misc.win_hibernate() + elif DARWIN: + misc.osx_shutdown() + else: + misc.linux_hibernate() + + +def system_standby(): + logging.info("Performing system standby") + if sabnzbd.WIN32: + misc.win_standby() + elif DARWIN: + misc.osx_standby() + else: + misc.linux_standby() + + +def shutdown_program(): + logging.info("Performing sabnzbd shutdown") + Thread(target=halt).start() + while __INITIALIZED__: + time.sleep(1.0) + os._exit(0) + + +def restart_program(): + """ Restart program (used by scheduler) """ + logging.info("Performing sabnzbd restart") + sabnzbd.halt() + while __INITIALIZED__: + time.sleep(1.0) + cherrypy.engine.restart() + + +def change_queue_complete_action(action): + """ + Action or script to be performed once the queue has been completed + Scripts are prefixed with 'script_' + """ + global QUEUECOMPLETE, QUEUECOMPLETEACTION, QUEUECOMPLETEARG + + _action = None + _argument = None + if 'script_' in action: + #all scripts are labeled script_xxx + _action = run_script + _argument = action.replace('script_', '') + elif action == 'shutdown_pc': + _action = system_shutdown + elif action == 'hibernate_pc': + _action = system_hibernate + elif action == 'standby_pc': + _action = system_standby + elif action == 'shutdown_program': + _action = shutdown_program + + #keep the name of the action for matching the current select in queue.tmpl + QUEUECOMPLETE = action + + QUEUECOMPLETEACTION = _action + QUEUECOMPLETEARG = _argument + + +def run_script(script): + command = os.path.join(cfg.script_dir.get_path(), script) + stup, need_shell, command, creationflags = sabnzbd.newsunpack.build_command(command) + logging.info('Spawning external command %s', command) + subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + startupinfo=stup, creationflags=creationflags) + + +def empty_queues(): + """ Return True if queues empty or non-existent """ + global __INITIALIZED__ + return (not __INITIALIZED__) or (PostProcessor.do.empty() and not nzbqueue.has_articles()) + + +def keep_awake(): + """ If we still have work to do, keep Windows system awake + """ + global KERNEL32 + if KERNEL32 and not downloader.paused(): + if (not PostProcessor.do.empty()) or nzbqueue.has_articles(): + # set ES_SYSTEM_REQUIRED + KERNEL32.SetThreadExecutionState(ctypes.c_int(0x00000001)) + + +def CheckFreeSpace(): + if cfg.download_free() and not downloader.paused(): + if misc.diskfree(cfg.download_dir.get_path()) < cfg.download_free.get_float() / GIGI: + logging.warning(Ta('warn-noSpace')) + # Pause downloader, but don't save, since the disk is almost full! + downloader.pause_downloader(save=False) + emailer.diskfull() + + +################################################################################ +# Data IO # +################################################################################ +IO_LOCK = RLock() + +@synchronized(IO_LOCK) +def get_new_id(prefix): + try: + fd, l = tempfile.mkstemp('', 'SABnzbd_%s_' % prefix, cfg.cache_dir.get_path()) + os.close(fd) + head, tail = os.path.split(l) + return tail + except: + logging.error(Ta('error-failMkstemp')) + logging.debug("Traceback: ", exc_info = True) + + +@synchronized(IO_LOCK) +def save_data(data, _id, do_pickle = True, doze=0): + path = os.path.join(cfg.cache_dir.get_path(), _id) + logging.info("Saving data for %s in %s", _id, path) + + try: + _f = open(path, 'wb') + if do_pickle: + cPickle.dump(data, _f, 2) + else: + _f.write(data) + if doze: + # Only for debugging decoder overflow + time.sleep(doze) + _f.flush() + _f.close() + except: + logging.error(Ta('error-saveX@1'), path) + logging.debug("Traceback: ", exc_info = True) + + +@synchronized(IO_LOCK) +def load_data(_id, remove = True, do_pickle = True): + path = os.path.join(cfg.cache_dir.get_path(), _id) + logging.info("Loading data for %s from %s", _id, path) + + if not os.path.exists(path): + logging.info("%s missing", path) + return None + + data = None + + try: + _f = open(path, 'rb') + if do_pickle: + data = cPickle.load(_f) + else: + data = _f.read() + _f.close() + + if remove: + remove_data(_id) + except: + logging.error(Ta('error-loading@1'), path) + logging.debug("Traceback: ", exc_info = True) + return None + + return data + + +@synchronized(IO_LOCK) +def remove_data(_id): + path = os.path.join(cfg.cache_dir.get_path(), _id) + try: + os.remove(path) + logging.info("%s removed", path) + except: + pass + + +def pp_to_opts(pp): + """ Convert numeric processinf options to (repair, unpack, delete) """ + # Convert the pp to an int + pp = sabnzbd.interface.IntConv(pp) + if pp == 0 : return (False, False, False) + if pp == 1 : return (True, False, False) + if pp == 2 : return (True, True, False) + return (True, True, True) + + +def opts_to_pp(repair, unpack, delete): + """ Convert (repair, unpack, delete) to numeric process options """ + if repair is None: + return None + pp = 0 + if repair: pp += 1 + if unpack: pp += 1 + if delete: pp += 1 + return pp + + +def SimpleRarExtract(rarfile, fn): + """ Wrapper for call to newsunpack, required to avoid circular imports + """ + return sabnzbd.newsunpack.SimpleRarExtract(rarfile, fn) + + +def check_all_tasks(): + """ Check every task and restart safe ones, else restart program + Return True when everything is under control + """ + if __SHUTTING_DOWN__ or not __INITIALIZED__: + return True + + # Non-restartable threads, require program restart + if not sabnzbd.PostProcessor.do.isAlive(): + logging.info('Restarting because of crashed postprocessor') + return False + if not sabnzbd.downloader.alive(): + logging.info('Restarting because of crashed downloader') + return False + if not Assembler.do.isAlive(): + logging.info('Restarting because of crashed assembler') + return False + + # Kick the downloader, in case it missed the semaphore + sabnzbd.downloader.wakeup() + + # Restartable threads + if not DirScanner.do.isAlive(): + logging.info('Restarting crashed dirscanner') + DirScanner.do.__init__() + if not URLGrabber.do.isAlive(): + logging.info('Restarting crashed urlgrabber') + URLGrabber.do.__init__() + if not MSGIDGrabber.do.isAlive(): + logging.info('Restarting crashed newzbin') + MSGIDGrabber.do.__init__() + if not sabnzbd.scheduler.sched_check(): + logging.info('Restarting crashed scheduler') + sabnzbd.scheduler.init() + sabnzbd.downloader.unblock_all() + + # Check one-shot pause + sabnzbd.scheduler.pause_check() + + return True + + +# Required wrapper because nzbstuff.py cannot import downloader.py +def active_primaries(): + return sabnzbd.downloader.active_primaries() diff --git a/sabnzbd/articlecache.py b/sabnzbd/articlecache.py new file mode 100644 index 0000000..48e0788 --- /dev/null +++ b/sabnzbd/articlecache.py @@ -0,0 +1,165 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.articlecache - Article cache handling +""" + +import logging +import threading + +import sabnzbd +from sabnzbd.decorators import synchronized + + +ARTICLE_LOCK = threading.Lock() +class ArticleCache: + do = None + + def __init__(self): + self.__cache_limit = 0 + self.__cache_size = 0 + self.__doze = 0 + + self.__article_list = [] # List of buffered articles + self.__article_table = {} # Dict of buffered articles + ArticleCache.do = self + + @synchronized(ARTICLE_LOCK) + def cache_info(self): + return (len(self.__article_list), self.__cache_size, self.__cache_limit) + + @synchronized(ARTICLE_LOCK) + def new_limit(self, limit, doze=0): + """ Called when cache limit changes """ + self.__cache_limit = limit + self.__doze = doze + + + @synchronized(ARTICLE_LOCK) + def save_article(self, article, data): + nzf = article.nzf + nzo = nzf.nzo + + if nzf.deleted or nzo.deleted: + # Do not discard this article because the + # file might still be processed at this moment!! + logging.info("%s would be discarded", article) + # return + + saved_articles = article.nzf.nzo.saved_articles + + if article not in saved_articles: + saved_articles.append(article) + + if self.__cache_limit: + if self.__cache_limit < 0: + self.__add_to_cache(article, data) + + else: + data_size = len(data) + + while (self.__cache_size > (self.__cache_limit - data_size)) \ + and self.__article_list: + ## Flush oldest article in cache + old_article = self.__article_list.pop(0) + old_data = self.__article_table.pop(old_article) + self.__cache_size -= len(old_data) + ## No need to flush if this is a refreshment article + if old_article != article: + self.__flush_article(old_article, old_data) + + ## Does our article fit into our limit now? + if (self.__cache_size + data_size) <= self.__cache_limit: + self.__add_to_cache(article, data) + else: + self.__flush_article(article, data) + + else: + self.__flush_article(article, data) + + @synchronized(ARTICLE_LOCK) + def load_article(self, article): + data = None + + if article in self.__article_list: + data = self.__article_table.pop(article) + self.__article_list.remove(article) + self.__cache_size -= len(data) + logging.info("Loaded %s from cache", article) + logging.debug("cache_size -> %s", self.__cache_size) + elif article.art_id: + data = sabnzbd.load_data(article.art_id, remove = True, + do_pickle = False) + + nzo = article.nzf.nzo + if article in nzo.saved_articles: + nzo.saved_articles.remove(article) + + return data + + @synchronized(ARTICLE_LOCK) + def flush_articles(self): + self.__cache_size = 0 + while self.__article_list: + article = self.__article_list.pop(0) + data = self.__article_table.pop(article) + self.__flush_article(article, data) + + @synchronized(ARTICLE_LOCK) + def purge_articles(self, articles): + logging.debug("Purgable articles -> %s", articles) + for article in articles: + if article in self.__article_list: + self.__article_list.remove(article) + data = self.__article_table.pop(article) + self.__cache_size -= len(data) + if article.art_id: + sabnzbd.remove_data(article.art_id) + + def __flush_article(self, article, data): + nzf = article.nzf + nzo = nzf.nzo + + if nzf.deleted or nzo.deleted: + # Do not discard this article because the + # file might still be processed at this moment!! + logging.info("%s would be discarded", article) + # return + + art_id = article.get_art_id() + if art_id: + logging.info("Flushing %s to disk", article) + logging.debug("cache_size -> %s", self.__cache_size) + sabnzbd.save_data(data, art_id, do_pickle = False, doze=self.__doze) + else: + logging.warning("Flushing %s failed -> no art_id", article) + + def __add_to_cache(self, article, data): + if article in self.__article_table: + self.__cache_size -= len(self.__article_table[article]) + else: + self.__article_list.append(article) + + self.__article_table[article] = data + self.__cache_size += len(data) + logging.info("Added %s to cache", article) + logging.debug("cache_size -> %s", self.__cache_size) + + +### Create the instance +ArticleCache() diff --git a/sabnzbd/assembler.py b/sabnzbd/assembler.py new file mode 100644 index 0000000..59291c8 --- /dev/null +++ b/sabnzbd/assembler.py @@ -0,0 +1,243 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.assembler - threaded assembly/decoding of files +""" + +import os +import Queue +import binascii +import logging +import struct +from threading import Thread +from time import sleep +try: + import hashlib + new_md5 = hashlib.md5 +except: + import md5 + new_md5 = md5.new + +import sabnzbd +from sabnzbd.misc import get_filepath, sanitize_filename, get_unique_path, renamer +import sabnzbd.cfg as cfg +from sabnzbd.articlecache import ArticleCache +from sabnzbd.postproc import PostProcessor +import sabnzbd.downloader +from sabnzbd.lang import Ta + + +#------------------------------------------------------------------------------ +class Assembler(Thread): + do = None # Link to the instance of this method + + def __init__ (self, queue = None): + Thread.__init__(self) + + if queue: + self.queue = queue + else: + self.queue = Queue.Queue() + Assembler.do = self + + def stop(self): + self.process(None) + + def process(self, nzf): + self.queue.put(nzf) + + def run(self): + while 1: + nzo_nzf_tuple = self.queue.get() + if not nzo_nzf_tuple: + logging.info("Shutting down") + break + + nzo, nzf = nzo_nzf_tuple + + if nzf: + sabnzbd.CheckFreeSpace() + filename = sanitize_filename(nzf.get_filename()) + nzf.set_filename(filename) + + dupe = nzo.check_for_dupe(nzf) + + filepath = get_filepath(cfg.download_dir.get_path(), nzo, filename) + + if filepath: + logging.info('Decoding %s %s', filepath, nzf.get_type()) + try: + filepath = _assemble(nzf, filepath, dupe) + except IOError, (errno, strerror): + # 28 == disk full => pause downloader + if errno == 28: + logging.error(Ta('error-diskFull')) + sabnzbd.downloader.pause_downloader() + else: + logging.error(Ta('error-diskError@1'), filepath) + + setname = nzf.get_setname() + if nzf.is_par2() and (nzo.get_md5pack(setname) is None): + pack = GetMD5Hashes(filepath) + if pack: + nzo.set_md5pack(setname, pack) + logging.debug('Got md5pack for set %s', setname) + + + else: + PostProcessor.do.process(nzo) + + +def _assemble(nzf, path, dupe): + if os.path.exists(path): + unique_path = get_unique_path(path, create_dir = False) + if dupe: + path = unique_path + else: + renamer(path, unique_path) + + fout = open(path, 'ab') + + if cfg.quick_check(): + md5 = new_md5() + else: + md5 = None + + _type = nzf.get_type() + decodetable = nzf.get_decodetable() + + for articlenum in decodetable: + sleep(0.01) + article = decodetable[articlenum] + + data = ArticleCache.do.load_article(article) + + if not data: + logging.warning(Ta('warn-artMissing@1'), article) + else: + # yenc data already decoded, flush it out + if _type == 'yenc': + fout.write(data) + if md5: md5.update(data) + # need to decode uu data now + elif _type == 'uu': + data = data.split('\r\n') + + chunks = [] + for line in data: + if not line: + continue + + if line == '-- ' or line.startswith('Posted via '): + continue + try: + tmpdata = binascii.a2b_uu(line) + chunks.append(tmpdata) + except binascii.Error, msg: + ## Workaround for broken uuencoders by + ##/Fredrik Lundh + nbytes = (((ord(line[0])-32) & 63) * 4 + 5) / 3 + try: + tmpdata = binascii.a2b_uu(line[:nbytes]) + chunks.append(tmpdata) + except binascii.Error, msg: + logging.info('Decode failed in part %s: %s', article.article, msg) + fout.write(''.join(chunks)) + if md5: md5.update(''.join(chunks)) + + fout.flush() + fout.close() + if md5: + nzf.md5sum = md5.digest() + del md5 + + return path + + +# For a full description of the par2 specification, visit: +# http://parchive.sourceforge.net/docs/specifications/parity-volume-spec/article-spec.html + +def GetMD5Hashes(fname): + """ Get the hash table from a PAR2 file + Return as dictionary, indexed on names + """ + table = {} + try: + f = open(fname, 'rb') + except: + return table + + try: + header = f.read(8) + while header: + name, hash = ParseFilePacket(f, header) + if name: + table[name] = hash + header = f.read(8) + + except (struct.error, IndexError): + logging.info('Cannot use corrupt par2 file for QuickCheck, "%s"', fname) + table = {} + except: + logging.debug('QuickCheck parser crashed in file %s', fname) + logging.debug('Traceback: ', exc_info = True) + table = {} + + f.close() + return table + + +def ParseFilePacket(f, header): + """ Look up and analyse a FileDesc package """ + + nothing = None, None + + if header != 'PAR2\0PKT': + return nothing + + # Length must be multiple of 4 and at least 20 + len = struct.unpack(' +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.bpsmeter - bpsmeter +""" + +import time +import logging + +#------------------------------------------------------------------------------ + +class BPSMeter: + do = None + + def __init__(self, bytes_sum = 0): + t = time.time() + + self.start_time = t + self.log_time = t + self.last_update = t + self.bps = 0.0 + self.bytes_total = 0 + self.bytes_sum = bytes_sum + BPSMeter.do = self + + def update(self, bytes_recvd): + self.bytes_total += bytes_recvd + self.bytes_sum += bytes_recvd + + t = time.time() + try: + self.bps = (self.bps * (self.last_update - self.start_time) + + bytes_recvd) / (t - self.start_time) + except: + self.bps = 0.0 + + self.last_update = t + + check_time = t - 5.0 + + if self.start_time < check_time: + self.start_time = check_time + + if self.bps < 0.01: + self.reset() + + elif self.log_time < check_time: + logging.debug("bps: %s", self.bps) + self.log_time = t + + def get_sum(self): + return self.bytes_sum + + def reset(self): + self.__init__(bytes_sum = self.bytes_sum) + + def get_bps(self): + return self.bps + + +BPSMeter() diff --git a/sabnzbd/cfg.py b/sabnzbd/cfg.py new file mode 100644 index 0000000..0401db1 --- /dev/null +++ b/sabnzbd/cfg.py @@ -0,0 +1,212 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.cfg - Configuration Parameters +""" +import re + +import sabnzbd +from sabnzbd.constants import DEF_HOST, DEF_PORT_WIN_SSL, DEF_PORT_WIN, DEF_STDINTF, \ + DEF_DOWNLOAD_DIR, DEF_NZBBACK_DIR, DEF_PORT_UNIX_SSL, \ + NORMAL_PRIORITY, DEF_SCANRATE, DEF_PORT_UNIX, DEF_COMPLETE_DIR +from sabnzbd.config import OptionBool, OptionNumber, OptionPassword, \ + OptionDir, OptionStr, OptionList, no_nonsense, \ + validate_octal, validate_safedir, validate_dir_exists, \ + create_api_key, validate_notempty +from sabnzbd.lang import T +#------------------------------------------------------------------------------ +# Email validation support +# +RE_VAL = re.compile('[^@ ]+@[^.@ ]+\.[^.@ ]') +def validate_email(value): + global email_endjob, email_full + if email_endjob() or email_full(): + if value and RE_VAL.match(value): + return None, value + else: + return T('error-badEmailAd@1') % value, None + else: + return None, value + + +def validate_server(value): + """ Check if server non-empty""" + global email_endjob, email_full + if value == '' and (email_endjob() or email_full()): + return T('error-needServer'), None + else: + return None, value + +#------------------------------------------------------------------------------ +if sabnzbd.WIN32: + DEF_FOLDER_MAX = 128 +else: + DEF_FOLDER_MAX = 256 + +#------------------------------------------------------------------------------ +# Configuration instances +# +quick_check = OptionBool('misc', 'quick_check', True) +fail_on_crc = OptionBool('misc', 'fail_on_crc', False) +send_group = OptionBool('misc', 'send_group', False) + +email_server = OptionStr('misc', 'email_server', validation=validate_server) +email_to = OptionStr('misc', 'email_to', validation=validate_email) +email_from = OptionStr('misc', 'email_from', validation=validate_email) +email_account= OptionStr('misc', 'email_account') +email_pwd = OptionPassword('misc', 'email_pwd') +email_endjob = OptionNumber('misc', 'email_endjob', 0, 0, 2) +email_full = OptionBool('misc', 'email_full', False) +email_dir = OptionDir('misc', 'email_dir', create=False, validation=validate_dir_exists) +email_rss = OptionBool('misc', 'email_rss', False) + +dirscan_pp = OptionNumber('misc', 'dirscan_opts', 3, 0, 3) +version_check = OptionBool('misc', 'check_new_rel', True) +dirscan_script = OptionStr('misc', 'dirscan_script', 'None') +dirscan_priority = OptionNumber('misc', 'dirscan_priority', NORMAL_PRIORITY) +autobrowser = OptionBool('misc', 'auto_browser', True) +replace_illegal = OptionBool('misc', 'replace_illegal', True) + +enable_unrar = OptionBool('misc', 'enable_unrar', True) +enable_unzip = OptionBool('misc', 'enable_unzip', True) +enable_filejoin = OptionBool('misc', 'enable_filejoin', True) +enable_tsjoin = OptionBool('misc', 'enable_tsjoin', True) +enable_par_cleanup = OptionBool('misc', 'enable_par_cleanup', True) +par_option = OptionStr('misc', 'par_option', '', validation=no_nonsense) +nice = OptionStr('misc', 'nice', '', validation=no_nonsense) +ionice = OptionStr('misc', 'ionice', '', validation=no_nonsense) +ignore_wrong_unrar = OptionBool('misc', 'ignore_wrong_unrar', False) +par2_multicore = OptionBool('misc', 'par2_multicore', True) + +newzbin_username = OptionStr('newzbin', 'username') +newzbin_password = OptionPassword('newzbin', 'password') +newzbin_bookmarks = OptionBool('newzbin', 'bookmarks', False) +newzbin_unbookmark = OptionBool('newzbin', 'unbookmark', True) +bookmark_rate = OptionNumber('newzbin', 'bookmark_rate', 60, minval=15, maxval=24*60) + +top_only = OptionBool('misc', 'top_only', True) +autodisconnect = OptionBool('misc', 'auto_disconnect', True) + +replace_spaces = OptionBool('misc', 'replace_spaces', False) +replace_dots = OptionBool('misc', 'replace_dots', False) +no_dupes = OptionBool('misc', 'no_dupes', False) +ignore_samples = OptionNumber('misc', 'ignore_samples', 0, 0, 2) +create_group_folders = OptionBool('misc', 'create_group_folders', False) +auto_sort = OptionBool('misc', 'auto_sort', False) +folder_rename = OptionBool('misc', 'folder_rename', True) +folder_max_length = OptionNumber('misc', 'folder_max_length', DEF_FOLDER_MAX, 20, 65000) + +safe_postproc = OptionBool('misc', 'safe_postproc', True) +pause_on_post_processing = OptionBool('misc', 'pause_on_post_processing', False) + +schedules = OptionList('misc', 'schedlines') + +enable_tv_sorting = OptionBool('misc', 'enable_tv_sorting', False) +tv_sort_string = OptionStr('misc', 'tv_sort_string') +tv_sort_countries = OptionNumber('misc', 'tv_sort_countries', 1) +tv_categories = OptionList('misc', 'tv_categories', '') + +enable_movie_sorting = OptionBool('misc', 'enable_movie_sorting', False) +movie_sort_string = OptionStr('misc', 'movie_sort_string') +movie_sort_extra = OptionStr('misc', 'movie_sort_extra', '-cd%1', strip=False) +movie_extra_folders = OptionBool('misc', 'movie_extra_folder', False) +movie_categories = OptionList('misc', 'movie_categories', ['movies']) + +enable_date_sorting = OptionBool('misc', 'enable_date_sorting', False) +date_sort_string = OptionStr('misc', 'date_sort_string') +date_categories = OptionStr('misc', 'date_categories', ['tv']) + +matrix_username = OptionStr('nzbmatrix', 'username') +matrix_apikey = OptionStr('nzbmatrix', 'apikey') + +configlock = OptionBool('misc', 'config_lock', 0) + +umask = OptionStr('misc', 'permissions', '', validation=validate_octal) +download_dir = OptionDir('misc', 'download_dir', DEF_DOWNLOAD_DIR, validation=validate_safedir) +download_free = OptionStr('misc', 'download_free') +complete_dir = OptionDir('misc', 'complete_dir', DEF_COMPLETE_DIR, apply_umask=True, validation=validate_notempty) +script_dir = OptionDir('misc', 'script_dir', create=False, validation=validate_dir_exists) +nzb_backup_dir = OptionDir('misc', 'nzb_backup_dir', DEF_NZBBACK_DIR) +cache_dir = OptionDir('misc', 'cache_dir', 'cache', validation=validate_safedir) +admin_dir = OptionDir('misc', 'admin_dir', 'admin', validation=validate_safedir) +#log_dir = OptionDir('misc', 'log_dir', 'logs') +dirscan_dir = OptionDir('misc', 'dirscan_dir', create=False) +dirscan_speed = OptionNumber('misc', 'dirscan_speed', DEF_SCANRATE, 1, 3600) +SIZE_LIMIT = OptionStr('misc', 'size_limit') + +cherryhost = OptionStr('misc','host', DEF_HOST) +if sabnzbd.WIN32: + cherryport = OptionStr('misc','port', DEF_PORT_WIN) +else: + cherryport = OptionStr('misc','port', DEF_PORT_UNIX) +if sabnzbd.WIN32: + https_port = OptionStr('misc','https_port', DEF_PORT_WIN_SSL) +else: + https_port = OptionStr('misc','https_port', DEF_PORT_UNIX_SSL) + +username = OptionStr('misc', 'username') +password = OptionPassword('misc', 'password') +bandwidth_limit = OptionNumber('misc', 'bandwidth_limit', 0) +refresh_rate = OptionNumber('misc', 'refresh_rate', 0) +rss_rate = OptionNumber('misc', 'rss_rate', 60, 15, 24*60) +cache_limit = OptionStr('misc', 'cache_limit') +web_dir = OptionStr('misc', 'web_dir', DEF_STDINTF) +web_dir2 = OptionStr('misc', 'web_dir2') +web_color = OptionStr('misc', 'web_color', '') +web_color2 = OptionStr('misc', 'web_color2') +cleanup_list = OptionList('misc', 'cleanup_list') +warned_old_queue = OptionBool('misc', 'warned_old_queue', False) + +log_web = OptionBool('logging', 'enable_cherrypy_logging', False) +log_dir = OptionDir('misc', 'log_dir', 'logs', validation=validate_notempty) +log_level = OptionNumber('logging', 'log_level', 1, 0, 2) +log_size = OptionStr('logging', 'max_log_size', '5242880') +log_backups = OptionNumber('logging', 'log_backups', 5, 1, 1024) + +https_cert = OptionDir('misc', 'https_cert', 'server.cert', create=False) +https_key = OptionDir('misc', 'https_key', 'server.key', create=False) +enable_https = OptionBool('misc', 'enable_https', False) + +language = OptionStr('misc', 'language', 'us-en') +ssl_type = OptionStr('misc', 'ssl_type', 'v23') +unpack_check = OptionBool('misc', 'unpack_check', True) +no_penalties = OptionBool('misc', 'no_penalties', False) + +# Internal options, not saved in INI file +debug_delay = OptionNumber('misc', 'debug_delay', 0, add=False) + +api_key = OptionStr('misc','api_key', create_api_key()) +disable_key = OptionBool('misc', 'disable_api_key', False) + +#------------------------------------------------------------------------------ +# Set root folders for Folder config-items +# +def set_root_folders(home, lcldata, prog, interf): + email_dir.set_root(home) + download_dir.set_root(home) + complete_dir.set_root(home) + script_dir.set_root(home) + nzb_backup_dir.set_root(lcldata) + cache_dir.set_root(lcldata) + admin_dir.set_root(lcldata) + dirscan_dir.set_root(home) + log_dir.set_root(lcldata) + +def set_root_folders2(): + https_cert.set_root(admin_dir.get_path()) + https_key.set_root(admin_dir.get_path()) diff --git a/sabnzbd/codecs.py b/sabnzbd/codecs.py new file mode 100644 index 0000000..ff43549 --- /dev/null +++ b/sabnzbd/codecs.py @@ -0,0 +1,230 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.codecs - Unicoded filename support +""" + +import locale +from xml.sax.saxutils import escape +from Cheetah.Filters import Filter + +import sabnzbd + +try: + if sabnzbd.DARWIN: + gUTF = True + else: + gUTF = locale.getdefaultlocale()[1].lower().find('utf') >= 0 +except: + # Incorrect locale implementation, assume the worst + gUTF = False + +def reliable_unpack_names(): + """ See if it is safe to rely on unrar names """ + if sabnzbd.WIN32 or sabnzbd.DARWIN: + return True + else: + return gUTF + +def platform_encode(p): + """ Return the correct encoding for the platform: + Latin-1 for Windows/Posix-non-UTF and UTF-8 for OSX/Posix-UTF + """ + if isinstance(p, unicode): + if gUTF: + return p.encode('utf-8') + else: + return p.encode('latin-1', 'replace').replace('?', '_') + elif isinstance(p, basestring): + if gUTF: + try: + p.decode('utf-8') + return p + except: + return p.decode('latin-1').encode('utf-8') + else: + try: + return p.decode('utf-8').encode('latin-1', 'replace').replace('?', '_') + except: + return p + else: + return p + +def name_fixer(p): + """ Return UTF-8 encoded string, if appropriate for the platform """ + + if gUTF and p: + return p.decode('Latin-1', 'replace').encode('utf-8', 'replace').replace('?', '_') + else: + return p + +def special_fixer(p): + """ Return string appropriate for the platform. + Also takes care of the situation where a non-Windows/UTF-8 system + receives a latin-1 encoded name. + """ + if sabnzbd.WIN32: + try: + return p.decode('utf-8').encode('latin-1', 'replace').replace('?', '_') + except: + return p + else: + if gUTF: + try: + # First see if it isn't just UTF-8 + p.decode('utf-8') + return p + except: + # Now assume it's latin-1 + return p.decode('Latin-1').encode('utf-8') + else: + return p + +def unicoder(p): + """ Make sure a Unicode string is returned """ + if isinstance(p, unicode): + return p + if isinstance(p, str): + if gUTF: + try: + return p.decode('utf-8') + except: + return p.decode('latin-1', 'replace') + return p.decode('latin-1', 'replace') + else: + return unicode(str(p)) + +def unicode2local(p): + """ Convert Unicode filename to appropriate local encoding + """ + if sabnzbd.WIN32: + return p.encode('Latin-1', 'replace').replace('?', '_') + else: + return p.encode('utf-8', 'replace').replace('?', '_') + + +def xml_name(p, keep_escape=False, encoding=None): + """ Prepare name for use in HTML/XML contect """ + + if isinstance(p, unicode): + pass + elif isinstance(p, str): + if sabnzbd.DARWIN or encoding == 'utf-8': + p = p.decode('utf-8', 'replace') + elif gUTF: + p = p.decode('utf-8', 'replace') + else: + p = p.decode('Latin-1', 'replace') + else: + p = str(p) + + if keep_escape: + return p.encode('ascii', 'xmlcharrefreplace') + else: + return escape(p).encode('ascii', 'xmlcharrefreplace') + + +def latin1(txt): + """ When Unicode, convert to Latin-1 """ + if isinstance(txt, unicode): + return txt.encode('latin-1', 'replace').replace('?', '_') + else: + return txt + + +def encode_for_xml(ustr, encoding='ascii'): + """ + Encode unicode_data for use as XML or HTML, with characters outside + of the encoding converted to XML numeric character references. + """ + if isinstance(ustr, unicode): + pass + elif isinstance(ustr, str): + ustr = ustr.decode('Latin-1', 'replace') + else: + ustr = unicode(str(ustr)) + return ustr.encode(encoding, 'xmlcharrefreplace') + + +def titler(p): + """ title() replacement + Python's title() fails with Latin-1, so use Unicode detour. + """ + if gUTF: + try: + return p.decode('utf-8').title().encode('utf-8') + except: + return p.decode('latin-1', 'replace').title().encode('latin-1', 'replace') + else: + return p.decode('latin-1', 'replace').title().encode('latin-1', 'replace') + + +class LatinFilter(Filter): + """ Make sure Cheetah gets only Unicode strings """ + def filter(self, val, str=str, **kw): + if isinstance(val, unicode): + return val + elif isinstance(val, basestring): + if gUTF: + try: + return val.decode('utf-8', 'replace') + except: + return val.decode('latin-1', 'replace') + else: + return val.decode('latin-1', 'replace') + elif val is None: + return u'' + else: + return unicode(str(val)) + + +################################################################################ +# +# Map CodePage-850 characters to Python's pseudo-Unicode 8bit ASCII +# +# Use to transform 8-bit console output to plain Python strings +# +import string +gTABLE850 = string.maketrans( + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F" + "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" + "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF" + "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF" + "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF" + "\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF" + "\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF" + "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF" , + + "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5" + "\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\x66" + "\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xDB\xBC\xA1\xAB\xBB" + "\x7E\x7E\x7E\x7E\x7E\xC1\xC2\xC0\xA9\x7E\x7E\x7E\x7E\xA2\xA5\x7E" + "\x7E\x7E\x7E\x7E\x7E\x7E\xE3\xc3\x7E\x7E\x7E\x7E\x7E\x7E\x7E\xA4" + "\xF0\xD0\xCA\xCB\xC8\x7E\xCD\xCE\xCF\x7E\x7E\x7E\x7E\xA6\xCC\x7E" + "\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4" + "\xAD\xB1\x5F\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\x7E\xA0" ) + + +def TRANS(p): + """ For Windows: Translate CP850 to Python's Latin-1 + """ + global gTABLE850 + if sabnzbd.WIN32: + return p.translate(gTABLE850) + else: + return p diff --git a/sabnzbd/config.py b/sabnzbd/config.py new file mode 100644 index 0000000..08263b2 --- /dev/null +++ b/sabnzbd/config.py @@ -0,0 +1,932 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.config - Configuration Support +""" + +import os +import logging +import threading +import sabnzbd.misc +import sabnzbd.constants as constants +from sabnzbd.utils import listquote +from sabnzbd.utils import configobj +from sabnzbd.decorators import synchronized +from sabnzbd.lang import Ta + +CONFIG_LOCK = threading.Lock() +SAVE_CONFIG_LOCK = threading.Lock() + + +__CONFIG_VERSION = '18' # Minumum INI file version required + +CFG = {} # Holds INI structure + # uring re-write this variable is global allow + # direct access to INI structure + +database = {} # Holds the option dictionary + +modified = False # Signals a change in option dictionary + # Should be reset after saving to settings file + + +class Option: + """ Basic option class, basic fields """ + def __init__(self, section, keyword, default_val=None, add=True): + """ Basic option + section : single section or comma-separated list of sections + a list will be a hierarchy: "foo, bar" --> [foo][[bar]] + keyword : keyword in the (last) section + default_val : value returned when no value has been set + callback : procedure to call when value is succesfully changed + """ + self.__sections = section.split(',') + self.__keyword = keyword + self.__default_val = default_val + self.__value = None + self.__callback = None + + # Add myself to the config dictionary + if add: + global database + anchor = database + for section in self.__sections: + if section not in anchor: + anchor[section] = {} + anchor = anchor[section] + anchor[keyword] = self + + def __call__(self): + """ get() replacement """ + return self.get() + + def get(self): + """ Retrieve value field """ + if self.__value != None: + return self.__value + else: + return self.__default_val + + def get_dict(self, safe=False): + """ Return value a dictionary """ + return { self.__keyword : self.get() } + + def set_dict(self, dict): + """ Set value based on dictionary """ + try: + return self.set(dict['value']) + except KeyError: + return False + + def __set(self, value): + """ Set new value, no validation """ + global modified + if (value != None): + if type(value) == type([]) or type(value) == type({}) or value != self.__value: + self.__value = value + modified = True + if self.__callback: + self.__callback() + return None + + def set(self, value): + return self.__set(value) + + def callback(self, callback): + """ Set callback function """ + self.__callback = callback + + def ident(self): + """ Return section-list and keyword """ + return self.__sections, self.__keyword + + + +class OptionNumber(Option): + """ Numeric option class, int/float is determined from default value """ + def __init__(self, section, keyword, default_val=0, minval=None, maxval=None, validation=None, add=True): + Option.__init__(self, section, keyword, default_val, add=add) + self.__minval = minval + self.__maxval = maxval + self.__validation = validation + self.__int = type(default_val) == type(0) + + def set(self, value): + """ set new value, limited by range """ + if value != None: + try: + if self.__int: + value = int(value) + else: + value = float(value) + except ValueError: + value = 0 + if self.__validation: + error, val = self.__validation(value) + self._Option__set(val) + else: + if (self.__maxval != None) and value > self.__maxval: + value = self.__maxval + elif (self.__minval != None) and value < self.__minval: + value = self.__minval + self._Option__set(value) + return None + + +class OptionBool(Option): + """ Boolean option class """ + def __init__(self, section, keyword, default_val=False, add=True): + Option.__init__(self, section, keyword, int(default_val), add=add) + + def set(self, value): + if value is None: + value = 0 + try: + self._Option__set(int(value)) + except ValueError: + self._Option__set(0) + return None + + +class OptionDir(Option): + """ Directory option class """ + def __init__(self, section, keyword, default_val='', apply_umask=False, create=True, validation=None, add=True): + self.__validation = validation + self.__root = '' # Base directory for relative paths + self.__apply_umask = apply_umask + self.__create = create + Option.__init__(self, section, keyword, default_val, add=add) + + def get_path(self): + """ Return full absolute path """ + value = self.get() + path = '' + if value: + path = sabnzbd.misc.real_path(self.__root, value) + if self.__create and not os.path.exists(path): + res, path = sabnzbd.misc.create_real_path(self.ident()[1], self.__root, value, self.__apply_umask) + return path + + def set_root(self, root): + """ Set new root, is assumed to be valid """ + self.__root = root + + def set(self, value): + """ Set new dir value, validate and create if needed + Return None when directory is accepted + Return error-string when not accepted, value will not be changed + """ + error = None + if value != None and value != self.get(): + value = value.strip() + if self.__validation: + error, value = self.__validation(self.__root, value, self._Option__default_val) + if not error: + if value and self.__create: + res, path = sabnzbd.misc.create_real_path(self.ident()[1], self.__root, value, self.__apply_umask) + if not res: + error = "Cannot create %s folder %s" % (self.ident()[1], path) + if not error: + self._Option__set(value) + return error + +class OptionList(Option): + """ List option class """ + def __init__(self, section, keyword, default_val=None, add=True): + if default_val is None: + default_val = [] + Option.__init__(self, section, keyword, default_val, add=add) + + def set(self, value): + """ Set value, convert single item to list of one + Empty string will be an empty list. + """ + if value != None: + if type(value) != type([]): + if value == '': + value = [] + else: + value = [ value ] + return self._Option__set(value) + return None + + def get_string(self): + """ Return the list as a comma-separated string """ + lst = self.get() + if type(lst) == type(""): + return lst + txt = '' + r = len(lst) + for n in xrange(r): + txt += lst[n] + if n < r-1: txt += ', ' + return txt + + def set_string(self, txt): + """ Set the list given a comma-separated string """ + if type(txt) == type(''): + self._Option__set(listquote.simplelist(txt)) + else: + self._Option__set(txt) + + +class OptionStr(Option): + """ String class """ + def __init__(self, section, keyword, default_val='', validation=None, add=True, strip=True): + Option.__init__(self, section, keyword, default_val, add=add) + self.__validation = validation + self.__strip = strip + + def get_float(self): + """ Return value converted to a float, allowing KMGT notation """ + return sabnzbd.misc.from_units(self.get()) + + def get_int(self): + """ Return value converted to an int, allowing KMGT notation """ + return int(self.get_float()) + + def set(self, value): + """ Set stripped value """ + error = None + if type(value) == type('') and self.__strip: + value = value.strip() + if self.__validation: + error, val = self.__validation(value) + self._Option__set(val) + else: + self._Option__set(value) + return error + + +class OptionPassword(Option): + """ Password class """ + def __init__(self, section, keyword, default_val='', add=True): + Option.__init__(self, section, keyword, default_val, add=add) + + def get(self): + """ Return decoded password """ + value = self._Option__value + if value is None: + return self._Option__default_val + else: + return decode_password(value, self.ident()) + + def get_stars(self): + """ Return decoded password as asterisk string """ + return '*' * len(decode_password(self.get(), self.ident())) + + def get_dict(self, safe=False): + """ Return value a dictionary """ + if safe: + return { self._Option__keyword : self.get_stars() } + else: + return { self._Option__keyword : self.get() } + + def set(self, pw): + """ Set password, encode it """ + if (pw != None and pw == '') or (pw and pw.strip('*')): + self._Option__set(encode_password(pw)) + return None + + +@synchronized(CONFIG_LOCK) +def add_to_database(section, keyword, object): + global database + if section not in database: + database[section] = {} + database[section][keyword] = object + + +@synchronized(CONFIG_LOCK) +def delete_from_database(section, keyword): + global database, CFG, modified + del database[section][keyword] + try: + del CFG[section][keyword] + except KeyError: + pass + modified = True + + +class ConfigServer: + """ Class defining a single server """ + def __init__(self, name, values): + + self.__name = name + name = 'servers,' + self.__name + + self.host = OptionStr(name, 'host', '', add=False) + self.port = OptionNumber(name, 'port', 119, 0, 2**16-1, add=False) + self.timeout = OptionNumber(name, 'timeout', 120, 30, 240, add=False) + self.username = OptionStr(name, 'username', '', add=False) + self.password = OptionPassword(name, 'password', '', add=False) + self.connections = OptionNumber(name, 'connections', 1, 0, 100, add=False) + self.fillserver = OptionBool(name, 'fillserver', False, add=False) + self.ssl = OptionBool(name, 'ssl', False, add=False) + self.enable = OptionBool(name, 'enable', True, add=False) + self.optional = OptionBool(name, 'optional', False, add=False) + + self.set_dict(values) + add_to_database('servers', self.__name, self) + + def set_dict(self, values): + """ Set one or more fields, passed as dictionary """ + for kw in ('host', 'port', 'timeout', 'username', 'password', 'connections', + 'fillserver', 'ssl', 'enable', 'optional'): + try: + value = values[kw] + except KeyError: + continue + exec 'self.%s.set(value)' % kw + return True + + def get_dict(self, safe=False): + """ Return a dictionary with all attributes """ + dict = {} + dict['name'] = self.__name + dict['host'] = self.host() + dict['port'] = self.port() + dict['timeout'] = self.timeout() + dict['username'] = self.username() + if safe: + dict['password'] = self.password.get_stars() + else: + dict['password'] = self.password() + dict['connections'] = self.connections() + dict['fillserver'] = self.fillserver() + dict['ssl'] = self.ssl() + dict['enable'] = self.enable() + dict['optional'] = self.optional() + return dict + + def delete(self): + """ Remove from database """ + delete_from_database('servers', self.__name) + + def rename(self, name): + """ Give server new identity """ + delete_from_database('servers', self.__name) + self.__name = name + add_to_database('servers', self.__name, self) + + def ident(self): + return 'servers', self.__name + + +class ConfigCat: + """ Class defining a single category """ + def __init__(self, name, values): + self.__name = name + name = 'categories,' + name + + self.pp = OptionStr(name, 'pp', '', add=False) + self.script = OptionStr(name, 'script', 'Default', add=False) + self.dir = OptionDir(name, 'dir', add=False, create=False) + self.newzbin = OptionList(name, 'newzbin', add=False) + self.priority = OptionNumber(name, 'priority', constants.DEFAULT_PRIORITY, add=False) + + self.set_dict(values) + add_to_database('categories', self.__name, self) + + def set_dict(self, values): + """ Set one or more fields, passed as dictionary """ + for kw in ('pp', 'script', 'dir', 'newzbin', 'priority'): + try: + value = values[kw] + except KeyError: + continue + if kw == 'newzbin': + exec 'self.%s.set_string(value)' % kw + else: + exec 'self.%s.set(value)' % kw + return True + + def get_dict(self, safe=False): + """ Return a dictionary with all attributes """ + dict = {} + dict['name'] = self.__name + dict['pp'] = self.pp() + dict['script'] = self.script() + dict['dir'] = self.dir() + dict['newzbin'] = self.newzbin.get_string() + dict['priority'] = self.priority() + return dict + + def delete(self): + """ Remove from database """ + delete_from_database('categories', self.__name) + + +class OptionFilters(Option): + """ Filter list class """ + def __init__(self, section, keyword, add=True): + Option.__init__(self, section, keyword, add=add) + self.set([]) + + def move(self, current, new): + """ Move filter from position 'current' to 'new' """ + lst = self.get() + try: + item = lst.pop(current) + lst.insert(new, item) + except IndexError: + return + self.set(lst) + + def update(self, pos, value): + """ Update filter 'pos' definition, value is a list + Append if 'pos' outside list + """ + lst = self.get() + try: + lst[pos] = value + except IndexError: + lst.append(value) + self.set(lst) + + def delete(self, pos): + """ Remove filter 'pos' """ + lst = self.get() + try: + lst.pop(pos) + except IndexError: + return + self.set(lst) + + def get_dict(self, safe=False): + """ Return filter list as a dictionary with keys 'filter[0-9]+' """ + dict = {} + n = 0 + for filter in self.get(): + dict['filter'+str(n)] = filter + n = n + 1 + return dict + + def set_dict(self, values): + """ Create filter list from dictionary with keys 'filter[0-9]+' """ + filters = [] + for n in xrange(len(values)): + kw = 'filter%d' % n + val = values.get(kw) + if val is not None: + val = values[kw] + if type(val) == type([]): + filters.append(val) + else: + filters.append(listquote.simplelist(val)) + if filters: + self.set(filters) + return True + +class ConfigRSS: + """ Class defining a single Feed definition """ + def __init__(self, name, values): + self.__name = name + name = 'rss,' + name + + self.uri = OptionStr(name, 'uri', add=False) + self.cat = OptionStr(name, 'cat', add=False) + self.pp = OptionStr(name, 'pp', '', add=False) + self.script = OptionStr(name, 'script', add=False) + self.enable = OptionBool(name, 'enable', add=False) + self.priority = OptionNumber(name, 'priority', constants.DEFAULT_PRIORITY, constants.DEFAULT_PRIORITY, 2, add=False) + self.filters = OptionFilters(name, 'filters', add=False) + self.filters.set([['', '', '', 'A', '*']]) + + self.set_dict(values) + add_to_database('rss', self.__name, self) + + def set_dict(self, values): + """ Set one or more fields, passed as dictionary """ + for kw in ('uri', 'cat', 'pp', 'script', 'priority', 'enable'): + try: + value = values[kw] + except KeyError: + continue + exec 'self.%s.set(value)' % kw + + self.filters.set_dict(values) + return True + + def get_dict(self, safe=False): + """ Return a dictionary with all attributes """ + dict = {} + dict['name'] = self.__name + dict['uri'] = self.uri() + dict['cat'] = self.cat() + dict['pp'] = self.pp() + dict['script'] = self.script() + dict['enable'] = self.enable() + dict['priority'] = self.priority() + filters = self.filters.get_dict() + for kw in filters: + dict[kw] = filters[kw] + return dict + + def delete(self): + """ Remove from database """ + delete_from_database('rss', self.__name) + + def ident(self): + return 'rss', self.__name + + + +def get_dconfig(section, keyword, nested=False): + """ Return a config values dictonary, + Single item or slices based on 'section', 'keyword' + """ + data = {} + if not section: + for section in database.keys(): + res, conf = get_dconfig(section, None, True) + data.update(conf) + + elif not keyword: + try: + sect = database[section] + except KeyError: + return False, {} + if section in ('servers', 'categories', 'rss'): + data[section] = [] + for keyword in sect.keys(): + res, conf = get_dconfig(section, keyword, True) + data[section].append(conf) + else: + data[section] = {} + for keyword in sect.keys(): + res, conf = get_dconfig(section, keyword, True) + data[section].update(conf) + + else: + try: + item = database[section][keyword] + except KeyError: + return False, {} + data = item.get_dict(safe=True) + if not nested: + if section in ('servers', 'categories', 'rss'): + data = {section : [ data ]} + else: + data = {section : data} + + return True, data + + +def get_config(section, keyword): + """ Return a config object, based on 'section', 'keyword' + """ + try: + return database[section][keyword] + except KeyError: + logging.info('Missing configuration item %s,%s', section, keyword) + return None + + +def set_config(kwargs): + """ Set a config item, using values in dictionary + """ + try: + item = database[kwargs.get('section')][kwargs.get('keyword')] + except KeyError: + return False + item.set_dict(kwargs) + return True + + +def delete(section, keyword): + """ Delete specific config item + """ + try: + database[section][keyword].delete() + except KeyError: + return + + +################################################################################ +# +# INI file support +# +# This does input and output of configuration to an INI file. +# It translates this data structure to the config database. + +@synchronized(SAVE_CONFIG_LOCK) +def read_config(path): + """ Read the complete INI file and check its version number + if OK, pass values to config-database + """ + global CFG, database, modified + + if not os.path.exists(path): + # No file found, create default INI file + try: + fp = open(path, "w") + fp.write("__version__=%s\n[misc]\n[logging]\n" % __CONFIG_VERSION) + fp.close() + except IOError: + return False, 'Cannot create INI file %s' % path + + try: + CFG = configobj.ConfigObj(path) + try: + if int(CFG['__version__']) > int(__CONFIG_VERSION): + return False, "Incorrect version number %s in %s" %(CFG['__version__'], path) + except KeyError: + CFG['__version__'] = __CONFIG_VERSION + except ValueError: + CFG['__version__'] = __CONFIG_VERSION + except configobj.ConfigObjError, strerror: + return False, '"%s" is not a valid configuration file
        Error message: %s' % (path, strerror) + + if 'misc' in CFG: + compatibility_fix(CFG['misc']) + + # Use CFG data to set values for all static options + for section in database: + if section not in ('servers', 'categories', 'rss'): + for option in database[section]: + sec, kw = database[section][option].ident() + sec = sec[-1] + try: + database[section][option].set(CFG[sec][kw]) + except KeyError: + pass + + define_categories() + define_rss() + define_servers() + + modified = False + return True, "" + + + +@synchronized(SAVE_CONFIG_LOCK) +def save_config(force=False): + """ Update Setup file with current option values """ + global CFG, database, modified + + if not (modified or force): + return True + + for section in database: + if section in ('servers', 'categories', 'rss'): + try: + CFG[section] + except: + CFG[section] = {} + for subsec in database[section]: + subsec_mod = subsec.replace('[', '{').replace(']','}') + try: + CFG[section][subsec_mod] + except: + CFG[section][subsec_mod] = {} + items = database[section][subsec].get_dict() + CFG[section][subsec_mod] = items + else: + for option in database[section]: + sec, kw = database[section][option].ident() + sec = sec[-1] + try: + CFG[sec] + except: + CFG[sec] = {} + value = database[section][option]() + if type(value) == type(True): + CFG[sec][kw] = str(int(value)) + elif type(value) == type(0): + CFG[sec][kw] = str(value) + else: + CFG[sec][kw] = value + + try: + CFG.write() + f = open(CFG.filename) + x = f.read() + f.close() + f = open(CFG.filename, "w") + f.write(x) + f.flush() + f.close() + modified = False + return True + except IOError: + return False + + + +def define_servers(): + """ Define servers listed in the Setup file + return a list of ConfigServer instances + """ + global CFG + try: + for server in CFG['servers']: + svr = CFG['servers'][server] + ConfigServer(server.replace('{', '[').replace('}', ']'), svr) + except KeyError: + pass + +def get_servers(): + global database + try: + return database['servers'] + except: + return {} + + +def define_categories(force=False): + """ Define categories listed in the Setup file + return a list of ConfigCat instances + """ + global CFG, categories + cats = ['Unknown', 'Anime', 'Apps', 'Books', 'Consoles', 'Emulation', 'Games', + 'Misc', 'Movies', 'Music', 'PDA', 'Resources', 'TV'] + + try: + for cat in CFG['categories']: + ConfigCat(cat, CFG['categories'][cat]) + except KeyError: + force = True + + if force: + for cat in cats: + val = { 'newzbin' : cat, 'dir' : cat } + ConfigCat(cat.lower(), val) + +def get_categories(): + global database + try: + return database['categories'] + except: + return {} + +def define_rss(): + """ Define rss-ffeds listed in the Setup file + return a list of ConfigRSS instances + """ + global CFG + try: + for r in CFG['rss']: + ConfigRSS(r, CFG['rss'][r]) + except KeyError: + pass + +def get_rss(): + global database + try: + return database['rss'] + except: + return {} + +def get_filename(): + global CFG + return CFG.filename + + +################################################################################ +# +# Default Validation handlers +# +__PW_PREFIX = '!!!encoded!!!' + +#------------------------------------------------------------------------------ +def encode_password(pw): + """ Encode password in hexadecimal if needed """ + enc = False + if pw: + encPW = __PW_PREFIX + for c in pw: + cnum = ord(c) + if c == '#' or cnum<33 or cnum>126: + enc = True + encPW += '%2x' % cnum + if enc: + return encPW + return pw + + +def decode_password(pw, name): + """ Decode hexadecimal encoded password + but only decode when prefixed + """ + decPW = '' + if pw and pw.startswith(__PW_PREFIX): + for n in range(len(__PW_PREFIX), len(pw), 2): + try: + ch = chr( int(pw[n] + pw[n+1], 16) ) + except: + logging.error(Ta('error-encPw@1'), name) + return '' + decPW += ch + return decPW + else: + return pw + + +def no_nonsense(value): + """ Strip and Filter out None and 'None' from strings """ + value = str(value).strip() + if value.lower() == 'none': + value = '' + return None, value + + +def validate_octal(value): + """ Check if string is valid octal number """ + if not value: + return None, value + try: + int(value, 8) + return None, value + except: + return Ta('error-notOctal@1') % value, None + + +def validate_no_unc(root, value, default): + """ Check if path isn't a UNC path """ + # Only need to check the 'value' part + if value and not value.startswith(r'\\'): + return validate_notempty(root, value, default) + else: + return Ta('error-noUNC@1') % value, None + + +def validate_safedir(root, value, default): + """ Allow only when queues are empty and no UNC """ + if sabnzbd.empty_queues(): + return validate_no_unc(root, value, default) + else: + return Ta('error-QnotEmpty'), None + + +def validate_dir_exists(root, value, default): + """ Check if directory exists """ + p = sabnzbd.misc.real_path(root, value) + if os.path.exists(p): + return None, value + else: + return Ta('error-noFolder@1') % p, None + + +def validate_notempty(root, value, default): + """ If value is empty, return default """ + if value: + return None, value + else: + return None, default + + +def create_api_key(): + import time + try: + from hashlib import md5 + except ImportError: + from md5 import md5 + import random + # Create some values to seed md5 + t = str(time.time()) + r = str(random.random()) + # Create the md5 instance and give it the current time + m = md5(t) + # Update the md5 instance with the random variable + m.update(r) + + # Return a hex digest of the md5, eg 49f68a5c8493ec2c0bf489821c21fc3b + return m.hexdigest() + + +#------------------------------------------------------------------------------ +_FIXES = \ +( + ('bandwith_limit', 'bandwidth_limit'), + ('enable_par_multicore', 'par2_multicore') +) + +def compatibility_fix(cf): + # Convert obsolete entries + for item in _FIXES: + old, new = item + try: + cf[new] + except KeyError: + try: + cf[new] = cf[old] + del cf[old] + except KeyError: + pass diff --git a/sabnzbd/constants.py b/sabnzbd/constants.py new file mode 100644 index 0000000..3d70fba --- /dev/null +++ b/sabnzbd/constants.py @@ -0,0 +1,117 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +CONFIG_VERSION = 18 +QUEUE_VERSION = 9 +POSTPROC_QUEUE_VERSION = 1 + +PNFO_REPAIR_FIELD = 0 +PNFO_UNPACK_FIELD = 1 +PNFO_DELETE_FIELD = 2 +PNFO_SCRIPT_FIELD = 3 +PNFO_NZO_ID_FIELD = 4 +PNFO_FILENAME_FIELD = 5 +PNFO_UNPACKSTRHT_FIELD = 6 +PNFO_MSGID_FIELD = 7 +PNFO_EXTRA_FIELD1 = 8 +PNFO_EXTRA_FIELD2 = 9 +PNFO_BYTES_LEFT_FIELD = 10 +PNFO_BYTES_FIELD = 11 +PNFO_AVG_DATE_FIELD = 12 +PNFO_FINISHED_FILES_FIELD = 13 +PNFO_ACTIVE_FILES_FIELD = 14 +PNFO_QUEUED_FILES_FIELD = 15 +PNFO_STATUS_FIELD = 16 +PNFO_PRIORITY_FIELD = 17 + +QNFO_BYTES_FIELD = 0 +QNFO_BYTES_LEFT_FIELD = 1 +QNFO_PNFO_LIST_FIELD = 2 + +ANFO_ARTICLE_SUM_FIELD = 0 +ANFO_CACHE_SIZE_FIELD = 1 +ANFO_CACHE_LIMIT_FIELD = 2 + +GIGI = float(2 ** 30) +MEBI = float(2 ** 20) +KIBI = float(2 ** 10) + +BYTES_FILE_NAME = 'bytes%s.sab' % QUEUE_VERSION +QUEUE_FILE_TMPL = 'queue%s.sab' +QUEUE_FILE_NAME = QUEUE_FILE_TMPL % QUEUE_VERSION +POSTPROC_QUEUE_FILE_NAME = 'postproc%s.sab' % POSTPROC_QUEUE_VERSION +RSS_FILE_NAME = 'rss_data.sab' +BOOKMARK_FILE_NAME = 'bookmarks.sab' +SCAN_FILE_NAME = 'watched_data.sab' + +DB_HISTORY_VERSION = 1 +DB_QUEUE_VERSION = 1 + +DB_HISTORY_NAME = 'history%s.db' % DB_HISTORY_VERSION +DB_QUEUE_NAME = 'queue%s.db' % DB_QUEUE_VERSION + +DEF_DOWNLOAD_DIR = 'downloads/incomplete' +DEF_COMPLETE_DIR = 'downloads/complete' +DEF_CACHE_DIR = 'cache' +DEF_LOG_DIR = 'logs' +DEF_NZBBACK_DIR = '' +DEF_LANGUAGE = 'language' +DEF_INTERFACES = 'interfaces' +DEF_INT_LANGUAGE = 'language' +DEF_STDINTF = 'smpl' +DEF_SKIN_COLORS = {'smpl':'white', 'classic':'darkblue', 'mobile':'light'} +DEF_MAIN_TMPL = 'templates/main.tmpl' +DEF_INI_FILE = 'sabnzbd.ini' +DEF_HOST = 'localhost' +DEF_PORT_WIN = 8080 +DEF_PORT_UNIX = 8080 +DEF_PORT_WIN_SSL = 9090 +DEF_PORT_UNIX_SSL= 9090 +DEF_WORKDIR = 'sabnzbd' +DEF_LOG_FILE = 'sabnzbd.log' +DEF_LOG_ERRFILE = 'sabnzbd.error.log' +DEF_LOG_CHERRY = 'cherrypy.log' +DEF_TIMEOUT = 60 +MIN_TIMEOUT = 10 +MAX_TIMEOUT = 200 +DEF_LOGLEVEL = 1 +DEF_SCANRATE = 5 +DEF_QRATE = 0 +MIN_DECODE_QUEUE = 5 +MAX_DECODE_QUEUE = 10 +MAX_WARNINGS = 20 + +TOP_PRIORITY = 2 +HIGH_PRIORITY = 1 +NORMAL_PRIORITY = 0 +LOW_PRIORITY = -1 +DEFAULT_PRIORITY = -100 + +series_match = [ (r'([sS]|[\d]+)x(\d+)', # 1x01 + [r'^[-\.]+([sS]|[\d])+x(\d+)', r'^[-\.](\d+)'] ), #(MATCHER, [EXTRA,MATCHERS]) + + (r'[Ss](\d+)[\.\-]?[Ee](\d+)', # S01E01 + [r'^[-\.]+[Ss](\d+)[\.\-]?[Ee](\d+)', r'^[-\.](\d+)']) ] # Extra matchers + + #possibly flawed - 101 - support: [\.\- \s]?(\d)(\d{2,2})[\.\- \s]? + +date_match = [r'(\d{4})\W(\d{1,2})\W(\d{1,2})', #2008-10-16 + r'(\d{1,2})\W(\d{1,2})\W(\d{4})'] #10.16.2008 + +year_match = r'[\W]([1|2]\d{3})([^\w]|$)' # Something '(YYYY)' or '.YYYY.' or ' YYYY ' + +sample_match = r'((^|[\W_])sample\d*[\W_])|(-s\.)' # something-sample.avi something-s.avi diff --git a/sabnzbd/database.py b/sabnzbd/database.py new file mode 100644 index 0000000..50e4b07 --- /dev/null +++ b/sabnzbd/database.py @@ -0,0 +1,407 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.database - Database Support +""" + +try: + import sqlite3 +except: + try: + import pysqlite2.dbapi2 as sqlite3 + except: + pass + +import os +import time +import datetime +from calendar import MONDAY +import zlib +import logging + +import sabnzbd +import sabnzbd.cfg +from sabnzbd.constants import DB_HISTORY_NAME +from sabnzbd.lang import T, Ta +from sabnzbd.codecs import unicoder + +_HISTORY_DB = None # Will contain full path to history database +_DONE_CLEANING = False # Ensure we only do one Vacuum per session + +def get_history_handle(): + """ Get an instance of the history db hanlder """ + global _HISTORY_DB + if not _HISTORY_DB: + _HISTORY_DB = os.path.join(sabnzbd.cfg.admin_dir.get_path(), DB_HISTORY_NAME) + return HistoryDB(_HISTORY_DB) + + +# Note: Add support for execute return values + +class HistoryDB: + def __init__(self, db_path): + global _DONE_CLEANING + #Thread.__init__(self) + if not os.path.exists(db_path): + create_table = True + else: + create_table = False + if sabnzbd.WIN32: + self.con = sqlite3.connect(db_path.decode('latin-1').encode('utf-8')) + else: + self.con = sqlite3.connect(db_path) + self.con.row_factory = dict_factory + self.c = self.con.cursor() + if create_table: + self.create_history_db() + elif not _DONE_CLEANING: + # Run VACUUM on sqlite + # When an object (table, index, or trigger) is dropped from the database, it leaves behind empty space + # http://www.sqlite.org/lang_vacuum.html + _DONE_CLEANING = True + self.execute('VACUUM') + + def execute(self, command, args=(), save=False): + ''' Wrapper for executing SQL commands ''' + try: + if args and isinstance(args, tuple): + self.c.execute(command, args) + else: + self.c.execute(command) + if save: + self.save() + return True + except: + logging.error(Ta('error-sqlCmd')) + logging.debug("SQL: %s" , command) + logging.debug("Traceback: ", exc_info = True) + try: + self.con.rollback() + except: + logging.debug("Rollback Failed:", exc_info = True) + return False + + def create_history_db(self): + self.execute(""" + CREATE TABLE "history" ( + "id" INTEGER PRIMARY KEY, + "completed" INTEGER NOT NULL, + "name" TEXT NOT NULL, + "nzb_name" TEXT NOT NULL, + "category" TEXT, + "pp" TEXT, + "script" TEXT, + "report" TEXT, + "url" TEXT, + "status" TEXT, + "nzo_id" TEXT, + "storage" TEXT, + "path" TEXT, + "script_log" BLOB, + "script_line" TEXT, + "download_time" INTEGER, + "postproc_time" INTEGER, + "stage_log" TEXT, + "downloaded" INTEGER, + "completeness" INTEGER, + "fail_message" TEXT, + "url_info" TEXT, + "bytes" INTEGER, + "meta" TEXT + ) + """) + + def save(self): + try: + self.con.commit() + except: + logging.error(Ta('error-sqlCommit')) + logging.debug("Traceback: ", exc_info = True) + + def close(self): + try: + self.c.close() + self.con.close() + except: + logging.error(Ta('error-sqlClose')) + logging.debug("Traceback: ", exc_info = True) + + def remove_all(self): + return self.execute("""DELETE FROM history""") + + def remove_failed(self): + return self.execute('''DELETE FROM history WHERE status="Failed"''', save=True) + + def remove_history(self, jobs=None): + if jobs is None: + self.remove_all() + else: + if type(jobs) == type(''): + jobs = [jobs] + + for job in jobs: + self.execute("""DELETE FROM history WHERE nzo_id=?""", (job,)) + + self.save() + + def add_history_db(self, nzo, storage, path, postproc_time, script_output, script_line): + + + t = build_history_info(nzo, storage, path, postproc_time, script_output, script_line) + + if self.execute("""INSERT INTO history (completed, name, nzb_name, category, pp, script, report, + url, status, nzo_id, storage, path, script_log, script_line, download_time, postproc_time, stage_log, + downloaded, completeness, fail_message, url_info, bytes) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""", t): + self.save() + + def fetch_history(self, start=None, limit=None, search=None): + + if not search: + # Default value + search = '' + else: + # Allow * for wildcard matching and space + search = search.replace('*','%').replace(' ', '%') + + # Allow ^ for start of string and $ for end of string + if search and search.startswith('^'): + search = search.replace('^','') + search += '%' + elif search and search.endswith('$'): + search = search.replace('$','') + search = '%' + search + else: + search = '%' + search + '%' + + # Get the number of results + if self.execute('select count(*) from History WHERE name LIKE ?', (search,)): + total_items = self.c.fetchone()['count(*)'] + else: + total_items = -1 + + if not start: + start = 0 + if not limit: + limit = total_items + + t = (search, start,limit) + fetch_ok = self.execute("""SELECT * FROM history WHERE name LIKE ? ORDER BY completed desc LIMIT ?, ?""", t) + + if fetch_ok: + items = self.c.fetchall() + else: + items = [] + + fetched_items = len(items) + + # Unpack the single line stage log + # Stage Name is seperated by ::: stage lines by ; and stages by \r\n + items = [unpack_history_info(item) for item in items] + + return (items, fetched_items, total_items) + + def get_history_size(self): + """ + Returns the total size of the history and + amounts downloaded in the last month and week + """ + # Total Size of the history + if self.execute('''SELECT sum(bytes) FROM history'''): + f = self.c.fetchone() + total = f['sum(bytes)'] + else: + total = 0 + + # Amount downloaded this month + r = time.gmtime(time.time()) + month_timest = int(time.mktime((r.tm_year, r.tm_mon, 0, 0, 0, 1, r.tm_wday, r.tm_yday, r.tm_isdst))) + + if self.execute('''SELECT sum(bytes) FROM history WHERE "completed">?''', (month_timest,)): + f = self.c.fetchone() + month = f['sum(bytes)'] + else: + month = 0 + + # Amount downloaded this week + monday = find_monday() + week_timest = int(time.mktime(find_monday())) + + if self.execute('''SELECT sum(bytes) FROM history WHERE "completed">?''', (week_timest,)): + f = self.c.fetchone() + week = f['sum(bytes)'] + else: + week = 0 + + return (total, month, week) + + + def get_script_log(self, nzo_id): + t = (nzo_id,) + if self.execute('SELECT script_log FROM history WHERE nzo_id=?', t): + f = self.c.fetchone() + return zlib.decompress(f['script_log']) + else: + return '' + + def get_name(self, nzo_id): + t = (nzo_id,) + if self.execute('SELECT name FROM history WHERE nzo_id=?', t): + return self.c.fetchone()['name'] + else: + return '' + + +def dict_factory(cursor, row): + d = {} + for idx, col in enumerate(cursor.description): + d[col[0]] = row[idx] + return d + +def build_history_info(nzo, storage='', path='', postproc_time=0, script_output='', script_line=''): + ''' Collects all the information needed for the database ''' + + path = decode_factory(path) + storage = decode_factory(storage) + script_line = decode_factory(script_line) + + flagRepair, flagUnpack, flagDelete = nzo.get_repair_opts() + nzo_info = decode_factory(nzo.get_nzo_info()) + + # Get the url and newzbin msgid + report = decode_factory(nzo_info.get('msgid', '')) + if report: + url = 'https://newzbin.com/browse/post/%s/' % (report) + else: + url = decode_factory(nzo_info.get('url', '')) + + #group = nzo.get_group() + + completed = int(time.time()) + name = decode_factory(nzo.get_original_dirname()) + + nzb_name = decode_factory(nzo.get_filename()) + category = decode_factory(nzo.get_cat()) + pps = ['','R','U','D'] + try: + pp = pps[sabnzbd.opts_to_pp(flagRepair, flagUnpack, flagDelete)] + except: + pp = '' + script = decode_factory(nzo.get_script()) + status = decode_factory(nzo.get_status()) + nzo_id = nzo.get_nzo_id() + bytes = nzo.get_bytes_downloaded() + + if script_output: + # Compress the output of the script + script_log = sqlite3.Binary(zlib.compress(script_output)) + # + else: + script_log = '' + + download_time = decode_factory(nzo_info.get('download_time', 0)) + + downloaded = nzo.get_bytes_downloaded() + completeness = 0 + fail_message = decode_factory(nzo.get_fail_msg()) + url_info = nzo_info.get('more_info', '') + + # Get the dictionary containing the stages and their unpack process + stages = decode_factory(nzo.get_unpack_info()) + # Pack the ditionary up into a single string + # Stage Name is seperated by ::: stage lines by ; and stages by \r\n + lines = [] + for key, results in stages.iteritems(): + lines.append('%s:::%s' % (key, ';'.join(results))) + stage_log = '\r\n'.join(lines) + + return (completed, name, nzb_name, category, pp, script, report, url, status, nzo_id, storage, path, \ + script_log, script_line, download_time, postproc_time, stage_log, downloaded, completeness, \ + fail_message, url_info, bytes,) + +def unpack_history_info(item): + ''' + Expands the single line stage_log from the DB + into a python dictionary for use in the history display + ''' + # Stage Name is seperated by ::: stage lines by ; and stages by \r\n + if item['stage_log']: + try: + lines = item['stage_log'].split('\r\n') + except: + logging.error(T('error-badHisNewline@1'), unicoder(item['name'])) + logging.debug('Lines: %s', item['stage_log']) + lines = [] + item['stage_log'] = [] + for line in lines: + stage = {} + try: + key, logs = line.split(':::') + except: + logging.debug('Missing key:::logs "%s"', line) + key = line + logs = '' + stage['name'] = key + stage['actions'] = [] + try: + logs = logs.split(';') + except: + logging.error(T('error-badHisSemic@1'), unicoder(item['name'])) + logging.debug('Logs: %s', logs) + logs = [] + for log in logs: + stage['actions'].append(log) + item['stage_log'].append(stage) + if item['script_log']: + item['script_log'] = zlib.decompress(item['script_log'][:]) + # The action line is only available for items in the postproc queue + if not item.has_key('action_line'): + item['action_line'] = '' + return item + + +def decode_factory(text): + ''' + Recursivly looks through the supplied argument + and converts and text to Unicode + ''' + if isinstance(text, str): + return unicoder(text) + + elif isinstance(text, list): + new_text = [] + for t in text: + new_text.append(decode_factory(t)) + return new_text + + elif isinstance(text, dict): + new_text = {} + for key in text: + new_text[key] = decode_factory(text[key]) + return new_text + else: + return text + + +def find_monday(): + last_monday = datetime.date.today() + minus_one_day = datetime.timedelta(days=1) + while last_monday.weekday() != MONDAY: + last_monday -= minus_one_day + return (last_monday.year, last_monday.month, last_monday.day, 0, 1, 1, 0, 0, 0) + diff --git a/sabnzbd/decoder.py b/sabnzbd/decoder.py new file mode 100644 index 0000000..2e6eff3 --- /dev/null +++ b/sabnzbd/decoder.py @@ -0,0 +1,312 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.decoder - article decoder +""" + +import Queue +import binascii +import logging +import re +from threading import Thread +try: + import _yenc + HAVE_YENC = True + +except ImportError: + HAVE_YENC = False + +import sabnzbd +from sabnzbd.constants import * +from sabnzbd.articlecache import ArticleCache +import sabnzbd.downloader +import sabnzbd.cfg as cfg +import sabnzbd.nzbqueue +from sabnzbd.codecs import name_fixer +from sabnzbd.lang import Ta + +#------------------------------------------------------------------------------- + +class CrcError(Exception): + def __init__(self, needcrc, gotcrc, data): + Exception.__init__(self) + self.needcrc = needcrc + self.gotcrc = gotcrc + self.data = data + +class BadYenc(Exception): + def __init__(self): + Exception.__init__(self) + +#------------------------------------------------------------------------------- + +class Decoder(Thread): + def __init__(self, servers): + Thread.__init__(self) + + self.queue = Queue.Queue() + self.servers = servers + + def decode(self, article, lines): + self.queue.put((article, lines)) + if self.queue.qsize() > MAX_DECODE_QUEUE: + sabnzbd.downloader.delay_downloader() + + def stop(self): + self.queue.put(None) + + def run(self): + while 1: + art_tup = self.queue.get() + if not art_tup: + break + + if self.queue.qsize() < MIN_DECODE_QUEUE and sabnzbd.downloader.delayed(): + sabnzbd.downloader.undelay_downloader() + + article, lines = art_tup + nzf = article.nzf + nzo = nzf.nzo + + data = None + + register = True + + if lines: + try: + logging.info("Decoding %s", article) + + data = decode(article, lines) + nzf.increase_article_count() + except IOError, e: + logging.error(Ta('error-decode@1'), article) + sabnzbd.downloader.pause_downloader() + + article.fetcher = None + + sabnzbd.nzbqueue.reset_try_lists(nzf, nzo) + + register = False + + except CrcError, e: + logging.warning(Ta('warn-crcError@3'), article, e.needcrc, e.gotcrc) + + data = e.data + + if cfg.fail_on_crc(): + new_server_found = self.__search_new_server(article) + if new_server_found: + register = False + + except BadYenc, e: + logging.warning("Badly formed yEnc article in %s", article) + + if cfg.fail_on_crc(): + new_server_found = self.__search_new_server(article) + if new_server_found: + register = False + + except: + logging.error(Ta('error-decodeUnknown@1'), article) + + else: + new_server_found = self.__search_new_server(article) + if new_server_found: + register = False + + if data: + ArticleCache.do.save_article(article, data) + + if register: + sabnzbd.nzbqueue.register_article(article) + + def __search_new_server(self, article): + article.add_to_try_list(article.fetcher) + + nzf = article.nzf + nzo = nzf.nzo + + new_server_found = False + fill_server_found = False + + for server in self.servers: + if server.active and not article.server_in_try_list(server): + if server.fillserver: + fill_server_found = True + else: + new_server_found = True + break + + # Only found one (or more) fill server(s) + if not new_server_found and fill_server_found: + article.allow_fill_server = True + new_server_found = True + + if new_server_found: + article.fetcher = None + + ## Allow all servers to iterate over this nzo and nzf again ## + sabnzbd.nzbqueue.reset_try_lists(nzf, nzo) + + logging.info('%s => found at least one untested server', article) + + else: + logging.warning(Ta('warn-artAllMissing@1'), article) + + return new_server_found +#------------------------------------------------------------------------------- + +YDEC_TRANS = ''.join([chr((i + 256 - 42) % 256) for i in xrange(256)]) +def decode(article, data): + data = strip(data) + ## No point in continuing if we don't have any data left + if data: + nzf = article.nzf + nzo = nzf.nzo + yenc, data = yCheck(data) + ybegin, ypart, yend = yenc + decoded_data = None + + #Deal with non-yencoded posts + if not ybegin: + found = False + for i in xrange(10): + if data[i].startswith('begin '): + nzf.set_filename(name_fixer(data[i].split(None, 2)[2])) + nzf.set_type('uu') + found = True + break + if found: + for n in xrange(i): + data.pop(0) + if data[-1] == 'end': + data.pop() + if data[-1] == '`': + data.pop() + + decoded_data = '\r\n'.join(data) + + #Deal with yenc encoded posts + elif (ybegin and yend): + if 'name' in ybegin: + nzf.set_filename(name_fixer(ybegin['name'])) + else: + logging.debug("Possible corrupt header detected " + \ + "=> ybegin: %s", ybegin) + nzf.set_type('yenc') + # Decode data + if HAVE_YENC: + decoded_data, crc = _yenc.decode_string(''.join(data))[:2] + partcrc = '%08X' % ((crc ^ -1) & 2**32L - 1) + else: + data = ''.join(data) + for i in (0, 9, 10, 13, 27, 32, 46, 61): + j = '=%c' % (i + 64) + data = data.replace(j, chr(i)) + decoded_data = data.translate(YDEC_TRANS) + crc = binascii.crc32(decoded_data) + partcrc = '%08X' % (crc & 2**32L - 1) + + if ypart: + crcname = 'pcrc32' + else: + crcname = 'crc32' + + if crcname in yend: + _partcrc = '0' * (8 - len(yend[crcname])) + yend[crcname].upper() + else: + _partcrc = None + logging.debug("Corrupt header detected " + \ + "=> yend: %s", yend) + + if not (_partcrc == partcrc): + raise CrcError(_partcrc, partcrc, decoded_data) + else: + raise BadYenc() + + return decoded_data + +def yCheck(data): + ybegin = None + ypart = None + yend = None + + ## Check head + for i in xrange(10): + try: + if data[i].startswith('=ybegin '): + splits = 3 + if data[i].find(' part=') > 0: + splits += 1 + if data[i].find(' total=') > 0: + splits += 1 + + ybegin = ySplit(data[i], splits) + + if data[i+1].startswith('=ypart '): + ypart = ySplit(data[i+1]) + data = data[i+2:] + break + else: + data = data[i+1:] + break + except IndexError: + break + + ## Check tail + for i in xrange(-1, -11, -1): + try: + if data[i].startswith('=yend '): + yend = ySplit(data[i]) + data = data[:i] + break + except IndexError: + break + + return ((ybegin, ypart, yend), data) + +# Example: =ybegin part=1 line=128 size=123 name=-=DUMMY=- abc.par +YSPLIT_RE = re.compile(r'([a-zA-Z0-9]+)=') +def ySplit(line, splits = None): + fields = {} + + if splits: + parts = YSPLIT_RE.split(line, splits)[1:] + else: + parts = YSPLIT_RE.split(line)[1:] + + if len(parts) % 2: + return fields + + for i in range(0, len(parts), 2): + key, value = parts[i], parts[i+1] + fields[key] = value.strip() + + return fields + +def strip(data): + while data and not data[0]: + data.pop(0) + + while data and not data[-1]: + data.pop() + + for i in xrange(len(data)): + if data[i][:2] == '..': + data[i] = data[i][1:] + return data diff --git a/sabnzbd/decorators.py b/sabnzbd/decorators.py new file mode 100644 index 0000000..5771339 --- /dev/null +++ b/sabnzbd/decorators.py @@ -0,0 +1,47 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +################################################################################ +# Decorators # +################################################################################ +from threading import RLock, Condition + +NZBQUEUE_LOCK = RLock() +CV = Condition(NZBQUEUE_LOCK) + +def synchronized(lock): + def wrap(f): + def newFunction(*args, **kw): + lock.acquire() + try: + return f(*args, **kw) + finally: + lock.release() + return newFunction + return wrap + + +def synchronized_CV(func): + global CV + def call_func(*params, **kparams): + CV.acquire() + try: + return func(*params, **kparams) + finally: + CV.notifyAll() + CV.release() + return call_func diff --git a/sabnzbd/dirscanner.py b/sabnzbd/dirscanner.py new file mode 100644 index 0000000..473b7fa --- /dev/null +++ b/sabnzbd/dirscanner.py @@ -0,0 +1,356 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.dirscanner - Scanner for Watched Folder +""" + +import os +import time +import logging +import re +import zipfile +import gzip +import threading + +import sabnzbd +from sabnzbd.constants import * +from sabnzbd.utils.rarfile import is_rarfile, RarFile +import sabnzbd.nzbstuff as nzbstuff +import sabnzbd.misc as misc +import sabnzbd.config as config +import sabnzbd.cfg as cfg +import sabnzbd.nzbqueue +from sabnzbd.lang import Ta + + +RE_CAT = re.compile(r'^{{(\w+)}}(.+)') # Category prefix +def name_to_cat(fname, cat=None): + """ + Translate Get options associated with the category. + Category options have priority over default options. + """ + if cat is None: + m = RE_CAT.search(fname) + if m and m.group(1) and m.group(2): + cat = m.group(1).lower() + fname = m.group(2) + logging.debug('Job %s has category %s', fname, cat) + + return fname, cat + + +def CompareStat(tup1, tup2): + """ Test equality of two stat-tuples, content-related parts only """ + if tup1.st_ino != tup2.st_ino: return False + if tup1.st_size != tup2.st_size: return False + if tup1.st_mtime != tup2.st_mtime: return False + if tup1.st_ctime != tup2.st_ctime: return False + return True + + +def ProcessArchiveFile(filename, path, pp=None, script=None, cat=None, catdir=None, keep=False, priority=None): + """ Analyse ZIP file and create job(s). + Accepts ZIP files with ONLY nzb/nfo/folder files in it. + returns: -1==Error/Retry, 0==OK, 1==Ignore + """ + if catdir is None: + catdir = cat + + filename, cat = name_to_cat(filename, catdir) + + if path.lower().endswith('.zip'): + try: + zf = zipfile.ZipFile(path) + except: + return -1 + elif is_rarfile(path): + try: + zf = RarFile(path) + except: + return -1 + else: + return 1 + + status = 1 + names = zf.namelist() + names.sort() + for name in names: + name = name.lower() + if not (name.endswith('.nzb') or name.endswith('.nfo') or name.endswith('/')): + status = 1 + break + elif name.endswith('.nzb'): + status = 0 + if status == 0: + for name in names: + if name.lower().endswith('.nzb'): + try: + data = zf.read(name) + except: + zf.close() + return -1 + name = re.sub(r'\[.*nzbmatrix.com\]', '', name) + name = os.path.basename(name) + name = misc.sanitize_foldername(name) + if data: + try: + nzo = nzbstuff.NzbObject(name, 0, pp, script, data, cat=cat, priority=priority) + except: + nzo = None + if nzo: + sabnzbd.nzbqueue.add_nzo(nzo) + zf.close() + try: + if not keep: os.remove(path) + except: + logging.error(Ta('error-remove@1'), path) + logging.debug("Traceback: ", exc_info = True) + status = 1 + else: + zf.close() + status = 1 + + return status + + +def ProcessSingleFile(filename, path, pp=None, script=None, cat=None, catdir=None, keep=False, priority=None, nzbname=None): + """ Analyse file and create a job from it + Supports NZB, NZB.GZ and GZ.NZB-in-disguise + returns: -2==Error/retry, -1==Error, 0==OK, 1==OK-but-ignorecannot-delete + """ + if catdir is None: + catdir = cat + + try: + f = open(path, 'rb') + b1 = f.read(1) + b2 = f.read(1) + f.close() + + if (b1 == '\x1f' and b2 == '\x8b'): + # gzip file or gzip in disguise + name = filename.replace('.nzb.gz', '.nzb') + f = gzip.GzipFile(path, 'rb') + else: + name = filename + f = open(path, 'rb') + data = f.read() + f.close() + except: + logging.warning(Ta('warn-noRead@1'), path) + logging.debug("Traceback: ", exc_info = True) + return -2 + + + if name: + name, cat = name_to_cat(name, catdir) + # The name is used as the name of the folder, so sanitize it using folder specific santization + name = misc.sanitize_foldername(name) + + try: + nzo = nzbstuff.NzbObject(name, 0, pp, script, data, cat=cat, priority=priority, nzbname=nzbname) + except TypeError: + # Duplicate, ignore + nzo = None + except: + if data.find("= 0 and data.find(" 0: + logging.info('Trying to import %s', path) + + # Wait until the attributes are stable for 1 second + # but give up after 3 sec + stable = False + for n in xrange(3): + time.sleep(1.0) + try: + stat_tuple_tmp = os.stat(path) + except: + continue + if CompareStat(stat_tuple, stat_tuple_tmp): + stable = True + break + else: + stat_tuple = stat_tuple_tmp + + if not stable: + continue + + # Handle ZIP files, but only when containing just NZB files + if ext in ('.zip', '.rar') : + res = ProcessArchiveFile(filename, path, catdir=catdir) + if res == -1: + self.suspected[path] = stat_tuple + elif res == 0: + self.error_reported = False + else: + self.ignored[path] = 1 + + # Handle .nzb, .nzb.gz or gzip-disguised-as-nzb + elif ext == '.nzb' or filename.lower().endswith('.nzb.gz'): + res = ProcessSingleFile(filename, path, catdir=catdir) + if res < 0: + self.suspected[path] = stat_tuple + elif res == 0: + self.error_reported = False + else: + self.ignored[path] = 1 + + else: + self.ignored[path] = 1 + + CleanList(self.ignored, folder, files) + CleanList(self.suspected, folder, files) + + logging.info('Dirscanner starting up') + self.shutdown = False + + while not self.shutdown: + # Use variable scan delay + dirscan_dir = self.dirscan_dir + x = self.dirscan_speed + while (x > 0) and not self.shutdown: + time.sleep(1.0) + x = x - 1 + + if dirscan_dir and not self.shutdown and not sabnzbd.PAUSED_ALL: + run_dir(dirscan_dir, None) + + try: + list = os.listdir(dirscan_dir) + except: + if not self.error_reported: + logging.error(Ta('error-readWatched@1'), dirscan_dir) + self.error_reported = True + list = [] + + cats = config.get_categories() + for dd in list: + dpath = os.path.join(dirscan_dir, dd) + if os.path.isdir(dpath) and dd.lower() in cats: + run_dir(dpath, dd.lower()) + diff --git a/sabnzbd/downloader.py b/sabnzbd/downloader.py new file mode 100644 index 0000000..d8eb41a --- /dev/null +++ b/sabnzbd/downloader.py @@ -0,0 +1,842 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.downloader - download engine +""" + +import time +import select +import logging +import datetime +from threading import Thread +from nntplib import NNTPPermanentError +import socket + +import sabnzbd +from sabnzbd.decorators import synchronized_CV, CV +from sabnzbd.decoder import Decoder +from sabnzbd.newswrapper import NewsWrapper, request_server_info +from sabnzbd.utils import osx +from sabnzbd.constants import * +import sabnzbd.config as config +import sabnzbd.cfg as cfg +from sabnzbd.bpsmeter import BPSMeter +import sabnzbd.scheduler +import sabnzbd.nzbqueue +from sabnzbd.lang import T, Ta + +#------------------------------------------------------------------------------ +# Timeout penalty in minutes for each cause +_PENALTY_UNKNOWN = 3 # Unknown cause +_PENALTY_502 = 5 # Unknown 502 +_PENALTY_TIMEOUT = 10 # Server doesn't give an answer (multiple times) +_PENALTY_SHARE = 10 # Account sharing detected +_PENALTY_TOOMANY = 10 # Too many connections +_PENALTY_PERM = 10 # Permanent error, like bad username/password +_PENALTY_SHORT = 1 # Minimal penalty when no_penalties is set + +#------------------------------------------------------------------------------ +# Wrapper functions + +__DOWNLOADER = None # Global pointer to post-proc instance + + +def init(paused): + global __DOWNLOADER + if __DOWNLOADER: + __DOWNLOADER.__init__(paused or __DOWNLOADER.paused) + else: + __DOWNLOADER = Downloader(paused) + +def start(): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.start() + + +def servers(): + global __DOWNLOADER + if __DOWNLOADER: return __DOWNLOADER.servers + +def stop(): + global __DOWNLOADER + CV.acquire() + try: + __DOWNLOADER.stop() + finally: + CV.notifyAll() + CV.release() + try: + __DOWNLOADER.join() + except: + pass + +def alive(): + global __DOWNLOADER + if __DOWNLOADER: + return __DOWNLOADER.isAlive() + else: + return False + +#------------------------------------------------------------------------------ + +@synchronized_CV +def pause_downloader(save=True): + global __DOWNLOADER + if __DOWNLOADER: + __DOWNLOADER.pause() + if cfg.autodisconnect(): + __DOWNLOADER.disconnect() + if save: + sabnzbd.save_state() + +@synchronized_CV +def resume_downloader(): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.resume() + +@synchronized_CV +def delay_downloader(): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.delay() + +@synchronized_CV +def undelay_downloader(): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.undelay() + +@synchronized_CV +def idle_downloader(): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.wait_postproc() + +@synchronized_CV +def unidle_downloader(): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.resume_postproc() + +@synchronized_CV +def limit_speed(value): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.limit_speed(int(value)) + logging.info("Bandwidth limit set to %s", value) + +def update_server(oldserver, newserver): + global __DOWNLOADER + try: + CV.acquire() + try: + __DOWNLOADER.init_server(oldserver, newserver) + finally: + CV.notifyAll() + CV.release() + except: + logging.exception("Error accessing DOWNLOADER?") + +@synchronized_CV +def set_paused(state): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.paused = state + +@synchronized_CV +def unblock(server): + global __DOWNLOADER + if __DOWNLOADER: return __DOWNLOADER.unblock(server) + +@synchronized_CV +def unblock_all(): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.unblock_all() + +@synchronized_CV +def wakeup(): + # Just let the decorator rattle the semaphore + pass + + +#------------------------------------------------------------------------------ + +def paused(): + global __DOWNLOADER + if __DOWNLOADER: return __DOWNLOADER.paused + +def get_limit(): + global __DOWNLOADER + if __DOWNLOADER: return __DOWNLOADER.get_limit() + +def disconnect(): + global __DOWNLOADER + if __DOWNLOADER: __DOWNLOADER.disconnect() + +def delayed(): + global __DOWNLOADER + if __DOWNLOADER: return __DOWNLOADER.delayed + +def active_primaries(): + global __DOWNLOADER + if __DOWNLOADER: return __DOWNLOADER.active_primaries() + +#------------------------------------------------------------------------------ +class Server: + def __init__(self, id, host, port, timeout, threads, fillserver, ssl, username = None, + password = None, optional=False): + self.id = id + self.newid = None + self.restart = False + self.host = host + self.port = port + self.timeout = timeout + self.threads = threads + self.fillserver = fillserver + self.ssl = ssl + self.optional = optional + + self.username = username + self.password = password + + self.busy_threads = [] + self.idle_threads = [] + self.active = True + self.bad_cons = 0 + self.errormsg = '' + self.warning = '' + self.info = None # Will hold getaddrinfo() list + self.request = False # True if a getaddrinfo() request is pending + + for i in range(threads): + self.idle_threads.append(NewsWrapper(self, i+1)) + + def stop(self, readers, writers): + for nw in self.idle_threads: + try: + fno = nw.nntp.sock.fileno() + except: + fno = None + if fno and fno in readers: + readers.pop(fno) + if fno and fno in writers: + writers.pop(fno) + nw.terminate(quit=True) + self.idle_threads = [] + + def __repr__(self): + return "%s:%s" % (self.host, self.port) + + +#------------------------------------------------------------------------------ + +class Downloader(Thread): + def __init__(self, paused = False): + Thread.__init__(self) + + logging.debug("Initializing downloader/decoder") + + # Used for scheduled pausing + self.paused = paused + + #used for throttling bandwidth and scheduling bandwidth changes + self.bandwidth_limit = cfg.bandwidth_limit() + cfg.bandwidth_limit.callback(self.speed_set) + + # Used for reducing speed + self.delayed = False + + self.postproc = False + + self.shutdown = False + + # A user might change server parsm again before server restart is ready. + # Keep a counter to prevent multiple restarts + self.__restart = 0 + + self.force_disconnect = False + + self.read_fds = {} + self.write_fds = {} + + self.servers = [] + self._timers = {} + + for server in config.get_servers(): + self.init_server(None, server) + + self.decoder = Decoder(self.servers) + + + def init_server(self, oldserver, newserver): + """ Setup or re-setup single server + When oldserver is defined and in use, delay startup. + Return True when newserver is primary + Note that the server names are "host:port" strings! + """ + + primary = False + create = False + + servers = config.get_servers() + if newserver in servers: + srv = servers[newserver] + enabled = srv.enable() + host = srv.host() + port = srv.port() + timeout = srv.timeout() + threads = srv.connections() + fillserver = srv.fillserver() + primary = enabled and (not fillserver) and (threads > 0) + ssl = srv.ssl() and sabnzbd.newswrapper.HAVE_SSL + username = srv.username() + password = srv.password() + optional = srv.optional() + create = True + + if oldserver: + for n in xrange(len(self.servers)): + if self.servers[n].id == oldserver: + # Server exists, do re-init later + create = False + self.servers[n].newid = newserver + self.servers[n].restart = True + self.__restart += 1 + break + + if create and enabled and host and port and threads: + self.servers.append(Server(newserver, host, port, timeout, threads, fillserver, ssl, + username, password, optional)) + + return primary + + def stop(self): + self.shutdown = True + osx.sendGrowlMsg("SABnzbd",T('grwl-shutdown-begin-msg'),osx.NOTIFICATION['startup']) + + def resume(self): + logging.info("Resuming") + self.paused = False + + def pause(self): + logging.info("Pausing") + osx.sendGrowlMsg("SABnzbd",T('grwl-paused-msg'),osx.NOTIFICATION['download']) + self.paused = True + if self.is_paused(): + BPSMeter.do.reset() + + def delay(self): + logging.info("Delaying") + self.delayed = True + + def undelay(self): + logging.info("Undelaying") + self.delayed = False + + def wait_postproc(self): + logging.info("Waiting for post-processing to finish") + self.postproc = True + + def resume_postproc(self): + logging.info("Post-processing finished, resuming download") + self.postproc = False + + def disconnect(self): + self.force_disconnect = True + + def limit_speed(self, value): + self.bandwidth_limit = value + + def get_limit(self): + return self.bandwidth_limit + + def speed_set(self): + self.bandwidth_limit = cfg.bandwidth_limit() + + def is_paused(self): + if not self.paused: + return False + else: + if sabnzbd.nzbqueue.has_forced_items(): + return False + else: + return True + + def active_primaries(self): + """ Check if any primary server is defined and active """ + for server in self.servers: + if server.active and not server.fillserver: + return True + return False + + def maybe_block_server(self, server): + if server.optional and server.active and (server.bad_cons/server.threads) > 3: + # Optional and active server had too many problems, + # disable it now and send a re-enable plan to the scheduler + server.bad_cons = 0 + server.active = False + server.errormsg = T('warn-ignoreServer@2') % ('', _PENALTY_TIMEOUT) + logging.warning(Ta('warn-ignoreServer@2'), server.id, _PENALTY_TIMEOUT) + self.plan_server(server.id, _PENALTY_TIMEOUT) + sabnzbd.nzbqueue.reset_all_try_lists() + + + def run(self): + self.decoder.start() + + while 1: + for server in self.servers: + for nw in server.busy_threads[:]: + if nw.nntp.error_msg or (nw.timeout and time.time() > nw.timeout): + if nw.nntp.error_msg: + self.__reset_nw(nw, "", warn=False) + else: + self.__reset_nw(nw, "timed out") + server.bad_cons += 1 + self.maybe_block_server(server) + if server.restart: + if not server.busy_threads: + newid = server.newid + server.stop(self.read_fds, self.write_fds) + self.servers.remove(server) + if newid: + self.init_server(None, newid) + self.__restart -= 1 + sabnzbd.nzbqueue.reset_all_try_lists() + # Have to leave this loop, because we removed element + break + else: + # Restart pending, don't add new articles + continue + + if not server.idle_threads or server.restart or self.is_paused() or self.shutdown or self.delayed or self.postproc: + continue + + if not (server.active and sabnzbd.nzbqueue.has_articles_for(server)): + continue + + for nw in server.idle_threads[:]: + if nw.timeout: + if time.time() < nw.timeout: + continue + else: + nw.timeout = None + + if not server.active: + break + + if server.info is None: + self.maybe_block_server(server) + request_server_info(server) + break + + article = sabnzbd.nzbqueue.get_article(server) + + if not article: + break + + else: + server.idle_threads.remove(nw) + server.busy_threads.append(nw) + + nw.article = article + + if nw.connected: + self.__request_article(nw) + else: + try: + logging.info("%s@%s:%s: Initiating connection", + nw.thrdnum, server.host, server.port) + nw.init_connect() + self.write_fds[nw.nntp.sock.fileno()] = nw + except: + logging.error(Ta('error-noInit@3'), + nw.thrdnum, server.host, + server.port) + logging.debug("Traceback: ", exc_info = True) + self.__reset_nw(nw, "failed to initialize") + + # Exit-point + if self.shutdown: + empty = True + for server in self.servers: + if server.busy_threads: + empty = False + break + + if empty: + self.decoder.stop() + self.decoder.join() + + for server in self.servers: + server.stop(self.read_fds, self.write_fds) + + logging.info("Shutting down") + break + + if self.force_disconnect: + for server in self.servers: + for nw in server.idle_threads + server.busy_threads: + quit = nw.connected and server.active + self.__reset_nw(nw, "forcing disconnect", warn=False, wait=False, quit=quit) + # Make sure server address resolution is refreshed + server.info = None + + self.force_disconnect = False + + # => Select + readkeys = self.read_fds.keys() + writekeys = self.write_fds.keys() + + if readkeys or writekeys: + read, write, error = select.select(readkeys, writekeys, (), 1.0) + + else: + read, write, error = ([], [], []) + + BPSMeter.do.reset() + + time.sleep(1.0) + + CV.acquire() + while (not sabnzbd.nzbqueue.has_articles() or self.is_paused() or self.delayed or self.postproc) and not \ + self.shutdown and not self.__restart: + CV.wait() + CV.release() + + self.force_disconnect = False + + for selected in write: + nw = self.write_fds[selected] + + fileno = nw.nntp.sock.fileno() + + if fileno not in self.read_fds: + self.read_fds[fileno] = nw + + if fileno in self.write_fds: + self.write_fds.pop(fileno) + + if not read: + BPSMeter.do.update(0) + continue + + for selected in read: + nw = self.read_fds[selected] + article = nw.article + server = nw.server + + if article: + nzo = article.nzf.nzo + + try: + bytes, done, skip = nw.recv_chunk() + except: + bytes, done, skip = (0, False, False) + + if skip: + BPSMeter.do.update(0) + continue + + if bytes < 1: + self.__reset_nw(nw, "server closed connection", warn=False, wait=False) + continue + + else: + if self.bandwidth_limit: + bps = BPSMeter.do.get_bps() + bps += bytes + limit = self.bandwidth_limit * 1024 + if bps > limit: + while BPSMeter.do.get_bps() > limit: + time.sleep(0.05) + BPSMeter.do.update(0) + BPSMeter.do.update(bytes) + + if nzo: + nzo.update_bytes(bytes) + nzo.update_avg_kbs(BPSMeter.do.get_bps()) + + if len(nw.lines) == 1: + code = nw.lines[0][:3] + if not nw.connected: + done = False + + try: + nw.finish_connect() + logging.debug("%s@%s:%s last message -> %s", + nw.thrdnum, nw.server.host, + nw.server.port, nw.lines[0]) + nw.lines = [] + nw.data = '' + except NNTPPermanentError, error: + # Handle login problems + block = False + penalty = 0 + msg = error.response + ecode = msg[:3] + display_msg = ' [%s]' % msg + logging.debug('Server login problem: %s, %s', ecode, msg) + if ((ecode in ('502', '400')) and clues_too_many(msg)) or \ + (ecode == '481' and clues_too_many(msg)): + # Too many connections: remove this thread and reduce thread-setting for server + # Plan to go back to the full number after a penalty timeout + if server.active: + server.errormsg = Ta('error-serverTooMany@2') % ('', display_msg) + logging.error(Ta('error-serverTooMany@2'), server.host, server.port) + self.__reset_nw(nw, None, warn=False, destroy=True, quit=True) + self.plan_server(server.id, _PENALTY_TOOMANY) + server.threads -= 1 + elif ecode in ('502', '481') and clues_too_many_ip(msg): + # Account sharing? + if server.active: + server.errormsg = Ta('error-accountSharing') + display_msg + name = ' (%s:%s)' % (server.host, server.port) + logging.error(Ta('error-accountSharing') + name) + penalty = _PENALTY_SHARE + elif ecode in ('481', '482', '381') or (ecode == '502' and clues_login(msg)): + # Cannot login, block this server + if server.active: + server.errormsg = Ta('error-serverLogin@1') % display_msg + logging.error(Ta('error-serverLogin@1'), '%s:%s' % (server.host, server.port)) + penalty = _PENALTY_PERM + block = True + elif ecode == '502': + # Cannot connect (other reasons), block this server + if server.active: + server.errormsg = Ta('warn-noConnectServer@2') % ('', display_msg) + logging.warning(Ta('warn-noConnectServer@2'), '%s:%s' % (server.host, server.port), msg) + penalty = _PENALTY_502 + block = True + else: + # Unknown error, just keep trying + if server.active: + server.errormsg = Ta('error-serverNoConn@2') % ('', display_msg) + logging.error(Ta('error-serverNoConn@2'), '%s:%s' % (server.host, server.port), msg) + penalty = _PENALTY_UNKNOWN + if block or (penalty and server.optional): + if server.active: + server.active = False + if (not server.optional) and cfg.no_penalties(): + penalty = _PENALTY_SHORT + if penalty and (block or server.optional): + logging.info('Server %s ignored for %s minutes', server.id, penalty) + self.plan_server(server.id, penalty) + sabnzbd.nzbqueue.reset_all_try_lists() + self.__reset_nw(nw, None, warn=False, quit=True) + continue + except: + logging.error(Ta('error-serverFailed@4'), + nw.thrdnum, + nw.server.host, nw.server.port, nw.lines[0]) + # No reset-warning needed, above logging is sufficient + self.__reset_nw(nw, None, warn=False) + + if nw.connected: + logging.info("Connecting %s@%s:%s finished", + nw.thrdnum, nw.server.host, + nw.server.port) + self.__request_article(nw) + + elif code == '211': + done = False + + logging.debug("group command ok -> %s", + nw.lines) + nw.group = nw.article.nzf.nzo.get_group() + nw.lines = [] + nw.data = '' + self.__request_article(nw) + + elif code in ('411', '423', '430'): + done = True + nw.lines = None + + logging.info('Thread %s@%s:%s: Article ' + \ + '%s missing', + nw.thrdnum, nw.server.host, + nw.server.port, article.article) + + elif code == '480': + if server.active: + server.active = False + server.errormsg = T('error-serverCred@1') % '' + self.plan_server(server.id, 0) + sabnzbd.nzbqueue.reset_all_try_lists() + msg = T('error-serverCred@1') % ('%s:%s' % (nw.server.host, nw.server.port)) + self.__reset_nw(nw, msg, quit=True) + + if done: + logging.info('Thread %s@%s:%s: %s done', + nw.thrdnum, server.host, + server.port, article.article) + self.decoder.decode(article, nw.lines) + + nw.soft_reset() + server.busy_threads.remove(nw) + server.idle_threads.append(nw) + + def __lookup_nw(self, nw): + ''' Find the fileno matching the nw, needed for closed connections ''' + for f in self.read_fds: + if self.read_fds[f] == nw: + return f + for f in self.write_fds: + if self.read_fds[f] == nw: + return f + return None + + def __reset_nw(self, nw, errormsg, warn=True, wait=True, destroy=False, quit=False): + server = nw.server + article = nw.article + fileno = None + + if nw.nntp: + try: + fileno = nw.nntp.sock.fileno() + except: + fileno = self.__lookup_nw(nw) + destroy = True + nw.nntp.error_msg = None + + if warn and errormsg: + server.warning = errormsg + logging.info('Thread %s@%s:%s: ' + errormsg, + nw.thrdnum, server.host, server.port) + elif errormsg: + logging.info('Thread %s@%s:%s: ' + errormsg, + nw.thrdnum, server.host, server.port) + + if nw in server.busy_threads: + server.busy_threads.remove(nw) + if not (destroy or nw in server.idle_threads): + server.idle_threads.append(nw) + + if fileno and fileno in self.write_fds: + self.write_fds.pop(fileno) + if fileno and fileno in self.read_fds: + self.read_fds.pop(fileno) + + # Remove this server from try_list + if article: + article.fetcher = None + + nzf = article.nzf + nzo = nzf.nzo + + ## Allow all servers to iterate over each nzo/nzf again ## + sabnzbd.nzbqueue.reset_try_lists(nzf, nzo) + + if destroy: + nw.terminate(quit=quit) + else: + nw.hard_reset(wait, quit=quit) + + def __request_article(self, nw): + try: + if cfg.send_group() and nw.article.nzf.nzo.get_group() != nw.group: + group = nw.article.nzf.nzo.get_group() + logging.info('Thread %s@%s:%s: GROUP <%s>', + nw.thrdnum, nw.server.host, + nw.server.port, group) + nw.send_group(group) + else: + logging.info('Thread %s@%s:%s: BODY %s', + nw.thrdnum, nw.server.host, + nw.server.port, nw.article.article) + nw.body() + + fileno = nw.nntp.sock.fileno() + if fileno not in self.read_fds: + self.read_fds[fileno] = nw + except socket.error, err: + logging.info('Looks like server closed connection: %s', err) + self.__reset_nw(nw, "server broke off connection", quit=False) + except: + logging.error('Suspect error in downloader') + logging.debug("Traceback: ", exc_info = True) + self.__reset_nw(nw, "server broke off connection", quit=False) + + #------------------------------------------------------------------------------ + # Timed restart of servers admin. + # For each server all planned events are kept in a list. + # When the first timer of a server fires, all other existing timers + # are neutralized. + # Each server has a dictionary entry, consisting of a list of timestamps. + + def plan_server(self, server_id, interval): + """ Plan the restart of a server in 'interval' minutes """ + logging.debug('Set planned server resume %s in %s mins', server_id, interval) + if server_id not in self._timers: + self._timers[server_id] = [] + stamp = datetime.datetime.now() + self._timers[server_id].append(stamp) + if interval: + sabnzbd.scheduler.plan_server(self.trigger_server, [server_id, stamp], interval) + + def trigger_server(self, server_id, timestamp): + """ Called by scheduler, start server if timer still valid """ + logging.debug('Trigger planned server resume %s', server_id) + if server_id in self._timers: + if timestamp in self._timers[server_id]: + del self._timers[server_id] + self.init_server(server_id, server_id) + + def unblock(self, server_id): + # Remove timer + try: + # Use this instead of if/del, because the line below is atomic + # an if/del could be victim of a race condition + del self._timers[server_id] + except KeyError: + pass + # Activate server if it was inactive + for server in self.servers: + if server.id == server_id and not server.active: + logging.debug('Unblock server %s', server_id) + self.init_server(server_id, server_id) + break + + def unblock_all(self): + for server_id in self._timers.keys(): + self.unblock(server_id) + + +#------------------------------------------------------------------------------ +def clues_login(text): + """ Check for any "failed login" clues in the response code + """ + text = text.lower() + for clue in ('username', 'password', 'invalid', 'authen'): + if clue in text: + return True + return False + + +def clues_too_many(text): + """ Check for any "too many connections" clues in the response code + """ + text = text.lower() + for clue in ('exceed', 'connections', 'too many', 'threads', 'limit'): + if clue in text: + return True + return False + + +def clues_too_many_ip(text): + """ Check for any "account sharing" clues in the response code + """ + text = text.lower() + for clue in ('simultaneous ip', 'multiple ip'): + if clue in text: + return True + return False diff --git a/sabnzbd/emailer.py b/sabnzbd/emailer.py new file mode 100644 index 0000000..d83d913 --- /dev/null +++ b/sabnzbd/emailer.py @@ -0,0 +1,223 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.emailer - Send notification emails +""" +#------------------------------------------------------------------------------ + +from sabnzbd.utils import ssmtplib +import smtplib +import os +import logging +import re +import time +import glob +from sabnzbd.constants import * +import sabnzbd +from sabnzbd.misc import to_units, split_host +from sabnzbd.codecs import LatinFilter +import sabnzbd.cfg as cfg +from sabnzbd.lang import T, Ta + + +################################################################################ +# EMAIL_SEND +# +# +################################################################################ +def send(message): + """ Send message if message non-empty and email-parms are set """ + if not message.strip('\n\r\t '): + return "Skipped empty message" + + if cfg.email_server() and cfg.email_to() and cfg.email_from(): + + failure = T('error-mailSend') + server, port = split_host(cfg.email_server()) + if not port: + port = 25 + + logging.info("Connecting to server %s:%s", server, port) + + try: + mailconn = ssmtplib.SMTP_SSL(server, port) + mailconn.ehlo() + + logging.info("Connected to server %s:%s", server, port) + + except Exception, errorcode: + if errorcode[0]: + + # Non SSL mail server + logging.debug("Non-SSL mail server detected " \ + "reconnecting to server %s:%s", server, port) + + try: + mailconn = smtplib.SMTP(server, port) + mailconn.ehlo() + except: + logging.error(Ta('error-mailNoConn')) + return failure + else: + logging.error(Ta('error-mailNoConn')) + return failure + + # TLS support + if mailconn.ehlo_resp: + m = re.search('STARTTLS', mailconn.ehlo_resp, re.IGNORECASE) + if m: + logging.debug("TLS mail server detected") + + try: + mailconn.starttls() + mailconn.ehlo() + except: + logging.error(Ta('error-mailTLS')) + return failure + + # Authentication + if (cfg.email_account() != "") and (cfg.email_pwd() != ""): + try: + mailconn.login(cfg.email_account(), cfg.email_pwd()) + except: + logging.error(Ta('error-mailAuth')) + return failure + + try: + if isinstance(message, unicode): + message = message.encode('utf8') + mailconn.sendmail(cfg.email_from(), cfg.email_to(), message) + except: + logging.error(Ta('error-mailSend')) + return failure + + try: + mailconn.close() + except: + logging.warning(Ta('warn-noEmailClose')) + + logging.info("Notification e-mail succesfully sent") + return T('msg-emailOK') + + + +################################################################################ +# email_endjob +# +# +################################################################################ +from Cheetah.Template import Template + +def send_with_template(prefix, parm): + """ Send an email using template """ + + parm['to'] = cfg.email_to() + parm['from'] = cfg.email_from() + parm['date'] = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) + + lst = [] + path = cfg.email_dir.get_path() + if path and os.path.exists(path): + try: + lst = glob.glob(os.path.join(path, '%s-*.tmpl' % prefix)) + except: + logging.error(Ta('error-mailTempl@1'), path) + else: + path = os.path.join(sabnzbd.DIR_PROG, DEF_LANGUAGE) + tpath = os.path.join(path, '%s-%s.tmpl' % (prefix, cfg.language())) + if os.path.exists(tpath): + lst = [tpath] + else: + lst = [os.path.join(path, '%s-us-en.tmpl' % prefix)] + + ret = "No templates found" + for temp in lst: + if os.access(temp, os.R_OK): + source = _decode_file(temp) + message = Template(source=source, + searchList=[parm], + filter=LatinFilter, + compilerSettings={'directiveStartToken': ''}) + ret = send(message.respond()) + del message + return ret + + +def endjob(filename, msgid, cat, status, path, bytes, stages, script, script_output, script_ret): + """ Send end-of-job email """ + + # Translate the stage names + xstages = {} + for stage in stages: + xstages[T('stage-'+stage.lower())] = stages[stage] + + parm = {} + parm['status'] = status + parm['name'] = filename + parm['path'] = path + parm['msgid'] = str(msgid) + parm['stages'] = xstages + parm['script'] = script + parm['script_output'] = script_output + parm['script_ret'] = script_ret + parm['cat'] = cat + parm['size'] = "%sB" % to_units(bytes) + parm['end_time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + + return send_with_template('email', parm) + + +def rss_mail(feed, jobs): + """ Send notification email containing list of files """ + + parm = {'amount' : len(jobs), 'feed' : feed, 'jobs' : jobs} + return send_with_template('rss', parm) + + +################################################################################ +# EMAIL_DISKFULL +# +# +################################################################################ +def diskfull(): + """ Send email about disk full, no templates """ + + if cfg.email_full(): + return send(T('email-full@2') % (cfg.email_to(), cfg.email_from())) + else: + return "" + + +################################################################################ +def _decode_file(path): + """ Return content of file in Unicode string + using encoding as specified in the file. + Work-around for dumb handling of decoding by Cheetah. + """ + fp = open(path, 'r') + txt = fp.readline() + m = re.search(r'#encoding[:\s]+(\S+)', txt) + if m and m.group(1): + encoding = m.group(1) + else: + encoding = 'latin-1' + source = fp.read() + fp.close() + + return source.decode(encoding) diff --git a/sabnzbd/interface.py b/sabnzbd/interface.py new file mode 100644 index 0000000..a1b9071 --- /dev/null +++ b/sabnzbd/interface.py @@ -0,0 +1,3700 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.interface - webinterface +""" + +import os +import datetime +import time +import cherrypy +import logging +import re +import glob +import urllib +from xml.sax.saxutils import escape + +from sabnzbd.utils.rsslib import RSS, Item +from sabnzbd.utils.json import JsonWriter +import sabnzbd +import sabnzbd.rss +import sabnzbd.scheduler as scheduler + +from Cheetah.Template import Template +import sabnzbd.emailer as emailer +from sabnzbd.misc import real_path, loadavg, \ + to_units, diskfree, disktotal, get_ext, sanitize_foldername, \ + get_filename, cat_to_opts, IntConv, panic_old_queue +from sabnzbd.newswrapper import GetServerParms +from sabnzbd.newzbin import Bookmarks, MSGIDGrabber +from sabnzbd.codecs import TRANS, xml_name, LatinFilter, unicoder, special_fixer, platform_encode +import sabnzbd.config as config +import sabnzbd.cfg as cfg +from sabnzbd.articlecache import ArticleCache +import sabnzbd.newsunpack +from sabnzbd.postproc import PostProcessor +import sabnzbd.downloader as downloader +from sabnzbd.bpsmeter import BPSMeter +import sabnzbd.nzbqueue as nzbqueue +from sabnzbd.database import build_history_info, unpack_history_info +import sabnzbd.wizard +from sabnzbd.utils.servertests import test_nntp_server_dict + +from sabnzbd.constants import * +from sabnzbd.lang import T, Ta, Tspec, list_languages, reset_language + +#------------------------------------------------------------------------------ +# Global constants + +DIRECTIVES = { + 'directiveStartToken': '', + 'prioritizeSearchListOverSelf' : True + } +FILTER = LatinFilter + +#------------------------------------------------------------------------------ +# +def check_server(host, port): + """ Check if server address resolves properly """ + + if host.lower() == 'localhost' and sabnzbd.AMBI_LOCALHOST: + return badParameterResponse(T('msg-warning-ambiLocalhost')) + + if GetServerParms(host, IntConv(port)): + return "" + else: + return badParameterResponse(T('msg-invalidServer@2') % (host, port)) + + +def ListScripts(default=False): + """ Return a list of script names """ + lst = [] + dd = cfg.script_dir.get_path() + + if dd and os.access(dd, os.R_OK): + if default: + lst = ['Default', 'None'] + else: + lst = ['None'] + for script in glob.glob(dd + '/*'): + if os.path.isfile(script): + sc= os.path.basename(script) + if sc != "_svn" and sc != ".svn": + lst.append(sc) + return lst + + +def ListCats(default=False): + """ Return list of categories """ + lst = sorted(config.get_categories().keys()) + if lst: + lst.insert(0, 'None') + if default: + lst.insert(0, 'Default') + return lst + + +def ConvertSpecials(p): + """ Convert None to 'None' and 'Default' to '' + """ + if p is None: + p = 'None' + elif p.lower() == T('default').lower(): + p = '' + return p + + +def Raiser(root, **kwargs): + args = {} + for key in kwargs: + val = kwargs.get(key) + if val: + args[key] = val + root = '%s?%s' % (root, urllib.urlencode(args)) + return cherrypy.HTTPRedirect(root) + + +def queueRaiser(root, kwargs): + return Raiser(root, start=kwargs.get('start'), + limit=kwargs.get('limit'), + search=kwargs.get('search'), + _dc=kwargs.get('_dc')) + +def dcRaiser(root, kwargs): + return Raiser(root, _dc=kwargs.get('_dc')) + + +#------------------------------------------------------------------------------ +def IsNone(value): + """ Return True if either None, 'None' or '' """ + return value==None or value=="" or value.lower()=='none' + + +def List2String(lst): + """ Return list as a comma-separated string """ + if type(lst) == type(""): + return lst + return ', '.join(lst) + +def Strip(txt): + """ Return stripped string, can handle None """ + try: + return txt.strip() + except: + return None + + +#------------------------------------------------------------------------------ +# Web login support +def get_users(): + users = {} + users[cfg.username()] = cfg.password() + return users + +def encrypt_pwd(pwd): + return pwd + + +def set_auth(conf): + """ Set the authentication for CherryPy + """ + if cfg.username() and cfg.password(): + conf.update({'tools.basic_auth.on' : True, 'tools.basic_auth.realm' : 'SABnzbd', + 'tools.basic_auth.users' : get_users, 'tools.basic_auth.encrypt' : encrypt_pwd}) + conf.update({'/api':{'tools.basic_auth.on' : False}, + '/m/api':{'tools.basic_auth.on' : False}, + '/sabnzbd/api':{'tools.basic_auth.on' : False}, + '/sabnzbd/m/api':{'tools.basic_auth.on' : False}, + }) + else: + conf.update({'tools.basic_auth.on':False}) + + +def check_session(kwargs): + """ Check session key """ + key = kwargs.get('session') + if not key: + key = kwargs.get('apikey') + msg = None + if not key: + logging.warning(Ta('warn-missingKey')) + msg = T('error-missingKey') + elif key != cfg.api_key(): + logging.warning(Ta('error-badKey')) + msg = T('error-badKey') + return msg + + +def check_apikey(kwargs, nokey=False): + """ Check api key """ + output = kwargs.get('output') + mode = kwargs.get('mode', '') + + # Don't give a visible warning: these commands are used by some + # external utilities to detect if username/password is required + special = mode in ('get_scripts', 'qstatus') + + # First check APIKEY, if OK that's sufficient + if not (cfg.disable_key() or nokey): + key = kwargs.get('apikey') + if not key: + if not special: + logging.warning(Ta('warn-apikeyNone')) + return report(output, 'API Key Required') + elif key != cfg.api_key(): + logging.warning(Ta('warn-apikeyBad')) + return report(output, 'API Key Incorrect') + else: + return None + + # No active APIKEY, check web credentials instead + if cfg.username() and cfg.password(): + if kwargs.get('ma_username') == cfg.username() and kwargs.get('ma_password') == cfg.password(): + pass + else: + if not special: + logging.warning(Ta('warn-authMissing')) + return report(output, 'Missing authentication') + return None + + +def del_from_section(kwargs): + """ Remove keyword in section """ + section = kwargs.get('section', '') + if section in ('servers', 'rss', 'categories'): + keyword = kwargs.get('keyword') + if keyword: + item = config.get_config(section, keyword) + if item: + item.delete() + del item + config.save_config() + if section == 'servers': + downloader.update_server(keyword, None) + return True + else: + return False + + +#------------------------------------------------------------------------------ +class NoPage: + def __init__(self): + pass + + @cherrypy.expose + def index(self, **kwargs): + return badParameterResponse(T('error-noSecUI')) + + +#------------------------------------------------------------------------------ +_MSG_NO_VALUE = 'expect one parameter' +_MSG_NO_VALUE2 = 'expect two parameters' +_MSG_INT_VALUE = 'expect integer value' +_MSG_NO_ITEM = 'item does not exist' +_MSG_NOT_IMPLEMENTED = 'not implemented' +_MSG_NO_FILE = 'no file given' +_MSG_NO_PATH = 'file does not exist' +_MSG_OUTPUT_FORMAT = 'Format not supported' +_MSG_NO_SUCH_CONFIG = 'Config item does not exist' +_MSG_BAD_SERVER_PARMS = 'Incorrect server settings' + +def remove_callable(dic): + """ Remove all callable items from dictionary """ + for key, value in dic.items(): + if callable(value): + del dic[key] + return dic + +_PLURAL_TO_SINGLE = { + 'categories' : 'category', + 'servers' : 'server', + 'rss' : 'feed', + 'scripts' : 'script', + 'warnings' : 'warning', + 'files' : 'file', + 'jobs' : 'job' + } +def plural_to_single(kw, def_kw=''): + try: + return _PLURAL_TO_SINGLE[kw] + except KeyError: + return def_kw + + +def report(output, error=None, keyword='value', data=None): + """ Report message in json, xml or plain text + If error is set, only an status/error report is made. + If no error and no data, only a status report is made. + Else, a data report is made (optional 'keyword' for outer XML section). + """ + if output == 'json': + content = "application/json;charset=UTF-8" + if error: + info = {'status':False, 'error':error} + elif data is None: + info = {'status':True} + else: + if hasattr(data,'__iter__') and not keyword: + info = data + else: + info = {keyword:data} + response = JsonWriter().write(info) + + elif output == 'xml': + content = "text/xml" + xmlmaker = xml_factory() + if error: + status_str = xmlmaker.run('result', {'status':False, 'error':error}) + elif data is None: + status_str = xmlmaker.run('result', {'status':True}) + else: + status_str = xmlmaker.run(keyword, data) + response = '\n%s\n' % status_str + + else: + content = "text/plain" + if error: + response = "error: %s\n" % error + elif data is None: + response = 'ok\n' + else: + if type(data) in (list, tuple): + # Special handling for list/tuple (backward compatibility) + data = [str(val) for val in data] + response = '%s\n' % ' '.join(data) + else: + response = '%s\n' % str(data) + + cherrypy.response.headers['Content-Type'] = content + cherrypy.response.headers['Pragma'] = 'no-cache' + return response + + +class MainPage: + def __init__(self, web_dir, root, web_dir2=None, root2=None, prim=True, first=0): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + if first >= 1: + self.m = MainPage(web_dir2, root2, prim=False) + if first == 2: + self.sabnzbd = MainPage(web_dir, '/sabnzbd/', web_dir2, '/sabnzbd/m/', prim=True, first=1) + self.queue = QueuePage(web_dir, root+'queue/', prim) + self.history = HistoryPage(web_dir, root+'history/', prim) + self.connections = ConnectionInfo(web_dir, root+'connections/', prim) + self.config = ConfigPage(web_dir, root+'config/', prim) + self.nzb = NzoPage(web_dir, root+'nzb/', prim) + self.wizard = sabnzbd.wizard.Wizard(web_dir, root+'wizard/', prim) + + + @cherrypy.expose + def index(self, **kwargs): + if sabnzbd.OLD_QUEUE and not cfg.warned_old_queue(): + cfg.warned_old_queue.set(True) + config.save_config() + return panic_old_queue() + + if kwargs.get('skip_wizard') or config.get_servers(): + info, pnfo_list, bytespersec = build_header(self.__prim) + + if cfg.newzbin_username() and cfg.newzbin_password.get_stars(): + info['newzbinDetails'] = True + + info['script_list'] = ListScripts(default=True) + info['script'] = cfg.dirscan_script() + + info['cat'] = 'Default' + info['cat_list'] = ListCats(True) + + info['warning'] = '' + if cfg.enable_unrar(): + if sabnzbd.newsunpack.RAR_PROBLEM and not cfg.ignore_wrong_unrar(): + info['warning'] = T('warn-badUnrar') + if not sabnzbd.newsunpack.RAR_COMMAND: + info['warning'] = T('warn-noUnpack') + if not sabnzbd.newsunpack.PAR2_COMMAND: + info['warning'] = T('warn-noRepair') + + template = Template(file=os.path.join(self.__web_dir, 'main.tmpl'), + filter=FILTER, searchList=[info], compilerSettings=DIRECTIVES) + return template.respond() + else: + # Redirect to the setup wizard + raise cherrypy.HTTPRedirect('/wizard/') + + #@cherrypy.expose + #def reset_lang(self, **kwargs): + # msg = check_session(kwargs) + # if msg: return msg + # reset_language(cfg.language()) + # raise dcRaiser(self.__root, kwargs) + + + def add_handler(self, kwargs): + id = kwargs.get('id', '') + if not id: + id = kwargs.get('url', '') + pp = kwargs.get('pp') + script = kwargs.get('script') + cat = kwargs.get('cat') + priority = kwargs.get('priority') + redirect = kwargs.get('redirect') + nzbname = kwargs.get('nzbname') + + RE_NEWZBIN_URL = re.compile(r'/browse/post/(\d+)') + newzbin_url = RE_NEWZBIN_URL.search(id.lower()) + + id = Strip(id) + if id and (id.isdigit() or len(id)==5): + sabnzbd.add_msgid(id, pp, script, cat, priority, nzbname) + elif newzbin_url: + sabnzbd.add_msgid(Strip(newzbin_url.group(1)), pp, script, cat, priority, nzbname) + elif id: + sabnzbd.add_url(id, pp, script, cat, priority, nzbname) + if not redirect: + redirect = self.__root + raise cherrypy.HTTPRedirect(redirect) + + + @cherrypy.expose + def addID(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + raise self.add_handler(kwargs) + + + @cherrypy.expose + def addURL(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + raise self.add_handler(kwargs) + + + @cherrypy.expose + def addFile(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + nzbfile = kwargs.get('nzbfile') + if nzbfile != None and nzbfile.filename and nzbfile.value: + sabnzbd.add_nzbfile(nzbfile, kwargs.get('pp'), kwargs.get('script'), + kwargs.get('cat'), kwargs.get('priority', NORMAL_PRIORITY)) + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def shutdown(self, **kwargs): + msg = check_session(kwargs) + if msg: + yield msg + else: + yield "Initiating shutdown..." + sabnzbd.halt() + yield "
        SABnzbd-%s shutdown finished" % sabnzbd.__version__ + cherrypy.engine.exit() + sabnzbd.SABSTOP = True + + @cherrypy.expose + def pause(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + scheduler.plan_resume(0) + downloader.pause_downloader() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def resume(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + scheduler.plan_resume(0) + sabnzbd.unpause_all() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def rss(self, **kwargs): + msg = check_apikey(kwargs, nokey=True) + if msg: return msg + + if kwargs.get('mode') == 'history': + return rss_history(cherrypy.url(), limit=kwargs.get('limit',50), search=kwargs.get('search')) + elif kwargs.get('mode') == 'queue': + return rss_qstatus() + elif kwargs.get('mode') == 'warnings': + return rss_warnings() + + @cherrypy.expose + def tapi(self, **kwargs): + """Handler for API over http, for template use + """ + msg = check_session(kwargs) + if msg: return msg + return self.api_handler(kwargs) + + @cherrypy.expose + def api(self, **kwargs): + """Handler for API over http, with explicit authentication parameters + """ + if kwargs.get('mode', '') not in ('version', 'auth'): + msg = check_apikey(kwargs) + if msg: return msg + return self.api_handler(kwargs) + + + def api_handler(self, kwargs): + """ Actual API handler, not exposed to Web-ui + """ + mode = kwargs.get('mode') + output = kwargs.get('output') + + if mode == 'set_config': + if kwargs.get('section') == 'servers': + handle_server_api(output, kwargs) + else: + res = config.set_config(kwargs) + if not res: + return report(output, _MSG_NO_SUCH_CONFIG) + config.save_config() + + if mode == 'del_config': + if del_from_section(kwargs): + return report(output) + else: + return report(output, _MSG_NOT_IMPLEMENTED) + + if mode in ('get_config', 'set_config'): + res, data = config.get_dconfig(kwargs.get('section'), kwargs.get('keyword')) + return report(output, keyword='config', data=data) + + if mode == 'qstatus': + if output == 'json': + # Compatibility Fix: + # Old qstatus did not have a keyword, so do not use one now. + keyword = '' + else: + keyword = 'queue' + return report(output, keyword=keyword, data=qstatus_data()) + + if mode == 'queue': + name = kwargs.get('name') + sort = kwargs.get('sort') + dir = kwargs.get('dir') + value = kwargs.get('value') + value2 = kwargs.get('value2') + start = kwargs.get('start') + limit = kwargs.get('limit') + + if name == 'delete': + if value.lower()=='all': + nzbqueue.remove_all_nzo() + return report(output) + elif value: + items = value.split(',') + nzbqueue.remove_multiple_nzos(items) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + elif name == 'delete_nzf': + # Value = nzo_id Value2 = nzf_id + if value and value2: + nzbqueue.remove_nzf(value, value2) + return report(output) + else: + return report(output, _MSG_NO_VALUE2) + elif name == 'rename': + if value and value2: + nzbqueue.rename_nzo(value, special_fixer(value2)) + return report(output) + else: + return report(output, _MSG_NO_VALUE2) + elif name == 'change_complete_action': + # http://localhost:8080/sabnzbd/api?mode=queue&name=change_complete_action&value=hibernate_pc + sabnzbd.change_queue_complete_action(value) + return report(output) + elif name == 'purge': + nzbqueue.remove_all_nzo() + return report(output) + elif name == 'pause': + if value: + items = value.split(',') + nzbqueue.pause_multiple_nzo(items) + return report(output) + elif name == 'resume': + if value: + items = value.split(',') + nzbqueue.resume_multiple_nzo(items) + return report(output) + elif name == 'priority': + if value and value2: + try: + try: + priority = int(value2) + except: + return report(output, _MSG_INT_VALUE) + items = value.split(',') + if len(items) > 1: + pos = nzbqueue.set_priority_multiple(items, priority) + else: + pos = nzbqueue.set_priority(value, priority) + # Returns the position in the queue, -1 is incorrect job-id + return report(output, keyword='position', data=pos) + except: + return report(output, _MSG_NO_VALUE2) + else: + return report(output, _MSG_NO_VALUE2) + elif name == 'sort': + if sort: + nzbqueue.sort_queue(sort,dir) + return report(output) + else: + return report(output, _MSG_NO_VALUE2) + + elif output in ('xml', 'json'): + if sort and sort != 'index': + reverse = dir.lower() == 'desc' + nzbqueue.sort_queue(sort,reverse) + + # &history=1 will show unprocessed items in the history + history = bool(kwargs.get('history')) + + info, pnfo_list, bytespersec, verboseList, dictn = \ + build_queue(history=history, start=start, limit=limit, output=output) + info['categories'] = info.pop('cat_list') + info['scripts'] = info.pop('script_list') + return report(output, keyword='queue', data=remove_callable(info)) + elif output == 'rss': + return rss_qstatus() + + else: + return report(output, _MSG_NOT_IMPLEMENTED) + + if mode == 'options': + return options_list(output) + + if mode == 'translate': + return report(output, keyword='value', data=T(kwargs.get('value'))) + + name = kwargs.get('name', '') + pp = kwargs.get('pp') + script = kwargs.get('script') + cat = kwargs.get('cat') + priority = kwargs.get('priority') + value = kwargs.get('value') + value2 = kwargs.get('value2') + start = kwargs.get('start') + limit = kwargs.get('limit') + nzbname = kwargs.get('nzbname') + + if mode == 'addfile': + # When uploading via flash it will send the nzb in a kw arg called Filedata + if name is None or isinstance(name, str) or isinstance(name, unicode): + name = kwargs.get('Filedata') + # Normal upload will send the nzb in a kw arg called nzbfile + if name is None or isinstance(name, str) or isinstance(name, unicode): + name = kwargs.get('nzbfile') + + if name is not None and name.filename and name.value: + sabnzbd.add_nzbfile(name, pp, script, cat, priority, nzbname) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + + if mode == 'addlocalfile': + if name: + if os.path.exists(name): + fn = get_filename(name) + if fn: + if get_ext(name) in ('.zip','.rar', '.gz'): + sabnzbd.dirscanner.ProcessArchiveFile(\ + fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True) + elif get_ext(name) in ('.nzb'): + sabnzbd.dirscanner.ProcessSingleFile(\ + fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True, nzbname=nzbname) + else: + return report(output, _MSG_NO_FILE) + else: + return report(output, _MSG_NO_PATH) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + + if mode == 'switch': + if value and value2: + pos, prio = nzbqueue.switch(value, value2) + # Returns the new position and new priority (if different) + if output not in ('xml', 'json'): + return report(output, data=(pos, prio)) + else: + return report(output, keyword='result', data={'position':pos, 'priority':prio}) + else: + return report(output, _MSG_NO_VALUE2) + + + if mode == 'change_cat': + if value and value2: + nzo_id = value + cat = value2 + if cat == 'None': + cat = None + nzbqueue.change_cat(nzo_id, cat) + cat, pp, script, cat_priority = cat_to_opts(cat) + + nzbqueue.change_script(nzo_id, script) + nzbqueue.change_opts(nzo_id, pp) + nzbqueue.set_priority(nzo_id, cat_priority) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + + if mode == 'change_script': + if value and value2: + nzo_id = value + script = value2 + if script.lower() == 'none': + script = None + nzbqueue.change_script(nzo_id, script) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + + if mode == 'change_opts': + if value and value2 and value2.isdigit(): + nzbqueue.change_opts(value, int(value2)) + return report(output) + + if mode == 'fullstatus': + return report(output, _MSG_NOT_IMPLEMENTED + ' YET') #xml_full() + + if mode == 'history': + if name == 'delete': + if value.lower()=='all': + history_db = cherrypy.thread_data.history_db + history_db.remove_history() + return report(output) + elif value: + jobs = value.split(',') + history_db = cherrypy.thread_data.history_db + history_db.remove_history(jobs) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + elif not name: + search = kwargs.get('search') + history, pnfo_list, bytespersec = build_header(True) + history['total_size'], history['month_size'], history['week_size'] = get_history_size() + history['slots'], fetched_items, history['noofslots'] = build_history(start=start, limit=limit, verbose=True, search=search) + return report(output, keyword='history', data=remove_callable(history)) + else: + return report(output, _MSG_NOT_IMPLEMENTED) + + if mode == 'get_files': + if value: + return report(output, keyword='files', data=build_file_list(value)) + else: + return report(output, _MSG_NO_VALUE) + + if mode == 'addurl': + if name: + sabnzbd.add_url(name, pp, script, cat, priority, nzbname) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + + if mode == 'addid': + RE_NEWZBIN_URL = re.compile(r'/browse/post/(\d+)') + newzbin_url = RE_NEWZBIN_URL.search(name.lower()) + + if name: name = name.strip() + if name and (name.isdigit() or len(name)==5): + sabnzbd.add_msgid(name, pp, script, cat, priority, nzbname) + return report(output) + elif newzbin_url: + sabnzbd.add_msgid(newzbin_url.group(1), pp, script, cat, priority, nzbname) + return report(output) + elif name: + sabnzbd.add_url(name, pp, script, cat, priority, nzbname) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + + if mode == 'pause': + scheduler.plan_resume(0) + downloader.pause_downloader() + return report(output) + + if mode == 'resume': + scheduler.plan_resume(0) + sabnzbd.unpause_all() + return report(output) + + if mode == 'shutdown': + sabnzbd.halt() + cherrypy.engine.exit() + sabnzbd.SABSTOP = True + return report(output) + + if mode == 'warnings': + if name == 'clear': + return report(output, keyword="warnings", data=sabnzbd.GUIHANDLER.clear()) + elif name == 'show': + return report(output, keyword="warnings", data=sabnzbd.GUIHANDLER.content()) + elif name: + return report(output, _MSG_NOT_IMPLEMENTED) + return report(output, keyword="warnings", data=sabnzbd.GUIHANDLER.content()) + + if mode == 'config': + if name == 'speedlimit' or name == 'set_speedlimit': # http://localhost:8080/sabnzbd/api?mode=config&name=speedlimit&value=400 + if not value: value = '0' + if value.isdigit(): + try: + value = int(value) + except: + return report(output, _MSG_NO_VALUE) + downloader.limit_speed(value) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + elif name == 'get_speedlimit': + return report(output, keyword='speedlimit', data=int(downloader.get_limit())) + elif name == 'set_colorscheme': + if value: + if self.__prim: + cfg.web_color.set(value) + else: + cfg.web_color2.set(value) + return report(output) + else: + return report(output, _MSG_NO_VALUE) + elif name == 'set_pause': + scheduler.plan_resume(IntConv(value)) + return report(output) + + elif name == 'set_apikey': + cfg.api_key.set(config.create_api_key()) + config.save_config() + return report(output, keyword='apikey', data=cfg.api_key()) + + elif name == 'test_server': + + result, msg = test_nntp_server_dict(kwargs) + response = {'result': result, 'message': msg} + + if output: + return report(output, data=response) + else: + return msg + + else: + return report(output, _MSG_NOT_IMPLEMENTED) + + if mode == 'get_cats': + return report(output, keyword="categories", data=ListCats()) + + if mode == 'get_scripts': + return report(output, keyword="scripts", data=ListScripts()) + + if mode == 'version': + return report(output, keyword='version', data=sabnzbd.__version__) + + if mode == 'auth': + auth = 'None' + if cfg.username() and cfg.password(): + auth = 'login' + if not cfg.disable_key(): + auth = 'apikey' + return report(output, keyword='auth', data=auth) + + if mode == 'newzbin': + if name == 'get_bookmarks': + Bookmarks.do.run() + return report(output) + return report(output, _MSG_NOT_IMPLEMENTED) + + if mode == 'restart': + sabnzbd.halt() + cherrypy.engine.restart() + return report(output) + + if mode == 'disconnect': + downloader.disconnect() + return report(output) + + if mode == 'osx_icon': + sabnzbd.OSX_ICON = int(value != '0') + return report(output) + + return report(output, _MSG_NOT_IMPLEMENTED) + + @cherrypy.expose + def scriptlog(self, **kwargs): + """ Duplicate of scriptlog of History, needed for some skins """ + # No session key check, due to fixed URLs + + name = kwargs.get('name') + if name: + history_db = cherrypy.thread_data.history_db + return ShowString(history_db.get_name(name), history_db.get_script_log(name)) + else: + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def retry(self, **kwargs): + """ Duplicate of retry of History, needed for some skins """ + msg = check_session(kwargs) + if msg: return msg + + url = kwargs.get('url', '') + pp = kwargs.get('pp') + cat = kwargs.get('cat') + script = kwargs.get('script') + + url = url.strip() + if url and (url.isdigit() or len(url)==5): + sabnzbd.add_msgid(url, pp, script, cat) + elif url: + sabnzbd.add_url(url, pp, script, cat) + if url: + return ShowOK(url) + else: + raise dcRaiser(self.__root, kwargs) + +#------------------------------------------------------------------------------ +class NzoPage: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__verbose = False + self.__prim = prim + self.__cached_selection = {} #None + + @cherrypy.expose + def default(self, *args, **kwargs): + # Allowed URL's + # /nzb/SABnzbd_nzo_xxxxx/ + # /nzb/SABnzbd_nzo_xxxxx/details + # /nzb/SABnzbd_nzo_xxxxx/files + # /nzb/SABnzbd_nzo_xxxxx/bulk_operation + # /nzb/SABnzbd_nzo_xxxxx/save + + info, pnfo_list, bytespersec = build_header(self.__prim) + nzo_id = None + + for a in args: + if a.startswith('SABnzbd_nzo'): + nzo_id = a + break + + if nzo_id: + # /SABnzbd_nzo_xxxxx/bulk_operation + if 'bulk_operation' in args: + return self.bulk_operation(nzo_id, kwargs) + + # /SABnzbd_nzo_xxxxx/details + elif 'details' in args: + info = self.nzo_details(info, pnfo_list, nzo_id) + + # /SABnzbd_nzo_xxxxx/files + elif 'files' in args: + info = self.nzo_files(info, pnfo_list, nzo_id) + + # /SABnzbd_nzo_xxxxx/save + elif 'save' in args: + self.save_details(nzo_id, args, kwargs) + return + + # /SABnzbd_nzo_xxxxx/ + else: + info = self.nzo_details(info, pnfo_list, nzo_id) + info = self.nzo_files(info, pnfo_list, nzo_id) + + template = Template(file=os.path.join(self.__web_dir, 'nzo.tmpl'), + filter=FILTER, searchList=[info], compilerSettings=DIRECTIVES) + return template.respond() + + + def nzo_details(self, info, pnfo_list, nzo_id): + slot = {} + n = 0 + for pnfo in pnfo_list: + if pnfo[PNFO_NZO_ID_FIELD] == nzo_id: + repair = pnfo[PNFO_REPAIR_FIELD] + unpack = pnfo[PNFO_UNPACK_FIELD] + delete = pnfo[PNFO_DELETE_FIELD] + unpackopts = sabnzbd.opts_to_pp(repair, unpack, delete) + script = pnfo[PNFO_SCRIPT_FIELD] + if script is None: + script = 'None' + cat = pnfo[PNFO_EXTRA_FIELD1] + if not cat: + cat = 'None' + filename = xml_name(pnfo[PNFO_FILENAME_FIELD]) + priority = pnfo[PNFO_PRIORITY_FIELD] + + slot['nzo_id'] = str(nzo_id) + slot['cat'] = cat + slot['filename'] = filename + slot['script'] = script + slot['priority'] = str(priority) + slot['unpackopts'] = str(unpackopts) + info['index'] = n + break + n += 1 + + info['slot'] = slot + info['script_list'] = ListScripts() + info['cat_list'] = ListCats() + info['noofslots'] = len(pnfo_list) + + return info + + def nzo_files(self, info, pnfo_list, nzo_id): + + active = [] + for pnfo in pnfo_list: + if pnfo[PNFO_NZO_ID_FIELD] == nzo_id: + info['nzo_id'] = nzo_id + info['filename'] = xml_name(pnfo[PNFO_FILENAME_FIELD]) + + for tup in pnfo[PNFO_ACTIVE_FILES_FIELD]: + bytes_left, bytes, fn, date, nzf_id = tup + checked = False + if nzf_id in self.__cached_selection and \ + self.__cached_selection[nzf_id] == 'on': + checked = True + + line = {'filename':xml_name(fn), + 'mbleft':"%.2f" % (bytes_left / MEBI), + 'mb':"%.2f" % (bytes / MEBI), + 'size': format_bytes(bytes), + 'sizeleft':format_bytes(bytes_left), + 'nzf_id':nzf_id, + 'age':calc_age(date), + 'checked':checked} + active.append(line) + break + + info['active_files'] = active + return info + + + def save_details(self, nzo_id, args, kwargs): + index = kwargs.get('index', None) + name = kwargs.get('name',None) + pp = kwargs.get('pp',None) + script = kwargs.get('script',None) + cat = kwargs.get('cat',None) + priority = kwargs.get('priority',None) + nzo = sabnzbd.nzbqueue.get_nzo(nzo_id) + + if index != None: + nzbqueue.switch(nzo_id, index) + if name != None: + sabnzbd.nzbqueue.change_name(nzo_id, special_fixer(name)) + if cat != None: + sabnzbd.nzbqueue.change_cat(nzo_id,cat) + if script != None: + sabnzbd.nzbqueue.change_script(nzo_id,script) + if pp != None: + sabnzbd.nzbqueue.change_opts(nzo_id,pp) + if priority != None and nzo and nzo.get_priority() != int(priority): + sabnzbd.nzbqueue.set_priority(nzo_id, priority) + + args = [arg for arg in args if arg != 'save'] + extra = '/'.join(args) + url = cherrypy._urljoin(self.__root,extra) + if url and not url.endswith('/'): + url += '/' + raise dcRaiser(url, {}) + + def bulk_operation(self, nzo_id, kwargs): + self.__cached_selection = kwargs + if kwargs['action_key'] == 'Delete': + for key in kwargs: + if kwargs[key] == 'on': + nzbqueue.remove_nzf(nzo_id, key) + + elif kwargs['action_key'] == 'Top' or kwargs['action_key'] == 'Up' or \ + kwargs['action_key'] == 'Down' or kwargs['action_key'] == 'Bottom': + nzf_ids = [] + for key in kwargs: + if kwargs[key] == 'on': + nzf_ids.append(key) + if kwargs['action_key'] == 'Top': + nzbqueue.move_top_bulk(nzo_id, nzf_ids) + elif kwargs['action_key'] == 'Up': + nzbqueue.move_up_bulk(nzo_id, nzf_ids) + elif kwargs['action_key'] == 'Down': + nzbqueue.move_down_bulk(nzo_id, nzf_ids) + elif kwargs['action_key'] == 'Bottom': + nzbqueue.move_bottom_bulk(nzo_id, nzf_ids) + + if nzbqueue.get_nzo(nzo_id): + url = cherrypy._urljoin(self.__root, nzo_id) + else: + url = cherrypy._urljoin(self.__root, '../queue') + if url and not url.endswith('/'): + url += '/' + raise dcRaiser(url, kwargs) + +#------------------------------------------------------------------------------ +class QueuePage: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__verbose = False + self.__verboseList = [] + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + start = kwargs.get('start') + limit = kwargs.get('limit') + dummy2 = kwargs.get('dummy2') + + info, pnfo_list, bytespersec, self.__verboseList, self.__dict__ = build_queue(self.__web_dir, self.__root, self.__verbose, self.__prim, self.__verboseList, self.__dict__, start=start, limit=limit, dummy2=dummy2) + + template = Template(file=os.path.join(self.__web_dir, 'queue.tmpl'), + filter=FILTER, searchList=[info], compilerSettings=DIRECTIVES) + return template.respond() + + + + @cherrypy.expose + def delete(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + uid = kwargs.get('uid') + if uid: + nzbqueue.remove_nzo(uid, False) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def purge(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzbqueue.remove_all_nzo() + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def removeNzf(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzo_id = kwargs.get('nzo_id') + nzf_id = kwargs.get('nzf_id') + if nzo_id and nzf_id: + nzbqueue.remove_nzf(nzo_id, nzf_id) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def tog_verbose(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + self.__verbose = not self.__verbose + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def tog_uid_verbose(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + uid = kwargs.get('uid') + if self.__verboseList.count(uid): + self.__verboseList.remove(uid) + else: + self.__verboseList.append(uid) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def change_queue_complete_action(self, **kwargs): + """ + Action or script to be performed once the queue has been completed + Scripts are prefixed with 'script_' + """ + msg = check_session(kwargs) + if msg: return msg + sabnzbd.change_queue_complete_action(kwargs.get('action')) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def switch(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + uid1 = kwargs.get('uid1') + uid2 = kwargs.get('uid2') + if uid1 and uid2: + nzbqueue.switch(uid1, uid2) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def change_opts(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzo_id = kwargs.get('nzo_id') + pp = kwargs.get('pp', '') + if nzo_id and pp and pp.isdigit(): + nzbqueue.change_opts(nzo_id, int(pp)) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def change_script(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzo_id = kwargs.get('nzo_id') + script = kwargs.get('script', '') + if nzo_id and script: + if script == 'None': + script = None + nzbqueue.change_script(nzo_id, script) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def change_cat(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzo_id = kwargs.get('nzo_id') + cat = kwargs.get('cat', '') + if nzo_id and cat: + if cat == 'None': + cat = None + nzbqueue.change_cat(nzo_id, cat) + item = config.get_config('categories', cat) + if item: + cat, pp, script, priority = cat_to_opts(cat) + else: + script = cfg.dirscan_script() + pp = cfg.dirscan_pp() + priority = cfg.dirscan_priority() + + nzbqueue.change_script(nzo_id, script) + nzbqueue.change_opts(nzo_id, pp) + nzbqueue.set_priority(nzo_id, priority) + + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def shutdown(self, **kwargs): + msg = check_session(kwargs) + if msg: + yield msg + else: + yield "Initiating shutdown..." + sabnzbd.halt() + cherrypy.engine.exit() + yield "
        SABnzbd-%s shutdown finished" % sabnzbd.__version__ + sabnzbd.SABSTOP = True + + @cherrypy.expose + def pause(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + scheduler.plan_resume(0) + downloader.pause_downloader() + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def resume(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + scheduler.plan_resume(0) + sabnzbd.unpause_all() + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def pause_nzo(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + uid = kwargs.get('uid', '') + nzbqueue.pause_multiple_nzo(uid.split(',')) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def resume_nzo(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + uid = kwargs.get('uid', '') + nzbqueue.resume_multiple_nzo(uid.split(',')) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def set_priority(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzbqueue.set_priority(kwargs.get('nzo_id'), kwargs.get('priority')) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def sort_by_avg_age(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzbqueue.sort_queue('avg_age', kwargs.get('dir')) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def sort_by_name(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzbqueue.sort_queue('name', kwargs.get('dir')) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def sort_by_size(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + nzbqueue.sort_queue('size', kwargs.get('dir')) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def set_speedlimit(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + downloader.limit_speed(IntConv(kwargs.get('value'))) + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def set_pause(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + scheduler.plan_resume(IntConv(kwargs.get('value'))) + raise dcRaiser(self.__root, kwargs) + +class HistoryPage: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__verbose = False + self.__verbose_list = [] + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + start = kwargs.get('start') + limit = kwargs.get('limit') + search = kwargs.get('search') + + history, pnfo_list, bytespersec = build_header(self.__prim) + + history['isverbose'] = self.__verbose + + if cfg.newzbin_username() and cfg.newzbin_password(): + history['newzbinDetails'] = True + + #history_items, total_bytes, bytes_beginning = sabnzbd.history_info() + #history['bytes_beginning'] = "%.2f" % (bytes_beginning / GIGI) + + history['total_size'], history['month_size'], history['week_size'] = get_history_size() + + history['lines'], history['fetched'], history['noofslots'] = build_history(limit=limit, start=start, verbose=self.__verbose, verbose_list=self.__verbose_list, search=search) + + if search: + history['search'] = escape(search) + else: + history['search'] = '' + + history['start'] = IntConv(start) + history['limit'] = IntConv(limit) + history['finish'] = history['start'] + history['limit'] + if history['finish'] > history['noofslots']: + history['finish'] = history['noofslots'] + if not history['finish']: + history['finish'] = history['fetched'] + + + template = Template(file=os.path.join(self.__web_dir, 'history.tmpl'), + filter=FILTER, searchList=[history], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def purge(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + history_db = cherrypy.thread_data.history_db + history_db.remove_history() + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def delete(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + job = kwargs.get('job') + if job: + jobs = job.split(',') + history_db = cherrypy.thread_data.history_db + history_db.remove_history(jobs) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def purge_failed(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + history_db = cherrypy.thread_data.history_db + history_db.remove_failed() + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def reset(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + #sabnzbd.reset_byte_counter() + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def tog_verbose(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + jobs = kwargs.get('jobs') + if not jobs: + self.__verbose = not self.__verbose + self.__verbose_list = [] + else: + if self.__verbose: + self.__verbose = False + else: + jobs = jobs.split(',') + for job in jobs: + if job in self.__verbose_list: + self.__verbose_list.remove(job) + else: + self.__verbose_list.append(job) + raise queueRaiser(self.__root, kwargs) + + @cherrypy.expose + def scriptlog(self, **kwargs): + """ Duplicate of scriptlog of History, needed for some skins """ + # No session key check, due to fixed URLs + + name = kwargs.get('name') + if name: + history_db = cherrypy.thread_data.history_db + return ShowString(history_db.get_name(name), history_db.get_script_log(name)) + else: + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def retry(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + url = kwargs.get('url', '').strip() + pp = kwargs.get('pp') + cat = kwargs.get('cat') + script = kwargs.get('script') + if url and (url.isdigit() or len(url)==5): + sabnzbd.add_msgid(url, pp, script, cat) + elif url: + sabnzbd.add_url(url, pp, script, cat, nzbname=kwargs.get('nzbname')) + if url: + return ShowOK(url) + else: + raise dcRaiser(self.__root, kwargs) + +#------------------------------------------------------------------------------ +class ConfigPage: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + self.directories = ConfigDirectories(web_dir, root+'directories/', prim) + self.email = ConfigEmail(web_dir, root+'email/', prim) + self.general = ConfigGeneral(web_dir, root+'general/', prim) + self.newzbin = ConfigNewzbin(web_dir, root+'newzbin/', prim) + self.rss = ConfigRss(web_dir, root+'rss/', prim) + self.scheduling = ConfigScheduling(web_dir, root+'scheduling/', prim) + self.server = ConfigServer(web_dir, root+'server/', prim) + self.switches = ConfigSwitches(web_dir, root+'switches/', prim) + self.categories = ConfigCats(web_dir, root+'categories/', prim) + self.sorting = ConfigSorting(web_dir, root+'sorting/', prim) + + + @cherrypy.expose + def index(self, **kwargs): + conf, pnfo_list, bytespersec = build_header(self.__prim) + + conf['configfn'] = config.get_filename() + + new = {} + for svr in config.get_servers(): + new[svr] = {} + conf['servers'] = new + + template = Template(file=os.path.join(self.__web_dir, 'config.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def restart(self, **kwargs): + msg = check_session(kwargs) + if msg: + yield msg + else: + yield T('restart1') + sabnzbd.halt() + yield T('restart2') + cherrypy.engine.restart() + + +#------------------------------------------------------------------------------ +LIST_DIRPAGE = ( \ + 'download_dir', 'download_free', 'complete_dir', 'cache_dir', + 'nzb_backup_dir', 'dirscan_dir', 'dirscan_speed', 'script_dir', + 'email_dir', 'permissions', 'log_dir' + ) + +class ConfigDirectories: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + for kw in LIST_DIRPAGE: + conf[kw] = config.get_config('misc', kw)() + + conf['my_home'] = sabnzbd.DIR_HOME + conf['my_lcldata'] = sabnzbd.DIR_LCLDATA + + # Temporary fix, problem with build_header + conf['restart_req'] = sabnzbd.RESTART_REQ + + template = Template(file=os.path.join(self.__web_dir, 'config_directories.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def saveDirectories(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + for kw in LIST_DIRPAGE: + value = kwargs.get(kw) + if value != None: + value = platform_encode(value) + msg = config.get_config('misc', kw).set(value) + if msg: + return badParameterResponse(msg) + + config.save_config() + raise dcRaiser(self.__root, kwargs) + + +SWITCH_LIST = \ + ('par2_multicore', 'par_option', 'enable_unrar', 'enable_unzip', 'enable_filejoin', + 'enable_tsjoin', 'send_group', 'fail_on_crc', 'top_only', + 'dirscan_opts', 'enable_par_cleanup', 'auto_sort', 'check_new_rel', 'auto_disconnect', + 'safe_postproc', 'no_dupes', 'replace_spaces', 'replace_illegal', 'auto_browser', + 'ignore_samples', 'pause_on_post_processing', 'quick_check', 'dirscan_script', 'nice', 'ionice', + 'dirscan_priority', 'ssl_type' + ) + +#------------------------------------------------------------------------------ +class ConfigSwitches: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + conf['nt'] = sabnzbd.WIN32 + conf['have_nice'] = bool(sabnzbd.newsunpack.NICE_COMMAND) + conf['have_ionice'] = bool(sabnzbd.newsunpack.IONICE_COMMAND) + + for kw in SWITCH_LIST: + conf[kw] = config.get_config('misc', kw)() + + conf['script_list'] = ListScripts() + + template = Template(file=os.path.join(self.__web_dir, 'config_switches.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def saveSwitches(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + for kw in SWITCH_LIST: + item = config.get_config('misc', kw) + value = platform_encode(kwargs.get(kw)) + msg = item.set(value) + if msg: + return badParameterResponse(msg) + + config.save_config() + raise dcRaiser(self.__root, kwargs) + + +#------------------------------------------------------------------------------ +GENERAL_LIST = ( + 'host', 'port', 'username', 'password', 'disable_api_key', + 'refresh_rate', 'rss_rate', + 'cache_limit', + 'enable_https', 'https_port', 'https_cert', 'https_key' + ) + +class ConfigGeneral: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + def ListColors(web_dir): + lst = [] + web_dir = os.path.join(sabnzbd.DIR_INTERFACES ,web_dir) + dd = os.path.abspath(web_dir + '/templates/static/stylesheets/colorschemes') + if (not dd) or (not os.access(dd, os.R_OK)): + return lst + for color in glob.glob(dd + '/*'): + col= os.path.basename(color).replace('.css','') + if col != "_svn" and col != ".svn": + lst.append(col) + return lst + + def add_color(dir, color): + if dir: + if not color: + try: + color = DEF_SKIN_COLORS[dir.lower()] + except KeyError: + return dir + return '%s - %s' % (dir, color) + else: + return '' + + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + conf['configfn'] = config.get_filename() + + # Temporary fix, problem with build_header + conf['restart_req'] = sabnzbd.RESTART_REQ + + if sabnzbd.newswrapper.HAVE_SSL: + conf['have_ssl'] = 1 + else: + conf['have_ssl'] = 0 + + wlist = [] + wlist2 = ['None'] + interfaces = glob.glob(sabnzbd.DIR_INTERFACES + "/*") + for k in interfaces: + if k.endswith(DEF_STDINTF): + interfaces.remove(k) + interfaces.insert(0, k) + break + for web in interfaces: + rweb = os.path.basename(web) + if rweb != '.svn' and rweb != '_svn' and os.access(web + '/' + DEF_MAIN_TMPL, os.R_OK): + cols = ListColors(rweb) + if cols: + for col in cols: + if rweb != 'Mobile': + wlist.append(add_color(rweb, col)) + wlist2.append(add_color(rweb, col)) + else: + if rweb != 'Mobile': + wlist.append(rweb) + wlist2.append(rweb) + conf['web_list'] = wlist + conf['web_list2'] = wlist2 + + # Obsolete template variables, must exist and have a value + conf['web_colors'] = ['None'] + conf['web_color'] = 'None' + conf['web_colors2'] = ['None'] + conf['web_color2'] = 'None' + + conf['web_dir'] = add_color(cfg.web_dir(), cfg.web_color()) + conf['web_dir2'] = add_color(cfg.web_dir2(), cfg.web_color2()) + + conf['language'] = cfg.language() + list = list_languages(sabnzbd.DIR_LANGUAGE) + if len(list) < 2: + list = [] + conf['lang_list'] = list + + conf['disable_api_key'] = cfg.disable_key() + conf['host'] = cfg.cherryhost() + conf['port'] = cfg.cherryport() + conf['https_port'] = cfg.https_port() + conf['https_cert'] = cfg.https_cert() + conf['https_key'] = cfg.https_key() + conf['enable_https'] = cfg.enable_https() + conf['username'] = cfg.username() + conf['password'] = cfg.password.get_stars() + conf['bandwidth_limit'] = cfg.bandwidth_limit() + conf['refresh_rate'] = cfg.refresh_rate() + conf['rss_rate'] = cfg.rss_rate() + conf['cache_limit'] = cfg.cache_limit() + conf['cleanup_list'] = List2String(cfg.cleanup_list()) + + template = Template(file=os.path.join(self.__web_dir, 'config_general.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def saveGeneral(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + # Special handling for cache_limitstr + #kwargs['cache_limit'] = kwargs.get('cache_limitstr') + + # Handle general options + for kw in GENERAL_LIST: + item = config.get_config('misc', kw) + value = platform_encode(kwargs.get(kw)) + msg = item.set(value) + if msg: + return badParameterResponse(msg) + + # Handle special options + language = kwargs.get('language') + if language and language != cfg.language(): + cfg.language.set(language) + reset_language(language) + + cleanup_list = kwargs.get('cleanup_list') + if cleanup_list and sabnzbd.WIN32: + cleanup_list = cleanup_list.lower() + cfg.cleanup_list.set_string(cleanup_list) + + web_dir = kwargs.get('web_dir') + web_dir2 = kwargs.get('web_dir2') + change_web_dir(web_dir) + try: + web_dir2, web_color2 = web_dir2.split(' - ') + except: + web_color2 = '' + web_dir2_path = real_path(sabnzbd.DIR_INTERFACES, web_dir2) + + if web_dir2 == 'None': + cfg.web_dir2.set('') + elif os.path.exists(web_dir2_path): + cfg.web_dir2.set(web_dir2) + cfg.web_color2.set(web_color2) + + bandwidth_limit = kwargs.get('bandwidth_limit') + if bandwidth_limit != None: + bandwidth_limit = IntConv(bandwidth_limit) + cfg.bandwidth_limit.set(bandwidth_limit) + + config.save_config() + + # Update CherryPy authentication + set_auth(cherrypy.config) + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def generateAPIKey(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + logging.debug('API Key Changed') + cfg.api_key.set(config.create_api_key()) + config.save_config() + raise dcRaiser(self.__root, kwargs) + +def change_web_dir(web_dir): + try: + web_dir, web_color = web_dir.split(' - ') + except: + try: + web_color = DEF_SKIN_COLORS[web_dir.lower()] + except: + web_color = '' + + web_dir_path = real_path(sabnzbd.DIR_INTERFACES, web_dir) + + if not os.path.exists(web_dir_path): + return badParameterResponse('Cannot find web template: %s' % unicoder(web_dir_path)) + else: + cfg.web_dir.set(web_dir) + cfg.web_color.set(web_color) + + +#------------------------------------------------------------------------------ + +class ConfigServer: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + new = {} + servers = config.get_servers() + for svr in servers: + new[svr] = servers[svr].get_dict(safe=True) + conf['servers'] = new + + if sabnzbd.newswrapper.HAVE_SSL: + conf['have_ssl'] = 1 + else: + conf['have_ssl'] = 0 + + template = Template(file=os.path.join(self.__web_dir, 'config_server.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + + @cherrypy.expose + def addServer(self, **kwargs): + return handle_server(kwargs, self.__root) + + + @cherrypy.expose + def saveServer(self, **kwargs): + return handle_server(kwargs, self.__root) + + @cherrypy.expose + def testServer(self, **kwargs): + return handle_server_test(kwargs, self.__root) + + + @cherrypy.expose + def delServer(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + kwargs['section'] = 'servers' + kwargs['keyword'] = kwargs.get('server') + del_from_section(kwargs) + raise dcRaiser(self.__root, kwargs) + +def handle_server(kwargs, root=None): + """ Internal server handler """ + msg = check_session(kwargs) + if msg: return msg + + host = kwargs.get('host', '').strip() + if not host: + return badParameterResponse(T('error-needServer')) + + port = kwargs.get('port', '').strip() + if not port: + if not kwargs.get('ssl', '').strip(): + port = '119' + else: + port = '563' + kwargs['port'] = port + + if kwargs.get('connections', '').strip() == '': + kwargs['connections'] = '1' + + msg = check_server(host, port) + if msg: + return msg + + server = '%s:%s' % (host, port) + + svr = None + old_server = kwargs.get('server') + if old_server: + svr = config.get_config('servers', old_server) + if not svr: + svr = config.get_config('servers', server) + + if svr: + for kw in ('fillserver', 'ssl', 'enable', 'optional'): + if kw not in kwargs.keys(): + kwargs[kw] = None + svr.set_dict(kwargs) + svr.rename(server) + else: + old_server = None + config.ConfigServer(server, kwargs) + + config.save_config() + downloader.update_server(old_server, server) + if root: + raise dcRaiser(root, kwargs) + +def handle_server_test(kwargs, root): + result, msg = test_nntp_server_dict(kwargs) + return msg + + +def handle_server_api(output, kwargs): + """ Special handler for API-call 'set_config' + """ + name = kwargs.get('keyword') + if not name: + name = kwargs.get('name') + if not name: + host = kwargs.get('host') + port = kwargs.get('port', '119') + if host: + name = '%s:%s' % (host, port) + else: + return False + + server = config.get_config('servers', name) + if server: + server.set_dict(kwargs) + old_name = name + else: + config.ConfigServer(name, kwargs) + old_name = None + downloader.update_server(old_name, name) + + + +#------------------------------------------------------------------------------ + +class ConfigRss: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + conf['script_list'] = ListScripts(default=True) + pick_script = conf['script_list'] != [] + + conf['cat_list'] = ListCats(default=True) + pick_cat = conf['cat_list'] != [] + + rss = {} + feeds = config.get_rss() + for feed in feeds: + rss[feed] = feeds[feed].get_dict() + filters = feeds[feed].filters() + rss[feed]['filters'] = filters + rss[feed]['filtercount'] = len(filters) + + rss[feed]['pick_cat'] = pick_cat + rss[feed]['pick_script'] = pick_script + + conf['rss'] = rss + + # Find a unique new Feed name + unum = 1 + while 'Feed'+str(unum) in feeds: + unum += 1 + conf['feed'] = 'Feed' + str(unum) + + template = Template(file=os.path.join(self.__web_dir, 'config_rss.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def upd_rss_feed(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + if kwargs.get('enable') is not None: + del kwargs['enable'] + try: + cfg = config.get_rss()[kwargs.get('feed')] + except KeyError: + cfg = None + if cfg and Strip(kwargs.get('uri')): + cfg.set_dict(kwargs) + config.save_config() + + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def toggle_rss_feed(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + try: + cfg = config.get_rss()[kwargs.get('feed')] + except KeyError: + cfg = None + if cfg: + cfg.enable.set(not cfg.enable()) + config.save_config() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def add_rss_feed(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + feed= Strip(kwargs.get('feed')) + uri = Strip(kwargs.get('uri')) + try: + cfg = config.get_rss()[feed] + except KeyError: + cfg = None + if (not cfg) and uri: + config.ConfigRSS(feed, kwargs) + # Clear out any existing reference to this feed name + # Otherwise first-run detection can fail + sabnzbd.rss.clear_feed(feed) + config.save_config() + + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def upd_rss_filter(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + try: + cfg = config.get_rss()[kwargs.get('feed')] + except KeyError: + raise dcRaiser(self.__root, kwargs) + + pp = kwargs.get('pp') + if IsNone(pp): pp = '' + script = ConvertSpecials(kwargs.get('script')) + cat = ConvertSpecials(kwargs.get('cat')) + + cfg.filters.update(int(kwargs.get('index',0)), (cat, pp, script, kwargs.get('filter_type'), \ + platform_encode(kwargs.get('filter_text')))) + config.save_config() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def pos_rss_filter(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + feed = kwargs.get('feed') + current = kwargs.get('current', 0) + new = kwargs.get('new', 0) + + try: + cfg = config.get_rss()[feed] + except KeyError: + raise dcRaiser(self.__root, kwargs) + + if current != new: + cfg.filters.move(int(current), int(new)) + config.save_config() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def del_rss_feed(self, *args, **kwargs): + msg = check_session(kwargs) + if msg: return msg + kwargs['section'] = 'rss' + kwargs['keyword'] = kwargs.get('feed') + del_from_section(kwargs) + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def del_rss_filter(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + try: + cfg = config.get_rss()[kwargs.get('feed')] + except KeyError: + raise dcRaiser(self.__root, kwargs) + + cfg.filters.delete(int(kwargs.get('index', 0))) + config.save_config() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def download_rss_feed(self, *args, **kwargs): + msg = check_session(kwargs) + if msg: return msg + if 'feed' in kwargs: + feed = kwargs['feed'] + msg = sabnzbd.rss.run_feed(feed, download=True, force=True) + if msg: + return badParameterResponse(msg) + else: + return ShowRssLog(feed, False) + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def test_rss_feed(self, *args, **kwargs): + msg = check_session(kwargs) + if msg: return msg + if 'feed' in kwargs: + feed = kwargs['feed'] + msg = sabnzbd.rss.run_feed(feed, download=False, ignoreFirst=True) + if msg: + return badParameterResponse(msg) + else: + return ShowRssLog(feed, True) + raise dcRaiser(self.__root, kwargs) + + + @cherrypy.expose + def rss_download(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + feed = kwargs.get('feed') + id = kwargs.get('id') + cat = kwargs.get('cat') + pp = kwargs.get('pp') + script = kwargs.get('script') + priority = kwargs.get('priority', NORMAL_PRIORITY) + nzbname = kwargs.get('nzbname') + if id and id.isdigit(): + sabnzbd.add_msgid(id, pp, script, cat, priority, nzbname) + elif id: + sabnzbd.add_url(id, pp, script, cat, priority, nzbname) + # Need to pass the title instead + sabnzbd.rss.flag_downloaded(feed, id) + raise dcRaiser(self.__root, kwargs) + + +#------------------------------------------------------------------------------ +_SCHED_ACTIONS = ('resume', 'pause', 'pause_all', 'shutdown', 'restart', 'speedlimit', 'pause_post', 'resume_post') + +class ConfigScheduling: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + def get_days(): + days = {} + days["*"] = T('daily') + days["1"] = T('monday') + days["2"] = T('tuesday') + days["3"] = T('wednesday') + days["4"] = T('thursday') + days["5"] = T('friday') + days["6"] = T('saturday') + days["7"] = T('sunday') + return days + + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + actions = [] + actions.extend(_SCHED_ACTIONS) + days = get_days() + conf['schedlines'] = [] + snum = 1 + conf['taskinfo'] = [] + for ev in scheduler.sort_schedules(forward=True): + line = ev[3] + conf['schedlines'].append(line) + try: + m, h, day, action = line.split(' ', 3) + except: + continue + action = action.strip() + if action in actions: + action = T("sch-" + action) + else: + try: + act, server = action.split() + except ValueError: + act = '' + if act in ('enable_server', 'disable_server'): + action = T("sch-" + act) + ' ' + server + item = (snum, h, '%02d' % int(m), days[day], action) + conf['taskinfo'].append(item) + snum += 1 + + + actions_lng = {} + for action in actions: + actions_lng[action] = T("sch-" + action) + for server in config.get_servers(): + actions.append(server) + actions_lng[server] = server + conf['actions'] = actions + conf['actions_lng'] = actions_lng + + template = Template(file=os.path.join(self.__web_dir, 'config_scheduling.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def addSchedule(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + minute = kwargs.get('minute') + hour = kwargs.get('hour') + dayofweek = kwargs.get('dayofweek') + action = kwargs.get('action') + arguments = kwargs.get('arguments') + + arguments = arguments.strip().lower() + if arguments in ('on', 'enable'): + arguments = '1' + elif arguments in ('off','disable'): + arguments = '0' + + if minute and hour and dayofweek and action: + if (action == 'speedlimit') and arguments.isdigit(): + pass + elif action in _SCHED_ACTIONS: + arguments = '' + elif action.find(':') > 0: + if arguments == '1': + arguments = action + action = 'enable_server' + else: + arguments = action + action = 'disable_server' + else: + action = None + + if action: + sched = cfg.schedules() + sched.append('%s %s %s %s %s' % + (minute, hour, dayofweek, action, arguments)) + cfg.schedules.set(sched) + + config.save_config() + scheduler.restart(force=True) + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def delSchedule(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + schedules = cfg.schedules() + line = kwargs.get('line') + if line and line in schedules: + schedules.remove(line) + cfg.schedules.set(schedules) + config.save_config() + scheduler.restart(force=True) + raise dcRaiser(self.__root, kwargs) + +#------------------------------------------------------------------------------ +class ConfigNewzbin: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + self.__bookmarks = [] + + @cherrypy.expose + def index(self, **kwargs): + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + conf['username_newzbin'] = cfg.newzbin_username() + conf['password_newzbin'] = cfg.newzbin_password.get_stars() + conf['newzbin_bookmarks'] = int(cfg.newzbin_bookmarks()) + conf['newzbin_unbookmark'] = int(cfg.newzbin_unbookmark()) + conf['bookmark_rate'] = cfg.bookmark_rate() + + conf['bookmarks_list'] = self.__bookmarks + + conf['matrix_username'] = cfg.matrix_username() + conf['matrix_apikey'] = cfg.matrix_apikey() + + template = Template(file=os.path.join(self.__web_dir, 'config_newzbin.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def saveNewzbin(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + cfg.newzbin_username.set(kwargs.get('username_newzbin')) + cfg.newzbin_password.set(kwargs.get('password_newzbin')) + cfg.newzbin_bookmarks.set(kwargs.get('newzbin_bookmarks')) + cfg.newzbin_unbookmark.set(kwargs.get('newzbin_unbookmark')) + cfg.bookmark_rate.set(kwargs.get('bookmark_rate')) + + cfg.matrix_username.set(kwargs.get('matrix_username')) + cfg.matrix_apikey.set(kwargs.get('matrix_apikey')) + + config.save_config() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def saveMatrix(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + cfg.matrix_username.set(kwargs.get('matrix_username')) + cfg.matrix_apikey.set(kwargs.get('matrix_apikey')) + + config.save_config() + raise dcRaiser(self.__root, kwargs) + + + @cherrypy.expose + def getBookmarks(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + Bookmarks.do.run() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def showBookmarks(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + self.__bookmarks = Bookmarks.do.bookmarksList() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def hideBookmarks(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + self.__bookmarks = [] + raise dcRaiser(self.__root, kwargs) + +#------------------------------------------------------------------------------ + +class ConfigCats: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + if cfg.newzbin_username() and cfg.newzbin_password(): + conf['newzbinDetails'] = True + + conf['script_list'] = ListScripts(default=True) + + categories = config.get_categories() + conf['have_cats'] = categories != {} + conf['defdir'] = cfg.complete_dir.get_path() + + + empty = { 'name':'', 'pp':'-1', 'script':'', 'dir':'', 'newzbin':'', 'priority':DEFAULT_PRIORITY } + slotinfo = [] + slotinfo.append(empty) + for cat in sorted(categories): + slot = categories[cat].get_dict() + slot['name'] = cat + slotinfo.append(slot) + conf['slotinfo'] = slotinfo + + template = Template(file=os.path.join(self.__web_dir, 'config_cat.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def delete(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + kwargs['section'] = 'categories' + kwargs['keyword'] = kwargs.get('name') + del_from_section(kwargs) + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def save(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + newname = kwargs.get('newname', '').strip() + name = kwargs.get('name') + if newname: + if name: + config.delete('categories', name) + name = newname.lower() + if kwargs.get('dir'): + kwargs['dir'] = platform_encode(kwargs['dir']) + config.ConfigCat(name, kwargs) + + config.save_config() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def init_newzbin(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + config.define_categories(force=True) + config.save_config() + raise dcRaiser(self.__root, kwargs) + + +SORT_LIST = ( \ + 'enable_tv_sorting', 'tv_sort_string', 'tv_categories', + 'enable_movie_sorting', 'movie_sort_string', 'movie_sort_extra', 'movie_extra_folder', + 'enable_date_sorting', 'date_sort_string', 'movie_categories', 'date_categories' + ) + +#------------------------------------------------------------------------------ +class ConfigSorting: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + conf['complete_dir'] = cfg.complete_dir.get_path() + + for kw in SORT_LIST: + conf[kw] = config.get_config('misc', kw)() + conf['cat_list'] = ListCats(True) + #tvSortList = [] + + template = Template(file=os.path.join(self.__web_dir, 'config_sorting.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def saveSorting(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + try: + kwargs['movie_categories'] = kwargs['movie_cat'] + except: + pass + try: + kwargs['date_categories'] = kwargs['date_cat'] + except: + pass + try: + kwargs['tv_categories'] = kwargs['tv_cat'] + except: + pass + + for kw in SORT_LIST: + item = config.get_config('misc', kw) + value = platform_encode(kwargs.get(kw)) + msg = item.set(value) + if msg: + return badParameterResponse(msg) + + config.save_config() + raise dcRaiser(self.__root, kwargs) + + +#------------------------------------------------------------------------------ + +class ConnectionInfo: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + self.__lastmail = None + + @cherrypy.expose + def index(self, **kwargs): + header, pnfo_list, bytespersec = build_header(self.__prim) + + header['logfile'] = sabnzbd.LOGFILE + header['weblogfile'] = sabnzbd.WEBLOGFILE + header['loglevel'] = str(cfg.log_level()) + + header['lastmail'] = self.__lastmail + + header['servers'] = [] + + for server in downloader.servers()[:]: + busy = [] + connected = 0 + + for nw in server.idle_threads[:]: + if nw.connected: + connected += 1 + + for nw in server.busy_threads[:]: + article = nw.article + art_name = "" + nzf_name = "" + nzo_name = "" + + if article: + nzf = article.nzf + nzo = nzf.nzo + + art_name = xml_name(article.article) + #filename field is not always present + try: + nzf_name = xml_name(nzf.get_filename()) + except: #attribute error + nzf_name = xml_name(nzf.get_subject()) + nzo_name = xml_name(nzo.get_dirname()) + + busy.append((nw.thrdnum, art_name, nzf_name, nzo_name)) + + if nw.connected: + connected += 1 + + if server.warning and not (connected or server.errormsg): + connected = unicoder(server.warning) + + if server.request and not server.info: + connected = T('server-resolving') + busy.sort() + + header['servers'].append((server.host, server.port, connected, busy, server.ssl, + server.active, server.errormsg, server.fillserver, server.optional)) + + wlist = [] + for w in sabnzbd.GUIHANDLER.content(): + w = w.replace('WARNING', Ta('warning')).replace('ERROR', Ta('error')) + wlist.append(xml_name(w)) + header['warnings'] = wlist + + template = Template(file=os.path.join(self.__web_dir, 'connection_info.tmpl'), + filter=FILTER, searchList=[header], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def disconnect(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + downloader.disconnect() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def testmail(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + logging.info("Sending testmail") + pack = {} + pack['download'] = ['action 1', 'action 2'] + pack['unpack'] = ['action 1', 'action 2'] + + self.__lastmail= emailer.endjob('Test Job', 123, 'unknown', True, + os.path.normpath(os.path.join(cfg.complete_dir.get_path(), '/unknown/Test Job')), + str(123*MEBI), pack, 'my_script', 'Line 1\nLine 2\nLine 3\n', 0) + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def showlog(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + try: + sabnzbd.LOGHANDLER.flush() + except: + pass + return cherrypy.lib.static.serve_file(sabnzbd.LOGFILE, "application/x-download", "attachment") + + @cherrypy.expose + def showweb(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + if sabnzbd.WEBLOGFILE: + return cherrypy.lib.static.serve_file(sabnzbd.WEBLOGFILE, "application/x-download", "attachment") + else: + return "Web logging is off!" + + @cherrypy.expose + def clearwarnings(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + sabnzbd.GUIHANDLER.clear() + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def change_loglevel(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + cfg.log_level.set(kwargs.get('loglevel')) + config.save_config() + + raise dcRaiser(self.__root, kwargs) + + @cherrypy.expose + def unblock_server(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + downloader.unblock(kwargs.get('server')) + # Short sleep so that UI shows new server status + time.sleep(1.0) + raise dcRaiser(self.__root, kwargs) + + +def Protected(): + return badParameterResponse("Configuration is locked") + +def badParameterResponse(msg): + """Return a html page with error message and a 'back' button + """ + return ''' + + + + SABnzbd+ %s - %s/title> +</head> +<body> + <h3>%s</h3> + %s + <br><br> + <FORM><INPUT TYPE="BUTTON" VALUE="%s" ONCLICK="history.go(-1)"></FORM> +</body> +</html> +''' % (sabnzbd.__version__, T('error'), T('badParm'), unicoder(msg), T('button-back')) + +def ShowFile(name, path): + """Return a html page listing a file and a 'back' button + """ + try: + f = open(path, "r") + msg = TRANS(f.read()) + f.close() + except: + msg = "FILE NOT FOUND\n" + + return ''' +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> +<html> +<head> + <title>%s + + +

        +

        %s

        +
        +           %s
        +           


        + + +''' % (name, T('button-back'), name, escape(msg)) + +def ShowString(name, string): + """Return a html page listing a file and a 'back' button + """ + try: + msg = TRANS(string) + except: + msg = "Encoding Error\n" + + return ''' + + + + %s + + +
        +

        %s

        +
        +           %s
        +           


        + + +''' % (xml_name(name), T('button-back'), xml_name(name), escape(unicoder(msg))) + + +def ShowOK(url): + return ''' + + + + %s + + +
        +

        + %s +

        + + +''' % (escape(url), T('button-back'), T('msg-reAdded@1') % escape(url)) + + +def _make_link(qfeed, job): + # Return downlink for a job + name = urllib.quote_plus(job['url']) + title = job['title'].encode('latin-1') + nzbname = '&nzbname=%s' % urllib.quote(sanitize_foldername(title)) + if job['cat']: + cat = '&cat=' + escape(job['cat']) + else: + cat = '' + if job['pp'] is None: + pp = '' + else: + pp = '&pp=' + escape(str(job['pp'])) + if job['script']: + script = '&script=' + escape(job['script']) + else: + script = '' + if job['prio']: + prio = '&priority=' + str(job['prio']) + + star = ' *' * int(job['status'].endswith('*')) + + title = xml_name(job['title']) + if job['url'].isdigit(): + title = '
        %s' % (job['url'], title) + + return '%s   %s%s
        ' % \ + (cfg.api_key() ,qfeed, name, cat, pp, script, prio, nzbname, T('link-download'), title, star) + + +def ShowRssLog(feed, all): + """Return a html page listing an RSS log and a 'back' button + """ + jobs = sabnzbd.rss.show_result(feed) + names = jobs.keys() + # Sort in the order the jobs came from the feed + names.sort(lambda x, y: jobs[x].get('order', 0) - jobs[y].get('order', 0)) + + qfeed = escape(feed.replace('/','%2F').replace('?', '%3F')) + + doneStr = [] + for x in names: + job = jobs[x] + if job['status'][0] == 'D': + doneStr.append('%s
        ' % xml_name(job['title'])) + + goodStr = [] + for x in names: + job = jobs[x] + if job['status'][0] == 'G': + goodStr.append(_make_link(qfeed, job)) + + badStr = [] + for x in names: + job = jobs[x] + if job['status'][0] == 'B': + badStr.append(_make_link(qfeed, job)) + + if all: + return ''' + + + + %s + + +
        + +
        +

        %s

        + %s

        + %s
        + %s +
        + %s
        + %s +
        + %s
        + %s +
        + + +''' % (escape(feed), T('button-back'), escape(feed), T('explain-rssStar'), T('rss-matched'), \ + ''.join(goodStr), T('rss-notMatched'), ''.join(badStr), T('rss-done'), ''.join(doneStr)) + else: + return ''' + + + + %s + + +
        + +
        +

        %s

        + %s
        + %s +
        + + +''' % (escape(feed), T('button-back'), escape(feed), T('rss-downloaded'), ''.join(doneStr)) + + +def build_header(prim): + try: + uptime = calc_age(sabnzbd.START) + except: + uptime = "-" + + if prim: + color = sabnzbd.WEB_COLOR + else: + color = sabnzbd.WEB_COLOR2 + if color: + color = color + '.css' + else: + color = '' + + header = { 'T': T, 'Tspec': Tspec, 'version':sabnzbd.__version__, 'paused':downloader.paused(), + 'pause_int': scheduler.pause_int(), 'paused_all': sabnzbd.PAUSED_ALL, + 'uptime':uptime, 'color_scheme':color } + speed_limit = downloader.get_limit() + if speed_limit <= 0: + speed_limit = '' + + header['helpuri'] = 'http://wiki.sabnzbd.org/' + header['diskspace1'] = "%.2f" % diskfree(cfg.download_dir.get_path()) + header['diskspace2'] = "%.2f" % diskfree(cfg.complete_dir.get_path()) + header['diskspacetotal1'] = "%.2f" % disktotal(cfg.download_dir.get_path()) + header['diskspacetotal2'] = "%.2f" % disktotal(cfg.complete_dir.get_path()) + header['loadavg'] = loadavg() + header['speedlimit'] = "%s" % speed_limit + header['restart_req'] = sabnzbd.RESTART_REQ + header['have_warnings'] = str(sabnzbd.GUIHANDLER.count()) + header['last_warning'] = sabnzbd.GUIHANDLER.last() + header['active_lang'] = cfg.language() + if prim: + header['webdir'] = sabnzbd.WEB_DIR + else: + header['webdir'] = sabnzbd.WEB_DIR2 + + header['finishaction'] = sabnzbd.QUEUECOMPLETE + header['nt'] = sabnzbd.WIN32 + header['darwin'] = sabnzbd.DARWIN + header['power_options'] = sabnzbd.WIN32 or sabnzbd.DARWIN or sabnzbd.LINUX_POWER + + header['session'] = cfg.api_key() + + bytespersec = BPSMeter.do.get_bps() + qnfo = nzbqueue.queue_info() + + bytesleft = qnfo[QNFO_BYTES_LEFT_FIELD] + bytes = qnfo[QNFO_BYTES_FIELD] + + header['kbpersec'] = "%.2f" % (bytespersec / KIBI) + header['speed'] = to_units(bytespersec, spaces=1) + header['mbleft'] = "%.2f" % (bytesleft / MEBI) + header['mb'] = "%.2f" % (bytes / MEBI) + header['sizeleft'] = format_bytes(bytesleft) + header['size'] = format_bytes(bytes) + + status = '' + if downloader.paused(): + status = 'Paused' + elif bytespersec > 0: + status = 'Downloading' + else: + status = 'Idle' + header['status'] = "%s" % status + + anfo = ArticleCache.do.cache_info() + + header['cache_art'] = str(anfo[ANFO_ARTICLE_SUM_FIELD]) + header['cache_size'] = format_bytes(anfo[ANFO_CACHE_SIZE_FIELD]) + header['cache_max'] = str(anfo[ANFO_CACHE_LIMIT_FIELD]) + + header['nzb_quota'] = '' + + if sabnzbd.NEW_VERSION: + header['new_release'], header['new_rel_url'] = sabnzbd.NEW_VERSION.split(';') + else: + header['new_release'] = '' + header['new_rel_url'] = '' + + header['timeleft'] = calc_timeleft(bytesleft, bytespersec) + + try: + datestart = datetime.datetime.now() + datetime.timedelta(seconds=bytesleft / bytespersec) + #new eta format: 16:00 Fri 07 Feb + header['eta'] = '%s' % datestart.strftime('%H:%M %a %d %b') + except: + datestart = datetime.datetime.now() + header['eta'] = T('unknown') + + return (header, qnfo[QNFO_PNFO_LIST_FIELD], bytespersec) + +def calc_timeleft(bytesleft, bps): + """ + Calculate the time left in the format HH:MM:SS + """ + try: + totalseconds = int(bytesleft / bps) + minutes, seconds = divmod(totalseconds, 60) + hours, minutes = divmod(minutes, 60) + if minutes <10: + minutes = '0%s' % minutes + if seconds <10: + seconds = '0%s' % seconds + return '%s:%s:%s' % (hours, minutes, seconds) + except: + return '0:00:00' + +def calc_age(date): + """ + Calculate the age difference between now and date. + Value is returned as either days, hours, or minutes. + """ + try: + now = datetime.datetime.now() + #age = str(now - date).split(".")[0] #old calc_age + + #time difference + dage = now-date + seconds = dage.seconds + #only one value should be returned + #if it is less than 1 day then it returns in hours, unless it is less than one hour where it returns in minutes + if dage.days: + age = '%sd' % (dage.days) + elif seconds/3600: + age = '%sh' % (seconds/3600) + else: + age = '%sm' % (seconds/60) + except: + age = "-" + + return age + +#------------------------------------------------------------------------------ +LIST_EMAIL = ( + 'email_endjob', 'email_full', + 'email_server', 'email_to', 'email_from', + 'email_account', 'email_pwd', 'email_dir', 'email_rss' + ) + +class ConfigEmail: + def __init__(self, web_dir, root, prim): + self.__root = root + self.__web_dir = web_dir + self.__prim = prim + + @cherrypy.expose + def index(self, **kwargs): + if cfg.configlock(): + return Protected() + + conf, pnfo_list, bytespersec = build_header(self.__prim) + + conf['my_home'] = sabnzbd.DIR_HOME + conf['my_lcldata'] = sabnzbd.DIR_LCLDATA + + for kw in LIST_EMAIL: + if kw == 'email_pwd': + conf[kw] = config.get_config('misc', kw).get_stars() + else: + conf[kw] = config.get_config('misc', kw)() + + template = Template(file=os.path.join(self.__web_dir, 'config_email.tmpl'), + filter=FILTER, searchList=[conf], compilerSettings=DIRECTIVES) + return template.respond() + + @cherrypy.expose + def saveEmail(self, **kwargs): + msg = check_session(kwargs) + if msg: return msg + + for kw in LIST_EMAIL: + msg = config.get_config('misc', kw).set(platform_encode(kwargs.get(kw))) + if msg: + return badParameterResponse(T('error-badValue@2') % (kw, unicoder(msg))) + + config.save_config() + raise dcRaiser(self.__root, kwargs) + +def std_time(when): + # Fri, 16 Nov 2007 16:42:01 GMT +0100 + item = time.strftime('%a, %d %b %Y %H:%M:%S', time.localtime(when)) + item += " GMT %+05d" % (-time.timezone/36) + return item + + +def rss_history(url, limit=50, search=None): + url = url.replace('rss','') + + youngest = None + + rss = RSS() + rss.channel.title = "SABnzbd History" + rss.channel.description = "Overview of completed downloads" + rss.channel.link = "http://sourceforge.net/projects/sabnzbdplus/" + rss.channel.language = "en" + + items, fetched_items, max_items = build_history(limit=limit, search=search) + + for history in items: + item = Item() + + item.pubDate = std_time(history['completed']) + item.title = history['name'] + + if not youngest: + youngest = history['completed'] + elif history['completed'] < youngest: + youngest = history['completed'] + + if history['report']: + item.link = "https://www.newzbin.com/browse/post/%s/" % history['report'] + elif history['url_info']: + item.link = history['url_info'] + else: + item.link = url + + stageLine = [] + for stage in history['stage_log']: + stageLine.append("
        Stage %s
        " % stage['name']) + actions = [] + for action in stage['actions']: + actions.append("
        %s
        " % (action)) + actions.sort() + actions.reverse() + for act in actions: + stageLine.append(act) + stageLine.append("") + item.description = ''.join(stageLine) + rss.addItem(item) + + rss.channel.lastBuildDate = std_time(youngest) + rss.channel.pubDate = std_time(time.time()) + + return rss.write() + + +def format_bytes(bytes): + b = to_units(bytes) + if b == '': + return b + else: + return b + 'B' + + +def rss_warnings(): + """ Return an RSS feed with last warnings/errors + """ + rss = RSS() + rss.channel.title = "SABnzbd Warnings" + rss.channel.description = "Overview of warnings/errors" + rss.channel.link = "http://sourceforge.net/projects/sabnzbdplus/" + rss.channel.language = "en" + + for warn in sabnzbd.GUIHANDLER.content(): + item = Item() + item.title = warn + rss.addItem(item) + + rss.channel.lastBuildDate = std_time(time.time()) + rss.channel.pubDate = rss.channel.lastBuildDate + return rss.write() + + +def qstatus_data(): + """Build up the queue status as a nested object and output as a JSON object + """ + + qnfo = nzbqueue.queue_info() + pnfo_list = qnfo[QNFO_PNFO_LIST_FIELD] + + jobs = [] + bytesleftprogess = 0 + bpsnow = BPSMeter.do.get_bps() + for pnfo in pnfo_list: + filename = pnfo[PNFO_FILENAME_FIELD] + msgid = pnfo[PNFO_MSGID_FIELD] + bytesleft = pnfo[PNFO_BYTES_LEFT_FIELD] / MEBI + bytesleftprogess += pnfo[PNFO_BYTES_LEFT_FIELD] + bytes = pnfo[PNFO_BYTES_FIELD] / MEBI + nzo_id = pnfo[PNFO_NZO_ID_FIELD] + jobs.append( { "id" : nzo_id, + "mb":bytes, + "mbleft":bytesleft, + "filename":unicoder(filename), + "msgid":msgid, + "timeleft":calc_timeleft(bytesleftprogess, bpsnow) } ) + + state = "IDLE" + if downloader.paused(): + state = "PAUSED" + elif qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI > 0: + state = "DOWNLOADING" + + status = { + "state" : state, + "paused" : downloader.paused(), + "pause_int" : scheduler.pause_int(), + "kbpersec" : BPSMeter.do.get_bps() / KIBI, + "speed" : to_units(BPSMeter.do.get_bps()), + "mbleft" : qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI, + "mb" : qnfo[QNFO_BYTES_FIELD] / MEBI, + "noofslots" : len(pnfo_list), + "have_warnings" : str(sabnzbd.GUIHANDLER.count()), + "diskspace1" : diskfree(cfg.download_dir.get_path()), + "diskspace2" : diskfree(cfg.complete_dir.get_path()), + "timeleft" : calc_timeleft(qnfo[QNFO_BYTES_LEFT_FIELD], bpsnow), + "loadavg" : loadavg(), + "jobs" : jobs + } + return status + + +def build_file_list(id): + qnfo = nzbqueue.queue_info() + pnfo_list = qnfo[QNFO_PNFO_LIST_FIELD] + + jobs = [] + for pnfo in pnfo_list: + nzo_id = pnfo[PNFO_NZO_ID_FIELD] + if nzo_id == id: + finished_files = pnfo[PNFO_FINISHED_FILES_FIELD] + active_files = pnfo[PNFO_ACTIVE_FILES_FIELD] + queued_files = pnfo[PNFO_QUEUED_FILES_FIELD] + + + n = 0 + for tup in finished_files: + bytes_left, bytes, fn, date = tup + fn = xml_name(fn) + + age = calc_age(date) + + line = {'filename':fn, + 'mbleft':"%.2f" % (bytes_left / MEBI), + 'mb':"%.2f" % (bytes / MEBI), + 'bytes':"%.2f" % bytes, + 'age':age, 'id':str(n), 'status':'finished'} + jobs.append(line) + n += 1 + + for tup in active_files: + bytes_left, bytes, fn, date, nzf_id = tup + fn = xml_name(fn) + + age = calc_age(date) + + line = {'filename':fn, + 'mbleft':"%.2f" % (bytes_left / MEBI), + 'mb':"%.2f" % (bytes / MEBI), + 'bytes':"%.2f" % bytes, + 'nzf_id':nzf_id, + 'age':age, 'id':str(n), 'status':'active'} + jobs.append(line) + n += 1 + + for tup in queued_files: + _set, bytes_left, bytes, fn, date = tup + fn = xml_name(fn) + _set = xml_name(_set) + + age = calc_age(date) + + line = {'filename':fn, 'set':_set, + 'mbleft':"%.2f" % (bytes_left / MEBI), + 'mb':"%.2f" % (bytes / MEBI), + 'bytes':"%.2f" % bytes, + 'age':age, 'id':str(n), 'status':'queued'} + jobs.append(line) + n += 1 + + return jobs + + +def get_history_size(): + history_db = cherrypy.thread_data.history_db + bytes, month, week = history_db.get_history_size() + return (format_bytes(bytes), format_bytes(month), format_bytes(week)) + +def build_history(loaded=False, start=None, limit=None, verbose=False, verbose_list=None, search=None): + + if not verbose_list: + verbose_list = [] + + try: + limit = int(limit) + except: + limit = 0 + try: + start = int(start) + except: + start = 0 + + def matches_search(text, search_text): + # Replace * with .* and ' ' with . + search_text = search_text.strip().replace('*','.*').replace(' ','.*') + '.*?' + try: + re_search = re.compile(search_text, re.I) + except: + logging.error(Ta('error-regex@1'), search_text) + return False + return re_search.search(text) + + # Grab any items that are active or queued in postproc + queue = PostProcessor.do.get_queue() + + # Filter out any items that don't match the search + if search: + queue = [nzo for nzo in queue if matches_search(nzo.get_original_dirname(), search)] + + # Multi-page support for postproc items + if start > len(queue): + # On a page where we shouldn't show postproc items + queue = [] + else: + try: + if start: + if limit: + queue = queue[start:start+limit] + else: + queue = queue[start:] + except: + pass + # Remove the amount of postproc items from the db request for history items + limit -= len(queue) + + # Aquire the db instance + history_db = cherrypy.thread_data.history_db + # Fetch history items + items, fetched_items, total_items = history_db.fetch_history(start,limit,search) + + # Fetch which items should show details from the cookie + k = [] + if verbose: + details_show_all = True + else: + details_show_all = False + cookie = cherrypy.request.cookie + if cookie.has_key('history_verbosity'): + k = cookie['history_verbosity'].value + c_path = cookie['history_verbosity']['path'] + c_age = cookie['history_verbosity']['max-age'] + c_version = cookie['history_verbosity']['version'] + + if k == 'all': + details_show_all = True + k = k.split(',') + k.extend(verbose_list) + + # Reverse the queue to add items to the top (faster than insert) + items.reverse() + + # Add the postproc items to the top of the history + items = get_active_history(queue, items) + + # Unreverse the queue + items.reverse() + + for item in items: + if details_show_all: + item['show_details'] = 'True' + else: + if item['nzo_id'] in k: + item['show_details'] = 'True' + else: + item['show_details'] = '' + if item['bytes']: + item['size'] = format_bytes(item['bytes']) + else: + item['size'] = '' + if not item.has_key('loaded'): + item['loaded'] = False + + return (items, fetched_items, total_items) + + +def json_list(section, lst): + """Output a simple list as a JSON object + """ + i = 0 + d = [] + for item in lst: + c = {} + c['id'] = '%s' % i + c['name'] = item + i += 1 + d.append(c) + + return { section : d } + + +class xml_factory: + """ + Recursive xml string maker. Feed it a mixed tuple/dict/item object and will output into an xml string + Current limitations: + In Two tiered lists hardcoded name of "item": + In Three tiered lists hardcoded name of "slot": + """ + def __init__(self): + self.__text = '' + + def _tuple(self, keyw, lst): + text = [] + for item in lst: + text.append(self.run(keyw, item)) + return ''.join(text) + + def _dict(self, keyw, lst): + text = [] + for key in lst.keys(): + text.append(self.run(key, lst[key])) + if keyw: + return '<%s>%s\n' % (keyw, ''.join(text), keyw) + else: + return '' + + def _list(self, keyw, lst): + text = [] + for cat in lst: + if isinstance(cat, dict): + text.append(self._dict(plural_to_single(keyw, 'slot'), cat)) + elif isinstance(cat, list): + text.append(self._list(plural_to_single(keyw, 'list'), cat)) + elif isinstance(cat, tuple): + text.append(self._tuple(plural_to_single(keyw, 'tuple'), cat)) + else: + if not isinstance(cat, basestring): + cat = str(cat) + name = plural_to_single(keyw, 'item') + text.append('<%s>%s\n' % (name, xml_name(cat, encoding='utf-8'), name)) + if keyw: + return '<%s>%s\n' % (keyw, ''.join(text), keyw) + else: + return '' + + def run(self, keyw, lst): + if isinstance(lst, dict): + text = self._dict(keyw, lst) + elif isinstance(lst, list): + text = self._list(keyw, lst) + elif isinstance(lst, tuple): + text = self._tuple(keyw, lst) + elif keyw: + text = '<%s>%s\n' % (keyw, xml_name(lst, encoding='utf-8'), keyw) + else: + text = '' + return text + + +def build_queue(web_dir=None, root=None, verbose=False, prim=True, verboseList=None, + dictionary=None, history=False, start=None, limit=None, dummy2=None, output=None): + if output: + converter = unicoder + else: + converter = xml_name + + if not verboseList: + verboseList = [] + if dictionary: + dictn = dictionary + else: + dictn = [] + #build up header full of basic information + info, pnfo_list, bytespersec = build_header(prim) + info['isverbose'] = verbose + cookie = cherrypy.request.cookie + if cookie.has_key('queue_details'): + info['queue_details'] = str(IntConv(cookie['queue_details'].value)) + else: + info['queue_details'] = '0' + + if cfg.newzbin_username() and cfg.newzbin_password(): + info['newzbinDetails'] = True + + if cfg.refresh_rate() > 0: + info['refresh_rate'] = str(cfg.refresh_rate()) + else: + info['refresh_rate'] = '' + + datestart = datetime.datetime.now() + + info['script_list'] = ListScripts() + info['cat_list'] = ListCats() + + + n = 0 + found_active = False + running_bytes = 0 + slotinfo = [] + nzo_ids = [] + + limit = IntConv(limit) + start = IntConv(start) + + if history: + #Collect nzo's from the history that are downloaded but not finished (repairing, extracting) + slotinfo = format_history_for_queue() + #if the specified start value is greater than the amount of history items, do no include the history (used for paging the queue) + if len(slotinfo) < start: + slotinfo = [] + else: + slotinfo = [] + + info['noofslots'] = len(pnfo_list) + len(slotinfo) + + info['start'] = start + info['limit'] = limit + info['finish'] = info['start'] + info['limit'] + if info['finish'] > info['noofslots']: + info['finish'] = info['noofslots'] + + for pnfo in pnfo_list: + repair = pnfo[PNFO_REPAIR_FIELD] + unpack = pnfo[PNFO_UNPACK_FIELD] + delete = pnfo[PNFO_DELETE_FIELD] + script = pnfo[PNFO_SCRIPT_FIELD] + nzo_id = pnfo[PNFO_NZO_ID_FIELD] + cat = pnfo[PNFO_EXTRA_FIELD1] + if not cat: + cat = 'None' + filename = pnfo[PNFO_FILENAME_FIELD] + msgid = pnfo[PNFO_MSGID_FIELD] + bytesleft = pnfo[PNFO_BYTES_LEFT_FIELD] + bytes = pnfo[PNFO_BYTES_FIELD] + average_date = pnfo[PNFO_AVG_DATE_FIELD] + status = pnfo[PNFO_STATUS_FIELD] + priority = pnfo[PNFO_PRIORITY_FIELD] + mbleft = (bytesleft / MEBI) + mb = (bytes / MEBI) + if verbose or verboseList: + finished_files = pnfo[PNFO_FINISHED_FILES_FIELD] + active_files = pnfo[PNFO_ACTIVE_FILES_FIELD] + queued_files = pnfo[PNFO_QUEUED_FILES_FIELD] + + nzo_ids.append(nzo_id) + + slot = {'index':n, 'nzo_id':str(nzo_id)} + unpackopts = sabnzbd.opts_to_pp(repair, unpack, delete) + + slot['unpackopts'] = str(unpackopts) + if script: + slot['script'] = script + else: + slot['script'] = 'None' + slot['msgid'] = msgid + slot['filename'] = converter(filename) + slot['cat'] = cat + slot['mbleft'] = "%.2f" % mbleft + slot['mb'] = "%.2f" % mb + slot['size'] = format_bytes(bytes) + slot['sizeleft'] = format_bytes(bytesleft) + if not downloader.paused() and status != 'Paused' and status != 'Fetching' and not found_active: + slot['status'] = "Downloading" + found_active = True + else: + slot['status'] = "%s" % (status) + if priority == TOP_PRIORITY: + slot['priority'] = 'Force' + elif priority == HIGH_PRIORITY: + slot['priority'] = 'High' + elif priority == LOW_PRIORITY: + slot['priority'] = 'Low' + else: + slot['priority'] = 'Normal' + if mb == mbleft: + slot['percentage'] = "0" + else: + slot['percentage'] = "%s" % (int(((mb-mbleft) / mb) * 100)) + + if status == 'Paused': + slot['timeleft'] = '0:00:00' + slot['eta'] = 'unknown' + else: + running_bytes += bytesleft + slot['timeleft'] = calc_timeleft(running_bytes, bytespersec) + try: + datestart = datestart + datetime.timedelta(seconds=bytesleft / bytespersec) + #new eta format: 16:00 Fri 07 Feb + slot['eta'] = '%s' % datestart.strftime('%H:%M %a %d %b') + except: + datestart = datetime.datetime.now() + slot['eta'] = 'unknown' + + slot['avg_age'] = calc_age(average_date) + slot['verbosity'] = "" + if web_dir: + finished = [] + active = [] + queued = [] + if verbose or nzo_id in verboseList:#this will list files in the xml output, wanted yes/no? + slot['verbosity'] = "True" + for tup in finished_files: + bytes_left, bytes, fn, date = tup + fn = converter(fn) + + age = calc_age(date) + + line = {'filename':fn, + 'mbleft':"%.2f" % (bytes_left / MEBI), + 'mb':"%.2f" % (bytes / MEBI), + 'size': format_bytes(bytes), + 'sizeleft': format_bytes(bytes_left), + 'age':age} + finished.append(line) + + for tup in active_files: + bytes_left, bytes, fn, date, nzf_id = tup + fn = converter(fn) + + age = calc_age(date) + + line = {'filename':fn, + 'mbleft':"%.2f" % (bytes_left / MEBI), + 'mb':"%.2f" % (bytes / MEBI), + 'size': format_bytes(bytes), + 'sizeleft': format_bytes(bytes_left), + 'nzf_id':nzf_id, + 'age':age} + active.append(line) + + for tup in queued_files: + _set, bytes_left, bytes, fn, date = tup + fn = converter(fn) + _set = converter(_set) + + age = calc_age(date) + + line = {'filename':fn, 'set':_set, + 'mbleft':"%.2f" % (bytes_left / MEBI), + 'mb':"%.2f" % (bytes / MEBI), + 'size': format_bytes(bytes), + 'sizeleft': format_bytes(bytes_left), + 'age':age} + queued.append(line) + + slot['finished'] = finished + slot['active'] = active + slot['queued'] = queued + + + if (start <= n and n < start + limit) or not limit: + slotinfo.append(slot) + n += 1 + + if slotinfo: + info['slots'] = slotinfo + else: + info['slots'] = '' + verboseList = [] + + #Paging of the queue using limit and/or start values + if limit > 0: + try: + if start > 0: + if start > len(pnfo_list): + pnfo_list = [] + else: + end = start+limit + if start+limit > len(pnfo_list): + end = len(pnfo_list) + pnfo_list = pnfo_list[start:end] + else: + if not limit > len(pnfo_list): + pnfo_list = pnfo_list[:limit] + except: + pass + + return info, pnfo_list, bytespersec, verboseList, dictn + + + +def rss_qstatus(): + """ Return a RSS feed with the queue status + """ + qnfo = nzbqueue.queue_info() + pnfo_list = qnfo[QNFO_PNFO_LIST_FIELD] + + rss = RSS() + rss.channel.title = "SABnzbd Queue" + rss.channel.description = "Overview of current downloads" + rss.channel.link = "http://%s:%s/sabnzbd/queue" % ( \ + cfg.cherryhost(), cfg.cherryport() ) + rss.channel.language = "en" + + item = Item() + item.title = 'Total ETA: %s - Queued: %.2f MB - Speed: %.2f kB/s' % \ + ( + calc_timeleft(qnfo[QNFO_BYTES_LEFT_FIELD], BPSMeter.do.get_bps()), + qnfo[QNFO_BYTES_LEFT_FIELD] / MEBI, + BPSMeter.do.get_bps() / KIBI + ) + rss.addItem(item) + + sum_bytesleft = 0 + for pnfo in pnfo_list: + filename = pnfo[PNFO_FILENAME_FIELD] + msgid = pnfo[PNFO_MSGID_FIELD] + bytesleft = pnfo[PNFO_BYTES_LEFT_FIELD] / MEBI + bytes = pnfo[PNFO_BYTES_FIELD] / MEBI + mbleft = (bytesleft / MEBI) + mb = (bytes / MEBI) + + + if mb == mbleft: + percentage = "0%" + else: + percentage = "%s%%" % (int(((mb-mbleft) / mb) * 100)) + + filename = xml_name(filename) + name = u'%s (%s)' % (filename, percentage) + + item = Item() + item.title = name + if msgid: + item.link = "https://newzbin.com/browse/post/%s/" % msgid + else: + item.link = "http://%s:%s/sabnzbd/history" % ( \ + cfg.cherryhost(), cfg.cherryport() ) + statusLine = [] + statusLine.append('') + #Total MB/MB left + statusLine.append('
        Remain/Total: %.2f/%.2f MB
        ' % (bytesleft, bytes)) + #ETA + sum_bytesleft += pnfo[PNFO_BYTES_LEFT_FIELD] + statusLine.append("
        ETA: %s
        " % calc_timeleft(sum_bytesleft, BPSMeter.do.get_bps())) + statusLine.append("
        Age: %s
        " % calc_age(pnfo[PNFO_AVG_DATE_FIELD])) + statusLine.append("") + item.description = ''.join(statusLine) + rss.addItem(item) + + rss.channel.lastBuildDate = std_time(time.time()) + rss.channel.pubDate = rss.channel.lastBuildDate + rss.channel.ttl = "1" + return rss.write() + + +def format_history_for_queue(): + ''' Retrieves the information on currently active history items, and formats them for displaying in the queue ''' + slotinfo = [] + history_items = get_active_history() + + for item in history_items: + slot = {'nzo_id':item['nzo_id'], + 'msgid':item['report'], 'filename':xml_name(item['name']), 'loaded':True, + 'stages':item['stage_log'], 'status':item['status'], 'bytes':item['bytes'], + 'size':item['size']} + slotinfo.append(slot) + + return slotinfo + + +def get_active_history(queue=None, items=None): + # Get the currently in progress and active history queue. + if items is None: + items = [] + if queue is None: + queue = PostProcessor.do.get_queue() + + for nzo in queue: + t = build_history_info(nzo) + item = {} + item['completed'], item['name'], item['nzb_name'], item['category'], item['pp'], item['script'], item['report'], \ + item['url'], item['status'], item['nzo_id'], item['storage'], item['path'], item['script_log'], \ + item['script_line'], item['download_time'], item['postproc_time'], item['stage_log'], \ + item['downloaded'], item['completeness'], item['fail_message'], item['url_info'], item['bytes'] = t + item['action_line'] = nzo.get_action_line() + item = unpack_history_info(item) + + item['loaded'] = True + if item['bytes']: + item['size'] = format_bytes(item['bytes']) + else: + item['size'] = '' + + # Queue display needs Unicode instead of UTF-8 + for kw in item: + if isinstance(item[kw], str): + item[kw] = item[kw].decode('utf-8') + + items.append(item) + + return items + + +def options_list(output): + return report(output, keyword='options', data= + { + 'yenc' : sabnzbd.decoder.HAVE_YENC, + 'par2' : sabnzbd.newsunpack.PAR2_COMMAND, + 'par2c' : sabnzbd.newsunpack.PAR2C_COMMAND, + 'rar' : sabnzbd.newsunpack.RAR_COMMAND, + 'zip' : sabnzbd.newsunpack.ZIP_COMMAND, + 'nice' : sabnzbd.newsunpack.NICE_COMMAND, + 'ionice' : sabnzbd.newsunpack.IONICE_COMMAND, + 'ssl' : sabnzbd.newswrapper.HAVE_SSL + }) diff --git a/sabnzbd/lang.py b/sabnzbd/lang.py new file mode 100644 index 0000000..c229684 --- /dev/null +++ b/sabnzbd/lang.py @@ -0,0 +1,204 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.lang - Language support +""" + +# Skin-specific files cannot overrule previous texts. +# Every acronym will be prexifed with the skin name ("skin-"). +# This is required, because two skins can be active at once. + + +import os +import glob +import logging +import re +import operator + +_T = {} # Global language dictionary +_DIRS = [] # List of active (language-folder, prefix) tuples + +def T(txt): + """ Translate an acronym to natural language """ + try: + return _T[txt] + except KeyError: + # Missing text: create text from acronym with %s attached + txt, num = _get_count(txt) + return '#' + txt + '#' + ' %s'*num + + +def Ta(txt): + """ Translate acronym, return latin-1 encoding """ + return T(txt).encode('latin-1', 'replace') + + +def Tspec(txt): + """ Translate special terms """ + if txt == 'None': + return T('none') + elif txt == 'Default': + return T('default') + else: + return txt + + +def reset_language(language): + """ Process active language folders with new language """ + # First fill the new dictionary and afterwards + # replace the global one. This way there will + # always be a valid dictionary available. + global _T, _DIRS + new_T = {} + dirs = _DIRS + _DIRS = [] + for tup in dirs: + install_language(tup[0], language, tup[1], new_T) + old = _T + _T = new_T + del old + + +def install_language(path, language, prefix='', dic=None): + """ Read language file for the active language + and default language. + """ + # 'dic' parameter is for internal use by 'reset_language' only + global _DIRS + _DIRS.append((path, prefix)) + + if dic is None: + dic = _T + if language != 'us-en': + name = os.path.join(path, language+'.txt') + if os.path.exists(name): + _parse_lang_file(dic, name, prefix) + + name = os.path.join(path, 'us-en.txt') + if os.path.exists(name): + _parse_lang_file(dic, name, prefix) + + +def list_languages(path): + """ Return list of languages-choices + Each choice is a list, 0: short name, 1: long name + """ + lst = [] + for name in glob.glob(path + '/*.txt'): + lang = os.path.basename(name).replace('.txt','') + try: + fp = open(name, 'r') + except IOError: + continue + + encoding, language = _get_headers(fp) + long_name = u"%s" % language + lst.append((lang, long_name)) + fp.close() + return sorted(lst ,key=operator.itemgetter(1)) + + + +# Matches : acronym message text # comment +# | (1) |(2)| (3) | +_RE_LINE = re.compile(r'\s*(\S+)(\s*)([^#]*)') + +def _parse_lang_file(dic, name, prefix=''): + """ Parse language file and store new definitions in global dictionary + """ + try: + f = open(name, "r") + except IOError: + logging.error("Cannot open language file %s", name) + return False + + encoding, language = _get_headers(f) + logging.debug("Language file %s, encoding=%s, language=%s", + name, encoding, language) + + if prefix: + prefix += '-' + lcount = 0 + multi = False + msg = '' + for line in f.xreadlines(): + line = line.strip('\n').decode(encoding) + lcount += 1 + m = re.search(_RE_LINE, line) + if m and not m.group(1).startswith('#'): + if multi: + if msg.endswith('\\n') or msg.endswith('\\r'): + msg = msg + m.group(1) + m.group(2) + m.group(3) + else: + msg = msg + " " + m.group(1) + m.group(2) + m.group(3) + else: + key = prefix + m.group(1) + msg = m.group(3) + if msg and msg.strip().endswith("\\"): + msg = msg.strip().strip("\\") + multi = True + else: + multi = False + msg = msg.strip() + if '\\' in msg: + msg = msg.replace('\\n', '
        ').replace('\\t', '\t').replace('\\@', '#').replace('\s', ' ').replace('\\r','\r\n') + if key not in dic: + if msg.count('%s') == _get_count(key)[1]: + dic[key] = msg + else: + logging.error("[%s:%s] Incorrect message for %s, should have %s parameters", + name, lcount, key, _get_count(key)[1]) + + + f.close() + return True + + +def _get_headers(fp): + """ Return encoding and language + # -*- coding: latin-1 -*- + # English (UK) # remarks + """ + txt = fp.readline() + m = re.search(r'#\s*-\*-\s+coding:\s+(\S+)\s+-\*-', txt) + if m and m.group(1): + encoding = m.group(1) + else: + encoding = 'latin-1' + + txt = fp.readline() + m = re.search(r'#\s*([^#]+)#*', txt) + if m: + language = m.group(1).strip().decode(encoding) + else: + language = '' + + return encoding, language + + +_RE_COUNT = re.compile(r'(\S+)@(\d+)') +def _get_count(txt): + """ Return base key and counter + "CopyFile@2" --> "CopyFile", 2 + "Stop" --> "Stop", 0 + """ + m = re.search(_RE_COUNT, txt) + if m and m.group(2).isdigit(): + return m.group(1), int(m.group(2)) + else: + return txt, 0 diff --git a/sabnzbd/misc.py b/sabnzbd/misc.py new file mode 100644 index 0000000..db2e3f5 --- /dev/null +++ b/sabnzbd/misc.py @@ -0,0 +1,1393 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.misc - misc classes +""" + +import os +import sys +import logging +import urllib +import re +import webbrowser +import tempfile +import shutil +import threading +import subprocess +import socket +import time + +import sabnzbd +from sabnzbd.decorators import synchronized +from sabnzbd.constants import * +import sabnzbd.nzbqueue +import sabnzbd.config as config +import sabnzbd.cfg as cfg +from sabnzbd.codecs import unicoder, latin1 +from sabnzbd.lang import T, Ta + +if sabnzbd.FOUNDATION: + import Foundation + +RE_VERSION = re.compile('(\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)') +RE_UNITS = re.compile('(\d+\.*\d*)\s*([KMGTP]{0,1})', re.I) +TAB_UNITS = ('', 'K', 'M', 'G', 'T', 'P') + +PANIC_NONE = 0 +PANIC_PORT = 1 +PANIC_TEMPL = 2 +PANIC_QUEUE = 3 +PANIC_FWALL = 4 +PANIC_OTHER = 5 +PANIC_XPORT = 6 + +def safe_lower(txt): + if txt: + return txt.lower() + else: + return '' + + +#------------------------------------------------------------------------------ +def cat_to_opts(cat, pp=None, script=None, priority=None): + """ + Derive options from category, if option not already defined. + Specified options have priority over category-options + """ + if pp is None: + try: + pp = config.get_categories()[safe_lower(cat)].pp() + # Get the default pp + if pp == '': + pp = cfg.dirscan_pp() + logging.debug('Job gets options %s', pp) + except KeyError: + pp = cfg.dirscan_pp() + + if not script: + try: + script = config.get_categories()[safe_lower(cat)].script() + # Get the default script + if script == '' or safe_lower(script) == 'default': + script = cfg.dirscan_script() + logging.debug('Job gets script %s', script) + except KeyError: + script = cfg.dirscan_script() + + if priority is None or priority == DEFAULT_PRIORITY: + try: + priority = config.get_categories()[safe_lower(cat)].priority() + # Get the default priority + if priority == DEFAULT_PRIORITY: + priority = cfg.dirscan_priority() + logging.debug('Job gets priority %s', script) + except KeyError: + priority = cfg.dirscan_priority() + + return cat, pp, script, priority + + +#------------------------------------------------------------------------------ +_wildcard_to_regex = { + '\\': r'\\', + '^' : r'\^', + '$' : r'\$', + '.' : r'\.', + '[' : r'\[', + ']' : r'\]', + '(' : r'\(', + ')' : r'\)', + '+' : r'\+', + '?' : r'.' , + '|' : r'\|', + '{' : r'\{', + '}' : r'\}', + '*' : r'.*' +} +def wildcard_to_re(text): + """ Convert plain wildcard string (with '*' and '?') to regex. + """ + return ''.join([_wildcard_to_regex.get(ch, ch) for ch in text]) + +#------------------------------------------------------------------------------ +def cat_convert(cat): + """ Convert newzbin/nzbs.org category/group-name to user categories. + If no match found, but newzbin-cat equals user-cat, then return user-cat + If no match found, return None + """ + newcat = cat + found = False + + if cat and cat.lower() != 'none': + cats = config.get_categories() + for ucat in cats: + try: + newzbin = cats[ucat].newzbin() + if type(newzbin) != type([]): + newzbin = [newzbin] + except: + newzbin = [] + for name in newzbin: + if re.search('^%s$' % wildcard_to_re(name), cat, re.I): + if '.' not in name: + logging.debug('Convert newzbin/nzbs.org cat "%s" to user-cat "%s"', cat, ucat) + else: + logging.debug('Convert group "%s" to user-cat "%s"', cat, ucat) + newcat = ucat + found = True + break + if found: + break + + if not found: + for ucat in cats: + if cat.lower() == ucat.lower(): + found = True + break + + if found: + return newcat + else: + return None + + +################################################################################ +# sanitize_filename # +################################################################################ +if sabnzbd.WIN32: + CH_ILLEGAL = r'\/<>?*:|"' + CH_LEGAL = r'++{}!@-#`' +else: + CH_ILLEGAL = r'/' + CH_LEGAL = r'+' + +def sanitize_filename(name): + """ Return filename with illegal chars converted to legal ones + and with the par2 extension always in lowercase + """ + illegal = CH_ILLEGAL + legal = CH_LEGAL + + lst = [] + for ch in name.strip(): + if ch in illegal: + ch = legal[illegal.find(ch)] + lst.append(ch) + name = ''.join(lst) + + if not name: + name = 'unknown' + + name, ext = os.path.splitext(name) + lowext = ext.lower() + if lowext == '.par2' and lowext != ext: + ext = lowext + return name + ext + +FL_ILLEGAL = CH_ILLEGAL + '\x92' +FL_LEGAL = CH_LEGAL + "'" +uFL_ILLEGAL = FL_ILLEGAL.decode('latin-1') +uFL_LEGAL = FL_LEGAL.decode('latin-1') + +def sanitize_foldername(name): + """ Return foldername with dodgy chars converted to safe ones + Remove any leading and trailing dot and space characters + """ + if isinstance(name, unicode): + illegal = uFL_ILLEGAL + legal = uFL_LEGAL + else: + illegal = FL_ILLEGAL + legal = FL_LEGAL + + repl = cfg.replace_illegal() + lst = [] + for ch in name.strip(): + if ch in illegal: + if repl: + ch = legal[illegal.find(ch)] + lst.append(ch) + else: + lst.append(ch) + name = ''.join(lst) + + name = name.strip('. ') + if not name: + name = 'unknown' + + maxlen = cfg.folder_max_length() + if len(name) > maxlen: + name = name[:maxlen] + + return name + + +################################################################################ +# DirPermissions # +################################################################################ +def create_all_dirs(path, umask=False): + """ Create all required path elements and set umask on all + Return True if last elelent could be made or exists """ + result = True + if sabnzbd.WIN32: + try: + os.makedirs(path) + except: + result = False + else: + list = [] + list.extend(path.split('/')) + path = '' + for d in list: + if d: + path += '/' + d + if not os.path.exists(path): + try: + os.mkdir(path) + result = True + except: + result = False + if umask: + mask = cfg.umask() + if mask: + try: + os.chmod(path, int(mask, 8) | 0700) + except: + pass + return result + +################################################################################ +# Real_Path # +################################################################################ +def real_path(loc, path): + if not ((sabnzbd.WIN32 and len(path)>1 and path[0].isalpha() and path[1] == ':') or \ + (path and (path[0] == '/' or path[0] == '\\')) + ): + path = loc + '/' + path + return os.path.normpath(os.path.abspath(path)) + + +################################################################################ +# Create_Real_Path # +################################################################################ +def create_real_path(name, loc, path, umask=False): + if path: + my_dir = real_path(loc, path) + if not os.path.exists(my_dir): + logging.info('%s directory: %s does not exist, try to create it', name, my_dir) + if not create_all_dirs(my_dir, umask): + logging.error(Ta('error-createDir@1'), my_dir) + return (False, my_dir) + + if os.access(my_dir, os.R_OK + os.W_OK): + return (True, my_dir) + else: + logging.error(Ta('error-accessDir@2'), name, my_dir) + return (False, my_dir) + else: + return (False, "") + +################################################################################ +# get_user_shellfolders +# +# Return a dictionary with Windows Special Folders +# Read info from the registry +################################################################################ + +def get_user_shellfolders(): + import _winreg + values = {} + + # Open registry hive + try: + hive = _winreg.ConnectRegistry(None, _winreg.HKEY_CURRENT_USER) + except WindowsError: + logging.error(Ta('error-regConnect')) + return values + + # Then open the registry key where Windows stores the Shell Folder locations + try: + key = _winreg.OpenKey(hive, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders") + except WindowsError: + logging.error(Ta('error-regOpen@1'), r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders") + _winreg.CloseKey(hive) + return values + + try: + for i in range(0, _winreg.QueryInfoKey(key)[1]): + name, value, val_type = _winreg.EnumValue(key, i) + try: + values[name] = value.encode('latin-1') + except UnicodeEncodeError: + try: + # If the path name cannot be converted to latin-1 (contains high ASCII value strings) + # then try and use the short name + import win32api + # Need to make sure the path actually exists, otherwise ignore + if os.path.exists(value): + values[name] = win32api.GetShortPathName(value) + except: + # probably a pywintypes.error error such as folder does not exist + logging.error("Traceback: ", exc_info = True) + values[name] = 'c:\\' + i += 1 + _winreg.CloseKey(key) + _winreg.CloseKey(hive) + return values + except WindowsError: + # On error, return empty dict. + logging.error(Ta('error-regSpecial')) + _winreg.CloseKey(key) + _winreg.CloseKey(hive) + return {} + + +#------------------------------------------------------------------------------ +def windows_variant(): + """ Determine Windows variant + Return vista_plus, x64 + """ + from win32api import GetVersionEx + from win32con import VER_PLATFORM_WIN32_NT + import _winreg + + vista_plus = x64 = False + maj, min, buildno, plat, csd = GetVersionEx() + + if plat == VER_PLATFORM_WIN32_NT: + vista_plus = maj > 5 + if vista_plus: + # Must be done the hard way, because the Python runtime lies to us. + # This does *not* work: + # return os.environ['PROCESSOR_ARCHITECTURE'] == 'AMD64' + # because the Python runtime returns 'X86' even on an x64 system! + key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, + r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment") + for n in xrange(_winreg.QueryInfoKey(key)[1]): + name, value, val_type = _winreg.EnumValue(key, n) + if name == 'PROCESSOR_ARCHITECTURE': + x64 = value.upper() == u'AMD64' + break + _winreg.CloseKey(key) + + return vista_plus, x64 + + +#------------------------------------------------------------------------------ + +_SERVICE_KEY = 'SYSTEM\\CurrentControlSet\\services\\' +_SERVICE_PARM = 'CommandLine' + +def get_serv_parms(service): + """ Get the service command line parameters from Registry """ + import _winreg + + value = [] + try: + key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, _SERVICE_KEY + service) + for n in xrange(_winreg.QueryInfoKey(key)[1]): + name, value, val_type = _winreg.EnumValue(key, n) + if name == _SERVICE_PARM: + break + _winreg.CloseKey(key) + except WindowsError: + pass + for n in xrange(len(value)): + value[n] = latin1(value[n]) + return value + + +def set_serv_parms(service, args): + """ Set the service command line parameters in Registry """ + import _winreg + + uargs = [] + for arg in args: + uargs.append(unicoder(arg)) + + try: + key = _winreg.CreateKey(_winreg.HKEY_LOCAL_MACHINE, _SERVICE_KEY + service) + _winreg.SetValueEx(key, _SERVICE_PARM, None, _winreg.REG_MULTI_SZ, uargs) + _winreg.CloseKey(key) + except WindowsError: + return False + return True + + + +################################################################################ +# Launch a browser for various purposes +# including panic messages +# +################################################################################ +MSG_BAD_NEWS = r''' + + + Problem with %s %s + + +

        Welcome to %s %s

        +

         

        +

        +

        + %s +
        +
        %s
        + + +''' + +MSG_BAD_FWALL = r''' + SABnzbd is not compatible with some software firewalls.
        + %s
        + Sorry, but we cannot solve this incompatibility right now.
        + Please file a complaint at your firewall supplier.
        +
        +''' + +MSG_BAD_PORT = r''' + SABnzbd needs a free tcp/ip port for its internal web server.
        + Port %s on %s was tried , but it is not available.
        + Some other software uses the port or SABnzbd is already running.
        +
        + Please restart SABnzbd with a different port number.
        +
        + %s
        +     %s --server %s:%s
        +
        + If you get this error message again, please try a different number.
        +''' + +MSG_ILL_PORT = r''' + SABnzbd needs a free tcp/ip port for its internal web server.
        + Port %s on %s was tried , but the account SABnzbd has no permission to use it.
        + On Linux systems, normal users must use ports above 1023.
        +
        + Please restart SABnzbd with a different port number.
        +
        + %s
        +     %s --server %s:%s
        +
        + If you get this error message again, please try a different number.
        +''' + +MSG_BAD_QUEUE = r''' + SABnzbd detected saved data from an other SABnzbd version
        + but cannot re-use the data of the other program.

        + You may want to finish your queue first with the other program.

        + After that, start this program with the "--clean" option.
        + This will erase the current queue and history!
        + SABnzbd read the file "%s".
        +
        + %s
        +     %s --clean
        +
        +''' + +MSG_BAD_TEMPL = r''' + SABnzbd cannot find its web interface files in %s.
        + Please install the program again.
        +
        +''' + +MSG_OTHER = r''' + SABnzbd detected a fatal error:
        + %s

        + %s
        +''' + +MSG_OLD_QUEUE = r''' + SABnzbd detected a Queue and History from an older (0.4.x) release.

        + Both queue and history will be ignored and may get lost!

        + You may choose to stop SABnzbd and finish the queue with the older program.

        + Click OK to continue to SABnzbd

        +
        +''' + +def panic_message(panic, a=None, b=None): + """Create the panic message from templates + """ + if sabnzbd.WIN32: + os_str = 'Press Startkey+R and type the line (example):' + prog_path = '"%s"' % sabnzbd.MY_FULLNAME + else: + os_str = 'Open a Terminal window and type the line (example):' + prog_path = sabnzbd.MY_FULLNAME + + if panic == PANIC_PORT: + newport = int(b) + 1 + newport = "%s" % newport + msg = MSG_BAD_PORT % (b, a, os_str, prog_path, a, newport) + elif panic == PANIC_XPORT: + if int(b) < 1023: + newport = 1024 + else: + newport = int(b) + 1 + newport = "%s" % newport + msg = MSG_ILL_PORT % (b, a, os_str, prog_path, a, newport) + elif panic == PANIC_TEMPL: + msg = MSG_BAD_TEMPL % a + elif panic == PANIC_QUEUE: + msg = MSG_BAD_QUEUE % (a, os_str, prog_path) + elif panic == PANIC_FWALL: + if a: + msg = MSG_BAD_FWALL % "It is likely that you are using ZoneAlarm on Vista.
        " + else: + msg = MSG_BAD_FWALL % "
        " + else: + msg = MSG_OTHER % (a, b) + + msg = MSG_BAD_NEWS % (sabnzbd.MY_NAME, sabnzbd.__version__, sabnzbd.MY_NAME, sabnzbd.__version__, + msg, 'Program did not start!') + + if sabnzbd.WIN_SERVICE: + sabnzbd.WIN_SERVICE.ErrLogger('Panic exit', msg) + + if (not cfg.autobrowser()) or sabnzbd.DAEMON: + return + + msgfile, url = tempfile.mkstemp(suffix='.html') + os.write(msgfile, msg) + os.close(msgfile) + return url + + +def panic_fwall(vista): + launch_a_browser(panic_message(PANIC_FWALL, vista)) + +def panic_port(host, port): + launch_a_browser(panic_message(PANIC_PORT, host, port)) + +def panic_xport(host, port): + launch_a_browser(panic_message(PANIC_XPORT, host, port)) + logging.error(Ta('error-portNoAccess@1'), port) + +def panic_queue(name): + launch_a_browser(panic_message(PANIC_QUEUE, name, 0)) + +def panic_tmpl(name): + launch_a_browser(panic_message(PANIC_TEMPL, name, 0)) + +def panic_old_queue(): + msg = MSG_OLD_QUEUE + return MSG_BAD_NEWS % (sabnzbd.MY_NAME, sabnzbd.__version__, sabnzbd.MY_NAME, sabnzbd.__version__, msg, '') + +def panic(reason, remedy=""): + print "\nFatal error:\n %s\n%s" % (reason, remedy) + launch_a_browser(panic_message(PANIC_OTHER, reason, remedy)) + + +def launch_a_browser(url, force=False): + """Launch a browser pointing to the URL + """ + if not force and not cfg.autobrowser() or sabnzbd.DAEMON: + return + + logging.info("Lauching browser with %s", url) + try: + webbrowser.open(url, 2, 1) + except: + # Python 2.4 does not support parameter new=2 + try: + webbrowser.open(url, 1, 1) + except: + logging.warning(Ta('warn-noBrowser')) + logging.debug("Traceback: ", exc_info = True) + + +def error_page_401(status, message, traceback, version): + """ Custom handler for 401 error """ + return r''' + + + Access denied + + +

        + Error %s: You need to provide a valid username and password. + + +''' % status + + + +################################################################################ +# Check latest version +# +# Perform an online version check +# Syntax of online version file: +# +# +# +# +# The latter two lines are only present when a alpha/beta/rc is available. +# Formula for the version numbers (line 1 and 3). +# - ..[rc|beta|alpha] +# +# The value for a final version is assumned to be 99. +# The value for the beta/rc version is 1..98, with RC getting +# a boost of 80 and Beta of 40. +# This is done to signal alpha/beta/rc users of availability of the final +# version (which is implicitly 99). +# People will only be informed to upgrade to a higher alpha/beta/rc version, if +# they are already using an alpha/beta/rc. +# RC's are valued higher than Beta's, which are valued higher than Alpha's. +# +################################################################################ + +def convert_version(text): + """ Convert version string to numerical value and a testversion indicator """ + version = 0 + test = True + m = RE_VERSION.search(text) + if m: + version = int(m.group(1))*1000000 + int(m.group(2))*10000 + int(m.group(3))*100 + try: + if m.group(4).lower() == 'rc': + version = version + 80 + elif m.group(4).lower() == 'beta': + version = version + 40 + version = version + int(m.group(5)) + except: + version = version + 99 + test = False + return version, test + + +def check_latest_version(): + """ Do an online check for the latest version """ + if not cfg.version_check(): + return + + current, testver = convert_version(sabnzbd.__version__) + if not current: + logging.debug("Unsupported release number (%s), will not check", sabnzbd.__version__) + return + + try: + fn = urllib.urlretrieve('http://sabnzbdplus.sourceforge.net/version/latest')[0] + f = open(fn, 'r') + data = f.read() + f.close() + except: + return + + try: + latest_label = data.split()[0] + except: + latest_label = '' + try: + url = data.split()[1] + except: + url = '' + try: + latest_testlabel = data.split()[2] + except: + latest_testlabel = '' + try: + url_beta = data.split()[3] + except: + url_beta = url + + + latest, dummy = convert_version(latest_label) + latest_test, dummy = convert_version(latest_testlabel) + + logging.debug("Checked for a new release, cur= %s, latest= %s (on %s)", current, latest, url) + + if testver and current < latest: + sabnzbd.NEW_VERSION = "%s;%s" % (latest_label, url) + elif current < latest: + sabnzbd.NEW_VERSION = "%s;%s" % (latest_label, url) + elif testver and current < latest_test: + sabnzbd.NEW_VERSION = "%s;%s" % (latest_testlabel, url_beta) + + +def from_units(val): + """ Convert K/M/G/T/P notation to float + """ + val = str(val).strip().upper() + if val == "-1": + return val + m = RE_UNITS.search(val) + if m: + if m.group(2): + val = float(m.group(1)) + unit = m.group(2) + n = 0 + while unit != TAB_UNITS[n]: + val = val * 1024.0 + n = n+1 + else: + val = m.group(1) + try: + return float(val) + except: + return 0.0 + else: + return 0.0 + +def to_units(val, spaces=0): + """ Convert number to K/M/G/T/P notation + Add "spaces" if not ending in letter + """ + val = str(val).strip() + if val == "-1": + return val + n= 0 + try: + val = float(val) + except: + return '' + while (val > 1023.0) and (n < 5): + val = val / 1024.0 + n= n+1 + unit = TAB_UNITS[n] + if unit: + return "%.2f %s" % (val, unit) + else: + return "%.0f%s" % (val, ' '*spaces) + +#------------------------------------------------------------------------------ +def same_file(a, b): + """ Return True if both paths are identical """ + + if "samefile" in os.path.__dict__: + try: + return os.path.samefile(a, b) + except: + return False + else: + try: + a = os.path.normpath(os.path.abspath(a)).lower() + b = os.path.normpath(os.path.abspath(b)).lower() + return a == b + except: + return False + +#------------------------------------------------------------------------------ +def exit_sab(value): + sys.stderr.flush() + sys.stdout.flush() + sys.exit(value) + + +#------------------------------------------------------------------------------ +def notify(notificationName, message): + """ Send a notification to the OS (OSX-only) """ + if sabnzbd.FOUNDATION: + pool = Foundation.NSAutoreleasePool.alloc().init() + nc = Foundation.NSDistributedNotificationCenter.defaultCenter() + nc.postNotificationName_object_(notificationName, message) + del pool + + +#------------------------------------------------------------------------------ +def split_host(srv): + """ Split host:port notation, allowing for IPV6 """ + # Cannot use split, because IPV6 of "a:b:c:port" notation + # Split on the last ':' + mark = srv.rfind(':') + if mark < 0: + host = srv + else: + host = srv[0 : mark] + port = srv[mark+1 :] + try: + port = int(port) + except: + port = None + return (host, port) + + +#------------------------------------------------------------------------------ +# Locked directory operations + +DIR_LOCK = threading.RLock() + +@synchronized(DIR_LOCK) +def get_unique_path(dirpath, n=0, create_dir=True): + """ Determine a unique folder or filename """ + path = dirpath + if n: path = "%s.%s" % (dirpath, n) + + if not os.path.exists(path): + if create_dir: create_dirs(path) + return path + else: + return get_unique_path(dirpath, n=n+1, create_dir=create_dir) + +@synchronized(DIR_LOCK) +def get_unique_filename(path): + """ Check if path is unique. If not, add number like: "/path/name.NUM.ext". + """ + num = 1 + while os.path.exists(path): + path, fname = os.path.split(path) + name, ext = os.path.splitext(fname) + fname = "%s.%d%s" % (name, num, ext) + num += 1 + path = os.path.join(path, fname) + return path + + +@synchronized(DIR_LOCK) +def create_dirs(dirpath): + """ Create directory tree, obeying permissions """ + if not os.path.exists(dirpath): + logging.info('Creating directories: %s', dirpath) + if not create_all_dirs(dirpath, True): + logging.error(Ta('error-makeFile@1'), dirpath) + logging.debug("Traceback: ", exc_info = True) + return None + return dirpath + + +@synchronized(DIR_LOCK) +def move_to_path(path, new_path, unique=True): + """ Move a file to a new path, optionally give unique filename """ + if unique: + new_path = get_unique_path(new_path, create_dir=False) + if new_path: + logging.debug("Moving. Old path:%s new path:%s unique?:%s", + path,new_path, unique) + try: + # First try cheap rename + renamer(path, new_path) + except: + # Cannot rename, try copying + try: + if not os.path.exists(os.path.dirname(new_path)): + create_dirs(os.path.dirname(new_path)) + shutil.copyfile(path, new_path) + os.remove(path) + except: + logging.error(Ta('error-moveFile@2'), path, new_path) + logging.debug("Traceback: ", exc_info = True) + return new_path + + +@synchronized(DIR_LOCK) +def cleanup_empty_directories(path): + path = os.path.normpath(path) + while 1: + repeat = False + for root, dirs, files in os.walk(path, topdown=False): + if not dirs and not files and root != path: + try: + remove_dir(root) + repeat = True + except: + pass + if not repeat: + break + + +@synchronized(DIR_LOCK) +def get_filepath(path, nzo, filename): + """ Create unique filepath """ + # This procedure is only used by the Assembler thread + # It does no umask setting + # It uses the dir_lock for the (rare) case that the + # download_dir is equal to the complete_dir. + dirname = nzo.get_dirname() + created = nzo.get_dirname_created() + + dName = dirname + if not created: + for n in xrange(200): + dName = dirname + if n: dName += '.' + str(n) + try: + os.mkdir(os.path.join(path, dName)) + break + except: + pass + nzo.set_dirname(dName, created = True) + + fPath = os.path.join(os.path.join(path, dName), filename) + n = 0 + while True: + fullPath = fPath + if n: fullPath += '.' + str(n) + if os.path.exists(fullPath): + n = n + 1 + else: + break + + return fullPath + + +def bad_fetch(nzo, url, msg='', retry=False, archive=False): + """ Create History entry for failed URL Fetch """ + logging.error(Ta('error-urlGet@2'), latin1(url), latin1(msg)) + msg = unicoder(msg) + + pp = nzo.get_pp() + if pp: + pp = '&pp=%s' % urllib.quote(pp) + else: + pp = '' + cat = nzo.get_cat() + if cat: + cat = '&cat=%s' % urllib.quote(cat) + else: + cat = '' + script = nzo.get_script() + if script: + script = '&script=%s' % urllib.quote(script) + else: + script = '' + + nzo.set_status('Failed') + + + if url: + nzo.set_filename(url) + nzo.set_original_dirname(url) + + if retry: + nzbname = nzo.get_dirname_rename() + if nzbname: + nzbname = '&nzbname=%s' % urllib.quote(nzbname) + else: + nzbname = '' + text = T('his-retryURL1@1')+', ' + T('his-retryURL2') + '' + parms = (msg, cfg.api_key(), urllib.quote(url), pp, cat, script, nzbname) + nzo.set_fail_msg(text % parms) + else: + if archive: + msg = T('his-badArchive') + elif not '://' in url: + msg = T('his-cannotGetReport') + else: + msg = T('his-failedURL') + nzo.set_fail_msg(msg) + + sabnzbd.nzbqueue.remove_nzo(nzo.nzo_id, add_to_history=True, unload=True) + + +def on_cleanup_list(filename, skip_nzb=False): + """ Return True if a filename matches the clean-up list """ + + if cfg.cleanup_list(): + ext = os.path.splitext(filename)[1].strip().strip('.') + if sabnzbd.WIN32: ext = ext.lower() + + for k in cfg.cleanup_list(): + item = k.strip().strip('.') + if item == ext and not (skip_nzb and item == 'nzb'): + return True + return False + +def get_ext(filename): + try: + return os.path.splitext(filename)[1].lower() + except: + return '' + +def get_filename(path): + try: + return os.path.split(path)[1] + except: + return '' + +def loadavg(): + """ Return 1, 5 and 15 minute load average of host or "" if not supported + """ + if sabnzbd.WIN32 or sabnzbd.DARWIN: + return "" + try: + loadavgstr = open('/proc/loadavg', 'r').readline().strip() + except: + return "" + + data = loadavgstr.split() + try: + a1, a5, a15 = map(float, data[:3]) + return "%.2f, %.2f, %.2f" % (a1, a5, a15) + except: + return "" + + +def format_time_string(seconds, days=0): + """ Return a formatted and translated time string """ + seconds = IntConv(seconds) + completestr = [] + if days: + completestr.append('%s %s' % (days, s_returner('day', days))) + if (seconds/3600) >= 1: + completestr.append('%s %s' % (seconds/3600, s_returner('hour', (seconds/3600)))) + seconds -= (seconds/3600)*3600 + if (seconds/60) >= 1: + completestr.append('%s %s' % (seconds/60, s_returner('minute',(seconds/60)))) + seconds -= (seconds/60)*60 + if seconds > 0: + completestr.append('%s %s' % (seconds, s_returner('second', seconds))) + elif not completestr: + completestr.append('0 %s' % s_returner('second', 0)) + + p = ' '.join(completestr) + if isinstance(p, unicode): + return p.encode('latin-1') + else: + return p + +def s_returner(item, value): + if value == 1: + return T(item) + else: + return T(item + 's') + +def IntConv(value): + """Safe conversion to int""" + try: + value = int(value) + except: + value = 0 + return value + + +#------------------------------------------------------------------------------ +# Diskfree +try: + os.statvfs + import statvfs + # posix diskfree + def diskfree(_dir): + try: + s = os.statvfs(_dir) + return (s[statvfs.F_BAVAIL] * s[statvfs.F_FRSIZE]) / GIGI + except OSError: + return 0.0 + def disktotal(_dir): + try: + s = os.statvfs(_dir) + return (s[statvfs.F_BLOCKS] * s[statvfs.F_FRSIZE]) / GIGI + except OSError: + return 0.0 + +except AttributeError: + + try: + import win32api + except ImportError: + pass + # windows diskfree + def diskfree(_dir): + try: + available, disk_size, total_free = win32api.GetDiskFreeSpaceEx(_dir) + return available / GIGI + except: + return 0.0 + def disktotal(_dir): + try: + available, disk_size, total_free = win32api.GetDiskFreeSpaceEx(_dir) + return disk_size / GIGI + except: + return 0.0 + + +def create_https_certificates(ssl_cert, ssl_key): + try: + from OpenSSL import crypto + from sabnzbd.utils.certgen import createKeyPair, createCertRequest, createCertificate,\ + TYPE_RSA, serial + except: + logging.warning(Ta('warn-pyopenssl')) + return False + + # Create the CA Certificate + cakey = createKeyPair(TYPE_RSA, 1024) + careq = createCertRequest(cakey, CN='Certificate Authority') + cacert = createCertificate(careq, (careq, cakey), serial, (0, 60*60*24*365*10)) # ten years + + fname = 'server' + cname = 'SABnzbd' + pkey = createKeyPair(TYPE_RSA, 1024) + req = createCertRequest(pkey, CN=cname) + cert = createCertificate(req, (cacert, cakey), serial, (0, 60*60*24*365*10)) # ten years + + # Save the key and certificate to disk + try: + open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey)) + open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) + except: + logging.error(Ta('error-sslFiles')) + logging.debug("Traceback: ", exc_info = True) + return False + + return True + + +def find_on_path(targets): + """ Search the PATH for a program and return full path """ + if sabnzbd.WIN32: + paths = os.getenv('PATH').split(';') + else: + paths = os.getenv('PATH').split(':') + + if isinstance(targets, basestring): + targets = ( targets, ) + + for path in paths: + for target in targets: + target_path = os.path.abspath(os.path.join(path, target)) + if os.path.isfile(target_path) and os.access(target_path, os.X_OK): + return target_path + return None + + +#------------------------------------------------------------------------------ +_RE_IP4 = re.compile(r'inet\s+(addr:\s*){0,1}(\d+\.\d+\.\d+\.\d+)') +_RE_IP6 = re.compile(r'inet6\s+(addr:\s*){0,1}([0-9a-f:]+)', re.I) + +def ip_extract(): + """ Return list of IP addresses of this system """ + ips = [] + program = find_on_path('ip') + if program: + program = [program, 'a'] + else: + program = find_on_path('ifconfig') + if program: program = [program] + + if sabnzbd.WIN32 or not program: + try: + info = socket.getaddrinfo(socket.gethostname(), None) + except: + # Hostname does not resolve, use localhost + info = socket.getaddrinfo('localhost', None) + for item in info: + ips.append(item[4][0]) + else: + p = subprocess.Popen(program, shell=False, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + startupinfo=None, creationflags=0) + output = p.stdout.read() + ret = p.wait() + for line in output.split('\n'): + m = _RE_IP4.search(line) + if not (m and m.group(2)): + m = _RE_IP6.search(line) + if m and m.group(2): + ips.append(m.group(2)) + return ips + + +#------------------------------------------------------------------------------ +# Power management for Windows + +def win_hibernate(): + try: + subprocess.Popen("rundll32 powrprof.dll,SetSuspendState Hibernate") + time.sleep(10) + except: + logging.error(Ta('error-hibernate')) + logging.debug("Traceback: ", exc_info = True) + + +def win_standby(): + try: + subprocess.Popen("rundll32 powrprof.dll,SetSuspendState Standby") + time.sleep(10) + except: + logging.error(Ta('error-standby')) + logging.debug("Traceback: ", exc_info = True) + + +def win_shutdown(): + try: + import win32security + import win32api + import ntsecuritycon + + flags = ntsecuritycon.TOKEN_ADJUST_PRIVILEGES | ntsecuritycon.TOKEN_QUERY + htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags) + id = win32security.LookupPrivilegeValue(None, ntsecuritycon.SE_SHUTDOWN_NAME) + newPrivileges = [(id, ntsecuritycon.SE_PRIVILEGE_ENABLED)] + win32security.AdjustTokenPrivileges(htoken, 0, newPrivileges) + win32api.InitiateSystemShutdown("", "", 30, 1, 0) + finally: + os._exit(0) + + +#------------------------------------------------------------------------------ +# Power management for OSX + +def osx_shutdown(): + try: + subprocess.call(['osascript', '-e', 'tell app "System Events" to shut down']) + except: + logging.error(Ta('error-shutdown')) + logging.debug("Traceback: ", exc_info = True) + os._exit(0) + + +def osx_standby(): + try: + subprocess.call(['osascript', '-e','tell app "System Events" to sleep']) + time.sleep(10) + except: + logging.error(Ta('error-standby')) + logging.debug("Traceback: ", exc_info = True) + + +def osx_hibernate(): + osx_standby() + + +#------------------------------------------------------------------------------ +# Power management for linux. +# +# Requires DBus plus either HAL [1] or the more modern ConsoleKit [2] and +# DeviceKit(-power) [3]. HAL will eventually be deprecated but older systems +# might still use it. +# [1] http://people.freedesktop.org/~hughsient/temp/dbus-interface.html +# [2] http://www.freedesktop.org/software/ConsoleKit/doc/ConsoleKit.html +# [3] http://hal.freedesktop.org/docs/DeviceKit-power/ +# +# Original code was contributed by Marcel de Vries +# + +try: + import dbus + HAVE_DBUS = True +except ImportError: + HAVE_DBUS = False + + +def _get_sessionproxy(): + name = 'org.freedesktop.PowerManagement' + path = '/org/freedesktop/PowerManagement' + interface = 'org.freedesktop.PowerManagement' + try: + bus = dbus.SessionBus() + return bus.get_object(name, path), interface + except dbus.exceptions.DBusException: + return None, None + +def _get_systemproxy(method): + if method == 'ConsoleKit': + name = 'org.freedesktop.ConsoleKit' + path = '/org/freedesktop/ConsoleKit/Manager' + interface = 'org.freedesktop.ConsoleKit.Manager' + pinterface = None + elif method == 'DeviceKit': + name = 'org.freedesktop.DeviceKit.Power' + path = '/org/freedesktop/DeviceKit/Power' + interface = 'org.freedesktop.DeviceKit.Power' + pinterface = 'org.freedesktop.DBus.Properties' + try: + bus = dbus.SystemBus() + return bus.get_object(name, path), interface, pinterface + except dbus.exceptions.DBusException: + return None, None, None + + +def linux_shutdown(): + if not HAVE_DBUS: os._exit(0) + + proxy, interface = _get_sessionproxy() + if proxy: + if proxy.CanShutdown(): + proxy.Shutdown(dbus_interface=interface) + else: + proxy, interface, pinterface = _get_systemproxy('ConsoleKit') + if proxy and proxy.CanStop(dbus_interface=interface): + try: + proxy.Stop(dbus_interface=interface) + except dbus.exceptions.DBusException, msg: + logging.info('Received a DBus exception %s', latin1(msg)) + os._exit(0) + + +def linux_hibernate(): + if not HAVE_DBUS: return + + proxy, interface = _get_sessionproxy() + if proxy: + if proxy.CanHibernate(): + proxy.Hibernate(dbus_interface=interface) + else: + proxy, interface, pinterface = _get_systemproxy('DeviceKit') + if proxy and proxy.Get(interface, 'can-hibernate', dbus_interface=pinterface): + try: + proxy.Hibernate(dbus_interface=interface) + except dbus.exceptions.DBusException, msg: + logging.info('Received a DBus exception %s', latin1(msg)) + time.sleep(10) + + +def linux_standby(): + if not HAVE_DBUS: return + + proxy, interface = _get_sessionproxy() + if proxy: + if proxy.CanSuspend(): + proxy.Suspend(dbus_interface=interface) + else: + proxy, interface, pinterface = _get_systemproxy('DeviceKit') + if proxy.Get(interface, 'can-suspend', dbus_interface=pinterface): + try: + proxy.Suspend(dbus_interface=interface) + except dbus.exceptions.DBusException, msg: + logging.info('Received a DBus exception %s', latin1(msg)) + time.sleep(10) + + +#------------------------------------------------------------------------------ + +def renamer(old, new): + """ Rename file/folder with retries for Win32 """ + if sabnzbd.WIN32: + retries = 5 + while retries > 0: + try: + os.rename(old, new) + return + except WindowsError, err: + if err[0] == 32: + logging.info('Retry rename %s to %s', old, new) + retries -= 1 + else: + raise WindowsError(err) + time.sleep(3) + raise WindowsError(err) + else: + os.rename(old, new) + + +def remove_dir(path): + """ Remove directory with retries for Win32 """ + if sabnzbd.WIN32: + retries = 5 + while retries > 0: + try: + os.rmdir(path) + return + except WindowsError, err: + if err[0] == 32: + logging.info('Retry delete %s', path) + retries -= 1 + else: + raise WindowsError(err) + time.sleep(3) + raise WindowsError(err) + else: + os.rmdir(path) diff --git a/sabnzbd/newsunpack.py b/sabnzbd/newsunpack.py new file mode 100644 index 0000000..36c0da2 --- /dev/null +++ b/sabnzbd/newsunpack.py @@ -0,0 +1,1224 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.newsunpack +""" + +import os +import sys +import re +import subprocess +import logging +from time import time + +import sabnzbd +from sabnzbd.codecs import TRANS, unicode2local,name_fixer, reliable_unpack_names, unicoder +from sabnzbd.utils.rarfile import RarFile +from sabnzbd.misc import format_time_string, find_on_path +import sabnzbd.cfg as cfg +from sabnzbd.lang import T, Ta + +if sabnzbd.WIN32: + try: + import win32api + from win32con import SW_HIDE + from win32process import STARTF_USESHOWWINDOW, IDLE_PRIORITY_CLASS + except ImportError: + pass +else: + # Define dummy WindowsError for non-Windows + class WindowsError(Exception): + def __init__(self, value): + self.parameter = value + def __str__(self): + return repr(self.parameter) + +# Regex globals +RAR_RE = re.compile(r'\.(?Ppart\d*\.rar|rar|s\d\d|r\d\d|\d\d\d)$', re.I) +RAR_RE_V3 = re.compile(r'\.(?Ppart\d*)$', re.I) + +LOADING_RE = re.compile(r'^Loading "(.+)"') +TARGET_RE = re.compile(r'^(?:File|Target): "(.+)" -') +EXTRACTFROM_RE = re.compile(r'^Extracting\sfrom\s(.+)') +SPLITFILE_RE = re.compile(r'\.(\d\d\d$)', re.I) +ZIP_RE = re.compile(r'\.(zip$)', re.I) +VOLPAR2_RE = re.compile(r'\.*vol[0-9]+\+[0-9]+\.par2', re.I) +FULLVOLPAR2_RE = re.compile(r'(.*[^.])(\.*vol[0-9]+\+[0-9]+\.par2)', re.I) +TS_RE = re.compile(r'\.(\d+)\.(ts$)', re.I) + +PAR2_COMMAND = None +PAR2C_COMMAND = None +RAR_COMMAND = None +NICE_COMMAND = None +ZIP_COMMAND = None +IONICE_COMMAND = None +RAR_PROBLEM = False + +def find_programs(curdir): + """Find external programs + """ + def check(path, program): + p = os.path.abspath(os.path.join(path, program)) + if os.access(p, os.X_OK): + return p + else: + return None + + if sabnzbd.DARWIN: + try: + os_version = subprocess.Popen("sw_vers -productVersion", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).stdout.read() + #par2-sl from Macpar Deluxe 4.1 is only 10.6 and later + if int(os_version.split('.')[1]) >= 6: + sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'osx/par2/par2-sl') + else: + sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'osx/par2/par2-classic') + except: + sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'osx/par2/par2-classic') + + sabnzbd.newsunpack.RAR_COMMAND = check(curdir, 'osx/unrar/unrar') + + if sabnzbd.WIN32: + if sabnzbd.WIN64: + sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'win/par2/x64/par2.exe') + sabnzbd.newsunpack.RAR_COMMAND = check(curdir, 'win/unrar/x64/UnRAR.exe') + if not sabnzbd.newsunpack.PAR2_COMMAND: + sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'win/par2/par2.exe') + if not sabnzbd.newsunpack.RAR_COMMAND: + sabnzbd.newsunpack.RAR_COMMAND = check(curdir, 'win/unrar/UnRAR.exe') + sabnzbd.newsunpack.PAR2C_COMMAND = check(curdir, 'win/par2/par2-classic.exe') + sabnzbd.newsunpack.ZIP_COMMAND = check(curdir, 'win/unzip/unzip.exe') + else: + if not sabnzbd.newsunpack.PAR2_COMMAND: + sabnzbd.newsunpack.PAR2_COMMAND = find_on_path('par2') + if not sabnzbd.newsunpack.RAR_COMMAND: + sabnzbd.newsunpack.RAR_COMMAND = find_on_path(('unrar', 'rar', 'unrar3', 'rar3',)) + sabnzbd.newsunpack.NICE_COMMAND = find_on_path('nice') + sabnzbd.newsunpack.IONICE_COMMAND = find_on_path('ionice') + sabnzbd.newsunpack.ZIP_COMMAND = find_on_path('unzip') + + if not (sabnzbd.WIN32 or sabnzbd.DARWIN): + sabnzbd.newsunpack.RAR_PROBLEM = not unrar_check(sabnzbd.newsunpack.RAR_COMMAND) + +#------------------------------------------------------------------------------ +def external_processing(extern_proc, complete_dir, filename, msgid, nicename, cat, group, status): + + command = [str(extern_proc), str(complete_dir), str(filename), \ + str(nicename), str(msgid), str(cat), str(group), str(status)] + + stup, need_shell, command, creationflags = build_command(command) + + logging.info('Running external script %s(%s, %s, %s, %s, %s, %s, %s)', \ + extern_proc, complete_dir, filename, nicename, msgid, cat, group, status) + + try: + p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + startupinfo=stup, creationflags=creationflags) + except: + logging.debug("Failed script %s, Traceback: ", extern_proc, exc_info = True) + return "Cannot run script %s\r\n" % extern_proc, -1 + + output = p.stdout.read() + ret = p.wait() + return output, ret + + +#------------------------------------------------------------------------------ +def SimpleRarExtract(rarfile, name): + """ Extract single file from rar archive, returns (retcode, data) """ + command = [sabnzbd.newsunpack.RAR_COMMAND, "p", "-inul", rarfile, name] + + stup, need_shell, command, creationflags = build_command(command) + + p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + startupinfo=stup, creationflags=creationflags) + + output = p.stdout.read() + ret = p.wait() + return ret, output + +#------------------------------------------------------------------------------ +def unpack_magic(nzo, workdir, workdir_complete, dele, joinables, zips, rars, ts, depth=0): + if depth > 5: + logging.warning('Unpack nesting too deep [%s]', nzo.get_dirname()) + return False, [] + depth += 1 + + xjoinables, xzips, xrars, xts = build_filelists(workdir, workdir_complete) + + rerun = False + newfiles = [] + error = False + + if cfg.enable_filejoin(): + new_joins = [jn for jn in xjoinables if jn not in joinables] + if new_joins: + rerun = True + logging.info('Filejoin starting on %s', workdir) + error, newf = file_join(nzo, workdir, workdir_complete, dele, new_joins) + if newf: + newfiles.extend(newf) + logging.info('Filejoin finished on %s', workdir) + nzo.set_action_line('', '') + + if cfg.enable_unrar(): + new_rars = [rar for rar in xrars if rar not in rars] + if new_rars: + rerun = True + logging.info('Unrar starting on %s', workdir) + error, newf = rar_unpack(nzo, workdir, workdir_complete, dele, new_rars) + if newf: + newfiles.extend(newf) + logging.info('Unrar finished on %s', workdir) + nzo.set_action_line('', '') + + if cfg.enable_unzip(): + new_zips = [zip for zip in xzips if zip not in zips] + if new_zips: + logging.info('Unzip starting on %s', workdir) + if unzip(nzo, workdir, workdir_complete, dele, new_zips): + error = True + logging.info('Unzip finished on %s', workdir) + nzo.set_action_line('', '') + + if cfg.enable_tsjoin(): + new_ts = [_ts for _ts in xts if _ts not in ts] + if new_ts: + rerun = True + logging.info('TS Joining starting on %s', workdir) + error, newf = file_join(nzo, workdir, workdir_complete, dele, new_ts) + if newf: + newfiles.extend(newf) + logging.info('TS Joining finished on %s', workdir) + nzo.set_action_line('', '') + + + if rerun: + z, y = unpack_magic(nzo, workdir, workdir_complete, dele, xjoinables, + xzips, xrars, xts, depth) + if z: + error = z + if y: + newfiles.extend(y) + + return error, newfiles + +#------------------------------------------------------------------------------ +# Filejoin Functions +#------------------------------------------------------------------------------ + +def match_ts(file): + match = TS_RE.search(file) + if not match: + return False, '', 0 + + num = int(match.group(1)) + try: + set = file[:match.start()] + set += '.ts' + except: + set = '' + return match, set, num + +def file_join(nzo, workdir, workdir_complete, delete, joinables): + newfiles = [] + try: + joinable_sets = {} + set = match = num = None + for joinable in joinables: + head, tail = os.path.splitext(joinable) + if tail == '.ts': + match, set, num = match_ts(joinable) + if not set: + set = head + + if set not in joinable_sets: + joinable_sets[set] = [] + joinable_sets[set].append(joinable) + + logging.debug("joinable_sets: %s", joinable_sets) + + for joinable_set in joinable_sets: + try: + expected_size = 0 + # Make sure there are no missing files in the file sequence + # Add 1 to the value before adding to take into account .000 + for i in xrange(len(joinable_sets[joinable_set])+1): + expected_size += i + logging.debug("FJN, expsize: %s", expected_size) + + # Add together the values of .001 (+1 for .000) + # To work out the actual size + real_size = 0 + for joinable in joinable_sets[joinable_set]: + head, tail = os.path.splitext(joinable) + if tail == '.ts': + match, set, num = match_ts(joinable) + real_size += num+1 + else: + real_size += int(tail[1:]) + logging.debug("FJN, realsize: %s", real_size) + + if real_size != expected_size: + msg = T('error-joinMismatch') + nzo.set_fail_msg(T('error-joinFail@1') % msg) + nzo.set_unpack_info('Filejoin', T('error-joinFail@2') % (unicoder(joinable_set), msg)) + logging.error(Ta('error-fileJoin@2'), msg, nzo.get_dirname()) + else: + joinable_sets[joinable_set].sort() + filename = joinable_set + + # Check if par2 repaired this joinable set + if os.path.exists(filename): + logging.debug("file_join(): Skipping %s, (probably) joined by par2", filename) + if delete: + i = 0 + for joinable in joinable_sets[joinable_set]: + if os.path.exists(joinable): + logging.debug("Deleting %s", joinable) + try: + os.remove(joinable) + except: + pass + path1 = joinable + ".1" + if os.path.exists(path1): + logging.debug("Deleting %s", path1) + try: + os.remove(path1) + except: + pass + i += 1 + continue + + if workdir_complete: + filename = filename.replace(workdir, workdir_complete) + + logging.debug("file_join(): Assembling %s", filename) + + joined_file = open(filename, 'ab') + + i = 0 + for joinable in joinable_sets[joinable_set]: + join_num = len(joinable_sets[joinable_set]) + perc = (100.0/join_num)*(i) + logging.debug("Processing %s", joinable) + nzo.set_action_line(T('msg-joining'), '%.0f%%' % perc) + f = open(joinable, 'rb') + joined_file.write(f.read()) + f.close() + i += 1 + if delete: + logging.debug("Deleting %s", joinable) + os.remove(joinable) + + joined_file.flush() + joined_file.close() + msg = T('msg-joinOK@2') % (unicoder(joinable_set), i) + nzo.set_unpack_info('Filejoin', msg, set=joinable_set) + newfiles.append(joinable_set) + except: + msg = sys.exc_info()[1] + nzo.set_fail_msg(T('error-joinFail@1') % msg) + nzo.set_unpack_info('Filejoin', T('error-joinFail@2') % (unicoder(joinable_set), msg)) + logging.error(Ta('error-fileJoin@2'), msg, nzo.get_dirname()) + return True, [] + + return False, newfiles + except: + msg = sys.exc_info()[1] + nzo.set_fail_msg(T('error-joinFail@1') % msg) + nzo.set_unpack_info('Filejoin', T('error-joinFail@2') % (unicoder(joinable_set), msg)) + logging.error(Ta('error-fileJoin@2'), msg, nzo.get_dirname()) + return True, [] + + +#------------------------------------------------------------------------------ +# (Un)Rar Functions +#------------------------------------------------------------------------------ + +def rar_unpack(nzo, workdir, workdir_complete, delete, rars): + errors = False + extracted_files = [] + + rar_sets = {} + for rar in rars: + rar_set = os.path.splitext(os.path.basename(rar))[0] + if RAR_RE_V3.search(rar_set): + rar_set = os.path.splitext(rar_set)[0] + if not rar_set in rar_sets: + rar_sets[rar_set] = [] + rar_sets[rar_set].append(rar) + + logging.debug('Rar_sets: %s', rar_sets) + + for rar_set in rar_sets: + # Run the RAR extractor + rar_sets[rar_set].sort(rar_sort) + + rarpath = rar_sets[rar_set][0] + + + extraction_path = workdir + if workdir_complete: + extraction_path = workdir_complete + + logging.info("Extracting rarfile %s (belonging to %s) to %s", + rarpath, rar_set, extraction_path) + + try: + newfiles, rars = RAR_Extract(rarpath, len(rar_sets[rar_set]), + nzo, rar_set, extraction_path) + success = True + except: + success = False + errors = True + msg = sys.exc_info()[1] + nzo.set_fail_msg(T('error-unpackFail@1') % msg) + setname = nzo.get_dirname() + nzo.set_unpack_info('Unpack', T('error-unpackFail@2') % (unicoder(setname), msg)) + + logging.error(Ta('error-fileUnrar@2'), msg, setname) + + if success: + logging.debug('rar_unpack(): Rars: %s', rars) + logging.debug('rar_unpack(): Newfiles: %s', newfiles) + extracted_files.extend(newfiles) + + # Delete the old files if we have to + if success and delete and newfiles: + for rar in rars: + logging.info("Deleting %s", rar) + try: + os.remove(rar) + except OSError: + logging.warning(Ta('warn-delFailed@1'), rar) + + brokenrar = '%s.1' % (rar) + + if os.path.exists(brokenrar): + logging.info("Deleting %s", brokenrar) + try: + os.remove(brokenrar) + except OSError: + logging.warning(Ta('warn-delFailed@1'), brokenrar) + + return errors, extracted_files + + +def RAR_Extract(rarfile, numrars, nzo, setname, extraction_path): + start = time() + + logging.debug("RAR_Extract(): Extractionpath: %s", + extraction_path) + + try: + zf = RarFile(rarfile) + expected_files = zf.unamelist() + zf.close() + except: + nzo.set_fail_msg(T('error-badArchive')) + nzo.set_unpack_info('Unpack', u'[%s] %s' % (unicoder(setname), T('error-badArchive')), set=setname) + + logging.info('Archive %s probably encrypted, skipping', rarfile) + return ((), ()) + + if nzo.get_password(): + password = '-p%s' % nzo.get_password() + else: + password = '-p-' + + ############################################################################ + + if sabnzbd.WIN32: + # Use all flags + command = ['%s' % RAR_COMMAND, 'x', '-idp', '-o-', '-or', '-ai', password, + '%s' % rarfile, '%s/' % extraction_path] + elif RAR_PROBLEM: + # Use only oldest options (specifically no "-or") + command = ['%s' % RAR_COMMAND, 'x', '-idp', '-o-', password, + '%s' % rarfile, '%s/' % extraction_path] + else: + # Don't use "-ai" (not needed for non-Windows) + command = ['%s' % RAR_COMMAND, 'x', '-idp', '-o-', '-or', password, + '%s' % rarfile, '%s/' % extraction_path] + + stup, need_shell, command, creationflags = build_command(command) + + p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + startupinfo=stup, creationflags=creationflags) + + proc = p.stdout + if p.stdin: + p.stdin.close() + + nzo.set_action_line(T('msg-unpacking'), '00/%02d' % (numrars)) + + # Loop over the output from rar! + curr = 0 + extracted = [] + rarfiles = [] + fail = 0 + + while 1: + line = proc.readline() + if not line: + break + + line = line.strip() + + if line.startswith('Extracting from'): + filename = TRANS((re.search(EXTRACTFROM_RE, line).group(1))) + if filename not in rarfiles: + rarfiles.append(filename) + curr += 1 + nzo.set_action_line(T('msg-unpacking'), '%02d/%02d' % (curr, numrars)) + + elif line.startswith('Cannot find volume'): + filename = os.path.basename(TRANS(line[19:])) + nzo.set_fail_msg(T('error-unpackFailed@1') % unicoder(filename)) + msg = ('[%s] '+Ta('error-unpackFailed@1')) % (setname, filename) + nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) + logging.warning(Ta('warn-cannotFind@1'), filename) + fail = 1 + + elif line.endswith('- CRC failed'): + filename = TRANS(line[:-12].strip()) + nzo.set_fail_msg(T('error-unpackCRC')) + msg = ('[%s] '+Ta('warn-crcFailed@1')) % (setname, filename) + nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) + logging.warning(Ta('warn-crcFailed@1'), setname) + fail = 1 + + elif line.startswith('Write error'): + nzo.set_fail_msg(T('error-unpackFull')) + msg = ('[%s] ' + Ta('error-unpackFull')) % setname + nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) + logging.warning(Ta('warn-writeError@1'), line[11:]) + fail = 1 + + elif line.startswith('ERROR: '): + nzo.set_fail_msg(T('error-unpackFailLog')) + logging.warning(Ta('warn-error@1'), (line[7:])) + msg = ('[%s] '+Ta('warn-error@1')) % (setname, line[7:]) + nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) + fail = 1 + + elif line.startswith('Encrypted file: CRC failed'): + filename = TRANS(line[31:-23].strip()) + nzo.set_fail_msg(T('error-unpackPassword')) + msg = ('[%s][%s] '+Ta('error-unpackPassword')) % (setname, filename) + nzo.set_unpack_info('Unpack', unicoder(msg), set=setname) + logging.error('%s (%s)', Ta('error-unpackPassword'), filename) + fail = 1 + + else: + m = re.search(r'^(Extracting|Creating|...)\s+(.*?)\s+OK\s*$', line) + if m: + extracted.append(TRANS(m.group(2))) + + if fail: + if proc: + proc.close() + p.wait() + + return ((), ()) + + if proc: + proc.close() + p.wait() + + + if cfg.unpack_check(): + if reliable_unpack_names() and not RAR_PROBLEM: + all_found = True + # Loop through and check for the presence of all the files the archive contained + for path in expected_files: + path = unicode2local(path) + fullpath = os.path.join(extraction_path, path) + logging.debug("Checking existance of %s", fullpath) + if path.endswith('/'): + # Folder + continue + if not os.path.exists(fullpath): + # There was a missing file, show a warning + all_found = False + logging.warning(Ta('warn-MissExpectedFile@1'), path) + + if not all_found: + nzo.set_fail_msg(T('error-unpackMissing')) + logging.debug("Expecting files: %s" % expected_files) + nzo.set_unpack_info('Unpack', T('error-unpackMissing'), set=setname) + return ((), ()) + else: + logging.info('Skipping unrar file check due to unreliable file names or old unrar') + + msg = T('msg-unpackDone@2') % (str(len(extracted)), format_time_string(time() - start)) + nzo.set_unpack_info('Unpack', '[%s] %s' % (unicoder(setname), msg), set=setname) + logging.info('%s', msg) + + return (extracted, rarfiles) + +#------------------------------------------------------------------------------ +# (Un)Zip Functions +#------------------------------------------------------------------------------ + +def unzip(nzo, workdir, workdir_complete, delete, zips): + try: + i = 0 + unzip_failed = False + tms = time() + + for _zip in zips: + logging.info("Starting extract on zipfile: %s ", _zip) + nzo.set_action_line(T('msg-unpacking'), '%s' % unicoder(_zip)) + + extraction_path = workdir + if workdir_complete: + extraction_path = workdir_complete + + if ZIP_Extract(_zip, extraction_path): + unzip_failed = True + else: + i += 1 + + msg = T('msg-unzipDone@2') % (str(i), format_time_string(time() - tms)) + nzo.set_unpack_info('Unpack', msg) + + # Delete the old files if we have to + if delete and not unzip_failed: + i = 0 + + for _zip in zips: + logging.info("Deleting %s", _zip) + try: + os.remove(_zip) + i += 1 + except OSError: + logging.warning(Ta('warn-delFailed@1'), _zip) + + brokenzip = '%s.1' % (_zip) + + if os.path.exists(brokenzip): + logging.info("Deleting %s", brokenzip) + try: + os.remove(brokenzip) + i += 1 + except OSError: + logging.warning(Ta('warn-delFailed@1'), brokenzip) + + return unzip_failed + except: + msg = sys.exc_info()[1] + nzo.set_fail_msg(T('error-unpackFail@1') % msg) + logging.error(Ta('error-fileUnzip@2'), msg, nzo.get_dirname()) + return True + +def ZIP_Extract(zipfile, extraction_path): + command = ['%s' % ZIP_COMMAND, '-o', '-qq', '-Pnone', '%s' % zipfile, + '-d%s' % extraction_path] + + stup, need_shell, command, creationflags = build_command(command) + + p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + startupinfo=stup, creationflags=creationflags) + + output = p.stdout.read() + + ret = p.wait() + + return ret + +#------------------------------------------------------------------------------ +# PAR2 Functions +#------------------------------------------------------------------------------ + +def par2_repair(parfile_nzf, nzo, workdir, setname): + """ Try to repair a set, return readd or correctness """ + #set the current nzo status to "Repairing". Used in History + + parfile = os.path.join(workdir, parfile_nzf.get_filename()) + + old_dir_content = os.listdir(workdir) + used_joinables = joinables = [] + setpars = pars_of_set(workdir, setname) + result = readd = False + + if cfg.quick_check(): + nzo.set_status('QuickCheck') + nzo.set_action_line(T('msg-repair'), T('msg-QuickChecking')) + result = QuickCheck(setname, nzo) + if result: + logging.info("Quick-check for %s is OK, skipping repair", setname) + nzo.set_unpack_info('Repair', T('msg-QuickOK@1') % unicoder(setname), set=setname) + pars = setpars + + if not result: + nzo.set_status('Repairing') + result = False + readd = False + try: + nzo.set_action_line(T('msg-repair'), T('msg-startRepair')) + logging.info('Scanning "%s"', parfile) + + joinables, zips, rars, ts = build_filelists(workdir, None, check_rar=False) + + finished, readd, pars, datafiles, used_joinables = PAR_Verify(parfile, parfile_nzf, nzo, + setname, joinables) + + if finished: + result = True + logging.info('Par verify finished ok on %s!', + parfile) + + # Remove this set so we don't try to check it again + nzo.remove_parset(parfile_nzf.get_setname()) + else: + logging.info('Par verify failed on %s!', parfile) + + if not readd: + # Failed to repair -> remove this set + nzo.remove_parset(parfile_nzf.get_setname()) + return readd, False + except: + msg = sys.exc_info()[1] + nzo.set_fail_msg(T('error-repairFailed@1') % msg) + logging.error(Ta('error-filePar2@2'), msg, setname) + logging.debug("Traceback: ", exc_info = True) + return readd, result + + try: + if cfg.enable_par_cleanup(): + new_dir_content = os.listdir(workdir) + + for path in new_dir_content: + if os.path.splitext(path)[1] == '.1' and path not in old_dir_content: + try: + path = os.path.join(workdir, path) + + logging.info("Deleting %s", path) + os.remove(path) + except: + logging.warning(Ta('warn-delFailed@1'), path) + + path = os.path.join(workdir, setname + '.par2') + path2 = os.path.join(workdir, setname + '.PAR2') + + if os.path.exists(path): + try: + logging.info("Deleting %s", path) + os.remove(path) + except: + logging.warning(Ta('warn-delFailed@1'), path) + + if os.path.exists(path2): + try: + logging.info("Deleting %s", path2) + os.remove(path2) + except: + logging.warning(Ta('warn-delFailed@1'), path2) + + if os.path.exists(parfile): + try: + logging.info("Deleting %s", parfile) + os.remove(parfile) + except OSError: + logging.warning(Ta('warn-delFailed@1'), parfile) + + deletables = [] + for f in pars: + if f in setpars: + deletables.append(os.path.join(workdir, f)) + deletables.extend(used_joinables) + for filepath in deletables: + if filepath in joinables: + joinables.remove(filepath) + if os.path.exists(filepath): + logging.info("Deleting %s", filepath) + try: + os.remove(filepath) + except OSError: + logging.warning(Ta('warn-delFailed@1'), filepath) + except: + msg = sys.exc_info()[1] + nzo.set_fail_msg(T('error-repairFailed@1') % msg) + logging.error(Ta('error-repairBad@2'), msg, setname) + + return readd, result + + +def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, classic=False): + + retry_classic = False + used_joinables = [] + #set the current nzo status to "Verifying...". Used in History + nzo.set_status('Verifying') + start = time() + + classic = classic or not cfg.par2_multicore() + logging.debug('Par2-classic = %s', classic) + + if (is_new_partype(nzo, setname) and not classic) or not PAR2C_COMMAND: + if cfg.par_option(): + command = [str(PAR2_COMMAND), 'r', str(cfg.par_option().strip()), parfile] + else: + command = [str(PAR2_COMMAND), 'r', parfile] + classic = not PAR2C_COMMAND + else: + command = [str(PAR2C_COMMAND), 'r', parfile] + classic = True + + for joinable in joinables: + if setname in joinable: + command.append(joinable) + + stup, need_shell, command, creationflags = build_command(command) + + try: + p = subprocess.Popen(command, shell=need_shell, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, + startupinfo=stup, creationflags=creationflags) + + proc = p.stdout + + if p.stdin: + p.stdin.close() + + # Set up our variables + pars = [] + datafiles = [] + + linebuf = '' + finished = 0 + readd = False + + verifynum = 1 + verifytotal = 0 + verified = 0 + + # Loop over the output, whee + while 1: + char = proc.read(1) + if not char: + break + + # Line not complete yet + if char not in ('\n', '\r'): + linebuf += char + continue + + line = linebuf.strip() + linebuf = '' + + # Skip empty lines + if line == '': + continue + + # And off we go + if line.startswith('All files are correct'): + msg = T('msg-verifyOK@2') % (unicoder(setname), format_time_string(time() - start)) + nzo.set_unpack_info('Repair', msg, set=setname) + logging.info('Verified in %s, all files correct', + format_time_string(time() - start)) + finished = 1 + + elif line.startswith('Repair is required'): + msg = T('msg-repairNeeded@2') % (unicoder(setname), format_time_string(time() - start)) + nzo.set_unpack_info('Repair', msg, set=setname) + logging.info('Verified in %s, repair is required', + format_time_string(time() - start)) + start = time() + verified = 1 + + elif line.startswith('Main packet not found'): + ## Initialparfile probaly didn't decode properly, + logging.info(Ta('error-noMainPacket')) + + extrapars = parfile_nzf.get_extrapars() + + logging.info("%s", extrapars) + + ## Look for the smallest par2file + block_table = {} + for nzf in extrapars: + block_table[int(nzf.get_blocks())] = nzf + + if block_table: + nzf = block_table[min(block_table.keys())] + + logging.info("Found new par2file %s", + nzf.get_filename()) + + nzo.add_parfile(nzf) + ## mark for readd + readd = True + + elif line.startswith('You need'): + chunks = line.split() + + needed_blocks = int(chunks[2]) + + logging.info('Need to fetch %s more blocks, checking blocks', needed_blocks) + + avail_blocks = 0 + + extrapars = parfile_nzf.get_extrapars() + + block_table = {} + + for nzf in extrapars: + # Don't count extrapars that are completed already + if nzf.completed(): + continue + + blocks = int(nzf.get_blocks()) + + avail_blocks += blocks + + if blocks not in block_table: + block_table[blocks] = [] + + block_table[blocks].append(nzf) + + logging.info('%s blocks available', avail_blocks) + + + force = False + if (avail_blocks < needed_blocks) and (avail_blocks > 0): + # Tell SAB that we always have enough blocks, so that + # it will try to load all pars anyway + msg = T('error-repairBlocks@1') % str(int(needed_blocks - avail_blocks)) + nzo.set_fail_msg(msg) + msg = u'[%s] %s' % (unicoder(setname), msg) + nzo.set_unpack_info('Repair', msg, set=setname) + nzo.set_status('Failed') + needed_blocks = avail_blocks + force = True + + if avail_blocks >= needed_blocks: + added_blocks = 0 + readd = True + + while added_blocks < needed_blocks: + block_size = min(block_table.keys()) + extrapar_list = block_table[block_size] + + if extrapar_list: + nzo.add_parfile(extrapar_list.pop()) + added_blocks += block_size + + else: + block_table.pop(block_size) + + logging.info('Added %s blocks to %s', + added_blocks, nzo.get_dirname()) + + if not force: + msg = T('msg-fetchBlocks@1') % str(added_blocks) + nzo.set_status('Fetching') + nzo.set_action_line(T('msg-fetching'), msg) + + else: + msg = T('error-repairBlocks@1') % str(needed_blocks) + nzo.set_fail_msg(msg) + msg = u'[%s] %s' % (unicoder(setname), msg) + nzo.set_unpack_info('Repair', msg, set=setname) + nzo.set_status('Failed') + + + elif line.startswith('Repair is possible'): + start = time() + nzo.set_action_line(T('msg-repairing'), '%2d%%' % (0)) + + elif line.startswith('Repairing:'): + chunks = line.split() + per = float(chunks[-1][:-1]) + nzo.set_action_line(T('msg-repairing'), '%2d%%' % (per)) + nzo.set_status('Repairing') + + elif line.startswith('Repair complete'): + msg = T('msg-repairDone@2') % (unicoder(setname), format_time_string(time() - start)) + nzo.set_unpack_info('Repair', msg, set=setname) + logging.info('Repaired in %s', format_time_string(time() - start)) + finished = 1 + + elif line.startswith('File:') and line.find('data blocks from') > 0: + # Find out if a joinable file has been used for joining + for jn in joinables: + if line.find(os.path.split(jn)[1]) > 0: + used_joinables.append(jn) + break + + elif 'Could not write' in line and 'at offset 0:' in line and not classic: + # Hit a bug in par2-tbb, retry with par2-classic + retry_classic = True + + elif not verified: + if line.startswith('Verifying source files'): + nzo.set_action_line(T('msg-verifying'), '01/%02d' % verifytotal) + nzo.set_status('Verifying') + + elif line.startswith('Scanning:'): + pass + + else: + # Loading parity files + m = LOADING_RE.match(line) + if m: + pars.append(m.group(1)) + continue + + # Target files + m = TARGET_RE.match(line) + if m: + if verifytotal == 0 or verifynum < verifytotal: + verifynum += 1 + nzo.set_action_line(T('msg-verifying'), '%02d/%02d' % (verifynum, verifytotal)) + nzo.set_status('Verifying') + datafiles.append(m.group(1)) + continue + + # Verify done + m = re.match(r'There are (\d+) recoverable files', line) + if m: + verifytotal = int(m.group(1)) + + p.wait() + except WindowsError, err: + if err[0] == '87' and not classic: + # Hit a bug in par2-tbb, retry with par2-classic + retry_classic = True + else: + raise WindowsError(err) + + if retry_classic: + logging.debug('Retry PAR2-joining with par2-classic') + return PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, classic=True) + else: + return (finished, readd, pars, datafiles, used_joinables) + +#------------------------------------------------------------------------------- + +_RE_PYTHON = re.compile(r'^#!(.*/python)\s+(.*)$') + +def fix_python_script(command): + """ Implement a work-around for Python userscripts on OSX """ + try: + fp = open(command[0], 'r') + line = fp.readline(100) + fp.close() + m = _RE_PYTHON.search(line) + if m: + # Work-around for the incorrect Python paths passed + # by the OSX.app to Python scripts. + # Run the Python interpreter directly and insert the -E parameter + command.insert(0, m.group(2)) + command.insert(0, '-E') + command.insert(0, m.group(1)) + except IOError: + pass + + +def build_command(command): + if sabnzbd.DARWIN: + fix_python_script(command) + + if not sabnzbd.WIN32: + if IONICE_COMMAND and cfg.ionice().strip(): + lst = cfg.ionice().split() + lst.reverse() + for arg in lst: + command.insert(0, arg) + command.insert(0, IONICE_COMMAND) + if NICE_COMMAND and cfg.nice().strip(): + lst = cfg.nice().split() + lst.reverse() + for arg in lst: + command.insert(0, arg) + command.insert(0, NICE_COMMAND) + need_shell = False + stup = None + creationflags = 0 + + else: + need_shell = os.path.splitext(command[0])[1].lower() not in ('.exe', '.com', '.bat', '.cmd') + stup = subprocess.STARTUPINFO() + stup.dwFlags = STARTF_USESHOWWINDOW + stup.wShowWindow = SW_HIDE + creationflags = IDLE_PRIORITY_CLASS + + # Work-around for bug in Python's Popen function, + # scripts with spaces in the path don't work. + if need_shell and ' ' in command[0]: + command[0] = win32api.GetShortPathName(command[0]) + + return (stup, need_shell, command, creationflags) + +# Sort the various RAR filename formats properly :\ +def rar_sort(a, b): + aext = a.split('.')[-1] + bext = b.split('.')[-1] + + if aext == 'rar' and bext == 'rar': + return cmp(a, b) + elif aext == 'rar': + return -1 + elif bext == 'rar': + return 1 + else: + return cmp(a, b) + +# Sort the various PAR filename formats properly :\ +def par_sort(a, b): + aext = a.lower().split('.')[-1] + bext = b.lower().split('.')[-1] + + if aext == bext: + return cmp(a, b) + elif aext == 'par2': + return -1 + elif bext == 'par2': + return 1 + + +def build_filelists(workdir, workdir_complete, check_rar=True): + """ Build filelists, if workdir_complete has files, ignore workdir. + Optionally test content to establish RAR-ness + """ + joinables, zips, rars, filelist = ([], [], [], []) + + if workdir_complete: + for root, dirs, files in os.walk(workdir_complete): + for _file in files: + filelist.append(os.path.join(root, _file)) + + if workdir and not filelist: + for root, dirs, files in os.walk(workdir): + for _file in files: + filelist.append(os.path.join(root, _file)) + + if check_rar: + joinables = [f for f in filelist if SPLITFILE_RE.search(f) and not israr(f)] + else: + joinables = [f for f in filelist if SPLITFILE_RE.search(f)] + + zips = [f for f in filelist if ZIP_RE.search(f)] + + rars = [f for f in filelist if RAR_RE.search(f) and israr(f)] + + ts = [f for f in filelist if TS_RE.search(f) and f not in joinables] + + logging.debug("build_filelists(): joinables: %s", joinables) + logging.debug("build_filelists(): zips: %s", zips) + logging.debug("build_filelists(): rars: %s", rars) + logging.debug("build_filelists(): ts: %s", ts) + + return (joinables, zips, rars, ts) + +def israr(f): + logging.debug("notrar(): testing %s", f) + try: + _f = open(f, 'rb') + header = _f.read(4) + _f.close() + except: + logging.error(Ta('error-fileRead@1'), f) + return False + + if header != 'Rar!': + logging.debug("notrar(): joinable file %s", f) + return False + + return True + + +def QuickCheck(set, nzo): + """ Check all on-the-fly md5sums of a set """ + + md5pack = nzo.get_md5pack(set) + if md5pack is None: + return False + + result = False + nzf_list = nzo.get_files() + for file in md5pack: + file = name_fixer(file) + if sabnzbd.misc.on_cleanup_list(file, False): + result = True + continue + found = False + for nzf in nzf_list: + if file == name_fixer(nzf.get_filename()): + found = True + if nzf.md5sum == md5pack[file]: + logging.debug('Quick-check of file %s OK', file) + result = True + else: + logging.debug('Quick-check of file %s failed!', file) + return False # When any file fails, just stop + break + if not found: + logging.debug('Cannot Quick-check missing file %s!', file) + return False # Missing file is failure + return result + + +def pars_of_set(wdir, setname): + """ Return list of par2 files (pathless) matching the set """ + list = [] + for file in os.listdir(wdir): + m = FULLVOLPAR2_RE.search(file) + if m and m.group(1) == setname and m.group(2): + list.append(file) + return list + + +def is_new_partype(nzo, setname): + """ Determine the PAR2 program type, based on the filename encoding """ + pack = nzo.get_md5pack(setname) + if not pack: + return True + for name in pack.keys(): + try: + name.decode('utf-8') + except UnicodeDecodeError: + # Now we know it's not pure ASCII or UTF-8 + return False + return True + + +def add_s(i): + if i > 1: + return 's' + else: + return '' + + +def unrar_check(rar): + """ Return True if correct version of unrar is found """ + if rar: + try: + version = subprocess.Popen(rar, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).stdout.read() + except: + return False + m = re.search("RAR\s(\d+)\.(\d+)\s+.*Alexander Roshal", version) + if m: + return (int(m.group(1)), int(m.group(2))) >= (3, 80) + return False diff --git a/sabnzbd/newswrapper.py b/sabnzbd/newswrapper.py new file mode 100644 index 0000000..acb8e4e --- /dev/null +++ b/sabnzbd/newswrapper.py @@ -0,0 +1,375 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.newswrapper +""" + +import errno +import socket +from threading import Thread +from nntplib import NNTPPermanentError +import time +import logging + +import sabnzbd +from sabnzbd.constants import * +from sabnzbd.lang import Ta + +try: + from OpenSSL import SSL + _ssl = SSL + WantReadError = _ssl.WantReadError + del SSL + HAVE_SSL = True + +except ImportError: + _ssl = None + HAVE_SSL = False + + # Dummy class so this exception is ignored by clients without ssl installed + class WantReadError(Exception): + def __init__(self, value): + self.parameter = value + def __str__(self): + return repr(self.parameter) + +import threading +_RLock = threading.RLock +del threading + +import select + + +socket.setdefaulttimeout(DEF_TIMEOUT) + + +#------------------------------------------------------------------------------ +# getaddrinfo() can be very slow. In some situations this can lead +# to delayed starts and timeouts on connections. +# Because of this, the results will be cached in the server object. + +def _retrieve_info(server): + """ Async attempt to run getaddrinfo() for specified server + """ + info = GetServerParms(server.host, server.port) + + if info is None: + server.bad_cons += server.threads + else: + server.bad_cons = 0 + (server.info, server.request) = (info, False) + sabnzbd.downloader.wakeup() + + +def request_server_info(server): + """ Launch async request to resolve server address + """ + if not server.request: + server.request = True + Thread(target=_retrieve_info, args=(server,)).start() + + +def GetServerParms(host, port): + # Make sure port is numeric (unicode input not supported) + try: + int(port) + except: + # Could do with a warning here + port = 119 + try: + # Standard IPV4 + return socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM) + except: + try: + # Try IPV6 explicitly + return socket.getaddrinfo(host, port, socket.AF_INET6, + socket.SOCK_STREAM, socket.IPPROTO_IP, socket.AI_CANONNAME) + except: + # Nothing found! + return None + + +def con(sock, host, port, sslenabled, nntp): + try: + sock.connect((host, port)) + sock.setblocking(0) + if sslenabled and _ssl: + while True: + try: + sock.do_handshake() + break + except WantReadError: + select.select([sock], [], [], 1.0) + except socket.error, e: + try: + # socket.error can either return a string or a tuple + if isinstance(e, tuple): + (_errno, strerror) = e + else: + # Are we safe to hardcode the ETIMEDOUT error? + (_errno, strerror) = (errno.ETIMEDOUT, str(e)) + e = (_errno, strerror) + #expected, do nothing + if _errno == errno.EINPROGRESS: + pass + finally: + nntp.error(e) + + except _ssl.Error, e: + nntp.error(e) + +class NNTP: + def __init__(self, host, port, info, sslenabled, nntp, user=None, password=None, block=False): + self.host = host + self.port = port + self.nntp = nntp + self.blocking = block + self.error_msg = None + if not info: + if block: + info = GetServerParms(host, port) + else: + raise socket.error(errno.EADDRNOTAVAIL, "Address not available - Check for internet or DNS problems") + + af, socktype, proto, canonname, sa = info[0] + + if sslenabled and _ssl: + # Some users benefit from SSLv2 not being capped. + ssl_type = sabnzbd.cfg.ssl_type() + if ssl_type == 'v2': + ctx = _ssl.Context(_ssl.SSLv2_METHOD) + elif ssl_type == 'v3': + ctx = _ssl.Context(_ssl.SSLv3_METHOD) + else: + ctx = _ssl.Context(_ssl.SSLv23_METHOD) + + self.sock = SSLConnection(ctx, socket.socket(af, socktype, proto)) + elif sslenabled and not _ssl: + logging.error(Ta('error-noSSL')) + self.sock = socket.socket(af, socktype, proto) + else: + self.sock = socket.socket(af, socktype, proto) + + try: + # Windows must do the connection in a seperate thread due to non-blocking issues + # If the server wants to be blocked (for testing) then use the linux route + if sabnzbd.WIN32 and not block: + Thread(target=con, args=(self.sock, self.host, self.port, sslenabled, self)).start() + else: + # if blocking (server test) only wait for 4 seconds during connect until timeout + if block: + self.sock.settimeout(10) + self.sock.connect((self.host, self.port)) + if not block: + self.sock.setblocking(0) + if sslenabled and _ssl: + while True: + try: + self.sock.do_handshake() + break + except WantReadError: + select.select([self.sock], [], [], 1.0) + + except socket.error, e: + try: + # socket.error can either return a string or a tuple + if isinstance(e, tuple): + (_errno, strerror) = e + else: + # Are we safe to hardcode the ETIMEDOUT error? + (_errno, strerror) = (errno.ETIMEDOUT, str(e)) + e = (_errno, strerror) + #expected, do nothing + if _errno == errno.EINPROGRESS: + pass + finally: + self.error(e) + + except _ssl.Error, e: + self.error(e) + + def error(self, error): + if 'SSL23_GET_SERVER_HELLO' in str(error): + error = 'This server does not allow SSL on this port' + msg = "Failed to connect: %s" % (str(error)) + msg = "%s %s@%s:%s" % (msg, self.nntp.thrdnum, self.host, self.port) + self.error_msg = msg + if self.blocking: + raise socket.error(errno.ECONNREFUSED, msg) + else: + logging.info(msg) + self.nntp.server.warning = msg + +class NewsWrapper: + def __init__(self, server, thrdnum, block=False): + self.server = server + self.thrdnum = thrdnum + self.blocking = block + + self.timeout = None + self.article = None + self.data = '' + self.lines = [] + + self.nntp = None + self.recv = None + + self.connected = False + + self.user_sent = False + self.pass_sent = False + + self.group = None + + self.user_ok = False + self.pass_ok = False + + def init_connect(self): + self.nntp = NNTP(self.server.host, self.server.port, self.server.info, self.server.ssl, self, + self.server.username, self.server.password, self.blocking) + self.recv = self.nntp.sock.recv + + self.timeout = time.time() + self.server.timeout + + def finish_connect(self): + if not self.server.username or not self.server.password: + self.connected = True + self.user_sent = True + self.user_ok = True + self.pass_sent = True + self.pass_ok = True + + if self.lines and self.lines[0][:3] == '400': + raise NNTPPermanentError(self.lines[0]) + elif not self.user_sent: + command = 'authinfo user %s\r\n' % (self.server.username) + self.nntp.sock.sendall(command) + self.user_sent = True + elif not self.user_ok: + if self.lines[0][:3] == '381': + self.user_ok = True + + if self.user_ok and not self.pass_sent: + command = 'authinfo pass %s\r\n' % (self.server.password) + self.nntp.sock.sendall(command) + self.pass_sent = True + elif self.user_ok and not self.pass_ok: + if self.lines[0][:3] != '281': + # Assume that login failed (code 481 or other) + raise NNTPPermanentError(self.lines[0]) + else: + self.connected = True + + self.timeout = time.time() + self.server.timeout + + def body(self): + self.timeout = time.time() + self.server.timeout + command = 'BODY <%s>\r\n' % (self.article.article) + self.nntp.sock.sendall(command) + + def send_group(self, group): + self.timeout = time.time() + self.server.timeout + command = 'GROUP %s\r\n' % (group) + self.nntp.sock.sendall(command) + + def recv_chunk(self, block=False): + self.timeout = time.time() + self.server.timeout + while 1: + try: + chunk = self.recv(32768) + break + except WantReadError: + # SSL connections will block until they are ready. + # Either ignore the connection until it responds + # Or wait in a loop until it responds + if block: + #time.sleep(0.0001) + continue + else: + return (0, False, True) + + self.data += chunk + new_lines = self.data.split('\r\n') + + self.data = new_lines.pop() + self.lines.extend(new_lines) + + if self.lines and self.lines[-1] == '.': + self.lines = self.lines[1:-1] + return (len(chunk), True, False) + else: + return (len(chunk), False, False) + + def soft_reset(self): + self.timeout = None + self.article = None + self.data = '' + self.lines = [] + + def hard_reset(self, wait=True, quit=True): + if self.nntp: + try: + if quit: + self.nntp.sock.sendall('QUIT\r\n') + time.sleep(0.1) + self.nntp.sock.close() + except: + pass + + self.__init__(self.server, self.thrdnum) + + # Wait before re-using this newswrapper + if wait: + # Reset due to error condition, use server timeout + self.timeout = time.time() + self.server.timeout + else: + # Reset for internal reasons, just wait 5 sec + self.timeout = time.time() + 5 + + def terminate(self, quit=False): + """ Close connection and remove nntp object """ + if self.nntp: + try: + if quit: + self.nntp.sock.sendall('QUIT\r\n') + time.sleep(0.1) + self.nntp.sock.close() + except: + pass + del self.nntp + + +class SSLConnection: + def __init__(self, *args): + self._ssl_conn = apply(_ssl.Connection, args) + self._lock = _RLock() + + for f in ('get_context', 'pending', 'send', 'write', 'recv', 'read', + 'renegotiate', 'bind', 'listen', 'connect', 'accept', + 'setblocking', 'fileno', 'shutdown', 'close', 'get_cipher_list', + 'getpeername', 'getsockname', 'getsockopt', 'setsockopt', + 'makefile', 'get_app_data', 'set_app_data', 'state_string', + 'sock_shutdown', 'get_peer_certificate', 'want_read', + 'want_write', 'set_connect_state', 'set_accept_state', + 'connect_ex', 'sendall', 'do_handshake', 'settimeout'): + exec """def %s(self, *args): + self._lock.acquire() + try: + return apply(self._ssl_conn.%s, args) + finally: + self._lock.release()\n""" % (f, f) diff --git a/sabnzbd/newzbin.py b/sabnzbd/newzbin.py new file mode 100644 index 0000000..13f16c9 --- /dev/null +++ b/sabnzbd/newzbin.py @@ -0,0 +1,365 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.newzbin - newzbin.com support functions +""" + +import httplib +import urllib +import time +import logging +import re +import Queue +import socket +try: + socket.ssl + _HAVE_SSL = True +except: + _HAVE_SSL = False + +from threading import * + +import sabnzbd +from sabnzbd.constants import * +from sabnzbd.decorators import synchronized +from sabnzbd.misc import cat_to_opts, sanitize_foldername, bad_fetch, cat_convert +from sabnzbd.codecs import name_fixer +import sabnzbd.newswrapper +import sabnzbd.nzbqueue +import sabnzbd.cfg as cfg +from sabnzbd.lang import T, Ta +from sabnzbd.utils import osx + + +################################################################################ +# DirectNZB support +################################################################################ + +_gFailures = 0 +def _warn_user(msg): + """ Warn user if too many soft newzbin errors occurred + """ + global _gFailures + _gFailures += 1 + if _gFailures > 5: + logging.warning(msg) + _gFailures = 0 + else: + logging.debug(msg) + +def _access_ok(): + global _gFailures + _gFailures = 0 + + +class MSGIDGrabber(Thread): + do = None # Link to instance of thread + + """ Thread for msgid-grabber queue """ + def __init__(self): + Thread.__init__(self) + self.queue = Queue.Queue() + for tup in sabnzbd.nzbqueue.get_msgids(): + self.queue.put(tup) + self.shutdown = False + MSGIDGrabber.do = self + + def grab(self, msgid, nzo): + logging.debug("Adding msgid %s to the queue", msgid) + self.queue.put((msgid, nzo)) + + def stop(self): + # Put None on the queue to stop "run" + self.shutdown = True + self.queue.put((None, None)) + + def run(self): + """ Process the queue (including waits and retries) """ + def sleeper(delay): + for n in range(delay): + if not self.shutdown: + time.sleep(1.05) + + self.shutdown = False + msgid = None + while not self.shutdown: + if not msgid: + (msgid, nzo) = self.queue.get() + if self.shutdown or not msgid: + break + logging.debug("Popping msgid %s", msgid) + + filename, data, newzbin_cat, nzo_info = _grabnzb(msgid) + if filename and data: + filename = name_fixer(filename) + + _r, _u, _d = nzo.get_repair_opts() + pp = sabnzbd.opts_to_pp(_r, _u, _d) + script = nzo.get_script() + cat = nzo.get_cat() + if not cat: + cat = cat_convert(newzbin_cat) + + priority = nzo.get_priority() + nzbname = nzo.get_dirname_rename() + + cat, pp, script, priority = cat_to_opts(cat, pp, script, priority) + + try: + sabnzbd.nzbqueue.insert_future_nzo(nzo, filename, msgid, data, pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname, nzo_info=nzo_info) + except: + logging.error(Ta('error-nbUpdate@1'), msgid) + logging.debug("Traceback: ", exc_info = True) + sabnzbd.nzbqueue.remove_nzo(nzo.nzo_id, False) + msgid = None + else: + if filename: + sleeper(int(filename)) + else: + # Fatal error, give up on this one + bad_fetch(nzo, msgid, retry=False) + msgid = None + + osx.sendGrowlMsg(T('grwl-nzbadd-title'),filename,osx.NOTIFICATION['download']) + + # Keep some distance between the grabs + sleeper(5) + + logging.debug('Stopping MSGIDGrabber') + + +def _grabnzb(msgid): + """ Grab one msgid from newzbin """ + + nothing = (None, None, None, None) + retry = (60, None, None, None) + nzo_info = {'msgid': msgid} + + logging.info('Fetching NZB for Newzbin report #%s', msgid) + + headers = {'User-agent' : 'SABnzbd+/%s' % sabnzbd.version.__version__} + + # Connect to Newzbin + try: + if _HAVE_SSL: + conn = httplib.HTTPSConnection('www.newzbin.com') + else: + conn = httplib.HTTPConnection('www.newzbin.com') + + postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'reportid': msgid } + postdata = urllib.urlencode(postdata) + + headers['Content-type'] = 'application/x-www-form-urlencoded' + + fetchurl = '/api/dnzb/' + conn.request('POST', fetchurl, postdata, headers) + response = conn.getresponse() + + # Save debug info if we have to + data = response.read() + + except: + _warn_user('Problem accessing Newzbin server, wait 1 min.') + logging.debug("Traceback: ", exc_info = True) + return retry + + # Get the filename + rcode = response.getheader('X-DNZB-RCode') + rtext = response.getheader('X-DNZB-RText') + try: + nzo_info['more_info'] = response.getheader('X-DNZB-MoreInfo') + except: + # Only some reports will generate a moreinfo header + pass + if not (rcode or rtext): + logging.error(T('error-nbProtocol')) + return nothing + + # Official return codes: + # 200 = OK, NZB content follows + # 400 = Bad Request, please supply all parameters + # (this generally means reportid or fileid is missing; missing user/pass gets you a 401) + # 401 = Unauthorised, check username/password? + # 402 = Payment Required, not Premium + # 404 = Not Found, data doesn't exist? + # (only working for reportids, see Technical Limitations) + # 450 = Try Later, wait seconds for counter to reset + # (for an explanation of this, see DNZB Rate Limiting) + # 500 = Internal Server Error, please report to Administrator + # 503 = Service Unavailable, site is currently down + + if rcode in ('500', '503'): + _warn_user('Newzbin has a server problem (%s, %s), wait 5 min.' % (rcode, rtext)) + return retry + + _access_ok() + + if rcode == '450': + wait_re = re.compile('wait (\d+) seconds') + try: + wait = int(wait_re.findall(rtext)[0]) + except: + wait = 60 + if wait > 60: + wait = 60 + logging.info("Newzbin says we should wait for %s sec", wait) + return int(wait+1), None, None, None + + if rcode in ('402'): + logging.warning(Ta('warn-nbCredit')) + return nothing + + if rcode in ('401'): + logging.warning(Ta('warn-nbNoAuth')) + return nothing + + if rcode in ('400', '404'): + logging.error(Ta('error-nbReport@1'), msgid) + return nothing + + if rcode != '200': + logging.error(Ta('error-nbUnkownError@2'), rcode, rtext) + return nothing + + # Process data + report_name = response.getheader('X-DNZB-Name') + report_cat = response.getheader('X-DNZB-Category') + if not (report_name and report_cat): + logging.error(Ta('error-nbInfo@1'), msgid) + return nothing + + # sanitize report_name + newname = sanitize_foldername(report_name) + if len(newname) > 80: + newname = newname[0:79].strip('. ') + newname += ".nzb" + + logging.info('Successfully fetched report %s - %s (cat=%s) (%s)', msgid, report_name, report_cat, newname) + + return (newname, data, report_cat, nzo_info) + + +################################################################################ +# BookMark support +################################################################################ +BOOK_LOCK = Lock() + +class Bookmarks: + """ Get list of bookmarks from www.newzbin.com + """ + do = None # Link to instance + + def __init__(self): + self.bookmarks = sabnzbd.load_data(BOOKMARK_FILE_NAME) + if not self.bookmarks: + self.bookmarks = [] + self.__busy = False + Bookmarks.do = self + + @synchronized(BOOK_LOCK) + def run(self, delete=None): + + headers = { 'User-Agent': 'SABnzbd+/%s' % sabnzbd.__version__, } + + # Connect to Newzbin + try: + if _HAVE_SSL: + conn = httplib.HTTPSConnection('www.newzbin.com') + else: + conn = httplib.HTTPConnection('www.newzbin.com') + + if delete: + logging.debug('Trying to delete Newzbin bookmark %s', delete) + postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'action': 'delete', \ + 'reportids' : delete } + else: + logging.info('Fetching Newzbin bookmarks') + postdata = { 'username': cfg.newzbin_username(), 'password': cfg.newzbin_password(), 'action': 'fetch'} + postdata = urllib.urlencode(postdata) + + headers['Content-type'] = 'application/x-www-form-urlencoded' + + fetchurl = '/api/bookmarks/' + conn.request('POST', fetchurl, postdata, headers) + response = conn.getresponse() + except: + _warn_user('Problem accessing Newzbin server.') + logging.debug("Traceback: ", exc_info = True) + return + + data = response.read() + + # Get the status + rcode = str(response.status) + + # Official return codes: + # 200 = OK, NZB content follows + # 204 = No content + # 400 = Bad Request, please supply all parameters + # (this generally means reportid or fileid is missing; missing user/pass gets you a 401) + # 401 = Unauthorised, check username/password? + # 402 = Payment Required, not Premium + # 403 = Forbidden (incorrect auth) + # 500 = Internal Server Error, please report to Administrator + # 503 = Service Unavailable, site is currently down + + if rcode not in ('500', '503'): + _access_ok() + + if rcode == '204': + logging.debug("No bookmarks set") + elif rcode in ('401', '403'): + logging.warning(Ta('warn-nbNoAuth')) + elif rcode in ('402'): + logging.warning(Ta('warn-nbCredit')) + elif rcode in ('500', '503'): + _warn_user('Newzbin has a server problem (%s).' % rcode) + elif rcode == '200': + if delete: + if data.startswith('1'): + logging.info('Deleted newzbin bookmark %s', delete) + self.bookmarks.remove(delete) + else: + logging.warning(Ta('warn-nbNoDelBM@1'), delete) + else: + for line in data.split('\n'): + try: + msgid, size, text = line.split('\t', 2) + except: + msgid = size = text = None + if msgid and (msgid not in self.bookmarks): + self.bookmarks.append(msgid) + logging.info("Found new bookmarked msgid %s (%s)", msgid, text) + sabnzbd.add_msgid(int(msgid), None, None, priority=None) + else: + logging.error(Ta('error-nbUnkownError@1'), rcode) + + self.__busy = False + + @synchronized(BOOK_LOCK) + def save(self): + sabnzbd.save_data(self.bookmarks, BOOKMARK_FILE_NAME) + + def bookmarksList(self): + return self.bookmarks + + def del_bookmark(self, msgid): + if cfg.newzbin_unbookmark(): + msgid = str(msgid) + if msgid in self.bookmarks: + self.run(msgid) diff --git a/sabnzbd/nzbqueue.py b/sabnzbd/nzbqueue.py new file mode 100644 index 0000000..8374f82 --- /dev/null +++ b/sabnzbd/nzbqueue.py @@ -0,0 +1,943 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.nzbqueue - nzb queue +""" + +import os +import logging +import time +import datetime + +import sabnzbd +from sabnzbd.trylist import TryList +from sabnzbd.nzbstuff import NzbObject +from sabnzbd.misc import panic_queue, exit_sab, sanitize_foldername, cat_to_opts +import sabnzbd.database as database +from sabnzbd.decorators import * +from sabnzbd.constants import * +import sabnzbd.cfg as cfg +from sabnzbd.articlecache import ArticleCache +import sabnzbd.downloader +from sabnzbd.assembler import Assembler +from sabnzbd.lang import T, Ta +from sabnzbd.utils import osx + + +def DeleteLog(name): + if name: + name = name.replace('.nzb', '.log') + try: + os.remove(os.path.join(os.path.dirname(sabnzbd.LOGFILE), name)) + except: + pass + +#------------------------------------------------------------------------------- + +class NzbQueue(TryList): + def __init__(self): + TryList.__init__(self) + + self.__downloaded_items = [] + + + self.__top_only = cfg.top_only() + self.__top_nzo = None + + self.__nzo_list = [] + self.__nzo_table = {} + + self.__auto_sort = cfg.auto_sort() + + nzo_ids = [] + + data = sabnzbd.load_data(QUEUE_FILE_NAME, remove = False) + + if data: + try: + queue_vers, nzo_ids, self.__downloaded_items = data + if not queue_vers == QUEUE_VERSION: + logging.error(Ta('error-qBad')) + self.__downloaded_items = [] + nzo_ids = [] + panic_queue(os.path.join(cfg.cache_dir.get_path(),QUEUE_FILE_NAME)) + exit_sab(2) + except ValueError: + logging.error(Ta('error-qCorruptFile@1'), + os.path.join(cfg.cache_dir.get_path(), QUEUE_FILE_NAME)) + + for nzo_id in nzo_ids: + nzo = sabnzbd.load_data(nzo_id, remove = False) + if nzo: + self.add(nzo, save = False) + + @synchronized(NZBQUEUE_LOCK) + def save(self): + """ Save queue """ + logging.info("Saving queue") + + nzo_ids = [] + # Aggregate nzo_ids and save each nzo + for nzo in self.__nzo_list: + nzo_ids.append(nzo.nzo_id) + sabnzbd.save_data(nzo, nzo.nzo_id) + + sabnzbd.save_data((QUEUE_VERSION, nzo_ids, + self.__downloaded_items), QUEUE_FILE_NAME) + + @synchronized(NZBQUEUE_LOCK) + def set_top_only(self, value): + self.__top_only = value + + @synchronized(NZBQUEUE_LOCK) + def generate_future(self, msg, pp=None, script=None, cat=None, url=None, priority=NORMAL_PRIORITY, nzbname=None): + """ Create and return a placeholder nzo object """ + future_nzo = NzbObject(msg, 0, pp, script, None, True, cat=cat, url=url, priority=priority, nzbname=nzbname, status="Grabbing") + self.add(future_nzo) + return future_nzo + + @synchronized(NZBQUEUE_LOCK) + def insert_future(self, future, filename, msgid, data, pp=None, script=None, cat=None, priority=NORMAL_PRIORITY, nzbname=None, nzo_info=None): + """ Refresh a placeholder nzo with an actual nzo """ + if nzo_info is None: + nzo_info = {} + nzo_id = future.nzo_id + if nzo_id in self.__nzo_table: + try: + logging.info("Regenerating item: %s", nzo_id) + r, u, d = future.get_repair_opts() + if not r is None: + pp = sabnzbd.opts_to_pp(r, u, d) + scr = future.get_script() + if scr is None: + scr = script + categ = future.get_cat() + if categ is None: + categ = cat + categ, pp, script, priority = cat_to_opts(categ, pp, script, priority) + + # Remember old priority + old_prio = future.get_priority() + + try: + future.__init__(filename, msgid, pp, scr, nzb=data, futuretype=False, cat=categ, priority=priority, nzbname=nzbname, nzo_info=nzo_info) + future.nzo_id = nzo_id + self.save() + except ValueError: + self.remove(nzo_id, False) + except TypeError: + self.remove(nzo_id, False) + + # Make sure the priority is changed now that we know the category + if old_prio != priority: + future.set_priority(None) + self.set_priority(future.nzo_id, priority) + + if self.__auto_sort: + self.sort_by_avg_age() + + self.reset_try_list() + except: + logging.error(Ta('error-qAdd@1'), nzo_id) + logging.debug("Traceback: ", exc_info = True) + self.remove(nzo_id, False) + else: + logging.info("Item %s no longer in queue, omitting", + nzo_id) + + @synchronized(NZBQUEUE_LOCK) + def change_opts(self, nzo_id, pp): + if nzo_id in self.__nzo_table: + self.__nzo_table[nzo_id].set_opts(pp) + + @synchronized(NZBQUEUE_LOCK) + def change_script(self, nzo_id, script): + if nzo_id in self.__nzo_table: + self.__nzo_table[nzo_id].set_script(script) + + @synchronized(NZBQUEUE_LOCK) + def change_cat(self, nzo_id, cat): + if nzo_id in self.__nzo_table: + self.__nzo_table[nzo_id].set_cat(cat) + + @synchronized(NZBQUEUE_LOCK) + def change_name(self, nzo_id, name): + if nzo_id in self.__nzo_table: + self.__nzo_table[nzo_id].set_name(name) + + @synchronized(NZBQUEUE_LOCK) + def get_nzo(self, nzo_id): + if nzo_id in self.__nzo_table: + return self.__nzo_table[nzo_id] + else: + return None + + @synchronized(NZBQUEUE_LOCK) + def add(self, nzo, save=True): + sabnzbd.QUEUECOMPLETEACTION_GO = False + + # Reset try_lists + nzo.reset_try_list() + self.reset_try_list() + + + if not nzo.nzo_id: + nzo.nzo_id = sabnzbd.get_new_id('nzo') + + if nzo.nzo_id: + nzo.deleted = False + priority = nzo.get_priority() + self.__nzo_table[nzo.nzo_id] = nzo + if priority == TOP_PRIORITY: + #A top priority item (usually a completed download fetching pars) + #is added to the top of the queue + self.__nzo_list.insert(0, nzo) + elif priority == LOW_PRIORITY: + self.__nzo_list.append(nzo) + else: + #for high priority we need to add the item at the bottom + #of any other high priority items above the normal priority + #for normal priority we need to add the item at the bottom + #of the normal priority items above the low priority + if self.__nzo_list: + pos = 0 + added = False + for position in self.__nzo_list: + if position.get_priority() < priority: + self.__nzo_list.insert(pos, nzo) + added=True + break + pos+=1 + if not added: + #if there are no other items classed as a lower priority + #then it will be added to the bottom of the queue + self.__nzo_list.append(nzo) + else: + #if the queue is empty then simple append the item to the bottom + self.__nzo_list.append(nzo) + if save: + self.save() + + if nzo.get_status() not in ('Fetching',): + osx.sendGrowlMsg(T('grwl-nzbadd-title'),nzo.get_filename(),osx.NOTIFICATION['download']) + + if self.__auto_sort: + self.sort_by_avg_age() + + @synchronized(NZBQUEUE_LOCK) + def remove(self, nzo_id, add_to_history = True, unload=False, save=True, cleanup=True): + if nzo_id in self.__nzo_table: + nzo = self.__nzo_table.pop(nzo_id) + nzo.deleted = True + self.__nzo_list.remove(nzo) + + if add_to_history: + # Create the history DB instance + history_db = database.get_history_handle() + # Add the nzo to the database. Only the path, script and time taken is passed + # Other information is obtained from the nzo + history_db.add_history_db(nzo, '', '', 0, '', '') + history_db.close() + + elif cleanup: + self.cleanup_nzo(nzo) + + sabnzbd.remove_data(nzo_id) + if save: + self.save() + + + @synchronized(NZBQUEUE_LOCK) + def remove_multiple(self, nzo_ids): + for nzo_id in nzo_ids: + self.remove(nzo_id, add_to_history = False, save = False) + self.save() + + @synchronized(NZBQUEUE_LOCK) + def remove_all(self): + lst = [] + for nzo_id in self.__nzo_table: + lst.append(nzo_id) + for nzo_id in lst: + nzo = self.__nzo_table.pop(nzo_id) + nzo.deleted = True + self.__nzo_list.remove(nzo) + self.cleanup_nzo(nzo) + sabnzbd.remove_data(nzo_id) + del lst + self.save() + + @synchronized(NZBQUEUE_LOCK) + def remove_nzf(self, nzo_id, nzf_id): + if nzo_id in self.__nzo_table: + nzo = self.__nzo_table[nzo_id] + nzf = nzo.get_nzf_by_id(nzf_id) + + if nzf: + post_done = nzo.remove_nzf(nzf) + if post_done: + self.remove(nzo_id, add_to_history = False) + + + @synchronized(NZBQUEUE_LOCK) + def pause_multiple_nzo(self, nzo_ids): + for nzo_id in nzo_ids: + self.pause_nzo(nzo_id) + + @synchronized(NZBQUEUE_LOCK) + def pause_nzo(self, nzo_id): + if nzo_id in self.__nzo_table: + nzo = self.__nzo_table[nzo_id] + nzo.pause_nzo() + logging.debug("Paused nzo: %s", nzo_id) + + @synchronized(NZBQUEUE_LOCK) + def resume_multiple_nzo(self, nzo_ids): + for nzo_id in nzo_ids: + self.resume_nzo(nzo_id) + + @synchronized(NZBQUEUE_LOCK) + def resume_nzo(self, nzo_id): + if nzo_id in self.__nzo_table: + nzo = self.__nzo_table[nzo_id] + nzo.resume_nzo() + logging.debug("Resumed nzo: %s", nzo_id) + + @synchronized(NZBQUEUE_LOCK) + def switch(self, item_id_1, item_id_2): + try: + # Allow an index as second parameter, easier for some skins + i = int(item_id_2) + item_id_2 = self.__nzo_list[i].nzo_id + except: + pass + try: + nzo1 = self.__nzo_table[item_id_1] + nzo2 = self.__nzo_table[item_id_2] + except KeyError: + # One or both jobs missing + return (-1, 0) + + #get the priorities of the two items + nzo1_priority = nzo1.get_priority() + nzo2_priority = nzo2.get_priority() + try: + #get the item id of the item below to use in priority changing + item_id_3 = self.__nzo_list[i+1].nzo_id + #if there is an item below the id1 and id2 then we need that too + #to determine whether to change the priority + nzo3 = self.__nzo_table[item_id_3] + nzo3_priority = nzo3.get_priority() + #if id1 is surrounded by items of a different priority then change it's pririty to match + if nzo2_priority != nzo1_priority and nzo3_priority != nzo1_priority or nzo2_priority > nzo1_priority: + nzo1.set_priority(nzo2_priority) + except: + nzo1.set_priority(nzo2_priority) + item_id_pos1 = -1 + item_id_pos2 = -1 + for i in xrange(len(self.__nzo_list)): + if item_id_1 == self.__nzo_list[i].nzo_id: + item_id_pos1 = i + elif item_id_2 == self.__nzo_list[i].nzo_id: + item_id_pos2 = i + if (item_id_pos1 > -1) and (item_id_pos2 > -1): + item = self.__nzo_list[item_id_pos1] + del self.__nzo_list[item_id_pos1] + self.__nzo_list.insert(item_id_pos2, item) + return (item_id_pos2, nzo1.get_priority()) + # If moving failed/no movement took place + return (-1, nzo1.get_priority()) + + @synchronized(NZBQUEUE_LOCK) + def get_position(self, nzb_id): + for i in xrange(len(self.__nzo_list)): + if nzb_id == self.__nzo_list[i].nzo_id: + return i + return -1 + + @synchronized(NZBQUEUE_LOCK) + def move_up_bulk(self, nzo_id, nzf_ids): + if nzo_id in self.__nzo_table: + self.__nzo_table[nzo_id].move_up_bulk(nzf_ids) + + @synchronized(NZBQUEUE_LOCK) + def move_top_bulk(self, nzo_id, nzf_ids): + if nzo_id in self.__nzo_table: + self.__nzo_table[nzo_id].move_top_bulk(nzf_ids) + + @synchronized(NZBQUEUE_LOCK) + def move_down_bulk(self, nzo_id, nzf_ids): + if nzo_id in self.__nzo_table: + self.__nzo_table[nzo_id].move_down_bulk(nzf_ids) + + @synchronized(NZBQUEUE_LOCK) + def move_bottom_bulk(self, nzo_id, nzf_ids): + if nzo_id in self.__nzo_table: + self.__nzo_table[nzo_id].move_bottom_bulk(nzf_ids) + + @synchronized(NZBQUEUE_LOCK) + def sort_by_avg_age(self, reverse=False): + logging.info("Sorting by average date...(reversed:%s)", reverse) + self.__nzo_list = sort_queue_function(self.__nzo_list, _nzo_date_cmp, reverse) + + @synchronized(NZBQUEUE_LOCK) + def sort_by_name(self, reverse=False): + logging.info("Sorting by name...(reversed:%s)", reverse) + self.__nzo_list = sort_queue_function(self.__nzo_list, _nzo_name_cmp, reverse) + + @synchronized(NZBQUEUE_LOCK) + def sort_by_size(self, reverse=False): + logging.info("Sorting by size...(reversed:%s)", reverse) + self.__nzo_list = sort_queue_function(self.__nzo_list, _nzo_size_cmp, reverse) + + + @synchronized(NZBQUEUE_LOCK) + def sort_queue(self, field, reverse=False): + if isinstance(reverse, str): + if reverse.lower() == 'desc': + reverse = True + else: + reverse = False + if reverse is None: + reverse = False + if field.lower() == 'name': + self.sort_by_name(reverse) + elif field.lower() == 'size' or field.lower() == 'bytes': + self.sort_by_size(reverse) + elif field.lower() == 'avg_age': + self.sort_by_avg_age(reverse) + else: + logging.debug("Sort: %s not recognised", field) + + + @synchronized(NZBQUEUE_LOCK) + def set_priority(self, nzo_id, priority): + """ Sets the priority on the nzo and places it in the queue at the approrioate position """ + try: + priority = int(priority) + nzo = self.__nzo_table[nzo_id] + nzo_id_pos1 = -1 + pos = -1 + + # Get the current position in the queue + for i in xrange(len(self.__nzo_list)): + if nzo_id == self.__nzo_list[i].nzo_id: + nzo_id_pos1 = i + break + + # Don't change priority and order if priority is the same as asked + if priority == self.__nzo_list[nzo_id_pos1].get_priority(): + return nzo_id_pos1 + + nzo.set_priority(priority) + + if nzo_id_pos1 != -1: + del self.__nzo_list[nzo_id_pos1] + if priority == TOP_PRIORITY: + #A top priority item (usually a completed download fetching pars) + #is added to the top of the queue + self.__nzo_list.insert(0, nzo) + pos = 0 + elif priority == LOW_PRIORITY: + pos = len(self.__nzo_list) + self.__nzo_list.append(nzo) + else: + # for high priority we need to add the item at the bottom + #of any other high priority items above the normal priority + # for normal priority we need to add the item at the bottom + #of the normal priority items above the low priority + if self.__nzo_list: + p = 0 + added = False + for position in self.__nzo_list: + if position.get_priority() < priority: + self.__nzo_list.insert(p, nzo) + pos = p + added=True + break + p+=1 + if not added: + #if there are no other items classed as a lower priority + #then it will be added to the bottom of the queue + pos = len(self.__nzo_list) + self.__nzo_list.append(nzo) + else: + #if the queue is empty then simple append the item to the bottom + self.__nzo_list.append(nzo) + pos = 0 + return pos + + except: + return -1 + + @synchronized(NZBQUEUE_LOCK) + def set_priority_multiple(self, nzo_ids, priority): + try: + n = -1 + for nzo_id in nzo_ids: + n = self.set_priority(nzo_id, priority) + return n + except: + return -1 + + @synchronized(NZBQUEUE_LOCK) + def set_original_dirname(self, nzo_id, name): + try: + if name: + nzo = self.__nzo_table[nzo_id] + name = sanitize_foldername(name) + nzo.set_original_dirname(name) + except: + pass + + @synchronized(NZBQUEUE_LOCK) + def reset_try_lists(self, nzf = None, nzo = None): + if nzf: + nzf.reset_try_list() + if nzo: + nzo.reset_try_list() + self.reset_try_list() + + @synchronized(NZBQUEUE_LOCK) + def reset_all_try_lists(self): + for nzo in self.__nzo_list: + nzo.reset_all_try_lists() + self.reset_try_list() + + + @synchronized(NZBQUEUE_LOCK) + def has_articles_for(self, server): + ''' Check whether there are any pending articles for the downloader ''' + if not self.__nzo_list: + return False + elif self.__top_only: + for nzo in self.__nzo_list: + # Ignore any items that are in a paused or grabbing state + if nzo.get_status() not in ('Paused', 'Grabbing'): + return not nzo.server_in_try_list(server) + else: + return not self.server_in_try_list(server) + + @synchronized(NZBQUEUE_LOCK) + def has_forced_items(self): + ''' Check if the queue contains any Forced + Priority items to download while paused ''' + for nzo in self.__nzo_list: + if nzo.get_priority() == TOP_PRIORITY and nzo.get_status() != 'Paused': + return True + return False + + @synchronized(NZBQUEUE_LOCK) + def get_article(self, server): + if self.__top_only: + if self.__nzo_list: + for nzo in self.__nzo_list: + if not nzo.get_status() == 'Paused': + article = nzo.get_article(server) + if article: + return article + + else: + for nzo in self.__nzo_list: + # Don't try to get an article if server is in try_list of nzo + if not nzo.server_in_try_list(server) and nzo.get_status() != 'Paused': + article = nzo.get_article(server) + if article: + return article + + # No articles for this server, block server (until reset issued) + self.add_to_try_list(server) + + @synchronized(NZBQUEUE_LOCK) + def register_article(self, article): + nzf = article.nzf + nzo = nzf.nzo + + if nzo.deleted or nzf.deleted: + logging.debug("Discarding article %s, no longer in queue", article.article) + return + + file_done, post_done, reset = nzo.remove_article(article) + + filename = nzf.get_filename() + + if reset: + self.reset_try_list() + + if file_done: + if nzo.extra3 is None or time.time() > nzo.extra3: + sabnzbd.save_data(nzo, nzo.nzo_id) + if nzo.extra4 is None: + nzo.extra3 = None + else: + nzo.extra3 = time.time() + nzo.extra4 + + _type = nzf.get_type() + + # Only start decoding if we have a filename and type + if filename and _type: + Assembler.do.process((nzo, nzf)) + + else: + logging.warning(Ta('warn-unknownEncoding@1'), filename) + + if post_done: + self.remove(nzo.nzo_id, add_to_history=False, cleanup=False) + + if not self.__nzo_list: + # Close server connections + if cfg.autodisconnect(): + sabnzbd.downloader.disconnect() + + # Sets the end-of-queue back on if disabled + # adding an nzb and re-adding for more blocks disables it + if sabnzbd.QUEUECOMPLETEACTION: + sabnzbd.QUEUECOMPLETEACTION_GO = True + + # Notify assembler to call postprocessor + Assembler.do.process((nzo, None)) + + + @synchronized(NZBQUEUE_LOCK) + def queue_info(self, for_cli = False): + bytes_left = 0 + bytes = 0 + pnfo_list = [] + for nzo in self.__nzo_list: + pnfo = nzo.gather_info(for_cli = for_cli) + if nzo.get_status() != 'Paused': + bytes += pnfo[PNFO_BYTES_FIELD] + bytes_left += pnfo[PNFO_BYTES_LEFT_FIELD] + pnfo_list.append(pnfo) + + return (bytes, bytes_left, pnfo_list) + + @synchronized(NZBQUEUE_LOCK) + def is_empty(self): + empty = True + for nzo in self.__nzo_list: + if not nzo.futuretype: + empty = False + break + return empty + + @synchronized(NZBQUEUE_LOCK) + def cleanup_nzo(self, nzo): + nzo.purge_data() + + ArticleCache.do.purge_articles(nzo.saved_articles) + + for hist_item in self.__downloaded_items: + # refresh fields & delete nzo reference + if hist_item.nzo and hist_item.nzo == nzo: + hist_item.cleanup() + logging.debug('%s cleaned up', + nzo.get_dirname()) + + @synchronized(NZBQUEUE_LOCK) + def debug(self): + return (self.__downloaded_items[:], self.__nzo_list[:], + self.__nzo_table.copy(), self.try_list[:]) + + + def get_urls(self): + """ Return list of future-types needing URL """ + lst = [] + for nzo_id in self.__nzo_table: + nzo = self.__nzo_table[nzo_id] + url = nzo.get_future() + if nzo.futuretype and url.lower().startswith('http'): + lst.append((url, nzo)) + return lst + + def get_msgids(self): + """ Return list of future-types needing msgid """ + lst = [] + for nzo_id in self.__nzo_table: + nzo = self.__nzo_table[nzo_id] + msgid = nzo.get_future() + if nzo.futuretype and (msgid.isdigit() or len(msgid)==5): + lst.append((msgid, nzo)) + return lst + + def __repr__(self): + return "" + +#------------------------------------------------------------------------------- + +def _nzo_date_cmp(nzo1, nzo2): + avg_date1 = nzo1.get_avg_date() + avg_date2 = nzo2.get_avg_date() + + if avg_date1 is None and avg_date2 is None: + return 0 + + if avg_date1 is None: + avg_date1 = datetime.datetime.now() + elif avg_date2 is None: + avg_date2 = datetime.datetime.now() + + return cmp(avg_date1, avg_date2) + +def _nzo_name_cmp(nzo1, nzo2): + return cmp(nzo1.get_filename(), nzo2.get_filename()) + +def _nzo_size_cmp(nzo1, nzo2): + return cmp(nzo1.get_bytes(), nzo2.get_bytes()) + +def sort_queue_function(nzo_list, method, reverse): + super_high_priority = [nzo for nzo in nzo_list if nzo.get_priority() == TOP_PRIORITY] + high_priority = [nzo for nzo in nzo_list if nzo.get_priority() == HIGH_PRIORITY] + normal_priority = [nzo for nzo in nzo_list if nzo.get_priority() == NORMAL_PRIORITY] + low_priority = [nzo for nzo in nzo_list if nzo.get_priority() == LOW_PRIORITY] + + super_high_priority.sort(cmp=method, reverse=reverse) + high_priority.sort(cmp=method, reverse=reverse) + normal_priority.sort(cmp=method, reverse=reverse) + low_priority.sort(cmp=method, reverse=reverse) + + new_list = super_high_priority + new_list.extend(high_priority) + new_list.extend(normal_priority) + new_list.extend(low_priority) + + # Make sure any left-over jobs enter the new list + for item in nzo_list: + if item not in new_list: + new_list.append(item) + + return new_list + + + +#------------------------------------------------------------------------------- +# NZBQ Wrappers + +__NZBQ = None # Global pointer to NzbQueue instance + +def init(): + global __NZBQ + if __NZBQ: + __NZBQ.__init__() + else: + __NZBQ = NzbQueue() + +def start(): + global __NZBQ + if __NZBQ: __NZBQ.start() + + +def stop(): + global __NZBQ + if __NZBQ: + __NZBQ.stop() + try: + __NZBQ.join() + except: + pass + +def debug(): + global __NZBQ + if __NZBQ: return __NZBQ.debug() + +def move_up_bulk(nzo_id, nzf_ids): + global __NZBQ + if __NZBQ: __NZBQ.move_up_bulk(nzo_id, nzf_ids) + +def move_top_bulk(nzo_id, nzf_ids): + global __NZBQ + if __NZBQ: __NZBQ.move_top_bulk(nzo_id, nzf_ids) + +def move_down_bulk(nzo_id, nzf_ids): + global __NZBQ + if __NZBQ: __NZBQ.move_down_bulk(nzo_id, nzf_ids) + +def move_bottom_bulk(nzo_id, nzf_ids): + global __NZBQ + if __NZBQ: __NZBQ.move_bottom_bulk(nzo_id, nzf_ids) + +def remove_nzo(nzo_id, add_to_history = True, unload=False): + global __NZBQ + if __NZBQ: __NZBQ.remove(nzo_id, add_to_history, unload) + +def remove_multiple_nzos(nzo_ids): + global __NZBQ + if __NZBQ: __NZBQ.remove_multiple(nzo_ids) + +def remove_all_nzo(): + global __NZBQ + if __NZBQ: __NZBQ.remove_all() + +def remove_nzf(nzo_id, nzf_id): + global __NZBQ + if __NZBQ: __NZBQ.remove_nzf(nzo_id, nzf_id) + +def sort_by_avg_age(reverse=False): + global __NZBQ + if __NZBQ: __NZBQ.sort_by_avg_age(reverse) + +def sort_by_name(reverse=False): + global __NZBQ + if __NZBQ: __NZBQ.sort_by_name(reverse) + +def sort_by_size(reverse=False): + global __NZBQ + if __NZBQ: __NZBQ.sort_by_size(reverse) + +def change_opts(nzo_id, pp): + global __NZBQ + if __NZBQ: __NZBQ.change_opts(nzo_id, pp) + +def change_script(nzo_id, script): + global __NZBQ + if __NZBQ: __NZBQ.change_script(nzo_id, script) + +def change_cat(nzo_id, cat): + global __NZBQ + if __NZBQ: __NZBQ.change_cat(nzo_id, cat) + +def change_name(nzo_id, name): + global __NZBQ + if __NZBQ: __NZBQ.change_name(nzo_id, name) + +def get_article(host): + global __NZBQ + if __NZBQ: return __NZBQ.get_article(host) + +def has_articles(): + global __NZBQ + if __NZBQ: return not __NZBQ.is_empty() + +def has_articles_for(server): + global __NZBQ + if __NZBQ: return __NZBQ.has_articles_for(server) + +def has_forced_items(): + global __NZBQ + if __NZBQ: return __NZBQ.has_forced_items() + +def register_article(article): + global __NZBQ + if __NZBQ: return __NZBQ.register_article(article) + +def switch(nzo_id1, nzo_id2): + global __NZBQ + if __NZBQ: + return __NZBQ.switch(nzo_id1, nzo_id2) + +def get_position(nzo_id): + global __NZBQ + if __NZBQ: + return __NZBQ.get_position(nzo_id) + +def rename_nzo(nzo_id, name): + global __NZBQ + if __NZBQ: __NZBQ.change_name(nzo_id, name) + +def history_info(): + global __NZBQ + if __NZBQ: return __NZBQ.history_info() + +def queue_info(for_cli = False): + global __NZBQ + if __NZBQ: return __NZBQ.queue_info(for_cli = for_cli) + +#def purge_history(job=None): +# global __NZBQ +# if __NZBQ: __NZBQ.purge(job) + +#def remove_multiple_history(jobs=None): +# global __NZBQ +# if __NZBQ: __NZBQ.remove_multiple_history(jobs) + +def get_msgids(): + global __NZBQ + if __NZBQ: return __NZBQ.get_msgids() + +def get_urls(): + global __NZBQ + if __NZBQ: return __NZBQ.get_urls() + +def pause_multiple_nzo(jobs): + global __NZBQ + if __NZBQ: __NZBQ.pause_multiple_nzo(jobs) + +def resume_multiple_nzo(jobs): + global __NZBQ + if __NZBQ: __NZBQ.resume_multiple_nzo(jobs) + +def cleanup_nzo(nzo): + global __NZBQ + if __NZBQ: __NZBQ.cleanup_nzo(nzo) + +def reset_try_lists(nzf = None, nzo = None): + global __NZBQ + if __NZBQ: __NZBQ.reset_try_lists(nzf, nzo) + +def reset_all_try_lists(): + global __NZBQ + if __NZBQ: __NZBQ.reset_all_try_lists() + +def save(): + global __NZBQ + if __NZBQ: __NZBQ.save() + +def generate_future(msg, pp, script, cat, url, priority, nzbname): + global __NZBQ + if __NZBQ: return __NZBQ.generate_future(msg, pp, script, cat, url, priority, nzbname) + +def set_top_only(value): + global __NZBQ + if __NZBQ: __NZBQ.set_top_only(value) + +#------------------------------------------------------------------------------- +# Synchronized wrappers + +@synchronized_CV +def add_nzo(nzo): + global __NZBQ + if __NZBQ: __NZBQ.add(nzo) + +@synchronized_CV +def insert_future_nzo(future_nzo, filename, msgid, data, pp=None, script=None, cat=None, priority=NORMAL_PRIORITY, nzbname=None, nzo_info=None): + global __NZBQ + if nzo_info is None: + nzo_info = {} + if __NZBQ: __NZBQ.insert_future(future_nzo, filename, msgid, data, pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname, nzo_info=nzo_info) + +@synchronized_CV +def set_priority(nzo_id, priority): + global __NZBQ + if __NZBQ: + return __NZBQ.set_priority(nzo_id, priority) + +@synchronized_CV +def get_nzo(nzo_id): + global __NZBQ + if __NZBQ: + return __NZBQ.get_nzo(nzo_id) + +@synchronized_CV +def set_priority_multiple(nzo_ids, priority): + global __NZBQ + if __NZBQ: return __NZBQ.set_priority_multiple(nzo_ids, priority) + +@synchronized_CV +def sort_queue(field, reverse=False): + global __NZBQ + if __NZBQ: __NZBQ.sort_queue(field, reverse) diff --git a/sabnzbd/nzbstuff.py b/sabnzbd/nzbstuff.py new file mode 100644 index 0000000..0907591 --- /dev/null +++ b/sabnzbd/nzbstuff.py @@ -0,0 +1,1242 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.nzbstuff - misc +""" + +import os +import time +import re +import logging +import datetime +import xml.sax +import xml.sax.handler +import xml.sax.xmlreader +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + +import sabnzbd +from sabnzbd.constants import * +from sabnzbd.misc import to_units, cat_to_opts, cat_convert, sanitize_foldername +import sabnzbd.cfg as cfg +from sabnzbd.trylist import TryList +from sabnzbd.lang import T, Ta +from sabnzbd.codecs import unicoder, platform_encode + +RE_NEWZBIN = re.compile(r"msgid_(\w+) (.+)(\.nzb)$", re.I) +RE_NORMAL = re.compile(r"(.+)(\.nzb)", re.I) +SUBJECT_FN_MATCHER = re.compile(r'"(.*)"') +RE_SAMPLE = re.compile(sample_match, re.I) +PROBABLY_PAR2_RE = re.compile(r'(.*)\.vol(\d*)\+(\d*)\.par2', re.I) + + +################################################################################ +# Article # +################################################################################ +class Article(TryList): + def __init__ (self, article, bytes, partnum, nzf): + TryList.__init__(self) + + self.fetcher = None + self.allow_fill_server = False + + self.article = article + self.art_id = None + self.bytes = bytes + self.partnum = partnum + self.nzf = nzf + + def get_article(self, server): + if server.fillserver and (not self.allow_fill_server) and sabnzbd.active_primaries(): + return None + + if not self.fetcher and not self.server_in_try_list(server): + self.fetcher = server + return self + + def get_art_id(self): + if not self.art_id: + self.art_id = sabnzbd.get_new_id("article") + return self.art_id + + def __getstate__(self): + odict = self.__dict__.copy() + del odict['_TryList__try_list'] + del odict['fetcher'] + return odict + + def __setstate__(self, _dict): + self.__dict__.update(_dict) + TryList.__init__(self) + self.fetcher = None + self.allow_fill_server = False + + def __repr__(self): + return "" % \ + (self.article, self.bytes, self.partnum, self.art_id) + +################################################################################ +# NzbFile # +################################################################################ +SUBJECT_FN_MATCHER = re.compile(r'"(.*)"') +class NzbFile(TryList): + def __init__(self, date, subject, article_db, bytes, nzo): + TryList.__init__(self) + + # Private + self.__date = date + self.__subject = subject + self.__filename = None + self.__type = None + + match = re.search(SUBJECT_FN_MATCHER, subject) + if match: + self.__filename = match.group(1).strip('"') + + self.__ispar2file = False + self.__vol = None + self.__blocks = None + self.__setname = None + self.__extrapars = None + + self.__initial_article = None + + self.__articles = [] + self.__decodetable = {} + + self.__bytes = bytes + self.__bytes_left = bytes + self.__article_count = 0 + + # Public + self.nzo = nzo + self.nzf_id = sabnzbd.get_new_id("nzf") + self.deleted = False + + self.valid = False + self.import_finished = False + + self.md5sum = None + + self.valid = bool(article_db) + + if self.valid and self.nzf_id: + sabnzbd.save_data(article_db, self.nzf_id) + + ## begin nzf.Mutators ##################################################### + ## excluding nzf.__try_list ############################################### + def increase_article_count(self): + self.__article_count += 1 + + def finish_import(self): + logging.info("Finishing import on %s", self.__subject) + + article_db = sabnzbd.load_data(self.nzf_id) + if article_db: + for partnum in article_db: + art_id = article_db[partnum][0] + bytes = article_db[partnum][1] + + article = Article(art_id, bytes, partnum, self) + + self.__articles.append(article) + self.__decodetable[partnum] = article + + # Look for article with lowest number + self.__initial_article = self.__decodetable[self.lowest_partnum()] + self.import_finished = True + + def remove_article(self, article): + self.__articles.remove(article) + self.__bytes_left -= article.bytes + + reset = False + if article.partnum == self.lowest_partnum() and self.__articles: + # Issue reset + self.__initial_article = None + self.reset_try_list() + reset = True + + done = True + if self.__articles: + done = False + + return (done, reset) + + def set_type(self, _type): + self.__type = _type + + def set_filename(self, filename): + self.__filename = filename + + def set_par2(self, setname, vol, blocks): + self.__ispar2file = True + self.__setname = setname + self.__vol = vol + self.__blocks = int(blocks) + + def set_extrapars(self, extrapars): + self.__extrapars = extrapars + + def remove_extrapar(self, extrapar): + self.__extrapars.remove(extrapar) + + def is_par2(self): + return self.__ispar2file + + ## end nzf.Mutators ####################################################### + ########################################################################### + def get_article_count(self): + return self.__article_count + + def get_article(self, server): + if self.__initial_article: + article = self.__initial_article.get_article(server) + if article: + return article + + else: + for article in self.__articles: + article = article.get_article(server) + if article: + return article + + self.add_to_try_list(server) + + def reset_all_try_lists(self): + for art in self.__articles: + art.reset_try_list() + self.reset_try_list() + + def bytes(self): + return self.__bytes + + def bytes_left(self): + return self.__bytes_left + + def get_subject(self): + return self.__subject + + def get_date(self): + return self.__date + + def get_filename(self): + return self.__filename + + def get_decodetable(self): + return self.__decodetable + + def get_type(self): + return self.__type + + def get_extrapars(self): + return self.__extrapars + + def get_blocks(self): + return self.__blocks + + def get_setname(self): + return self.__setname + + def completed(self): + return not bool(self.__articles) + + def lowest_partnum(self): + return min(self.__decodetable) + + def __getstate__(self): + odict = self.__dict__.copy() + del odict['_TryList__try_list'] + return odict + + def __setstate__(self, _dict): + self.__dict__.update(_dict) + TryList.__init__(self) + + def __repr__(self): + return "" % \ + (self.__filename, self.__type) + + +################################################################################ +# NzbParser # +################################################################################ +class NzbParser(xml.sax.handler.ContentHandler): + """ Forgiving parser for NZB's """ + # Accesses private variables of NzbObject instances to keep + # queue-compatibility with previous trunk versions. + # Ideally the methods of this class could be added to NzbObject, + # but this would also break compatibility. + # Hence, this solution. + def __init__ (self, nzo): + self.nzo = nzo + self.in_nzb = False + self.in_file = False + self.in_groups = False + self.in_group = False + self.in_segments = False + self.in_segment = False + self.filename = '' + self.avg_age = 0 + self.valids = 0 + self.skipped_files = 0 + self.nzf_list = [] + + def startDocument(self): + self.filter = cfg.ignore_samples() + + def startElement(self, name, attrs): + if name == 'segment' and self.in_nzb and self.in_file and self.in_segments: + try: + self.seg_bytes = int(attrs.get('bytes')) + self.article_nr = int(attrs.get('number')) + except ValueError: + return + self.article_id = [] + self.file_bytes += self.seg_bytes + self.in_segment = True + + elif name == 'segments' and self.in_nzb and self.in_file: + self.in_segments = True + + elif name == 'file' and self.in_nzb: + subject = attrs.get('subject', '') + match = re.search(SUBJECT_FN_MATCHER, subject) + if match: + self.filename = match.group(1).strip('"').strip() + else: + self.filename = subject.strip() + + if self.filter == 2 and RE_SAMPLE.search(subject): + logging.info('Skipping sample file %s', subject) + else: + self.in_file = True + if isinstance(subject, unicode): + subject = subject.encode('latin-1', 'replace') + self.fileSubject = subject + try: + self.file_date = int(attrs.get('date')) + except: + # NZB has non-standard timestamp, assume 1 + self.file_date = 1 + self.article_db = {} + self.file_bytes = 0 + + elif name == 'group' and self.in_nzb and self.in_file and self.in_groups: + self.in_group = True + self.group_name = [] + + elif name == 'groups' and self.in_nzb and self.in_file: + self.in_groups = True + self.groups = [] + + elif name == 'nzb': + self.in_nzb = True + + def characters (self, content): + if self.in_group: + self.group_name.append(content) + elif self.in_segment: + self.article_id.append(content) + + def endElement(self, name): + if name == 'group' and self.in_group: + self.groups.append(str(''.join(self.group_name))) + self.in_group = False + + elif name == 'segment' and self.in_segment: + partnum = self.article_nr + segm = str(''.join(self.article_id)) + if partnum in self.article_db: + if segm != self.article_db[partnum][0]: + logging.error(Ta('error-qDupPart@3'), + partnum, self.article_db[partnum][0], segm) + else: + logging.info("Skipping duplicate article (%s)", segm) + else: + self.article_db[partnum] = (segm, self.seg_bytes) + self.in_segment = False + + elif name == 'groups' and self.in_groups: + self.in_groups = False + + elif name == 'segments' and self.in_segments: + self.in_segments = False + + elif name == 'file' and self.in_file: + # Create an NZF + self.in_file = False + if not self.article_db: + logging.warning(Ta('warn-emptyFile@1'), self.filename) + return + tm = datetime.datetime.fromtimestamp(self.file_date) + nzf = NzbFile(tm, self.filename, self.article_db, self.file_bytes, self.nzo) + if nzf.valid and nzf.nzf_id: + logging.info('File %s added to queue', self.filename) + self.nzo._NzbObject__files.append(nzf) + self.nzo._NzbObject__files_table[nzf.nzf_id] = nzf + self.nzo._NzbObject__bytes += nzf.bytes() + self.avg_age += self.file_date + self.valids += 1 + self.nzf_list.append(nzf) + else: + logging.info('Error importing %s, skipping', self.filename) + if nzf.nzf_id: + sabnzbd.remove_data(nzf.nzf_id) + self.skipped_files += 1 + + elif name == 'nzb': + self.in_nzb = False + + def endDocument(self): + """ End of the file """ + self.nzo._NzbObject__group = self.groups + self.nzo._NzbObject__avg_date = datetime.datetime.fromtimestamp(self.avg_age / self.valids) + if self.skipped_files: + logging.warning(Ta('warn-badImport@2'), + self.skipped_files, self.nzo.get_filename()) + + def remove_files(self): + """ Remove all created NZF objects """ + for nzf in self.nzf_list: + sabnzbd.remove_data(nzf.nzf_id) + + +################################################################################ +# NzbObject # +################################################################################ + +class NzbObject(TryList): + def __init__(self, filename, msgid, pp, script, nzb = None, + futuretype = False, cat = None, url=None, + priority=NORMAL_PRIORITY, nzbname=None, status="Queued", nzo_info=None): + TryList.__init__(self) + + filename = platform_encode(filename) + nzbname = platform_encode(nzbname) + + if pp is None: + r = u = d = None + else: + r, u, d = sabnzbd.pp_to_opts(pp) + + self.__filename = filename # Original filename + if nzbname and nzb: + dirname = nzbname # Use nzbname if set and only for non-future slot + else: + dirname = filename + + # If non-future: create safe folder name stripped from ".nzb" and junk + if nzb and dirname and dirname.lower().endswith('.nzb'): + dname, ext = os.path.splitext(dirname) # Used for folder name for final unpack + if ext.lower() == '.nzb': + dirname = dname + dirname = sanitize_foldername(dirname) + dirname, password = scan_password(dirname) + + self.__dirname = dirname # Keeps track of the working folder + self.__original_dirname = dirname # TAKE NOTE: Used for folder name for final unpack + # The name is wrong, required for backward compatibility! + + self.__created = False # dirprefixes + dirname created + self.__bytes = 0 # Original bytesize + self.__bytes_downloaded = 0 # Downloaded byte + self.__repair = r # True if we want to repair this set + self.__unpack = u # True if we want to unpack this set + self.__delete = d # True if we want to delete this set + self.__script = script # External script for this set + self.__msgid = '0' # Newzbin msgid + self.__cat = cat # Newzbin category + if futuretype: + self.__url = str(url) # Either newzbin-id or URL queued (future-type only) + else: + self.__url = '' + self.__group = [] + self.__avg_date = datetime.datetime.fromtimestamp(0.0) + self.__dirprefix = [] + + self.__partable = {} # Holds one parfile-name for each set + self.__extrapars = {} # Holds the extra parfile names for all sets + self.md5packs = {} # Holds the md5pack for each set + + self.__files = [] + self.__files_table = {} + + self.__finished_files = [] + + #the current status of the nzo eg: + #Queued, Downloading, Repairing, Unpacking, Failed, Complete + self.__status = status + self.__avg_bps_freq = 0 + self.__avg_bps_total = 0 + try: + self.__priority = int(priority) + except: + self.__priority = DEFAULT_PRIORITY + + self.__dupe_table = {} + + self.saved_articles = [] + + self.nzo_id = None + + self.futuretype = futuretype + self.deleted = False + self.parsed = False + + # Store one line responses for filejoin/par2/unrar/unzip here for history display + self.action_line = '' + # Store the results from various filejoin/par2/unrar/unzip stages + self.unpack_info = {} + # Stores one line containing the last failure + self.fail_msg = '' + # Stores various info about the nzo to be + if nzo_info: + self.nzo_info = nzo_info + else: + self.nzo_info = {} + + # Temporary store for custom foldername - needs to be stored because of url/newzbin fetching + self.extra1 = nzbname + + self.extra2 = password + self.extra3 = None # Will hold earliest next save time of NZO + self.extra4 = None # Will hold save timeout for this NZO + self.extra5 = None + self.extra6 = None + + self.create_group_folder = cfg.create_group_folders() + + # Remove leading msgid_XXXX and trailing .nzb + self.__dirname, self.__msgid = SplitFileName(self.__dirname) + if msgid: + self.__msgid = msgid + + if not nzb: + # This is a slot for a future NZB, ready now + return + + # Apply conversion option to final folder, called __original_dirname + # Yeah, I know :( + if cfg.replace_dots() and ' ' not in self.__original_dirname: + logging.info('Replacing dots with spaces in %s', self.__original_dirname) + self.__original_dirname = self.__original_dirname.replace('.',' ') + if cfg.replace_spaces(): + logging.info('Replacing spaces with underscores in %s', self.__dirname) + self.__original_dirname = self.__original_dirname.replace(' ','_') + + if sabnzbd.backup_exists(filename): + # File already exists and we have no_dupes set + logging.warning(Ta('warn-skipDup@1'), filename) + raise TypeError + + # Must create a lower level XML parser because we must + # disable the reading of the DTD file from newzbin.com + # by setting "feature_external_ges" to 0. + + handler = NzbParser(self) + parser = xml.sax.make_parser() + parser.setFeature(xml.sax.handler.feature_external_ges, 0) + parser.setContentHandler(handler) + parser.setErrorHandler(xml.sax.handler.ErrorHandler()) + inpsrc = xml.sax.xmlreader.InputSource() + inpsrc.setByteStream(StringIO(nzb)) + try: + parser.parse(inpsrc) + except xml.sax.SAXParseException, err: + handler.remove_files() + logging.warning(Ta('warn-badNZB@3'), + filename, err.getMessage(), err.getLineNumber()) + raise ValueError + except Exception, err: + handler.remove_files() + logging.warning(Ta('warn-badNZB@3'), filename, err, 0) + raise ValueError + + sabnzbd.backup_nzb(filename, nzb) + + if cat is None: + for grp in self.__group: + cat = cat_convert(grp) + if cat: + break + + # Determine category and find pp/script values + self.__cat, pp, self.__script, self.__priority = cat_to_opts(cat, pp, script, self.__priority) + self.__repair, self.__unpack, self.__delete = sabnzbd.pp_to_opts(pp) + + if cfg.create_group_folders(): + self.__dirprefix.append(self.get_group()) + + if cfg.auto_sort(): + self.__files.sort(cmp=_nzf_cmp_date) + else: + self.__files.sort(cmp=_nzf_cmp_name) + + # Set nzo save-delay to 6 sec per GB with a max of 5 min + self.extra4 = min(6.0 * float(self.__bytes) / GIGI, 300.0) + + # Pause job when above size limit + limit = cfg.SIZE_LIMIT.get_int() + if limit and self.__bytes > limit: + logging.info('Job too large, forcing low prio and paused (%s)', self.__dirname) + self.pause_nzo() + self.set_priority(LOW_PRIORITY) + + + ## begin nzo.Mutators ##################################################### + ## excluding nzo.__try_list ############################################### + def check_for_dupe(self, nzf): + filename = nzf.get_filename() + + dupe = False + + if filename in self.__dupe_table: + old_nzf = self.__dupe_table[filename] + if nzf.get_article_count() <= old_nzf.get_article_count(): + dupe = True + + if not dupe: + self.__dupe_table[filename] = nzf + + return dupe + + def update_bytes(self, bytes): + self.__bytes_downloaded += bytes + + def update_avg_kbs(self, bps): + if bps: + self.__avg_bps_total += bps / 1024 + self.__avg_bps_freq += 1 + + def remove_nzf(self, nzf): + if nzf in self.__files: + self.__files.remove(nzf) + self.__finished_files.append(nzf) + nzf.deleted = True + return not bool(self.__files) + + def reset_all_try_lists(self): + for nzf in self.__files: + nzf.reset_all_try_lists() + self.reset_try_list() + + def remove_article(self, article): + nzf = article.nzf + file_done, reset = nzf.remove_article(article) + + if file_done: + self.remove_nzf(nzf) + + if reset: + self.reset_try_list() + + ## Special treatment for first part of par2 file + fn = nzf.get_filename() + if (not nzf.is_par2()) and fn and fn.strip().lower().endswith('.par2'): + if fn: + par2match = re.search(PROBABLY_PAR2_RE, fn) + ## Is a par2file and repair mode activated + if par2match and self.__repair: + head = par2match.group(1) + nzf.set_par2(par2match.group(1), + par2match.group(2), + par2match.group(3)) + ## Already got a parfile for this set? + if head in self.__partable: + nzf.set_extrapars(self.__extrapars[head]) + ## Set the smallest par2file as initialparfile + ## But only do this if our last initialparfile + ## isn't already done (e.g two small parfiles) + if nzf.get_blocks() < self.__partable[head].get_blocks() \ + and self.__partable[head] in self.__files: + self.__partable[head].reset_try_list() + self.__files.remove(self.__partable[head]) + self.__extrapars[head].append(self.__partable[head]) + self.__partable[head] = nzf + + ## This file either has more blocks, + ## or initialparfile is already decoded + else: + if not file_done: + nzf.reset_try_list() + self.__files.remove(nzf) + self.__extrapars[head].append(nzf) + ## No par2file in this set yet, set this as + ## initialparfile + else: + self.__partable[head] = nzf + self.__extrapars[head] = [] + nzf.set_extrapars(self.__extrapars[head]) + ## Is not a par2file or nothing todo + else: + pass + ## No filename in seg 1? Probably not uu or yenc encoded + ## Set subject as filename + else: + nzf.set_filename(nzf.get_subject()) + + post_done = False + if not self.__files: + post_done = True + #set the nzo status to return "Queued" + self.set_status('Queued') + self.set_download_report() + + return (file_done, post_done, reset) + + def set_opts(self, pp): + self.__repair, self.__unpack, self.__delete = sabnzbd.pp_to_opts(pp) + + def set_script(self, script): + self.__script = script + + def set_cat(self, cat): + self.__cat = cat + + def set_dirname(self, dirname, created = False): + self.__dirname = dirname + self.__created = created + + def set_filename(self, filename): + self.__filename = filename + + def get_original_dirname(self): + return self.__original_dirname + + def show_dir_name(self): + if self.extra2: + return '%s / %s' % (self.__original_dirname, self.extra2) + else: + return self.__original_dirname + + def get_password(self): + return self.extra2 + + def set_original_dirname(self, name): + self.__original_dirname = platform_encode(name.strip()) + + def set_name(self, name): + if isinstance(name, str): + name, self.extra2 = scan_password(platform_encode(name)) + self.__original_dirname = sanitize_foldername(name) + return True + return False + + def pause_nzo(self): + try: + self.__status = 'Paused' + except: + pass + + def resume_nzo(self): + try: + self.__status = 'Queued' + except: + pass + + def get_priority(self): + return self.__priority + + def set_priority(self, priority): + try: + self.__priority = priority + except: + pass + + def get_msgid(self): + return self.__msgid + + def add_parfile(self, parfile): + self.__files.append(parfile) + parfile.remove_extrapar(parfile) + + def remove_parset(self, setname): + self.__partable.pop(setname) + + def set_status(self, status): + #sets a string outputting the current status of the job, eg: + #Queued, Downloading, Repairing, Unpacking, Failed, Complete + self.__status = status + + def get_status(self): + #returns a string of the current queued status + return self.__status + + def get_nzo_id(self): + return self.nzo_id + + def get_files(self): + return self.__finished_files + + def set_download_report(self): + if self.__avg_bps_total and self.__bytes_downloaded and self.__avg_bps_freq: + #get the deltatime since the download started + avg_bps = self.__avg_bps_total / self.__avg_bps_freq + timecompleted = datetime.timedelta(seconds=self.__bytes_downloaded / (avg_bps*1024)) + + seconds = timecompleted.seconds + #find the total time including days + totaltime = (timecompleted.days/86400) + seconds + self.set_nzo_info('download_time',totaltime) + + #format the total time the download took, in days, hours, and minutes, or seconds. + complete_time = format_time_string(seconds, timecompleted.days) + + self.set_unpack_info('Download', T('msg-DownloadedIn@2') % + (complete_time, to_units(avg_bps*1024)), unique=True) + + + + def get_article(self, server): + article = None + nzf_remove_list = [] + + for nzf in self.__files: + # Don't try to get an article if server is in try_list of nzf + if not nzf.server_in_try_list(server): + if not nzf.import_finished: + nzf.finish_import() + # Still not finished? Something went wrong... + if not nzf.import_finished: + logging.error(Ta('error-qImport@1'), nzf) + nzf_remove_list.append(nzf) + continue + + article = nzf.get_article(server) + if article: + break + + for nzf in nzf_remove_list: + self.__files.remove(nzf) + + if article: + return article + else: + # No articles for this server, block for next time + self.add_to_try_list(server) + return + + def move_top_bulk(self, nzf_ids): + self.__cleanup_nzf_ids(nzf_ids) + if nzf_ids: + target = range(len(nzf_ids)) + + while 1: + self.move_up_bulk(nzf_ids, cleanup = False) + + pos_nzf_table = self.__build_pos_nzf_table(nzf_ids) + + keys = pos_nzf_table.keys() + keys.sort() + + if target == keys: + break + + def move_bottom_bulk(self, nzf_ids): + self.__cleanup_nzf_ids(nzf_ids) + if nzf_ids: + target = range(len(self.__files)-len(nzf_ids), len(self.__files)) + + while 1: + self.move_down_bulk(nzf_ids, cleanup = False) + + pos_nzf_table = self.__build_pos_nzf_table(nzf_ids) + + keys = pos_nzf_table.keys() + keys.sort() + + if target == keys: + break + + def move_up_bulk(self, nzf_ids, cleanup = True): + if cleanup: + self.__cleanup_nzf_ids(nzf_ids) + if nzf_ids: + pos_nzf_table = self.__build_pos_nzf_table(nzf_ids) + + while pos_nzf_table: + pos = min(pos_nzf_table) + nzf = pos_nzf_table.pop(pos) + + if pos > 0: + tmp_nzf = self.__files[pos-1] + if tmp_nzf.nzf_id not in nzf_ids: + self.__files[pos-1] = nzf + self.__files[pos] = tmp_nzf + + def move_down_bulk(self, nzf_ids, cleanup = True): + if cleanup: + self.__cleanup_nzf_ids(nzf_ids) + if nzf_ids: + pos_nzf_table = self.__build_pos_nzf_table(nzf_ids) + + while pos_nzf_table: + pos = max(pos_nzf_table) + nzf = pos_nzf_table.pop(pos) + + if pos < len(self.__files)-1: + tmp_nzf = self.__files[pos+1] + if tmp_nzf.nzf_id not in nzf_ids: + self.__files[pos+1] = nzf + self.__files[pos] = tmp_nzf + + ## end nzo.Mutators ####################################################### + ########################################################################### + def get_dirprefix(self): + return self.__dirprefix[:] + + #def get_group(self): + # if self.__dirprefix: + # return self.__dirprefix[0] + # else: + # return '' + + def get_bytes_downloaded(self): + return self.__bytes_downloaded + + def get_bytes(self): + return self.__bytes + + def get_partable(self): + return self.__partable.copy() + + def get_dirname(self): + return self.__dirname + + def get_dirname_rename(self): + return self.extra1 + + def get_dirname_created(self): + return self.__created + + def get_filename(self): + return self.__filename + + #def get_cat(self): + # if self.__cat: + # return self.__cat + # else: + # return '' + + def get_group(self): + if self.__group: + return self.__group[0] + else: + return None + + def purge_data(self): + for nzf in self.__files: + sabnzbd.remove_data(nzf.nzf_id) + + for _set in self.__extrapars: + for nzf in self.__extrapars[_set]: + sabnzbd.remove_data(nzf.nzf_id) + + for nzf in self.__finished_files: + sabnzbd.remove_data(nzf.nzf_id) + + def get_avg_date(self): + return self.__avg_date + + def bytes(self): + return self.__bytes + + def bytes_left(self): + bytes = 0 + for _file in self.__files: + bytes += _file.bytes_left() + return bytes + + def gather_info(self, for_cli = False): + bytes_left_all = 0 + + active_files = [] + queued_files = [] + finished_files = [] + + for _file in self.__finished_files: + bytes = _file.bytes() + filename = _file.get_filename() + if not filename: + filename = _file.get_subject() + date = _file.get_date() + if for_cli: + date = time.mktime(date.timetuple()) + finished_files.append((0, bytes, filename, date)) + + for _file in self.__files: + bytes_left = _file.bytes_left() + bytes = _file.bytes() + filename = _file.get_filename() + if not filename: + filename = _file.get_subject() + date = _file.get_date() + if for_cli: + date = time.mktime(date.timetuple()) + + bytes_left_all += bytes_left + active_files.append((bytes_left, bytes, filename, date, + _file.nzf_id)) + + for _set in self.__extrapars: + for _file in self.__extrapars[_set]: + bytes_left = _file.bytes_left() + bytes = _file.bytes() + filename = _file.get_filename() + if not filename: + filename = _file.get_subject() + date = _file.get_date() + if for_cli: + date = time.mktime(date.timetuple()) + + queued_files.append((_set, bytes_left, bytes, filename, date)) + + avg_date = self.__avg_date + if for_cli: + avg_date = time.mktime(avg_date.timetuple()) + + return (self.__repair, self.__unpack, self.__delete, self.__script, + self.nzo_id, self.show_dir_name(), {}, + self.__msgid, self.__cat, self.__url, + bytes_left_all, self.__bytes, avg_date, + finished_files, active_files, queued_files, self.__status, self.__priority) + + def get_nzf_by_id(self, nzf_id): + if nzf_id in self.__files_table: + return self.__files_table[nzf_id] + + def set_unpack_info(self, key, msg, set='', unique=False): + ''' + Builds a dictionary containing the stage name (key) and a message + If set is present, it will overwrite any other messages from the set of the same stage + If unique is present, it will only have a single line message + ''' + found = False + # Unique messages allow only one line per stage(key) + if not unique: + if not self.unpack_info.has_key(key): + self.unpack_info[key] = [] + # If set is present, look for previous message from that set and replace + if set: + set = unicoder('[%s]' % set) + for x in xrange(len(self.unpack_info[key])): + if set in self.unpack_info[key][x]: + self.unpack_info[key][x] = msg + found = True + if not found: + self.unpack_info[key].append(msg) + else: + self.unpack_info[key] = [msg] + + def get_unpack_info(self): + return self.unpack_info + + def set_action_line(self, action, msg): + if action and msg: + self.action_line = '%s: %s' % (action, msg) + else: + self.action_line = '' + + def get_action_line(self): + return self.action_line + + def set_fail_msg(self, msg): + self.fail_msg = msg + + def get_fail_msg(self): + return self.fail_msg + + def set_nzo_info(self, key, value): + self.nzo_info[key] = value + + def get_nzo_info(self): + return self.nzo_info + + def set_db_info(self, key, msg): + self.nzo_info[key] = msg + + def get_repair_opts(self): + return self.__repair, self.__unpack, self.__delete + + def get_pp(self): + if self.__repair is None: + return None + else: + return sabnzbd.opts_to_pp(self.__repair, self.__unpack, self.__delete) + + def get_script(self): + return self.__script + + def get_cat(self): + return self.__cat + + def get_future(self): + return self.__url + + def get_md5pack(self, name): + try: + return self.md5packs[name] + except: + return None + + def set_md5pack(self, name, pack): + self.md5packs[name] = pack + + def __build_pos_nzf_table(self, nzf_ids): + pos_nzf_table = {} + for nzf_id in nzf_ids: + if nzf_id in self.__files_table: + nzf = self.__files_table[nzf_id] + pos = self.__files.index(nzf) + pos_nzf_table[pos] = nzf + + return pos_nzf_table + + def __cleanup_nzf_ids(self, nzf_ids): + for nzf_id in nzf_ids[:]: + if nzf_id in self.__files_table: + if self.__files_table[nzf_id] not in self.__files: + nzf_ids.remove(nzf_id) + else: + nzf_ids.remove(nzf_id) + + def __getstate__(self): + odict = self.__dict__.copy() + del odict['_TryList__try_list'] + return odict + + def __setstate__(self, _dict): + self.__dict__.update(_dict) + TryList.__init__(self) + + def __repr__(self): + return "" % self.__filename + +#------------------------------------------------------------------------------- + +def _nzf_get_filename(nzf): + # Return filename, if the filename not set, try the + # the full subject line instead. Can produce non-ideal results + name = nzf.get_filename() + if name: + return name.lower() + else: + return nzf.get_subject().lower() + + +def _nzf_cmp_date(nzf1, nzf2): + # Compare files based on date, but give vol-par files preference + return _nzf_cmp_name(nzf1, nzf2, name=False) + + +def _nzf_cmp_name(nzf1, nzf2, name=True): + # The comparison will sort .par2 files to the top of the queue followed by .rar files, + # they will then be sorted by name. + name1 = _nzf_get_filename(nzf1) + name2 = _nzf_get_filename(nzf2) + + is_par1 = 'vol' in name1 and '.par2' in name1 + is_par2 = 'vol' in name2 and '.par2' in name2 + if is_par1 and not is_par2: + return -1 + if is_par2 and not is_par1: + return 1 + + if name: + # Prioritise .rar files above any other type of file (other than vol-par) + # Useful for nzb streaming + if '.rar' in name1 and not is_par2 and '.rar' not in name2: + return -1 + elif '.rar' in name2 and not is_par1 and '.rar' not in name1: + return 1 + + return cmp(name1, name2) + else: + # Do date comparision + return cmp(nzf1.get_date(), nzf2.get_date()) + +#------------------------------------------------------------------------------- + +################################################################################ +# SplitFileName +# +# Isolate newzbin msgid from filename and remove ".nzb" +# Return (nice-name, msg-id) +################################################################################ +def SplitFileName(name): + name = name.strip() + if name.find('://') < 0: + m = RE_NEWZBIN.match(name) + if (m): + return m.group(2).rstrip('.').strip(), m.group(1) + m = RE_NORMAL.match(name) + if (m): + return m.group(1).rstrip('.').strip(), "" + else: + return name.strip(), "" + return "", "" + else: + return name.strip(), "" + + +def format_time_string(seconds, days=0): + + try: + seconds = int(seconds) + except: + seconds = 0 + + completestr = '' + if days: + completestr += '%s day%s ' % (days, s_returner(days)) + if (seconds/3600) >= 1: + completestr += '%s hour%s ' % (seconds/3600, s_returner((seconds/3600))) + seconds -= (seconds/3600)*3600 + if (seconds/60) >= 1: + completestr += '%s minute%s ' % (seconds/60, s_returner((seconds/60))) + seconds -= (seconds/60)*60 + if seconds > 0: + completestr += '%s second%s ' % (seconds, s_returner(seconds)) + + return completestr.strip() + +def s_returner(value): + if value > 1: + return 's' + else: + return '' + + +RE_PASSWORD1 = re.compile(r'([^/\\]+)[/\\](.+)') +RE_PASSWORD2 = re.compile(r'(.+){{([^{}]+)}}$') +def scan_password(name): + """ Get password (if any) from the title + """ + if 'http://' in name or 'https://' in name: + return name, None + + m = RE_PASSWORD1.search(name) + if not m: + m = RE_PASSWORD2.search(name) + if m: + return m.group(1).strip('. '), m.group(2).strip() + else: + return name.strip('. '), None diff --git a/sabnzbd/postproc.py b/sabnzbd/postproc.py new file mode 100644 index 0000000..9ca8503 --- /dev/null +++ b/sabnzbd/postproc.py @@ -0,0 +1,627 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.postproc - threaded post-processing of jobs +""" +#------------------------------------------------------------------------------ + +import os +import Queue +import logging +import sabnzbd +import urllib +import time +import re + +from sabnzbd.newsunpack import unpack_magic, par2_repair, external_processing +from threading import Thread +from sabnzbd.misc import real_path, get_unique_path, create_dirs, move_to_path, \ + get_unique_filename, \ + on_cleanup_list, renamer, remove_dir +from sabnzbd.tvsort import Sorter +from sabnzbd.constants import TOP_PRIORITY, POSTPROC_QUEUE_FILE_NAME, \ + POSTPROC_QUEUE_VERSION, sample_match +from sabnzbd.codecs import TRANS, unicoder +from sabnzbd.newzbin import Bookmarks +import sabnzbd.emailer as emailer +import sabnzbd.dirscanner as dirscanner +import sabnzbd.downloader +import sabnzbd.config as config +import sabnzbd.cfg as cfg +import sabnzbd.nzbqueue +import sabnzbd.database as database +from sabnzbd.utils import osx +from sabnzbd.lang import T, Ta + + +#------------------------------------------------------------------------------ +class PostProcessor(Thread): + do = None # Link to instance of the thread + + def __init__ (self, queue=None, history_queue=None): + Thread.__init__(self) + + # This history queue is simply used to log what active items to display in the web_ui + if history_queue: + self.history_queue = history_queue + else: + self.load() + + if self.history_queue is None: + self.history_queue = [] + + if queue: + self.queue = queue + else: + self.queue = Queue.Queue() + for nzo in self.history_queue: + self.process(nzo) + self.__stop = False + self.__paused = False + PostProcessor.do = self + + self.__busy = False # True while a job is being processed + + def save(self): + """ Save postproc queue """ + logging.info("Saving postproc queue") + sabnzbd.save_data((POSTPROC_QUEUE_VERSION, self.history_queue), POSTPROC_QUEUE_FILE_NAME) + + def load(self): + """ Save postproc queue """ + logging.info("Loading postproc queue") + data = sabnzbd.load_data(POSTPROC_QUEUE_FILE_NAME) + try: + version, history_queue = data + if POSTPROC_QUEUE_VERSION != version: + logging.warning(Ta('warn-badPPQueue@2'), POSTPROC_QUEUE_VERSION, version) + if isinstance(history_queue, list): + self.history_queue = history_queue + return True + else: + self.history_queue = [] + return False + except: + self.history_queue = [] + return False + + + def process(self, nzo): + if nzo not in self.history_queue: + self.history_queue.append(nzo) + self.queue.put(nzo) + self.save() + + def remove(self, nzo): + try: + self.history_queue.remove(nzo) + except: + nzo_id = getattr(nzo, 'nzo_id', 'unknown id') + logging.error(Ta('error-ppDelNzo'), nzo_id) + self.save() + + def stop(self): + self.queue.put(None) + self.save() + self.__stop = True + + def empty(self): + return self.queue.empty() and not self.__busy + + def get_queue(self): + return self.history_queue + + def pause(self): + self.__paused = True + + def resume(self): + self.__paused = False + + def status(self): + return self.__paused + + def run(self): + while 1: + self.__busy = False + if self.queue.empty(): HandleEmptyQueue() + + while (not self.__stop) and self.__paused: + time.sleep(5) + + ## Get a job from the queue, quit on empty job + nzo = self.queue.get() + if not nzo: break + + ## Pause downloader, if users wants that + if cfg.pause_on_post_processing(): + sabnzbd.downloader.idle_downloader() + + self.__busy = True + start = time.time() + + folder_rename = cfg.folder_rename() + + # keep track of if par2 fails + parResult = True + # keep track of any unpacking errors + unpackError = False + nzb_list = [] + # These need to be initialised incase of a crash + workdir_complete = '' + base_dir = '' + rel_path = '' + postproc_time = 0 + script_log = '' + script_line = '' + + ## Get the job flags + flagRepair, flagUnpack, flagDelete = nzo.get_repair_opts() + pp = sabnzbd.opts_to_pp(flagRepair, flagUnpack, flagDelete) + script = nzo.get_script() + group = nzo.get_group() + cat = nzo.get_cat() + priority = nzo.get_priority() + + ## Collect the par files + parTable = nzo.get_partable() + repairSets = parTable.keys() + + # Get the NZB name + filename = nzo.get_dirname() + msgid = nzo.get_msgid() + + try: + + # Get the folder containing the download result + workdir = os.path.join(cfg.download_dir.get_path(), nzo.get_dirname()) + + # if the directory has not been made, no files were assembled + if not os.path.exists(workdir): + emsg = T('warn-OutRetention') + nzo.set_fail_msg(emsg) + nzo.set_status('Failed') + # do not run unpacking or parity verification + flagRepair = flagUnpack = parResult = False + unpackError = True + + logging.info('Starting PostProcessing on %s' + \ + ' => Repair:%s, Unpack:%s, Delete:%s, Script:%s', + filename, flagRepair, flagUnpack, flagDelete, script) + osx.sendGrowlMsg("Post-processing",filename,osx.NOTIFICATION['pp']) + ## Run Stage 1: Repair + if flagRepair: + logging.info('Par2 check starting on %s', filename) + reAdd = False + if not repairSets: + logging.info("No par2 sets for %s", filename) + nzo.set_unpack_info('Repair',T('msg-noParSets@1') % unicoder(filename)) + + for _set in repairSets: + logging.info("Running repair on set %s", _set) + parfile_nzf = parTable[_set] + need_reAdd, res = par2_repair(parfile_nzf, nzo, workdir, _set) + if need_reAdd: + reAdd = True + else: + parResult = parResult and res + + if reAdd: + logging.info('Readded %s to queue', filename) + sabnzbd.QUEUECOMPLETEACTION_GO = False + nzo.set_priority(TOP_PRIORITY) + sabnzbd.nzbqueue.add_nzo(nzo) + sabnzbd.downloader.unidle_downloader() + ## Break out, further downloading needed + continue + + logging.info('Par2 check finished on %s', filename) + + mailResult = parResult + jobResult = 1 + if parResult: jobResult = 0 + + ## Check if user allows unsafe post-processing + if not cfg.safe_postproc(): + parResult = True + + ## Determine class directory + if config.get_categories(): + complete_dir = Cat2Dir(cat, cfg.complete_dir.get_path()) + elif cfg.create_group_folders(): + complete_dir = addPrefixes(cfg.complete_dir.get_path(), nzo) + complete_dir = create_dirs(complete_dir) + else: + complete_dir = cfg.complete_dir.get_path() + base_dir = os.path.normpath(complete_dir) + + ## Determine destination directory + dirname = nzo.get_original_dirname() + nzo.set_dirname(dirname) + + ## TV/Movie/Date Renaming code part 1 - detect and construct paths + file_sorter = Sorter(cat) + complete_dir = file_sorter.detect(dirname, complete_dir) + + workdir_complete = get_unique_path(os.path.join(complete_dir, dirname), create_dir=True) + if folder_rename: + tmp_workdir_complete = prefix(workdir_complete, '_UNPACK_') + try: + renamer(workdir_complete, tmp_workdir_complete) + except: + pass # On failure, just use the original name + else: + tmp_workdir_complete = workdir_complete + + newfiles = [] + ## Run Stage 2: Unpack + if flagUnpack: + if parResult: + #set the current nzo status to "Extracting...". Used in History + nzo.set_status('Extracting') + logging.info("Running unpack_magic on %s", filename) + unpackError, newfiles = unpack_magic(nzo, workdir, tmp_workdir_complete, flagDelete, (), (), (), ()) + logging.info("unpack_magic finished on %s", filename) + else: + nzo.set_unpack_info('Unpack',T('msg-noPostProc')) + + ## Move any (left-over) files to destination + nzo.set_status('Moving') + nzo.set_action_line(T('msg-moving'), '...') + for root, dirs, files in os.walk(workdir): + for _file in files: + path = os.path.join(root, _file) + new_path = path.replace(workdir, tmp_workdir_complete) + new_path = get_unique_filename(new_path) + move_to_path(path, new_path, unique=False) + + ## Remove download folder + try: + if os.path.exists(workdir): + remove_dir(workdir) + except: + logging.error(Ta('error-ppDelWorkdir@1'), workdir) + logging.debug("Traceback: ", exc_info = True) + + + ## Set permissions right + if not sabnzbd.WIN32: + perm_script(tmp_workdir_complete, cfg.umask()) + + if parResult: + ## Remove files matching the cleanup list + CleanUpList(tmp_workdir_complete, True) + + ## Check if this is an NZB-only download, if so redirect to queue + nzb_list = NzbRedirect(tmp_workdir_complete, pp, script, cat, priority=priority) + if nzb_list: + nzo.set_unpack_info('Download', T('msg-sentToQ@1') % unicoder(nzb_list)) + try: + remove_dir(tmp_workdir_complete) + except: + pass + else: + CleanUpList(tmp_workdir_complete, False) + + if not nzb_list: + ## Give destination its final name + if folder_rename: + if unpackError or not parResult: + workdir_complete = tmp_workdir_complete.replace('_UNPACK_', '_FAILED_') + workdir_complete = get_unique_path(workdir_complete, n=0, create_dir=False) + try: + renamer(tmp_workdir_complete, workdir_complete) + nzo.set_dirname(os.path.basename(workdir_complete)) + except: + logging.error(Ta('error-ppRename@2'), tmp_workdir_complete, workdir_complete) + logging.debug("Traceback: ", exc_info = True) + + if unpackError: jobResult = jobResult + 2 + + if cfg.ignore_samples() > 0: + remove_samples(workdir_complete) + + ## TV/Movie/Date Renaming code part 2 - rename and move files to parent folder + if not unpackError or parResult: + if newfiles and file_sorter.is_sortfile(): + file_sorter.rename(newfiles, workdir_complete) + workdir_complete = file_sorter.move(workdir_complete) + + ## Run the user script + fname = "" + if parResult and (not nzb_list) and cfg.script_dir.get_path() and script and script!='None' and script!='Default': + #set the current nzo status to "Ext Script...". Used in History + script_path = os.path.join(cfg.script_dir.get_path(), script) + if os.path.exists(script_path): + nzo.set_status('Running') + nzo.set_action_line(T('msg-running'), unicoder(script)) + nzo.set_unpack_info('Script', T('msg-runScript@1') % unicoder(script), unique=True) + script_log, script_ret = external_processing(script_path, workdir_complete, nzo.get_filename(), msgid, dirname, cat, group, jobResult) + script_line = get_last_line(script_log) + if script_log: + fname = nzo.get_nzo_id() + if script_line: + nzo.set_unpack_info('Script', script_line, unique=True) + else: + nzo.set_unpack_info('Script', T('msg-ranScript@1') % unicoder(script), unique=True) + else: + script = "" + script_line = "" + script_ret = 0 + + ## Email the results + if (not nzb_list) and cfg.email_endjob(): + if (cfg.email_endjob() == 1) or (cfg.email_endjob() == 2 and (unpackError or not parResult)): + emailer.endjob(dirname, msgid, cat, mailResult, workdir_complete, nzo.get_bytes_downloaded(), + nzo.get_unpack_info(), script, TRANS(script_log), script_ret) + + if fname: + # Can do this only now, otherwise it would show up in the email + if script_ret: + script_ret = 'Exit(%s) ' % script_ret + else: + script_ret = '' + if script_line: + nzo.set_unpack_info('Script','%s%s (%s)' % (script_ret, script_line, urllib.quote(fname), T('link-more')), unique=True) + else: + nzo.set_unpack_info('Script','%s%s' % (script_ret, urllib.quote(fname), T('link-viewSc')), unique=True) + + ## Remove newzbin bookmark, if any + if msgid: + Bookmarks.do.del_bookmark(msgid) + + ## Show final status in history + if parResult and not unpackError: + osx.sendGrowlMsg("Download Completed",filename,osx.NOTIFICATION['complete']) + nzo.set_status('Completed') + else: + osx.sendGrowlMsg("Download Failed",filename,osx.NOTIFICATION['complete']) + nzo.set_status('Failed') + + except: + #Cause a crash when reparing par2 sets with accents + #try: + logging.error(Ta('error-ppFailed@1'), filename) + #except: + # pass + logging.debug("Traceback: ", exc_info = True) + nzo.set_fail_msg(T('warn-PostCrash')) + osx.sendGrowlMsg("Download Failed",filename,osx.NOTIFICATION['complete']) + nzo.set_status('Failed') + + # If the folder only contains one file OR folder, have that as the path + # Be aware that series/generic/date sorting may move a single file into a folder containing other files + workdir_complete = one_file_or_folder(workdir_complete) + workdir_complete = os.path.normpath(workdir_complete) + + # Create a relative path removing the complete_dir folder or category folder + rel_path = os.path.normpath(workdir_complete).replace(base_dir, '') + + # Log the overall time taken for postprocessing + postproc_time = int(time.time() - start) + + # Create the history DB instance + history_db = database.get_history_handle() + # Add the nzo to the database. Only the path, script and time taken is passed + # Other information is obtained from the nzo + history_db.add_history_db(nzo, workdir_complete, rel_path, postproc_time, script_log, script_line) + # The connection is only used once, so close it here + history_db.close() + + ## Clean up the NZO + try: + logging.info('Cleaning up %s', filename) + sabnzbd.nzbqueue.cleanup_nzo(nzo) + except: + logging.error(Ta('error-ppCleanup@1'), nzo.get_dirname()) + logging.debug("Traceback: ", exc_info = True) + + # Remove the nzo from the history_queue list + # This list is simply used for the creation of the history in interface.py + self.remove(nzo) + + ## Allow download to proceed + sabnzbd.downloader.unidle_downloader() +#end post-processor + + +#------------------------------------------------------------------------------ + +def MakeLogFile(name, content): + """ Write 'content' to a logfile named 'name'.log """ + name = name.replace('.nzb', '.log') + path = os.path.dirname(sabnzbd.LOGFILE) + path = os.path.join(path, name) + try: + f = open(path, "w") + except: + logging.error(Ta('error-ppLogFile@1'), path) + logging.debug("Traceback: ", exc_info = True) + return "a" + f.write(content) + f.close() + return name + + +def perm_script(wdir, umask): + """ Give folder tree and its files their proper permissions """ + from os.path import join + + try: + # Make sure that user R is on + umask = int(umask, 8) | int('0400', 8) + report_errors = True + except ValueError: + # No or no valid permissions + # Use the effective permissions of the session + # Don't report errors (because the system might not support it) + umask = int('0777', 8) & (sabnzbd.ORG_UMASK ^ int('0777', 8)) + report_errors = False + + # Remove X bits for files + umask_file = umask & int('7666', 8) + + # Parse the dir/file tree and set permissions + for root, dirs, files in os.walk(wdir): + try: + os.chmod(root, umask) + except: + if report_errors: + logging.error(Ta('error-ppPermissions@1'), root) + logging.debug("Traceback: ", exc_info = True) + for name in files: + try: + os.chmod(join(root, name), umask_file) + except: + if report_errors: + logging.error(Ta('error-ppPermissions@1'), join(root, name)) + logging.debug("Traceback: ", exc_info = True) + + +def Cat2Dir(cat, defdir): + """ Lookup destination dir for category """ + ddir = defdir + if cat: + item = config.get_config('categories', cat.lower()) + if item: + ddir = item.dir() + else: + return defdir + ddir = real_path(cfg.complete_dir.get_path(), ddir) + ddir = create_dirs(ddir) + if not ddir: + ddir = defdir + return ddir + + + + +def addPrefixes(path,nzo): + dirprefix = nzo.get_dirprefix() + for _dir in dirprefix: + if not _dir: + continue + if not path: + break + basepath = os.path.basename(os.path.abspath(path)) + if _dir != basepath.lower(): + path = os.path.join(path, _dir) + return path + + +def HandleEmptyQueue(): + """ Check if empty queue calls for action """ + sabnzbd.save_state() + + if sabnzbd.QUEUECOMPLETEACTION_GO: + logging.info("Queue has finished, launching: %s (%s)", \ + sabnzbd.QUEUECOMPLETEACTION, sabnzbd.QUEUECOMPLETEARG) + if sabnzbd.QUEUECOMPLETEARG: + sabnzbd.QUEUECOMPLETEACTION(sabnzbd.QUEUECOMPLETEARG) + else: + Thread(target=sabnzbd.QUEUECOMPLETEACTION).start() + + sabnzbd.QUEUECOMPLETEACTION = None + sabnzbd.QUEUECOMPLETEARG = None + sabnzbd.QUEUECOMPLETEACTION_GO = False + + +def CleanUpList(wdir, skip_nzb): + """ Remove all files matching the cleanup list """ + + if cfg.cleanup_list(): + try: + files = os.listdir(wdir) + except: + files = () + for _file in files: + if on_cleanup_list(_file, skip_nzb): + path = os.path.join(wdir, _file) + try: + logging.info("Removing unwanted file %s", path) + os.remove(path) + except: + logging.error(Ta('error-ppDelFailed@1'), path) + logging.debug("Traceback: ", exc_info = True) + + +def prefix(path, pre): + """ Apply prefix to last part of path """ + p, d = os.path.split(path) + return os.path.join(p, pre + d) + + +def NzbRedirect(wdir, pp, script, cat, priority): + """ Check if this job contains only NZB files, + if so send to queue and remove if on CleanList + Returns list of processed NZB's + """ + list = [] + + try: + files = os.listdir(wdir) + except: + files = [] + + for file in files: + if os.path.splitext(file)[1].lower() != '.nzb': + return list + + # Process all NZB files + keep = not on_cleanup_list("x.nzb", False) + for file in files: + if file.lower().endswith('.nzb'): + dirscanner.ProcessSingleFile(file, os.path.join(wdir, file), pp, script, cat, priority=priority, keep=keep) + list.append(file) + + return list + + +def one_file_or_folder(dir): + """ If the dir only contains one file or folder, join that file/folder onto the path """ + if os.path.exists(dir) and os.path.isdir(dir): + cont = os.listdir(dir) + if len(cont) == 1: + dir = os.path.join(dir, cont[0]) + dir = one_file_or_folder(dir) + return dir + + +def get_last_line(txt): + """ Return last non-empty line of a text, trim to 150 max """ + lines = txt.split('\n') + n = len(lines) - 1 + while n >= 0 and not lines[n].strip('\r\t '): + n = n - 1 + + line = lines[n].strip('\r\t ') + if len(line) >= 150: + line = line[:147] + '...' + return line + +def remove_samples(path): + RE_SAMPLE = re.compile(sample_match, re.I) + for root, dirs, files in os.walk(path): + for _file in files: + if RE_SAMPLE.search(_file): + path = os.path.join(root, _file) + try: + logging.info("Removing unwanted sample file %s", path) + os.remove(path) + except: + logging.error(Ta('error-ppDelFailed@1'), path) + logging.debug("Traceback: ", exc_info = True) diff --git a/sabnzbd/rss.py b/sabnzbd/rss.py new file mode 100644 index 0000000..e91f33f --- /dev/null +++ b/sabnzbd/rss.py @@ -0,0 +1,513 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.rss - rss client functionality +""" + +import re +import logging +import time +import threading + +import sabnzbd +from sabnzbd.constants import * +from sabnzbd.decorators import synchronized +import sabnzbd.config as config +import sabnzbd.cfg as cfg +from sabnzbd.misc import cat_convert, sanitize_foldername, wildcard_to_re +import sabnzbd.emailer as emailer +from sabnzbd.codecs import latin1, unicoder + +import sabnzbd.utils.feedparser as feedparser +from sabnzbd.lang import T, Ta + +__RSS = None # Global pointer to RSS-scanner instance + + +################################################################################ +# Wrapper functions # +################################################################################ + +def init(): + global __RSS + __RSS = RSSQueue() + +def stop(): + global __RSS + if __RSS: + __RSS.stop() + try: + __RSS.join() + except: + pass + +def del_feed(feed): + global __RSS + if __RSS: __RSS.delete(feed) + +def run_feed(feed, download, ignoreFirst=False, force=False): + global __RSS + if __RSS: return __RSS.run_feed(feed, download, ignoreFirst, force=force) + +def show_result(feed): + global __RSS + if __RSS: return __RSS.show_result(feed) + +def flag_downloaded(feed, id): + global __RSS + if __RSS: __RSS.flag_downloaded(feed, id) + +def run_method(): + global __RSS + if __RSS: + return __RSS.run() + else: + return None + +def save(): + global __RSS + if __RSS: __RSS.save() + +def clear_feed(feed): + global __RSS + if __RSS: __RSS.clear_feed(feed) + +################################################################################ + +def notdefault(item): + """ Return True if not None/"None"/"Default"/"" + """ + return bool(item) and item.lower() not in ('default', 'none') + + +def ListUris(): + """ Return list of all RSS uris """ + uris = [] + for uri in config.get_rss(): + uris.append(uri) + return uris + +def convert_filter(text): + """ Return compiled regex. + If string starts with re: it's a real regex + else quote all regex specials, replace '*' by '.*' + """ + if text[:3].lower() == 're:': + txt = text[3:] + else: + txt = wildcard_to_re(text) + try: + return re.compile(txt, re.I) + except: + logging.error(Ta('error-rssRegex@1'), text) + return None + + +LOCK = threading.RLock() +class RSSQueue: + def __init__(self): + self.jobs = {} + try: + feeds = sabnzbd.load_data(RSS_FILE_NAME, remove = False) + if type(feeds) == type({}): + for feed in feeds: + self.jobs[feed] = {} + for link in feeds[feed]: + data = feeds[feed][link] + if type(data) == type([]): + # Convert previous list-based store to dictionary + new = {} + new['status'] = data[0] + new['title'] = data[1] + new['url'] = data[2] + new['cat'] = data[3] + new['pp'] = data[4] + new['script'] = data[5] + new['time'] = data[6] + new['prio'] = str(NORMAL_PRIORITY) + self.jobs[feed][link] = new + else: + self.jobs[feed][link] = feeds[feed][link] + except IOError: + pass + # jobs is a NAME-indexed dictionary + # Each element is link-indexed dictionary + # Each element is another dictionary: + # status : 'D', 'G', 'B', 'X' (downloaded, good-match, bad-match, obsolete) + # '*' added means: from the initial batch + # title : Title + # url : URL or MsgId + # cat : category + # pp : pp + # script : script + # prio : priority + # time : timestamp (used for time-based clean-up) + # order : order in the RSS feed + + self.shutdown = False + self.__running = False + + def stop(self): + self.shutdown = True + + @synchronized(LOCK) + def run_feed(self, feed=None, download=False, ignoreFirst=False, force=False): + """ Run the query for one URI and apply filters """ + self.shutdown = False + + def dup_title(title): + title = title.lower() + for fd in self.jobs: + for lk in self.jobs[fd]: + item = self.jobs[fd][lk] + if item.get('status', ' ')[0] == 'D' and \ + item.get('title', '').lower() == title: + return True + return False + + + if not feed: + return 'No such feed' + + newlinks = [] + new_downloads = [] + + # Preparations, get options + try: + feeds = config.get_rss()[feed] + except KeyError: + logging.error(Ta('error-rssBadFeed@1'), feed) + logging.debug("Traceback: ", exc_info = True) + return T('error-rssBadFeed@1') % feed + + uri = feeds.uri() + defCat = feeds.cat() + if defCat == "": + defCat = None + defPP = feeds.pp() + defScript = feeds.script() + defPriority = feeds.priority() + + # Preparations, convert filters to regex's + regexes = [] + reTypes = [] + reCats = [] + rePPs = [] + reScripts = [] + for filter in feeds.filters(): + reCat = filter[0] + if not reCat: + reCat = None + reCats.append(reCat) + rePPs.append(filter[1]) + reScripts.append(filter[2]) + reTypes.append(filter[3]) + regexes.append(convert_filter(filter[4])) + regcount = len(regexes) + + # Set first if this is the very first scan of this URI + first = feed not in self.jobs + if first: + self.jobs[feed] = {} + + jobs = self.jobs[feed] + + first = first and ignoreFirst + + # Add sabnzbd's custom User Agent + feedparser.USER_AGENT = 'SABnzbd+/%s' % sabnzbd.version.__version__ + + # Check for nzbs.org + if 'nzbs.org/' in uri and not ('&dl=1' in uri): + uri += '&dl=1' + + # Read the RSS feed + logging.debug("Running feedparser on %s", uri) + d = feedparser.parse(uri.replace('feed://', 'http://')) + logging.debug("Done parsing %s", uri) + if not d: + logging.info(Ta('warn-failRSS@1'), uri) + return T('warn-failRSS@1') % uri + + entries = d.get('entries') + if 'bozo_exception' in d and not entries: + logging.info(Ta('warn-failRSS@2'), uri, str(d['bozo_exception'])) + return T('warn-failRSS@2') % (uri, str(d['bozo_exception'])) + if not entries: + logging.info('RSS Feed was empty: %s', uri) + return 'RSS Feed was empty' + + order = 0 + # Filter out valid new links + for entry in entries: + if self.shutdown: return + + try: + link, category = _get_link(uri, entry) + except (AttributeError, IndexError): + link = None + category = '' + logging.error('Incompatible feed %s', uri) + logging.debug("Traceback: ", exc_info = True) + return 'Incompatible feed' + + if link: + # Make sure there are no spaces in the URL + link = link.replace(' ','') + + # Make sure only latin-1 encodable characters occur + atitle = latin1(entry.title) + title = unicoder(atitle) + + newlinks.append(link) + + if cfg.no_dupes() and dup_title(title): + logging.info("Ignoring duplicate job %s", atitle) + continue + + myCat = defCat + myPP = '' + myScript = '' + #myPriority = 0 + + if (link not in jobs) or (jobs[link]['status'] in ('G', 'B', 'G*', 'B*')): + # Match this title against all filters + logging.debug('Trying title %s', atitle) + result = False + for n in xrange(regcount): + if category and reTypes[n]=='C': + found = re.search(regexes[n], category) + if not found: + logging.debug("Filter rejected on rule %d", n) + result = False + break + + found = re.search(regexes[n], title) + if reTypes[n]=='M' and not found: + logging.debug("Filter rejected on rule %d", n) + result = False + break + if found and reTypes[n]=='A': + logging.debug("Filter matched on rule %d", n) + result = True + if notdefault(reCats[n]): + myCat = reCats[n] + elif category: + myCat = cat_convert(category) + else: + myCat = defCat + if notdefault(rePPs[n]): + myPP = rePPs[n] + elif not (reCats[n] or category): + myPP = defPP + if notdefault(reScripts[n]): + myScript = reScripts[n] + elif not (notdefault(reCats[n]) or category): + myScript = defScript + #elif not rePriority[n]: + #myScript = defScript + break + if found and reTypes[n]=='R': + logging.debug("Filter rejected on rule %d", n) + result = False + break + + act = download and not first + if link in jobs: + act = act and not jobs[link]['status'].endswith('*') + act = act or force + star = first or jobs[link]['status'].endswith('*') + else: + star = first + if result: + _HandleLink(jobs, link, title, 'G', myCat, myPP, myScript, + act, star, order, priority=defPriority) + if act: + new_downloads.append(title) + else: + _HandleLink(jobs, link, title, 'B', defCat, defPP, defScript, + False, star, order, priority=defPriority) + order += 1 + + # Send email if wanted and not "forced" + if new_downloads and cfg.email_rss() and not force: + emailer.rss_mail(feed, new_downloads) + + # If links are in table for more than 4 weeks, remove + # Flag old D/B links as obsolete, so that they don't show up in Preview + now = time.time() + limit = now - 4*7*24*3600 + olds = jobs.keys() + for old in olds: + if old not in newlinks: + if jobs[old]['status'][0] in ('G', 'B'): + jobs[old]['status'] = 'X' + try: + tm = float(jobs[old]['time']) + except: + # Fix missing timestamp in older RSS_DATA.SAB file + jobs[old]['time'] = now + tm = now + if tm < limit: + logging.debug("Purging link %s", old) + del jobs[old] + + return '' + + def run(self): + """ Run all the URI's and filters """ + # Protect against second scheduler call before current + # run is completed. Cannot use LOCK, because run_feed + # already uses the LOCK. + + if not (self.__running or sabnzbd.PAUSED_ALL): + self.__running = True + active = False + feeds = config.get_rss() + for feed in feeds: + if feeds[feed].enable(): + active = True + self.run_feed(feed, download=True, ignoreFirst=True) + # Wait 30 seconds, else sites may get irritated + for x in xrange(30): + if self.shutdown: + self.__running = False + return + else: + time.sleep(1.0) + if active: + self.save() + self.__running = False + + + @synchronized(LOCK) + def show_result(self, feed): + if feed in self.jobs: + try: + return self.jobs[feed] + except: + return {} + else: + return {} + + @synchronized(LOCK) + def save(self): + sabnzbd.save_data(self.jobs, sabnzbd.RSS_FILE_NAME) + + @synchronized(LOCK) + def delete(self, feed): + if feed in self.jobs: + del self.jobs[feed] + + @synchronized(LOCK) + def flag_downloaded(self, feed, id): + if feed in self.jobs: + lst = self.jobs[feed] + for link in lst: + if lst[link].get('url', '') == id: + lst[link]['status'] = 'D' + + @synchronized(LOCK) + def clear_feed(self, feed): + # Remove any previous references to this feed name, and start fresh + if feed in self.jobs: + del self.jobs[feed] + + +RE_NEWZBIN = re.compile(r'(newz)(bin|xxx).com/browse/post/(\d+)', re.I) + +def _HandleLink(jobs, link, title, flag, cat, pp, script, download, star, order, priority=NORMAL_PRIORITY): + """ Process one link """ + if script=='': script = None + if pp=='': pp = None + + jobs[link] = {} + jobs[link]['order'] = order + nzbname = sanitize_foldername(title) + m = RE_NEWZBIN.search(link) + if m and m.group(1).lower() == 'newz' and m.group(2) and m.group(3): + if download: + jobs[link]['status'] = 'D' + jobs[link]['title'] = title + logging.info("Adding %s (%s) to queue", m.group(3), title) + sabnzbd.add_msgid(m.group(3), pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname) + else: + if star: + jobs[link]['status'] = flag + '*' + else: + jobs[link]['status'] = flag + jobs[link]['title'] = title + jobs[link]['url'] = m.group(3) + jobs[link]['cat'] = cat + jobs[link]['pp'] = pp + jobs[link]['script'] = script + jobs[link]['prio'] = str(priority) + else: + if download: + jobs[link]['status'] = 'D' + jobs[link]['title'] = title + logging.info("Adding %s (%s) to queue", link, title) + sabnzbd.add_url(link, pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname) + else: + if star: + jobs[link]['status'] = flag + '*' + else: + jobs[link]['status'] = flag + jobs[link]['title'] = title + jobs[link]['url'] = link + jobs[link]['cat'] = cat + jobs[link]['pp'] = pp + jobs[link]['script'] = script + jobs[link]['prio'] = str(priority) + + jobs[link]['time'] = time.time() + + +def _get_link(uri, entry): + """ Retrieve the post link from this entry + Returns (link, category) + """ + link = None + category = '' + uri = uri.lower() + if 'newzbin.com' in uri or 'newzxxx.com'in uri: + link = entry.link + if not (link and '/post/' in link.lower()): + # Use alternative link + link = entry.links[0].href + elif 'nzbindex.nl' in uri or 'nzbindex.com' in uri or 'animeusenet.org' in uri: + link = entry.enclosures[0]['href'] + elif 'feed.nzbclub.com' in uri: + link = entry.link + if link: + link = link.replace('nzb_view.aspx', 'nzb_download.aspx') + elif not link: + # Try standard link first + link = entry.link + if not link: + link = entry.links[0].href + + if link and 'http' in link.lower(): + try: + category = entry.category + except: + category = '' + return link, category + else: + logging.warning(Ta('warn-emptyRSS@1'), link) + return None, '' diff --git a/sabnzbd/scheduler.py b/sabnzbd/scheduler.py new file mode 100644 index 0000000..3bd676a --- /dev/null +++ b/sabnzbd/scheduler.py @@ -0,0 +1,406 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.scheduler - Event Scheduler +""" +#------------------------------------------------------------------------------ + + +import random +import logging +import time + +import sabnzbd.utils.kronos as kronos +import sabnzbd.rss as rss +from sabnzbd.newzbin import Bookmarks +import sabnzbd.downloader +import sabnzbd.misc +import sabnzbd.config as config +import sabnzbd.cfg as cfg +from sabnzbd.postproc import PostProcessor +from sabnzbd.lang import Ta + + +__SCHED = None # Global pointer to Scheduler instance + +RSSTASK_MINUTE = random.randint(0, 59) +SCHEDULE_GUARD_FLAG = False + + +def schedule_guard(): + """ Set flag for scheduler restart """ + global SCHEDULE_GUARD_FLAG + SCHEDULE_GUARD_FLAG = True + +def pp_pause(): + PostProcessor.do.pause() + +def pp_resume(): + PostProcessor.do.resume() + + +def init(): + """ Create the scheduler and set all required events + """ + global __SCHED + + reset_guardian() + __SCHED = kronos.ThreadedScheduler() + + for schedule in cfg.schedules(): + arguments = [] + argument_list = None + try: + m, h, d, action_name = schedule.split() + except: + m, h, d, action_name, argument_list = schedule.split(None, 4) + if argument_list: + arguments = argument_list.split() + + action_name = action_name.lower() + try: + m = int(m) + h = int(h) + except: + logging.warning(Ta('warn-badSched@3'), action_name, m, h) + continue + + if d.isdigit(): + d = [int(d)] + else: + d = range(1, 8) + + if action_name == 'resume': + action = scheduled_resume + arguments = [] + elif action_name == 'pause': + action = sabnzbd.downloader.pause_downloader + arguments = [] + elif action_name == 'pause_all': + action = sabnzbd.pause_all + arguments = [] + elif action_name == 'shutdown': + action = sabnzbd.shutdown_program + arguments = [] + elif action_name == 'restart': + action = sabnzbd.restart_program + arguments = [] + elif action_name == 'pause_post': + action = pp_pause + elif action_name == 'resume_post': + action = pp_resume + elif action_name == 'speedlimit' and arguments != []: + action = sabnzbd.downloader.limit_speed + elif action_name == 'enable_server' and arguments != []: + action = sabnzbd.enable_server + elif action_name == 'disable_server' and arguments != []: + action = sabnzbd.disable_server + else: + logging.warning(Ta('warn-badSchedAction@1'), action_name) + continue + + logging.debug("scheduling %s(%s) on days %s at %s:%s", action_name, arguments, d, h, m) + + __SCHED.add_daytime_task(action, action_name, d, None, (h, m), + kronos.method.sequential, arguments, None) + + # Set Guardian interval to 30 seconds + __SCHED.add_interval_task(sched_guardian, "Guardian", 15, 30, + kronos.method.sequential, None, None) + + # Set RSS check interval + interval = cfg.rss_rate() + delay = random.randint(0, interval-1) + logging.debug("Scheduling RSS interval task every %s min (delay=%s)", interval, delay) + __SCHED.add_interval_task(rss.run_method, "RSS", delay*60, interval*60, + kronos.method.sequential, None, None) + __SCHED.add_single_task(rss.run_method, 'RSS', 15, kronos.method.sequential, None, None) + + if cfg.version_check(): + # Check for new release, once per week on random time + m = random.randint(0, 59) + h = random.randint(0, 23) + d = (random.randint(1, 7), ) + + logging.debug("Scheduling VersionCheck on day %s at %s:%s", d[0], h, m) + __SCHED.add_daytime_task(sabnzbd.misc.check_latest_version, 'VerCheck', d, None, (h, m), + kronos.method.sequential, [], None) + + + if cfg.newzbin_bookmarks(): + interval = cfg.bookmark_rate() + delay = random.randint(0, interval-1) + logging.debug("Scheduling Bookmark interval task every %s min (delay=%s)", interval, delay) + __SCHED.add_interval_task(Bookmarks.do.run, 'Bookmarks', delay*60, interval*60, + kronos.method.sequential, None, None) + __SCHED.add_single_task(Bookmarks.do.run, 'Bookmarks', 20, kronos.method.sequential, None, None) + + + # Subscribe to special schedule changes + cfg.newzbin_bookmarks.callback(schedule_guard) + cfg.bookmark_rate.callback(schedule_guard) + cfg.rss_rate.callback(schedule_guard) + + +def start(): + """ Start the scheduler + """ + global __SCHED + if __SCHED: + logging.debug('Starting scheduler') + __SCHED.start() + + +def restart(force=False): + """ Stop and start scheduler + """ + global __PARMS, SCHEDULE_GUARD_FLAG + + if force: + SCHEDULE_GUARD_FLAG = True + else: + if SCHEDULE_GUARD_FLAG: + SCHEDULE_GUARD_FLAG = False + stop() + + analyse(sabnzbd.downloader.paused()) + + init() + start() + + +def stop(): + """ Stop the scheduler, destroy instance + """ + global __SCHED + if __SCHED: + logging.debug('Stopping scheduler') + __SCHED.stop() + del __SCHED + __SCHED = None + + +def abort(): + """ Emergency stop, just set the running attribute false + """ + global __SCHED + if __SCHED: + logging.debug('Terminating scheduler') + __SCHED.running = False + + +def sort_schedules(forward): + """ Sort the schedules, based on order of happening from now + forward: assume expired daily event to occur tomorrow + """ + + events = [] + now = time.localtime() + now_hm = int(now[3])*60 + int(now[4]) + now = int(now[6])*24*60 + now_hm + + for schedule in cfg.schedules(): + parms = None + try: + m, h, d, action, parms = schedule.split(None, 4) + except: + try: + m, h, d, action = schedule.split(None, 3) + except: + continue # Bad schedule, ignore + action = action.strip() + try: + then = int(h)*60 + int(m) + if d == '*': + d = int(now/(24*60)) + if forward and (then < now_hm): d = (d + 1) % 7 + else: + d = int(d)-1 + then = d*24*60 + then + except: + continue # Bad schedule, ignore + + dif = then - now + if dif < 0: dif = dif + 7*24*60 + + events.append((dif, action, parms, schedule)) + + events.sort(lambda x, y: x[0]-y[0]) + return events + + +def analyse(was_paused=False): + """ Determine what pause/resume state we would have now. + """ + paused = None + paused_all = False + pause_post = False + speedlimit = None + servers = {} + + for ev in sort_schedules(forward=False): + logging.debug('Schedule check result = %s', ev) + action = ev[1] + try: + value = ev[2] + except: + value = None + if action == 'pause': + paused = True + elif action == 'pause_all': + paused_all = True + elif action == 'resume': + paused = False + paused_all = False + elif action == 'pause_post': + pause_post = True + elif action == 'resume_post': + pause_post = False + elif action == 'speedlimit' and value!=None: + speedlimit = int(ev[2]) + elif action == 'enable_server': + try: + servers[value] = 1 + except: + logging.warning(Ta('warn-schedNoServer@1'), value) + elif action == 'disable_server': + try: + servers[value] = 0 + except: + logging.warning(Ta('warn-schedNoServer@1'), value) + + if not was_paused: + if paused_all: + sabnzbd.pause_all() + else: + sabnzbd.unpause_all() + sabnzbd.downloader.set_paused(paused or paused_all) + + if pause_post: + PostProcessor.do.pause() + else: + PostProcessor.do.resume() + if speedlimit: + sabnzbd.downloader.limit_speed(speedlimit) + for serv in servers: + try: + config.get_config('servers', serv).enable.set(servers[serv]) + except: + pass + config.save_config() + + +#------------------------------------------------------------------------------ +# Support for single shot pause (=delayed resume) + +__PAUSE_END = None # Moment when pause will end + +def scheduled_resume(): + """ Scheduled resume, only when no oneshot resume is active + """ + global __PAUSE_END + if __PAUSE_END is None: + sabnzbd.unpause_all() + + +def __oneshot_resume(when): + """ Called by delayed resume schedule + Only resumes if call comes at the planned time + """ + global __PAUSE_END + if __PAUSE_END != None and (when > __PAUSE_END-5) and (when < __PAUSE_END+55): + __PAUSE_END = None + logging.debug('Resume after pause-interval') + sabnzbd.unpause_all() + else: + logging.debug('Ignoring cancelled resume') + + +def plan_resume(interval): + """ Set a scheduled resume after the interval + """ + global __SCHED, __PAUSE_END + if interval > 0: + __PAUSE_END = time.time() + (interval * 60) + logging.debug('Schedule resume at %s', __PAUSE_END) + __SCHED.add_single_task(__oneshot_resume, '', interval*60, kronos.method.sequential, [__PAUSE_END], None) + sabnzbd.downloader.pause_downloader() + else: + __PAUSE_END = None + sabnzbd.unpause_all() + + +def pause_int(): + """ Return minutes:seconds until pause ends """ + global __PAUSE_END + if __PAUSE_END is None: + return "0" + else: + val = __PAUSE_END - time.time() + if val < 0: + sign = '-' + val = abs(val) + else: + sign = '' + min = int(val / 60L) + sec = int(val - min*60) + return "%s%d:%02d" % (sign, min, sec) + + +def pause_check(): + """ Unpause when time left is negative, compensate for missed schedule + """ + global __PAUSE_END + if __PAUSE_END is not None and (__PAUSE_END - time.time()) < 0: + __PAUSE_END = None + logging.debug('Force resume, negative timer') + sabnzbd.unpause_all() + + +#------------------------------------------------------------------------------ +def plan_server(action, parms, interval): + """ Plan to re-activate server after "interval" minutes + """ + __SCHED.add_single_task(action, '', interval*60, kronos.method.sequential, parms, None) + + +#------------------------------------------------------------------------------ +# Scheduler Guarding system +# Each check sets the guardian flag False +# Each succesful scheduled check sets the flag +# If 4 consequetive checks fail, the sheduler is assumed to have crashed + +__SCHED_GUARDIAN = False +__SCHED_GUARDIAN_CNT = 0 + +def reset_guardian(): + global __SCHED_GUARDIAN, __SCHED_GUARDIAN_CNT + __SCHED_GUARDIAN = False + __SCHED_GUARDIAN_CNT = 0 + +def sched_guardian(): + global __SCHED_GUARDIAN, __SCHED_GUARDIAN_CNT + __SCHED_GUARDIAN = True + +def sched_check(): + global __SCHED_GUARDIAN, __SCHED_GUARDIAN_CNT + if not __SCHED_GUARDIAN: + __SCHED_GUARDIAN_CNT += 1 + return __SCHED_GUARDIAN_CNT < 4 + reset_guardian() + return True diff --git a/sabnzbd/trylist.py b/sabnzbd/trylist.py new file mode 100644 index 0000000..8b2dad0 --- /dev/null +++ b/sabnzbd/trylist.py @@ -0,0 +1,59 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.trylist - trylist class +""" + +import logging + +from sabnzbd.decorators import synchronized + +from threading import Lock + +# TryList keeps track of which servers have been tried for +# a specific article + +TRYLIST_LOCK = Lock() +class TryList: + def __init__(self): + self.__try_list = [] + + @synchronized(TRYLIST_LOCK) + def server_in_try_list(self, server): + """ Return whether specified server has been tried """ + return (server in self.__try_list) + + @synchronized(TRYLIST_LOCK) + def add_to_try_list(self, server): + """ Register server as having been tried already """ + if server not in self.__try_list: + logging.debug("Appending %s to %s.__try_list", server, self) + self.__try_list.append(server) + + @synchronized(TRYLIST_LOCK) + def remove_from_try_list(self, server): + """ Server is no longer listed as tried """ + if server in self.__try_list: + logging.debug("Removing %s from %s.__try_list", server, self) + self.__try_list.remove(server) + + @synchronized(TRYLIST_LOCK) + def reset_try_list(self): + """ Clean the list """ + if self.__try_list: + self.__try_list = [] diff --git a/sabnzbd/tvsort.py b/sabnzbd/tvsort.py new file mode 100644 index 0000000..36b3f1e --- /dev/null +++ b/sabnzbd/tvsort.py @@ -0,0 +1,1064 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.tvsort - Sorting Functions +Series Sorting - Sorting downloads into seasons & episodes +Date sorting - Sorting downloads by a custom date matching +Generic Sorting - Sorting large files by a custom matching +""" + +import os +import logging +import re + +import sabnzbd +from sabnzbd.misc import move_to_path, cleanup_empty_directories, \ + get_unique_filename, get_ext, renamer, remove_dir +from sabnzbd.constants import series_match, date_match, year_match, sample_match +import sabnzbd.cfg as cfg +from sabnzbd.codecs import titler +from sabnzbd.lang import Ta + +RE_SAMPLE = re.compile(sample_match, re.I) +# Do not rename .vob files as they are usually DVD's +EXCLUDED_FILE_EXTS = ('.vob', '.bin') + +LOWERCASE = ('the','of','and','at','vs','a','an','but','nor','for','on',\ + 'so','yet') +UPPERCASE = ('III', 'II', 'IV') + +REPLACE_AFTER = { + '()': '', + '..': '.', + '__': '_', + ' ': ' ', + '//': '/', + ' .%ext': '.%ext' +} + +# Title() function messes up country names, so need to replace them instead +COUNTRY_REP = ('(US)', '(UK)', '(EU)', '(CA)', '(YU)', '(VE)', '(TR)', '(CH)', \ + '(SE)', '(ES)', '(KR)', '(ZA)', '(SK)', '(SG)', '(RU)', '(RO)', \ + '(PR)', '(PT)', '(PL)', '(PH)', '(PK)', '(NO)', '(NG)', '(NZ)', \ + '(NL)', '(MX)', '(MY)', '(MK)', '(KZ)', '(JP)', '(JM)', '(IT)', \ + '(IL)', '(IE)', '(IN)', '(IS)', '(HU)', '(HK)', '(HN)', '(GR)', \ + '(GH)', '(DE)', '(FR)', '(FI)', '(DK)', '(CZ)', '(HR)', '(CR)', \ + '(CO)', '(CN)', '(CL)', '(BG)', '(BR)', '(BE)', '(AT)', '(AU)', \ + '(AW)', '(AR)', '(AL)', '(AF)') + +_RE_ENDEXT = re.compile(r'\.%ext[{}]*$', re.I) + +def endswith_ext(path): + m = _RE_ENDEXT.search(path) + return m is not None + + +def move_to_parent_folder(workdir): + """ Move content of 'workdir' to 'workdir/..' possibly skipping some files + If afterwards the directory is not empty, rename it to _JUNK_folder, else remove it. + """ + skipped = False # Keep track of any skipped files + path1 = os.path.abspath(os.path.join(workdir, '..')) #move things to the folder below + + for root, dirs, files in os.walk(workdir): + for _file in files: + path = os.path.join(root, _file) + new_path = path.replace(workdir, path1) + new_path = get_unique_filename(new_path) + move_to_path(path, new_path, False) + + cleanup_empty_directories(workdir) + try: + remove_dir(workdir) + except: + pass + + return path1 + + +class Sorter: + def __init__(self, cat): + self.sorter = None + self.type = None + self.sort_file = False + self.cat = cat + + def detect(self, dirname, complete_dir): + self.sorter = SeriesSorter(dirname, complete_dir, self.cat) + if self.sorter.is_match(): + complete_dir = self.sorter.get_final_path() + self.type = 'tv' + self.sort_file = True + return complete_dir + + self.sorter = DateSorter(dirname, complete_dir, self.cat) + if self.sorter.is_match(): + complete_dir = self.sorter.get_final_path() + self.type = 'date' + self.sort_file = True + return complete_dir + + self.sorter = GenericSorter(dirname, complete_dir, self.cat) + if self.sorter.is_match(): + complete_dir = self.sorter.get_final_path() + self.type = 'movie' + self.sort_file = True + return complete_dir + + self.sort_file = False + return complete_dir + + def rename(self, newfiles, workdir_complete): + if self.sorter.should_rename(): + self.sorter.rename(newfiles, workdir_complete) + + def move(self, workdir_complete): + if self.type == 'movie': + move_to_parent = True + # check if we should leave the files inside an extra folder + if cfg.movie_extra_folders(): + #if there is a folder in the download, leave it in an extra folder + move_to_parent = not check_for_folder(workdir_complete) + if move_to_parent: + workdir_complete = move_to_parent_folder(workdir_complete) + return workdir_complete + else: + return move_to_parent_folder(workdir_complete) + + def is_sortfile(self): + return self.sort_file + +class SeriesSorter: + def __init__(self, dirname, path, cat): + self.matched = False + + self.original_dirname = dirname + self.original_path = path + self.cat = cat + self.sort_string = cfg.tv_sort_string() + self.cats = cfg.tv_categories() + self.filename_set = '' + + self.match_obj = None + self.extras = None + self.descmatch = None + + self.rename_or_not = False + + self.show_info = {} + + #Check if it is a TV show on init() + self.match() + + + def match(self): + ''' Checks the regex for a match, if so set self.match to true ''' + if cfg.enable_tv_sorting() and cfg.tv_sort_string(): + if (not self.cats) or (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats): + #First check if the show matches TV episode regular expressions. Returns regex match object + self.match_obj, self.extras = check_regexs(self.original_dirname, series_match, double=True) + if self.match_obj: + logging.debug("Found TV Show - Starting folder sort (%s)", self.original_dirname) + self.matched = True + + + def is_match(self): + ''' Returns whether there was a match or not ''' + return self.matched + + + def get_final_path(self): + # Collect and construct all the variables such as episode name, show names + if self.get_values(): + # Get the final path + path = self.construct_path() + self.final_path = os.path.join(self.original_path, path) + return self.final_path + else: + # Error Sorting + return os.path.join(self.original_path, self.original_dirname) + + + def get_multi_ep_naming(self, one, two, extras): + ''' Returns a list of unique values joined into a string and seperated by - (ex:01-02-03-04) ''' + extra_list = [one] + extra2_list = [two] + for extra in extras: + if extra not in (extra_list, extra2_list): + ep_no2 = extra.rjust(2,'0') + extra_list.append(extra) + extra2_list.append(ep_no2) + + one = '-'.join(extra_list) + two = '-'.join(extra2_list) + return (one, two) + + def get_shownames(self): + ''' Get the show name from the match object and format it ''' + # Get the formatted title and alternate title formats + self.show_info['show_name'], self.show_info['show_name_two'], self.show_info['show_name_three'] = getTitles(self.match_obj, self.original_dirname) + + + def get_seasons(self): + ''' Get the season number from the match object and format it ''' + season = self.match_obj.group(1).strip('_') # season number + + # Provide alternatve formatting (0 padding) + if season.lower() == 's': + season2 = season + else: + try: + season = str(int(season)) + except: + pass + season2 = season.rjust(2,'0') + + self.show_info['season_num'] = season + self.show_info['season_num_alt'] = season2 + + + def get_episodes(self): + ''' Get the episode numbers from the match object, format and join them ''' + ep_no = self.match_obj.group(2) # episode number + # Store the original episode number + + # Provide alternatve formatting (0 padding) + ep_no2 = ep_no.rjust(2,'0') + try: + ep_no = str(int(ep_no)) + except: + pass + + # Dual episode support + if self.extras: + ep_no, ep_no2 = self.get_multi_ep_naming(ep_no, ep_no2, self.extras) + + self.show_info['episode_num'] = ep_no + self.show_info['episode_num_alt'] = ep_no2 + + + def get_showdescriptions(self): + ''' Get the show descriptions from the match object and format them ''' + self.show_info['ep_name'], self.show_info['ep_name_two'], self.show_info['ep_name_three'] = getDescriptions(self.match_obj, self.original_dirname) + + + def get_values(self): + """ Collect and construct all the values needed for path replacement """ + try: + ## - Show Name + self.get_shownames() + + ## - Season + self.get_seasons() + + ## - Episode Number + self.get_episodes() + + ## - Episode Name + self.get_showdescriptions() + + return True + + except: + logging.error(Ta('error-tvInfo@1'), self.original_dirname) + logging.debug("Traceback: ", exc_info = True) + return False + + + def construct_path(self): + ''' Replaces the sort string with real values such as Show Name and Episode Number ''' + + sorter = self.sort_string.replace('\\', '/') + mapping = [] + + if endswith_ext(sorter): + extension = True + sorter = sorter.replace('.%ext', '') + else: + extension = False + + + # Replace Show name + mapping.append(('%sn', self.show_info['show_name'])) + mapping.append(('%s.n', self.show_info['show_name_two'])) + mapping.append(('%s_n', self.show_info['show_name_three'])) + + # Replace season number + mapping.append(('%s', self.show_info['season_num'])) + mapping.append(('%0s', self.show_info['season_num_alt'])) + + # Replace episode names + if self.show_info['ep_name']: + mapping.append(('%en', self.show_info['ep_name'])) + mapping.append(('%e.n', self.show_info['ep_name_two'])) + mapping.append(('%e_n', self.show_info['ep_name_three'])) + else: + mapping.append(('%en', '')) + mapping.append(('%e.n', '')) + mapping.append(('%e_n', '')) + + # Replace episode number + mapping.append(('%e', self.show_info['episode_num'])) + mapping.append(('%0e', self.show_info['episode_num_alt'])) + + # Make sure unsupported %desc is removed + mapping.append(('%desc', '')) + + # Replace elements + path = path_subst(sorter, mapping) + + for key, name in REPLACE_AFTER.iteritems(): + path = path.replace(key, name) + + # Lowercase all characters encased in {} + path = toLowercase(path) + + # Split the last part of the path up for the renamer + if extension: + head, tail = os.path.split(path) + self.filename_set = tail + self.rename_or_not = True + else: + head = path + + return head + + def should_rename(self): + return self.rename_or_not + + def rename(self, files, current_path): + logging.debug("Renaming Series") + renamed = None + largest = (None, None, 0) + + def to_filepath(f, current_path): + if is_full_path(f): + filepath = f.replace('_UNPACK_', '') + else: + filepath = os.path.join(current_path, f) + return filepath + + # Create a generator of filepaths, ignore sample files and excluded files (vobs ect) + filepaths = ((file, to_filepath(file, current_path)) for file in files if not RE_SAMPLE.search(file) \ + and get_ext(file) not in EXCLUDED_FILE_EXTS) + + # Find the largest existing file + for file, fp in filepaths: + # If for some reason the file no longer exists, skip + if not os.path.exists(fp): + continue + + size = os.stat(fp).st_size + f_file, f_fp, f_size = largest + if size > f_size: + largest = (file, fp, size) + + file, filepath, size = largest + # >20MB + if filepath and size > 20971520: + tmp, ext = os.path.splitext(file) + newname = "%s%s" % (self.filename_set,ext) + # Replace %fn with the original filename + newname = newname.replace('%fn',tmp) + newpath = os.path.join(current_path, newname) + if not os.path.exists(newpath): + try: + logging.debug("Rename: %s to %s", filepath,newpath) + renamer(filepath,newpath) + except: + logging.error("Failed to rename: %s to %s", current_path, newpath) + logging.debug("Traceback: ", exc_info = True) + rename_similar(current_path, file, self.filename_set) + else: + logging.debug('Current path already exists, skipping rename, %s', newpath) + else: + logging.debug('Nothing to rename, %s', files) + + +_RE_MULTIPLE = ( \ + re.compile(r'cd\W?(\d+)\W?', re.I), # .cd1.avi + re.compile(r'\w\W?([\w\d])[{}]*$', re.I), # blah1.avi blaha.avi + re.compile(r'\w\W([\w\d])\W', re.I) # blah-1-ok.avi blah-a-ok.avi +) +def check_for_multiple(files): + for regex in _RE_MULTIPLE: + matched_files = check_for_sequence(regex, files) + if matched_files: + return matched_files + return '' + + +def check_for_sequence(regex, files): + matches = {} + prefix = None + # Build up a dictionary of matches + # The key is based off the match, ie {1:'blah-part1.avi'} + for _file in files: + name, ext = os.path.splitext(_file) + match1 = regex.search(name) + if match1: + if not prefix or prefix == name[:match1.start()]: + matches[match1.group(1)] = name+ext + prefix = name[:match1.start()] + + # Don't do anything if only one or no files matched + if len(matches.keys()) < 2: + return {} + + key_prev = 0 + passed = True + alphabet = 'abcdefghijklmnopqrstuvwxyz' + + # Check the dictionary to see if the keys are in a numeric or alphabetic sequence + for akey in sorted(matches.keys()): + if akey.isdigit(): + key = int(akey) + elif akey in alphabet: + key = alphabet.find(akey) + 1 + else: + passed = False + + if passed: + if not key_prev: + key_prev = key + else: + if key_prev + 1 == key: + key_prev = key + else: + passed = False + if passed: + # convert {'b':'filename-b.avi'} to {'2', 'filename-b.avi'} + item = matches.pop(akey) + matches[str(key)] = item + + if passed: + return matches + else: + return {} + + + + +class GenericSorter: + def __init__(self, dirname, path, cat): + self.matched = False + + self.original_dirname = dirname + self.original_path = path + self.sort_string = cfg.movie_sort_string() + self.extra = cfg.movie_sort_extra() + self.cats = cfg.movie_categories() + self.cat = cat + self.filename_set = '' + + self.match_obj = None + + self.rename_or_not = False + + self.movie_info = {} + + # Check if we match the category in init() + self.match() + + + def match(self): + ''' Checks the category for a match, if so set self.match to true ''' + if cfg.enable_movie_sorting() and self.sort_string: + #First check if the show matches TV episode regular expressions. Returns regex match object + if (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats): + logging.debug("Movie Sorting - Starting folder sort (%s)", self.original_dirname) + self.matched = True + + + def is_match(self): + ''' Returns whether there was a match or not ''' + return self.matched + + + + def get_final_path(self): + # Collect and construct all the variables such as episode name, show names + if self.get_values(): + # Get the final path + path = self.construct_path() + self.final_path = os.path.join(self.original_path, path) + return self.final_path + else: + # Error Sorting + return os.path.join(self.original_path, self.original_dirname) + + def get_values(self): + """ Collect and construct all the values needed for path replacement """ + + ## - Get Year + RE_YEAR = re.compile(year_match, re.I) + year_m = RE_YEAR.search(self.original_dirname) + if year_m: + # Find the last matched date + # Keep year_m to use in getTitles + year = RE_YEAR.findall(self.original_dirname)[-1][0] + self.movie_info['year'] = year + else: + self.movie_info['year'] = '' + + ## - Get Decades + self.movie_info['decade'], self.movie_info['decade_two'] = getDecades(self.movie_info['year']) + + ## - Get Title + self.movie_info['title'], self.movie_info['title_two'], self.movie_info['title_three'] = getTitles(year_m, self.original_dirname) + + return True + + + def construct_path(self): + + sorter = self.sort_string.replace('\\', '/') + mapping = [] + + if endswith_ext(sorter): + extension = True + sorter = sorter.replace(".%ext", '') + else: + extension = False + + # Replace title + mapping.append(('%title', self.movie_info['title'])) + mapping.append(('%.title', self.movie_info['title_two'])) + mapping.append(('%_title', self.movie_info['title_three'])) + + # Replace title (short forms) + mapping.append(('%t', self.movie_info['title'])) + mapping.append(('%.t', self.movie_info['title_two'])) + mapping.append(('%_t', self.movie_info['title_three'])) + + # Replace year + mapping.append(('%y', self.movie_info['year'])) + + # Replace decades + mapping.append(('%decade', self.movie_info['decade'])) + mapping.append(('%0decade', self.movie_info['decade_two'])) + + path = path_subst(sorter, mapping) + + for key, name in REPLACE_AFTER.iteritems(): + path = path.replace(key, name) + + + # Lowercase all characters encased in {} + path = toLowercase(path) + + # Strip any extra ' ' '.' or '_' around foldernames + path = stripFolders(path) + + # Split the last part of the path up for the renamer + if extension: + head, tail = os.path.split(path) + self.filename_set = tail + self.rename_or_not = True + else: + head = path + + return head + + def should_rename(self): + return self.rename_or_not + + def rename(self, _files, current_path): + logging.debug("Renaming Generic file") + def filter_files(_file, current_path): + if is_full_path(_file): + filepath = _file.replace('_UNPACK_', '') + else: + filepath = os.path.join(current_path, _file) + if os.path.exists(filepath): + size = os.stat(filepath).st_size + if size > 314572800 and not RE_SAMPLE.search(_file) \ + and get_ext(_file) not in EXCLUDED_FILE_EXTS: + return True + return False + + renamed = False + # remove any files below 300MB from this list + files = [_file for _file in _files if filter_files(_file, current_path)] + + length = len(files) + ## Single File Handling + if length == 1: + file = files[0] + if is_full_path(file): + filepath = file.replace('_UNPACK_', '') + else: + filepath = os.path.join(current_path, file) + if os.path.exists(filepath): + tmp, ext = os.path.splitext(file) + newname = "%s%s" % (self.filename_set,ext) + newname = newname.replace('%fn',tmp) + newpath = os.path.join(current_path, newname) + try: + logging.debug("Rename: %s to %s", filepath,newpath) + renamer(filepath,newpath) + except: + logging.error(Ta('error-tvRename@2'), filepath, newpath) + logging.debug("Traceback: ", exc_info = True) + rename_similar(current_path, file, self.filename_set) + + ## Sequence File Handling + # if there is more than one extracted file check for CD1/1/A in the title + elif self.extra: + matched_files = check_for_multiple(files) + # rename files marked as in a set + if matched_files: + logging.debug("Renaming a series of generic files (%s)", matched_files) + for index, file in matched_files.iteritems(): + filepath = os.path.join(current_path, file) + tmp, ext = os.path.splitext(file) + name = '%s%s' % (self.filename_set, self.extra) + name = name.replace('%1', str(index)).replace('%fn',tmp) + name = name + ext + newpath = os.path.join(current_path, name) + try: + logging.debug("Rename: %s to %s", filepath,newpath) + renamer(filepath,newpath) + except: + logging.error(Ta('error-tvRename@2'), filepath, newpath) + logging.debug("Traceback: ", exc_info = True) + rename_similar(current_path, file, self.filename_set) + else: + logging.debug("Movie files not in sequence %s", _files) + + +class DateSorter: + def __init__(self, dirname, path, cat): + self.matched = False + + self.original_dirname = dirname + self.original_path = path + self.sort_string = cfg.date_sort_string() + self.cats = cfg.date_categories() + self.cat = cat + self.filename_set = '' + + self.match_obj = None + + self.rename_or_not = False + self.date_type = None + + self.date_info = {} + + # Check if we match the category in init() + self.match() + + + def match(self): + ''' Checks the category for a match, if so set self.matched to true ''' + if cfg.enable_date_sorting() and self.sort_string: + #First check if the show matches TV episode regular expressions. Returns regex match object + if (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats): + self.match_obj, self.date_type = checkForDate(self.original_dirname, date_match) + if self.match_obj: + logging.debug("Date Sorting - Starting folder sort (%s)", self.original_dirname) + self.matched = True + + + def is_match(self): + ''' Returns whether there was a match or not ''' + return self.matched + + + def get_final_path(self): + # Collect and construct all the variables such as episode name, show names + if self.get_values(): + # Get the final path + path = self.construct_path() + self.final_path = os.path.join(self.original_path, path) + return self.final_path + else: + # Error Sorting + return os.path.join(self.original_path, self.original_dirname) + + def get_values(self): + """ Collect and construct all the values needed for path replacement """ + + if self.date_type == 1: #2008-10-16 + self.date_info['year'] = self.match_obj.group(1) + self.date_info['month'] = self.match_obj.group(2) + self.date_info['date'] = self.match_obj.group(3) + else: #10.16.2008 + self.date_info['year'] = self.match_obj.group(3) + self.date_info['month'] = self.match_obj.group(1) + self.date_info['date'] = self.match_obj.group(2) + + self.date_info['month_two'] = self.date_info['month'].rjust(2,'0') + self.date_info['date_two'] = self.date_info['date'].rjust(2,'0') + + ## - Get Decades + self.date_info['decade'], self.date_info['decade_two'] = getDecades(self.date_info['year']) + + ## - Get Title + self.date_info['title'], self.date_info['title_two'], self.date_info['title_three'] = getTitles(self.match_obj, self.original_dirname) + + self.date_info['ep_name'], self.date_info['ep_name_two'], self.date_info['ep_name_three'] = getDescriptions(self.match_obj, self.original_dirname) + + return True + + + def construct_path(self): + + sorter = self.sort_string.replace('\\', '/') + mapping = [] + + if endswith_ext(sorter): + extension = True + sorter= sorter.replace(".%ext", '') + else: + extension = False + + # Replace title + mapping.append(('%title', self.date_info['title'])) + mapping.append(('%.title', self.date_info['title_two'])) + mapping.append(('%_title', self.date_info['title_three'])) + + mapping.append(('%t', self.date_info['title'])) + mapping.append(('%.t', self.date_info['title_two'])) + mapping.append(('%_t', self.date_info['title_three'])) + + mapping.append(('%sn', self.date_info['title'])) + mapping.append(('%s.n', self.date_info['title_two'])) + mapping.append(('%s_n', self.date_info['title_three'])) + + # Replace year + mapping.append(('%year', self.date_info['year'])) + mapping.append(('%y', self.date_info['year'])) + + if self.date_info['ep_name']: + mapping.append(('%desc', self.date_info['ep_name'])) + mapping.append(('%.desc', self.date_info['ep_name_two'])) + mapping.append(('%_desc', self.date_info['ep_name_three'])) + else: + mapping.append(('%desc', '')) + mapping.append(('%.desc', '')) + mapping.append(('%_desc', '')) + + # Replace decades + mapping.append(('%decade', self.date_info['decade'])) + mapping.append(('%0decade', self.date_info['decade_two'])) + + # Replace month + mapping.append(('%m', self.date_info['month'])) + mapping.append(('%0m', self.date_info['month_two'])) + + # Replace date + mapping.append(('%d', self.date_info['date'])) + mapping.append(('%0d', self.date_info['date_two'])) + + path = path_subst(sorter, mapping) + + for key, name in REPLACE_AFTER.iteritems(): + path = path.replace(key, name) + + # Lowercase all characters encased in {} + path = toLowercase(path) + + # Strip any extra ' ' '.' or '_' around foldernames + path = stripFolders(path) + + # Split the last part of the path up for the renamer + if extension: + head, tail = os.path.split(path) + self.filename_set = tail + self.rename_or_not = True + else: + head = path + + return head + + def should_rename(self): + return self.rename_or_not + + def rename(self, files, current_path): + logging.debug("Renaming Date file") + renamed = None + #find the master file to rename + for file in files: + if is_full_path(file): + filepath = file.replace('_UNPACK_', '') + else: + filepath = os.path.join(current_path, file) + + if os.path.exists(filepath): + size = os.stat(filepath).st_size + if size > 130000000: + if 'sample' not in file: + tmp, ext = os.path.splitext(file) + newname = "%s%s" % (self.filename_set,ext) + newname = newname.replace('%fn',tmp) + newpath = os.path.join(current_path, newname) + if not os.path.exists(newpath): + try: + logging.debug("Rename: %s to %s", filepath,newpath) + renamer(filepath,newpath) + except: + logging.error(Ta('error-tvRename@2'), current_path, newpath) + logging.debug("Traceback: ", exc_info = True) + rename_similar(current_path, file, self.filename_set) + break + + +def path_subst(path, mapping): + """ Replace the sort sting elements by real values. + Non-elements are copied literally. + path = the sort string + mapping = array of tuples that maps all elements to their values + """ + newpath = [] + plen = len(path) + n = 0 + while n < plen: + result = path[n] + if result == '%': + for key, value in mapping: + if path.startswith(key, n): + n += len(key)-1 + result = value + break + newpath.append(result) + n += 1 + return ''.join(newpath) + + +def getTitles(match, name): + ''' + The title will be the part before the match + Clean it up and title() it + + ''.title() isn't very good under python so this contains + a lot of little hacks to make it better and for more control + ''' + if match: + name = name[:match.start()] + + # Replace .US. with (US) + if cfg.tv_sort_countries() == 1: + for rep in COUNTRY_REP: + # (us) > (US) + name = replace_word(name, rep.lower(), rep) + # (Us) > (US) + name = replace_word(name, titler(rep), rep) + # .US. > (US) + dotted_country = '.%s.' % (rep.strip('()')) + name = replace_word(name, dotted_country, rep) + # Remove .US. and (US) + elif cfg.tv_sort_countries() == 2: + for rep in COUNTRY_REP: + # Remove (US) + name = replace_word(name, rep, '') + dotted_country = '.%s.' % (rep.strip('()')) + # Remove .US. + name = replace_word(name, dotted_country, '.') + + title = name.replace('.', ' ').replace('_', ' ') + title = title.strip().strip('(').strip('_').strip('-').strip().strip('_') + + title = titler(title) # title the show name so it is in a consistant letter case + + #title applied uppercase to 's Python bug? + title = title.replace("'S", "'s") + + # Replace titled country names, (Us) with (US) and so on + if cfg.tv_sort_countries() == 1: + for rep in COUNTRY_REP: + title = title.replace(titler(rep), rep) + # Remove country names, ie (Us) + elif cfg.tv_sort_countries() == 2: + for rep in COUNTRY_REP: + title = title.replace(titler(rep), '').strip() + + # Make sure some words such as 'and' or 'of' stay lowercased. + for x in LOWERCASE: + xtitled = titler(x) + title = replace_word(title, xtitled, x) + + # Make sure some words such as 'III' or 'IV' stay uppercased. + for x in UPPERCASE: + xtitled = titler(x) + title = replace_word(title, xtitled, x) + + # The title with spaces replaced by dots + dots = title.replace(" - ", "-").replace(' ','.').replace('_','.') + dots = dots.replace('(', '.').replace(')','.').replace('..','.').rstrip('.') + + # The title with spaces replaced by underscores + underscores = title.replace(' ','_').replace('.','_').replace('__','_').rstrip('_') + + return title, dots, underscores + +def replace_word(input, one, two): + ''' Regex replace on just words ''' + regex = re.compile(r'\W(%s)(\W|$)' % one, re.I) + matches = regex.findall(input) + if matches: + for m in matches: + input = input.replace(one, two) + return input + +def getDescriptions(match, name): + ''' + If present, get a description from the nzb name. + A description has to be after the matched item, seperated either + like ' - Description' or '_-_Description' + ''' + if match: + ep_name = name[match.end():] # Need to improve for multi ep support + else: + ep_name = name + RE_EPNAME = re.compile(r'_?-[_\W]', re.I) + m = RE_EPNAME.search(ep_name) + if m: + ep_name = ep_name[m.end():].strip('_').strip().strip('_').replace('.', ' ').replace('_', ' ') + ep_name2 = ep_name.replace(" - ", "-").replace(" ", ".") + ep_name3 = ep_name.replace(" ", "_") + return ep_name, ep_name2, ep_name3 + else: + return '', '', '' + + +def getDecades(year): + if year: + try: + decade = year[2:3]+'0' + decade2 = year[:3]+'0' + except: + decade = '' + decade2 = '' + else: + decade = '' + decade2 = '' + return decade, decade2 + +def check_for_folder(path): + for root, dirs, files in os.walk(path): + if dirs: + return True + return False + +_RE_LOWERCASE = re.compile(r'{([^{]*)}') +def toLowercase(path): + ''' Lowercases any characters enclosed in {} ''' + while True: + m = _RE_LOWERCASE.search(path) + if not m: + break + path = path[:m.start()] + m.group(1).lower() + path[m.end():] + + # just incase + path = path.replace('{', '') + path = path.replace('}', '') + return path + +def stripFolders(folders): + f = folders.strip('/').split('/') + + def strip_all(x): + x = x.strip().strip('_') + if sabnzbd.WIN32: + # Don't want to strip . from folders such as /.sabnzbd/ + x = x.strip('.') + x = x.strip() + return x + + return '/'.join([strip_all(x) for x in f]) + + +def rename_similar(path, file, name): + logging.debug('Renaming files similar to: %s to %s', file, name) + file_prefix, ext = os.path.splitext(file) + for root, dirs, files in os.walk(path): + for _file in files: + fpath = os.path.join(root, _file) + tmp, ext = os.path.splitext(_file) + if tmp == file_prefix: + newname = "%s%s" % (name,ext) + newname = newname.replace('%fn',tmp) + newpath = os.path.join(path, newname) + if not os.path.exists(newpath): + try: + logging.debug("Rename: %s to %s", fpath,newpath) + renamer(fpath,newpath) + except: + logging.error(Ta('error-tvSimRename@2'), path, newpath) + logging.debug("Traceback: ", exc_info = True) + + + + +def check_regexs(filename, matchers, double=False): + """ + Regular Expression match for a list of regexes + Returns the MatchObject if a match is made + This version checks for an additional match + """ + '''if double: + matcher, extramatchers = matchers + else: + matcher = matchers + extramatchers = []''' + extras = [] + for expressions in matchers: + expression, extramatchers = expressions + regex = re.compile(expression) + match1 = regex.search(filename) + if match1: + for m in extramatchers: + regex = re.compile(m) + match2 = regex.findall(filename,match1.end()) + if match2: + for match in match2: + if type(match) == type(()) and len(match) > 1: + extras.append(match[1]) + else: + extras.append(match) + break + return match1, extras + return None, None + + +def checkForDate(filename, matcher): + """ + Regular Expression match for date based files + Returns the MatchObject if a match is made + """ + match2 = None + x = 0 + if matcher: + for expression in matcher: + regex = re.compile(expression) + match1 = regex.search(filename) + x += 1 + if match1: + return match1, x + return None, 0 + +def is_full_path(file): + if file.startswith('\\') or file.startswith('/'): + return True + try: + if file[1:3] == ':\\': + return True + except: + pass + return False diff --git a/sabnzbd/urlgrabber.py b/sabnzbd/urlgrabber.py new file mode 100644 index 0000000..e4deb79 --- /dev/null +++ b/sabnzbd/urlgrabber.py @@ -0,0 +1,218 @@ +#!/usr/bin/python -OO +# Copyright 2008-2010 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.urlgrabber - Queue for grabbing NZB files from websites +""" + +import os +import time +import re +import logging +import Queue +import urllib +from threading import * + +import socket +try: + socket.ssl + _PROTOCOL = 'https' +except: + _PROTOCOL = 'http' + +import sabnzbd +import sabnzbd.misc as misc +import sabnzbd.dirscanner as dirscanner +import sabnzbd.nzbqueue as nzbqueue +import sabnzbd.cfg as cfg +from sabnzbd.lang import Ta + +#------------------------------------------------------------------------------ +_RETRIES = 10 + +class URLGrabber(Thread): + do = None # Link to instance of the thread + + def __init__(self): + Thread.__init__(self) + self.queue = Queue.Queue() + for tup in sabnzbd.nzbqueue.get_urls(): + url, nzo = tup + self.queue.put((url, nzo, _RETRIES)) + self.shutdown = False + URLGrabber.do = self + + def add(self, url, future_nzo): + """ Add an URL to the URLGrabber queue """ + self.queue.put((url, future_nzo, _RETRIES)) + + def stop(self): + logging.info('URLGrabber shutting down') + self.shutdown = True + self.queue.put((None, None, 0)) + + def run(self): + logging.info('URLGrabber starting up') + self.shutdown = False + + while not self.shutdown: + (url, future_nzo, retry_count) = self.queue.get() + if not url: + continue + + # If nzo entry deleted, give up + try: + deleted = future_nzo.deleted + except: + deleted = True + if deleted: + logging.debug('Dropping URL %s, job entry missing', url) + continue + + # Add nzbmatrix credentials if needed + url, matrix_id = _matrix_url(url) + + # _grab_url cannot reside in a function, because the tempfile + # would not survive the end of the function + logging.info('Grabbing URL %s', url) + opener = urllib.FancyURLopener({}) + opener.prompt_user_passwd = None + opener.addheaders = [] + opener.addheader('User-Agent', 'SABnzbd+/%s' % sabnzbd.version.__version__) + opener.addheader('Accept-encoding','gzip') + filename = None + msg = '' + try: + fn, header = opener.retrieve(url) + except: + fn = None + + if fn: + for tup in header.items(): + for item in tup: + if "filename=" in item: + filename = item[item.index("filename=") + 9:].strip(';').strip('"') + break + + if matrix_id: + fn, msg = _analyse_matrix(fn, matrix_id) + + # Check if the filepath is specified, if not use the msg + # as whether it should be retried (bool) + if not fn: + retry_count -= 1 + if retry_count > 0 and not msg: + logging.info('Retry URL %s', url) + self.queue.put((url, future_nzo, retry_count)) + else: + misc.bad_fetch(future_nzo, url, msg, retry=True) + continue + + if not filename: + filename = os.path.basename(url) + '.nzb' + filename = misc.sanitize_foldername(filename) + _r, _u, _d = future_nzo.get_repair_opts() + pp = sabnzbd.opts_to_pp(_r, _u, _d) + script = future_nzo.get_script() + cat = future_nzo.get_cat() + priority = future_nzo.get_priority() + nzbname = future_nzo.get_dirname_rename() + + # Check if nzb file + if os.path.splitext(filename)[1].lower() == '.nzb': + res = dirscanner.ProcessSingleFile(filename, fn, pp=pp, script=script, cat=cat, priority=priority, nzbname=nzbname) + if res == 0: + nzbqueue.remove_nzo(future_nzo.nzo_id, add_to_history=False, unload=True) + elif res == -2: + self.add(url, future_nzo) + else: + misc.bad_fetch(future_nzo, url, retry=False) + # Check if a supported archive + else: + if dirscanner.ProcessArchiveFile(filename, fn, pp, script, cat, priority=priority) == 0: + nzbqueue.remove_nzo(future_nzo.nzo_id, add_to_history=False, unload=True) + else: + # Not a supported filetype, not an nzb (text/html ect) + try: + os.remove(fn) + except: + pass + misc.bad_fetch(future_nzo, url, retry=False, archive=True) + + # Don't pound the website! + time.sleep(5.0) + + + +#------------------------------------------------------------------------------- +_RE_NZBMATRIX = re.compile(r'nzbmatrix.com/(.*)[\?&]id=(\d+)', re.I) +_RE_NZBMATRIX_USER = re.compile(r'&username=([^&=]+)', re.I) +_RE_NZBMATRIX_API = re.compile(r'&apikey=([^&=]+)', re.I) + +def _matrix_url(url): + """ Patch up the url for nzbmatrix.com """ + + matrix_id = 0 + m = _RE_NZBMATRIX.search(url) + if m: + matrix_id = m.group(2) + if not _RE_NZBMATRIX_USER.search(url) or not _RE_NZBMATRIX_API.search(url): + user = urllib.quote_plus(cfg.matrix_username()) + key = urllib.quote_plus(cfg.matrix_apikey()) + url = '%s://nzbmatrix.com/api-nzb-download.php?id=%s&username=%s&apikey=%s' % \ + (_PROTOCOL, matrix_id, user, key) + return url, matrix_id + + +_RE_MATRIX_ERR = re.compile(r'please_wait[_ ]+(\d+)', re.I) + +def _analyse_matrix(fn, matrix_id): + """ Analyse respons of nzbmatrix + """ + msg = '' + if not fn: + # No response, just retry + return (None, msg) + try: + f = open(fn, 'r') + data = f.read(40) + f.close() + except: + return (None, msg) + + # Check for an error response + if data and data.startswith('error'): + # Check if we are required to wait - if so sleep the urlgrabber + m = _RE_MATRIX_ERR.search(data) + if m: + wait = int(m.group(1)) + if wait: + logging.debug('Sleeping URL grabber %s sec', wait) + time.sleep(min(wait, 60)) + # Return, but tell the urlgrabber to retry + return (None, msg) + else: + msg = Ta('warn-matrixFail@1') % data + return (None, msg) + + if data.startswith("\$) | # Two $ signs + (?P[_a-z][_a-z0-9]*) | # $name format + {(?P[^}]*)} # ${name} format + ) + """, re.IGNORECASE | re.VERBOSE) + + def _parse_match(self, match): + # Valid name (in or out of braces): fetch value from section + key = match.group('named') or match.group('braced') + if key is not None: + value, section = self._fetch(key) + return key, value, section + # Escaped delimiter (e.g., $$): return single delimiter + if match.group('escaped') is not None: + # Return None for key and section to indicate it's time to stop + return None, self._delimiter, None + # Anything else: ignore completely, just return it unchanged + return None, match.group(), None + + +interpolation_engines = { + 'configparser': ConfigParserInterpolation, + 'template': TemplateInterpolation, +} + + + +class Section(dict): + """ + A dictionary-like object that represents a section in a config file. + + It does string interpolation if the 'interpolation' attribute + of the 'main' object is set to True. + + Interpolation is tried first from this object, then from the 'DEFAULT' + section of this object, next from the parent and its 'DEFAULT' section, + and so on until the main object is reached. + + A Section will behave like an ordered dictionary - following the + order of the ``scalars`` and ``sections`` attributes. + You can use this to change the order of members. + + Iteration follows the order: scalars, then sections. + """ + + def __init__(self, parent, depth, main, indict=None, name=None): + """ + * parent is the section above + * depth is the depth level of this section + * main is the main ConfigObj + * indict is a dictionary to initialise the section with + """ + if indict is None: + indict = {} + dict.__init__(self) + # used for nesting level *and* interpolation + self.parent = parent + # used for the interpolation attribute + self.main = main + # level of nesting depth of this Section + self.depth = depth + # purely for information + self.name = name + # + self._initialise() + # we do this explicitly so that __setitem__ is used properly + # (rather than just passing to ``dict.__init__``) + for entry, value in indict.iteritems(): + self[entry] = value + + + def _initialise(self): + # the sequence of scalar values in this Section + self.scalars = [] + # the sequence of sections in this Section + self.sections = [] + # for comments :-) + self.comments = {} + self.inline_comments = {} + # for the configspec + self.configspec = {} + self._order = [] + self._configspec_comments = {} + self._configspec_inline_comments = {} + self._cs_section_comments = {} + self._cs_section_inline_comments = {} + # for defaults + self.defaults = [] + self.default_values = {} + + + def _interpolate(self, key, value): + try: + # do we already have an interpolation engine? + engine = self._interpolation_engine + except AttributeError: + # not yet: first time running _interpolate(), so pick the engine + name = self.main.interpolation + if name == True: # note that "if name:" would be incorrect here + # backwards-compatibility: interpolation=True means use default + name = DEFAULT_INTERPOLATION + name = name.lower() # so that "Template", "template", etc. all work + class_ = interpolation_engines.get(name, None) + if class_ is None: + # invalid value for self.main.interpolation + self.main.interpolation = False + return value + else: + # save reference to engine so we don't have to do this again + engine = self._interpolation_engine = class_(self) + # let the engine do the actual work + return engine.interpolate(key, value) + + + def __getitem__(self, key): + """Fetch the item and do string interpolation.""" + val = dict.__getitem__(self, key) + if self.main.interpolation and isinstance(val, StringTypes): + return self._interpolate(key, val) + return val + + + def __setitem__(self, key, value, unrepr=False): + """ + Correctly set a value. + + Making dictionary values Section instances. + (We have to special case 'Section' instances - which are also dicts) + + Keys must be strings. + Values need only be strings (or lists of strings) if + ``main.stringify`` is set. + + `unrepr`` must be set when setting a value to a dictionary, without + creating a new sub-section. + """ + if not isinstance(key, StringTypes): + raise ValueError('The key "%s" is not a string.' % key) + + # add the comment + if not self.comments.has_key(key): + self.comments[key] = [] + self.inline_comments[key] = '' + # remove the entry from defaults + if key in self.defaults: + self.defaults.remove(key) + # + if isinstance(value, Section): + if not self.has_key(key): + self.sections.append(key) + dict.__setitem__(self, key, value) + elif isinstance(value, dict) and not unrepr: + # First create the new depth level, + # then create the section + if not self.has_key(key): + self.sections.append(key) + new_depth = self.depth + 1 + dict.__setitem__( + self, + key, + Section( + self, + new_depth, + self.main, + indict=value, + name=key)) + else: + if not self.has_key(key): + self.scalars.append(key) + if not self.main.stringify: + if isinstance(value, StringTypes): + pass + elif isinstance(value, (list, tuple)): + for entry in value: + if not isinstance(entry, StringTypes): + raise TypeError('Value is not a string "%s".' % entry) + else: + raise TypeError('Value is not a string "%s".' % value) + dict.__setitem__(self, key, value) + + + def __delitem__(self, key): + """Remove items from the sequence when deleting.""" + dict. __delitem__(self, key) + if key in self.scalars: + self.scalars.remove(key) + else: + self.sections.remove(key) + del self.comments[key] + del self.inline_comments[key] + + + def get(self, key, default=None): + """A version of ``get`` that doesn't bypass string interpolation.""" + try: + return self[key] + except KeyError: + return default + + + def update(self, indict): + """ + A version of update that uses our ``__setitem__``. + """ + for entry in indict: + self[entry] = indict[entry] + + + def pop(self, key, *args): + """ + 'D.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' + """ + val = dict.pop(self, key, *args) + if key in self.scalars: + del self.comments[key] + del self.inline_comments[key] + self.scalars.remove(key) + elif key in self.sections: + del self.comments[key] + del self.inline_comments[key] + self.sections.remove(key) + if self.main.interpolation and isinstance(val, StringTypes): + return self._interpolate(key, val) + return val + + + def popitem(self): + """Pops the first (key,val)""" + sequence = (self.scalars + self.sections) + if not sequence: + raise KeyError(": 'popitem(): dictionary is empty'") + key = sequence[0] + val = self[key] + del self[key] + return key, val + + + def clear(self): + """ + A version of clear that also affects scalars/sections + Also clears comments and configspec. + + Leaves other attributes alone : + depth/main/parent are not affected + """ + dict.clear(self) + self.scalars = [] + self.sections = [] + self.comments = {} + self.inline_comments = {} + self.configspec = {} + + + def setdefault(self, key, default=None): + """A version of setdefault that sets sequence if appropriate.""" + try: + return self[key] + except KeyError: + self[key] = default + return self[key] + + + def items(self): + """D.items() -> list of D's (key, value) pairs, as 2-tuples""" + return zip((self.scalars + self.sections), self.values()) + + + def keys(self): + """D.keys() -> list of D's keys""" + return (self.scalars + self.sections) + + + def values(self): + """D.values() -> list of D's values""" + return [self[key] for key in (self.scalars + self.sections)] + + + def iteritems(self): + """D.iteritems() -> an iterator over the (key, value) items of D""" + return iter(self.items()) + + + def iterkeys(self): + """D.iterkeys() -> an iterator over the keys of D""" + return iter((self.scalars + self.sections)) + + __iter__ = iterkeys + + + def itervalues(self): + """D.itervalues() -> an iterator over the values of D""" + return iter(self.values()) + + + def __repr__(self): + """x.__repr__() <==> repr(x)""" + return '{%s}' % ', '.join([('%s: %s' % (repr(key), repr(self[key]))) + for key in (self.scalars + self.sections)]) + + __str__ = __repr__ + __str__.__doc__ = "x.__str__() <==> str(x)" + + + # Extra methods - not in a normal dictionary + + def dict(self): + """ + Return a deepcopy of self as a dictionary. + + All members that are ``Section`` instances are recursively turned to + ordinary dictionaries - by calling their ``dict`` method. + + >>> n = a.dict() + >>> n == a + 1 + >>> n is a + 0 + """ + newdict = {} + for entry in self: + this_entry = self[entry] + if isinstance(this_entry, Section): + this_entry = this_entry.dict() + elif isinstance(this_entry, list): + # create a copy rather than a reference + this_entry = list(this_entry) + elif isinstance(this_entry, tuple): + # create a copy rather than a reference + this_entry = tuple(this_entry) + newdict[entry] = this_entry + return newdict + + + def merge(self, indict): + """ + A recursive update - useful for merging config files. + + >>> a = '''[section1] + ... option1 = True + ... [[subsection]] + ... more_options = False + ... # end of file'''.splitlines() + >>> b = '''# File is user.ini + ... [section1] + ... option1 = False + ... # end of file'''.splitlines() + >>> c1 = ConfigObj(b) + >>> c2 = ConfigObj(a) + >>> c2.merge(c1) + >>> c2 + {'section1': {'option1': 'False', 'subsection': {'more_options': 'False'}}} + """ + for key, val in indict.items(): + if (key in self and isinstance(self[key], dict) and + isinstance(val, dict)): + self[key].merge(val) + else: + self[key] = val + + + def rename(self, oldkey, newkey): + """ + Change a keyname to another, without changing position in sequence. + + Implemented so that transformations can be made on keys, + as well as on values. (used by encode and decode) + + Also renames comments. + """ + if oldkey in self.scalars: + the_list = self.scalars + elif oldkey in self.sections: + the_list = self.sections + else: + raise KeyError('Key "%s" not found.' % oldkey) + pos = the_list.index(oldkey) + # + val = self[oldkey] + dict.__delitem__(self, oldkey) + dict.__setitem__(self, newkey, val) + the_list.remove(oldkey) + the_list.insert(pos, newkey) + comm = self.comments[oldkey] + inline_comment = self.inline_comments[oldkey] + del self.comments[oldkey] + del self.inline_comments[oldkey] + self.comments[newkey] = comm + self.inline_comments[newkey] = inline_comment + + + def walk(self, function, raise_errors=True, + call_on_sections=False, **keywargs): + """ + Walk every member and call a function on the keyword and value. + + Return a dictionary of the return values + + If the function raises an exception, raise the errror + unless ``raise_errors=False``, in which case set the return value to + ``False``. + + Any unrecognised keyword arguments you pass to walk, will be pased on + to the function you pass in. + + Note: if ``call_on_sections`` is ``True`` then - on encountering a + subsection, *first* the function is called for the *whole* subsection, + and then recurses into it's members. This means your function must be + able to handle strings, dictionaries and lists. This allows you + to change the key of subsections as well as for ordinary members. The + return value when called on the whole subsection has to be discarded. + + See the encode and decode methods for examples, including functions. + + .. caution:: + + You can use ``walk`` to transform the names of members of a section + but you mustn't add or delete members. + + >>> config = '''[XXXXsection] + ... XXXXkey = XXXXvalue'''.splitlines() + >>> cfg = ConfigObj(config) + >>> cfg + {'XXXXsection': {'XXXXkey': 'XXXXvalue'}} + >>> def transform(section, key): + ... val = section[key] + ... newkey = key.replace('XXXX', 'CLIENT1') + ... section.rename(key, newkey) + ... if isinstance(val, (tuple, list, dict)): + ... pass + ... else: + ... val = val.replace('XXXX', 'CLIENT1') + ... section[newkey] = val + >>> cfg.walk(transform, call_on_sections=True) + {'CLIENT1section': {'CLIENT1key': None}} + >>> cfg + {'CLIENT1section': {'CLIENT1key': 'CLIENT1value'}} + """ + out = {} + # scalars first + for i in range(len(self.scalars)): + entry = self.scalars[i] + try: + val = function(self, entry, **keywargs) + # bound again in case name has changed + entry = self.scalars[i] + out[entry] = val + except Exception: + if raise_errors: + raise + else: + entry = self.scalars[i] + out[entry] = False + # then sections + for i in range(len(self.sections)): + entry = self.sections[i] + if call_on_sections: + try: + function(self, entry, **keywargs) + except Exception: + if raise_errors: + raise + else: + entry = self.sections[i] + out[entry] = False + # bound again in case name has changed + entry = self.sections[i] + # previous result is discarded + out[entry] = self[entry].walk( + function, + raise_errors=raise_errors, + call_on_sections=call_on_sections, + **keywargs) + return out + + + def decode(self, encoding): + """ + Decode all strings and values to unicode, using the specified encoding. + + Works with subsections and list values. + + Uses the ``walk`` method. + + Testing ``encode`` and ``decode``. + >>> m = ConfigObj(a) + >>> m.decode('ascii') + >>> def testuni(val): + ... for entry in val: + ... if not isinstance(entry, unicode): + ... print >> sys.stderr, type(entry) + ... raise AssertionError, 'decode failed.' + ... if isinstance(val[entry], dict): + ... testuni(val[entry]) + ... elif not isinstance(val[entry], unicode): + ... raise AssertionError, 'decode failed.' + >>> testuni(m) + >>> m.encode('ascii') + >>> a == m + 1 + """ + warn('use of ``decode`` is deprecated.', DeprecationWarning) + def decode(section, key, encoding=encoding, warn=True): + """ """ + val = section[key] + if isinstance(val, (list, tuple)): + newval = [] + for entry in val: + newval.append(entry.decode(encoding)) + elif isinstance(val, dict): + newval = val + else: + newval = val.decode(encoding) + newkey = key.decode(encoding) + section.rename(key, newkey) + section[newkey] = newval + # using ``call_on_sections`` allows us to modify section names + self.walk(decode, call_on_sections=True) + + + def encode(self, encoding): + """ + Encode all strings and values from unicode, + using the specified encoding. + + Works with subsections and list values. + Uses the ``walk`` method. + """ + warn('use of ``encode`` is deprecated.', DeprecationWarning) + def encode(section, key, encoding=encoding): + """ """ + val = section[key] + if isinstance(val, (list, tuple)): + newval = [] + for entry in val: + newval.append(entry.encode(encoding)) + elif isinstance(val, dict): + newval = val + else: + newval = val.encode(encoding) + newkey = key.encode(encoding) + section.rename(key, newkey) + section[newkey] = newval + self.walk(encode, call_on_sections=True) + + + def istrue(self, key): + """A deprecated version of ``as_bool``.""" + warn('use of ``istrue`` is deprecated. Use ``as_bool`` method ' + 'instead.', DeprecationWarning) + return self.as_bool(key) + + + def as_bool(self, key): + """ + Accepts a key as input. The corresponding value must be a string or + the objects (``True`` or 1) or (``False`` or 0). We allow 0 and 1 to + retain compatibility with Python 2.2. + + If the string is one of ``True``, ``On``, ``Yes``, or ``1`` it returns + ``True``. + + If the string is one of ``False``, ``Off``, ``No``, or ``0`` it returns + ``False``. + + ``as_bool`` is not case sensitive. + + Any other input will raise a ``ValueError``. + + >>> a = ConfigObj() + >>> a['a'] = 'fish' + >>> a.as_bool('a') + Traceback (most recent call last): + ValueError: Value "fish" is neither True nor False + >>> a['b'] = 'True' + >>> a.as_bool('b') + 1 + >>> a['b'] = 'off' + >>> a.as_bool('b') + 0 + """ + val = self[key] + if val == True: + return True + elif val == False: + return False + else: + try: + if not isinstance(val, StringTypes): + # TODO: Why do we raise a KeyError here? + raise KeyError() + else: + return self.main._bools[val.lower()] + except KeyError: + raise ValueError('Value "%s" is neither True nor False' % val) + + + def as_int(self, key): + """ + A convenience method which coerces the specified value to an integer. + + If the value is an invalid literal for ``int``, a ``ValueError`` will + be raised. + + >>> a = ConfigObj() + >>> a['a'] = 'fish' + >>> a.as_int('a') + Traceback (most recent call last): + ValueError: invalid literal for int(): fish + >>> a['b'] = '1' + >>> a.as_int('b') + 1 + >>> a['b'] = '3.2' + >>> a.as_int('b') + Traceback (most recent call last): + ValueError: invalid literal for int(): 3.2 + """ + return int(self[key]) + + + def as_float(self, key): + """ + A convenience method which coerces the specified value to a float. + + If the value is an invalid literal for ``float``, a ``ValueError`` will + be raised. + + >>> a = ConfigObj() + >>> a['a'] = 'fish' + >>> a.as_float('a') + Traceback (most recent call last): + ValueError: invalid literal for float(): fish + >>> a['b'] = '1' + >>> a.as_float('b') + 1.0 + >>> a['b'] = '3.2' + >>> a.as_float('b') + 3.2000000000000002 + """ + return float(self[key]) + + + def restore_default(self, key): + """ + Restore (and return) default value for the specified key. + + This method will only work for a ConfigObj that was created + with a configspec and has been validated. + + If there is no default value for this key, ``KeyError`` is raised. + """ + default = self.default_values[key] + dict.__setitem__(self, key, default) + if key not in self.defaults: + self.defaults.append(key) + return default + + + def restore_defaults(self): + """ + Recursively restore default values to all members + that have them. + + This method will only work for a ConfigObj that was created + with a configspec and has been validated. + + It doesn't delete or modify entries without default values. + """ + for key in self.default_values: + self.restore_default(key) + + for section in self.sections: + self[section].restore_defaults() + + +class ConfigObj(Section): + """An object to read, create, and write config files.""" + + _keyword = re.compile(r'''^ # line start + (\s*) # indentation + ( # keyword + (?:".*?")| # double quotes + (?:'.*?')| # single quotes + (?:[^'"=].*?) # no quotes + ) + \s*=\s* # divider + (.*) # value (including list values and comments) + $ # line end + ''', + re.VERBOSE) + + _sectionmarker = re.compile(r'''^ + (\s*) # 1: indentation + ((?:\[\s*)+) # 2: section marker open + ( # 3: section name open + (?:"\s*\S.*?\s*")| # at least one non-space with double quotes + (?:'\s*\S.*?\s*')| # at least one non-space with single quotes + (?:[^'"\s].*?) # at least one non-space unquoted + ) # section name close + ((?:\s*\])+) # 4: section marker close + \s*(\#.*)? # 5: optional comment + $''', + re.VERBOSE) + + # this regexp pulls list values out as a single string + # or single values and comments + # FIXME: this regex adds a '' to the end of comma terminated lists + # workaround in ``_handle_value`` + _valueexp = re.compile(r'''^ + (?: + (?: + ( + (?: + (?: + (?:".*?")| # double quotes + (?:'.*?')| # single quotes + (?:[^'",\#][^,\#]*?) # unquoted + ) + \s*,\s* # comma + )* # match all list items ending in a comma (if any) + ) + ( + (?:".*?")| # double quotes + (?:'.*?')| # single quotes + (?:[^'",\#\s][^,]*?)| # unquoted + (?:(? 1: + msg = "Parsing failed with several errors.\nFirst error %s" % info + error = ConfigObjError(msg) + else: + error = self._errors[0] + # set the errors attribute; it's a list of tuples: + # (error_type, message, line_number) + error.errors = self._errors + # set the config attribute + error.config = self + raise error + # delete private attributes + del self._errors + + if configspec is None: + self.configspec = None + else: + self._handle_configspec(configspec) + + + def _initialise(self, options=None): + if options is None: + options = OPTION_DEFAULTS + + # initialise a few variables + self.filename = None + self._errors = [] + self.raise_errors = options['raise_errors'] + self.interpolation = options['interpolation'] + self.list_values = options['list_values'] + self.create_empty = options['create_empty'] + self.file_error = options['file_error'] + self.stringify = options['stringify'] + self.indent_type = options['indent_type'] + self.encoding = options['encoding'] + self.default_encoding = options['default_encoding'] + self.BOM = False + self.newlines = None + self.write_empty_values = options['write_empty_values'] + self.unrepr = options['unrepr'] + + self.initial_comment = [] + self.final_comment = [] + self.configspec = {} + + # Clear section attributes as well + Section._initialise(self) + + + def __repr__(self): + return ('ConfigObj({%s})' % + ', '.join([('%s: %s' % (repr(key), repr(self[key]))) + for key in (self.scalars + self.sections)])) + + + def _handle_bom(self, infile): + """ + Handle any BOM, and decode if necessary. + + If an encoding is specified, that *must* be used - but the BOM should + still be removed (and the BOM attribute set). + + (If the encoding is wrongly specified, then a BOM for an alternative + encoding won't be discovered or removed.) + + If an encoding is not specified, UTF8 or UTF16 BOM will be detected and + removed. The BOM attribute will be set. UTF16 will be decoded to + unicode. + + NOTE: This method must not be called with an empty ``infile``. + + Specifying the *wrong* encoding is likely to cause a + ``UnicodeDecodeError``. + + ``infile`` must always be returned as a list of lines, but may be + passed in as a single string. + """ + if ((self.encoding is not None) and + (self.encoding.lower() not in BOM_LIST)): + # No need to check for a BOM + # the encoding specified doesn't have one + # just decode + return self._decode(infile, self.encoding) + + if isinstance(infile, (list, tuple)): + line = infile[0] + else: + line = infile + if self.encoding is not None: + # encoding explicitly supplied + # And it could have an associated BOM + # TODO: if encoding is just UTF16 - we ought to check for both + # TODO: big endian and little endian versions. + enc = BOM_LIST[self.encoding.lower()] + if enc == 'utf_16': + # For UTF16 we try big endian and little endian + for BOM, (encoding, final_encoding) in BOMS.items(): + if not final_encoding: + # skip UTF8 + continue + if infile.startswith(BOM): + ### BOM discovered + ##self.BOM = True + # Don't need to remove BOM + return self._decode(infile, encoding) + + # If we get this far, will *probably* raise a DecodeError + # As it doesn't appear to start with a BOM + return self._decode(infile, self.encoding) + + # Must be UTF8 + BOM = BOM_SET[enc] + if not line.startswith(BOM): + return self._decode(infile, self.encoding) + + newline = line[len(BOM):] + + # BOM removed + if isinstance(infile, (list, tuple)): + infile[0] = newline + else: + infile = newline + self.BOM = True + return self._decode(infile, self.encoding) + + # No encoding specified - so we need to check for UTF8/UTF16 + for BOM, (encoding, final_encoding) in BOMS.items(): + if not line.startswith(BOM): + continue + else: + # BOM discovered + self.encoding = final_encoding + if not final_encoding: + self.BOM = True + # UTF8 + # remove BOM + newline = line[len(BOM):] + if isinstance(infile, (list, tuple)): + infile[0] = newline + else: + infile = newline + # UTF8 - don't decode + if isinstance(infile, StringTypes): + return infile.splitlines(True) + else: + return infile + # UTF16 - have to decode + return self._decode(infile, encoding) + + # No BOM discovered and no encoding specified, just return + if isinstance(infile, StringTypes): + # infile read from a file will be a single string + return infile.splitlines(True) + return infile + + + def _a_to_u(self, aString): + """Decode ASCII strings to unicode if a self.encoding is specified.""" + if self.encoding: + return aString.decode('ascii') + else: + return aString + + + def _decode(self, infile, encoding): + """ + Decode infile to unicode. Using the specified encoding. + + if is a string, it also needs converting to a list. + """ + if isinstance(infile, StringTypes): + # can't be unicode + # NOTE: Could raise a ``UnicodeDecodeError`` + return infile.decode(encoding).splitlines(True) + for i, line in enumerate(infile): + if not isinstance(line, unicode): + # NOTE: The isinstance test here handles mixed lists of unicode/string + # NOTE: But the decode will break on any non-string values + # NOTE: Or could raise a ``UnicodeDecodeError`` + infile[i] = line.decode(encoding) + return infile + + + def _decode_element(self, line): + """Decode element to unicode if necessary.""" + if not self.encoding: + return line + if isinstance(line, str) and self.default_encoding: + return line.decode(self.default_encoding) + return line + + + def _str(self, value): + """ + Used by ``stringify`` within validate, to turn non-string values + into strings. + """ + if not isinstance(value, StringTypes): + return str(value) + else: + return value + + + def _parse(self, infile): + """Actually parse the config file.""" + temp_list_values = self.list_values + if self.unrepr: + self.list_values = False + + comment_list = [] + done_start = False + this_section = self + maxline = len(infile) - 1 + cur_index = -1 + reset_comment = False + + while cur_index < maxline: + if reset_comment: + comment_list = [] + cur_index += 1 + line = infile[cur_index] + sline = line.strip() + # do we have anything on the line ? + if not sline or sline.startswith('#'): + reset_comment = False + comment_list.append(line) + continue + + if not done_start: + # preserve initial comment + self.initial_comment = comment_list + comment_list = [] + done_start = True + + reset_comment = True + # first we check if it's a section marker + mat = self._sectionmarker.match(line) + if mat is not None: + # is a section line + (indent, sect_open, sect_name, sect_close, comment) = mat.groups() + if indent and (self.indent_type is None): + self.indent_type = indent + cur_depth = sect_open.count('[') + if cur_depth != sect_close.count(']'): + self._handle_error("Cannot compute the section depth at line %s.", + NestingError, infile, cur_index) + continue + + if cur_depth < this_section.depth: + # the new section is dropping back to a previous level + try: + parent = self._match_depth(this_section, + cur_depth).parent + except SyntaxError: + self._handle_error("Cannot compute nesting level at line %s.", + NestingError, infile, cur_index) + continue + elif cur_depth == this_section.depth: + # the new section is a sibling of the current section + parent = this_section.parent + elif cur_depth == this_section.depth + 1: + # the new section is a child the current section + parent = this_section + else: + self._handle_error("Section too nested at line %s.", + NestingError, infile, cur_index) + + sect_name = self._unquote(sect_name) + if parent.has_key(sect_name): + self._handle_error('Duplicate section name at line %s.', + DuplicateError, infile, cur_index) + continue + + # create the new section + this_section = Section( + parent, + cur_depth, + self, + name=sect_name) + parent[sect_name] = this_section + parent.inline_comments[sect_name] = comment + parent.comments[sect_name] = comment_list + continue + # + # it's not a section marker, + # so it should be a valid ``key = value`` line + mat = self._keyword.match(line) + if mat is None: + # it neither matched as a keyword + # or a section marker + self._handle_error( + 'Invalid line at line "%s".', + ParseError, infile, cur_index) + else: + # is a keyword value + # value will include any inline comment + (indent, key, value) = mat.groups() + if indent and (self.indent_type is None): + self.indent_type = indent + # check for a multiline value + if value[:3] in ['"""', "'''"]: + try: + (value, comment, cur_index) = self._multiline( + value, infile, cur_index, maxline) + except SyntaxError: + self._handle_error( + 'Parse error in value at line %s.', + ParseError, infile, cur_index) + continue + else: + if self.unrepr: + comment = '' + try: + value = unrepr(value) + except Exception, e: + if type(e) == UnknownType: + msg = 'Unknown name or type in value at line %s.' + else: + msg = 'Parse error in value at line %s.' + self._handle_error(msg, UnreprError, infile, + cur_index) + continue + else: + if self.unrepr: + comment = '' + try: + value = unrepr(value) + except Exception, e: + if isinstance(e, UnknownType): + msg = 'Unknown name or type in value at line %s.' + else: + msg = 'Parse error in value at line %s.' + self._handle_error(msg, UnreprError, infile, + cur_index) + continue + else: + # extract comment and lists + try: + (value, comment) = self._handle_value(value) + except SyntaxError: + self._handle_error( + 'Parse error in value at line %s.', + ParseError, infile, cur_index) + continue + # + key = self._unquote(key) + if this_section.has_key(key): + self._handle_error( + 'Duplicate keyword name at line %s.', + DuplicateError, infile, cur_index) + continue + # add the key. + # we set unrepr because if we have got this far we will never + # be creating a new section + this_section.__setitem__(key, value, unrepr=True) + this_section.inline_comments[key] = comment + this_section.comments[key] = comment_list + continue + # + if self.indent_type is None: + # no indentation used, set the type accordingly + self.indent_type = '' + + # preserve the final comment + if not self and not self.initial_comment: + self.initial_comment = comment_list + elif not reset_comment: + self.final_comment = comment_list + self.list_values = temp_list_values + + + def _match_depth(self, sect, depth): + """ + Given a section and a depth level, walk back through the sections + parents to see if the depth level matches a previous section. + + Return a reference to the right section, + or raise a SyntaxError. + """ + while depth < sect.depth: + if sect is sect.parent: + # we've reached the top level already + raise SyntaxError() + sect = sect.parent + if sect.depth == depth: + return sect + # shouldn't get here + raise SyntaxError() + + + def _handle_error(self, text, ErrorClass, infile, cur_index): + """ + Handle an error according to the error settings. + + Either raise the error or store it. + The error will have occured at ``cur_index`` + """ + line = infile[cur_index] + cur_index += 1 + message = text % cur_index + error = ErrorClass(message, cur_index, line) + if self.raise_errors: + # raise the error - parsing stops here + raise error + # store the error + # reraise when parsing has finished + self._errors.append(error) + + + def _unquote(self, value): + """Return an unquoted version of a value""" + if (value[0] == value[-1]) and (value[0] in ('"', "'")): + value = value[1:-1] + return value + + + def _quote(self, value, multiline=True): + """ + Return a safely quoted version of a value. + + Raise a ConfigObjError if the value cannot be safely quoted. + If multiline is ``True`` (default) then use triple quotes + if necessary. + + Don't quote values that don't need it. + Recursively quote members of a list and return a comma joined list. + Multiline is ``False`` for lists. + Obey list syntax for empty and single member lists. + + If ``list_values=False`` then the value is only quoted if it contains + a ``\n`` (is multiline) or '#'. + + If ``write_empty_values`` is set, and the value is an empty string, it + won't be quoted. + """ + if multiline and self.write_empty_values and value == '': + # Only if multiline is set, so that it is used for values not + # keys, and not values that are part of a list + return '' + + if multiline and isinstance(value, (list, tuple)): + if not value: + return ',' + elif len(value) == 1: + return self._quote(value[0], multiline=False) + ',' + return ', '.join([self._quote(val, multiline=False) + for val in value]) + if not isinstance(value, StringTypes): + if self.stringify: + value = str(value) + else: + raise TypeError('Value "%s" is not a string.' % value) + + if not value: + return '""' + + no_lists_no_quotes = not self.list_values and '\n' not in value and '#' not in value + need_triple = multiline and ((("'" in value) and ('"' in value)) or ('\n' in value )) + hash_triple_quote = multiline and not need_triple and ("'" in value) and ('"' in value) and ('#' in value) + check_for_single = (no_lists_no_quotes or not need_triple) and not hash_triple_quote + + if check_for_single: + if not self.list_values: + # we don't quote if ``list_values=False`` + quot = noquot + # for normal values either single or double quotes will do + elif '\n' in value: + # will only happen if multiline is off - e.g. '\n' in key + raise ConfigObjError('Value "%s" cannot be safely quoted.' % value) + elif ((value[0] not in wspace_plus) and + (value[-1] not in wspace_plus) and + (',' not in value)): + quot = noquot + else: + quot = self._get_single_quote(value) + else: + # if value has '\n' or "'" *and* '"', it will need triple quotes + quot = self._get_triple_quote(value) + + if quot == noquot and '#' in value and self.list_values: + quot = self._get_single_quote(value) + + return quot % value + + + def _get_single_quote(self, value): + if ("'" in value) and ('"' in value): + raise ConfigObjError('Value "%s" cannot be safely quoted.' % value) + elif '"' in value: + quot = squot + else: + quot = dquot + return quot + + + def _get_triple_quote(self, value): + if (value.find('"""') != -1) and (value.find("'''") != -1): + raise ConfigObjError('Value "%s" cannot be safely quoted.' % value) + if value.find('"""') == -1: + quot = tdquot + else: + quot = tsquot + return quot + + + def _handle_value(self, value): + """ + Given a value string, unquote, remove comment, + handle lists. (including empty and single member lists) + """ + # do we look for lists in values ? + if not self.list_values: + mat = self._nolistvalue.match(value) + if mat is None: + raise SyntaxError() + # NOTE: we don't unquote here + return mat.groups() + # + mat = self._valueexp.match(value) + if mat is None: + # the value is badly constructed, probably badly quoted, + # or an invalid list + raise SyntaxError() + (list_values, single, empty_list, comment) = mat.groups() + if (list_values == '') and (single is None): + # change this if you want to accept empty values + raise SyntaxError() + # NOTE: note there is no error handling from here if the regex + # is wrong: then incorrect values will slip through + if empty_list is not None: + # the single comma - meaning an empty list + return ([], comment) + if single is not None: + # handle empty values + if list_values and not single: + # FIXME: the '' is a workaround because our regex now matches + # '' at the end of a list if it has a trailing comma + single = None + else: + single = single or '""' + single = self._unquote(single) + if list_values == '': + # not a list value + return (single, comment) + the_list = self._listvalueexp.findall(list_values) + the_list = [self._unquote(val) for val in the_list] + if single is not None: + the_list += [single] + return (the_list, comment) + + + def _multiline(self, value, infile, cur_index, maxline): + """Extract the value, where we are in a multiline situation.""" + quot = value[:3] + newvalue = value[3:] + single_line = self._triple_quote[quot][0] + multi_line = self._triple_quote[quot][1] + mat = single_line.match(value) + if mat is not None: + retval = list(mat.groups()) + retval.append(cur_index) + return retval + elif newvalue.find(quot) != -1: + # somehow the triple quote is missing + raise SyntaxError() + # + while cur_index < maxline: + cur_index += 1 + newvalue += '\n' + line = infile[cur_index] + if line.find(quot) == -1: + newvalue += line + else: + # end of multiline, process it + break + else: + # we've got to the end of the config, oops... + raise SyntaxError() + mat = multi_line.match(line) + if mat is None: + # a badly formed line + raise SyntaxError() + (value, comment) = mat.groups() + return (newvalue + value, comment, cur_index) + + + def _handle_configspec(self, configspec): + """Parse the configspec.""" + # FIXME: Should we check that the configspec was created with the + # correct settings ? (i.e. ``list_values=False``) + if not isinstance(configspec, ConfigObj): + try: + configspec = ConfigObj(configspec, + raise_errors=True, + file_error=True, + list_values=False) + except ConfigObjError, e: + # FIXME: Should these errors have a reference + # to the already parsed ConfigObj ? + raise ConfigspecError('Parsing configspec failed: %s' % e) + except IOError, e: + raise IOError('Reading configspec failed: %s' % e) + + self._set_configspec_value(configspec, self) + + + def _set_configspec_value(self, configspec, section): + """Used to recursively set configspec values.""" + if '__many__' in configspec.sections: + section.configspec['__many__'] = configspec['__many__'] + if len(configspec.sections) > 1: + # FIXME: can we supply any useful information here ? + raise RepeatSectionError() + + if hasattr(configspec, 'initial_comment'): + section._configspec_initial_comment = configspec.initial_comment + section._configspec_final_comment = configspec.final_comment + section._configspec_encoding = configspec.encoding + section._configspec_BOM = configspec.BOM + section._configspec_newlines = configspec.newlines + section._configspec_indent_type = configspec.indent_type + + for entry in configspec.scalars: + section._configspec_comments[entry] = configspec.comments[entry] + section._configspec_inline_comments[entry] = configspec.inline_comments[entry] + section.configspec[entry] = configspec[entry] + section._order.append(entry) + + for entry in configspec.sections: + if entry == '__many__': + continue + + section._cs_section_comments[entry] = configspec.comments[entry] + section._cs_section_inline_comments[entry] = configspec.inline_comments[entry] + if not section.has_key(entry): + section[entry] = {} + self._set_configspec_value(configspec[entry], section[entry]) + + + def _handle_repeat(self, section, configspec): + """Dynamically assign configspec for repeated section.""" + try: + section_keys = configspec.sections + scalar_keys = configspec.scalars + except AttributeError: + section_keys = [entry for entry in configspec + if isinstance(configspec[entry], dict)] + scalar_keys = [entry for entry in configspec + if not isinstance(configspec[entry], dict)] + + if '__many__' in section_keys and len(section_keys) > 1: + # FIXME: can we supply any useful information here ? + raise RepeatSectionError() + + scalars = {} + sections = {} + for entry in scalar_keys: + val = configspec[entry] + scalars[entry] = val + for entry in section_keys: + val = configspec[entry] + if entry == '__many__': + scalars[entry] = val + continue + sections[entry] = val + + section.configspec = scalars + for entry in sections: + if not section.has_key(entry): + section[entry] = {} + self._handle_repeat(section[entry], sections[entry]) + + + def _write_line(self, indent_string, entry, this_entry, comment): + """Write an individual line, for the write method""" + # NOTE: the calls to self._quote here handles non-StringType values. + if not self.unrepr: + val = self._decode_element(self._quote(this_entry)) + else: + val = repr(this_entry) + return '%s%s%s%s%s' % (indent_string, + self._decode_element(self._quote(entry, multiline=False)), + self._a_to_u(' = '), + val, + self._decode_element(comment)) + + + def _write_marker(self, indent_string, depth, entry, comment): + """Write a section marker line""" + return '%s%s%s%s%s' % (indent_string, + self._a_to_u('[' * depth), + self._quote(self._decode_element(entry), multiline=False), + self._a_to_u(']' * depth), + self._decode_element(comment)) + + + def _handle_comment(self, comment): + """Deal with a comment.""" + if not comment: + return '' + start = self.indent_type + if not comment.startswith('#'): + start += self._a_to_u(' # ') + return (start + comment) + + + # Public methods + + def write(self, outfile=None, section=None): + """ + Write the current ConfigObj as a file + + tekNico: FIXME: use StringIO instead of real files + + >>> filename = a.filename + >>> a.filename = 'test.ini' + >>> a.write() + >>> a.filename = filename + >>> a == ConfigObj('test.ini', raise_errors=True) + 1 + """ + if self.indent_type is None: + # this can be true if initialised from a dictionary + self.indent_type = DEFAULT_INDENT_TYPE + + out = [] + cs = self._a_to_u('#') + csp = self._a_to_u('# ') + if section is None: + int_val = self.interpolation + self.interpolation = False + section = self + for line in self.initial_comment: + line = self._decode_element(line) + stripped_line = line.strip() + if stripped_line and not stripped_line.startswith(cs): + line = csp + line + out.append(line) + + indent_string = self.indent_type * section.depth + for entry in (section.scalars + section.sections): + if entry in section.defaults: + # don't write out default values + continue + for comment_line in section.comments[entry]: + comment_line = self._decode_element(comment_line.lstrip()) + if comment_line and not comment_line.startswith(cs): + comment_line = csp + comment_line + out.append(indent_string + comment_line) + this_entry = section[entry] + comment = self._handle_comment(section.inline_comments[entry]) + + if isinstance(this_entry, dict): + # a section + out.append(self._write_marker( + indent_string, + this_entry.depth, + entry, + comment)) + out.extend(self.write(section=this_entry)) + else: + out.append(self._write_line( + indent_string, + entry, + this_entry, + comment)) + + if section is self: + for line in self.final_comment: + line = self._decode_element(line) + stripped_line = line.strip() + if stripped_line and not stripped_line.startswith(cs): + line = csp + line + out.append(line) + self.interpolation = int_val + + if section is not self: + return out + + if (self.filename is None) and (outfile is None): + # output a list of lines + # might need to encode + # NOTE: This will *screw* UTF16, each line will start with the BOM + if self.encoding: + out = [l.encode(self.encoding) for l in out] + if (self.BOM and ((self.encoding is None) or + (BOM_LIST.get(self.encoding.lower()) == 'utf_8'))): + # Add the UTF8 BOM + if not out: + out.append('') + out[0] = BOM_UTF8 + out[0] + return out + + # Turn the list to a string, joined with correct newlines + newline = self.newlines or os.linesep + output = self._a_to_u(newline).join(out) + if self.encoding: + output = output.encode(self.encoding) + if self.BOM and ((self.encoding is None) or match_utf8(self.encoding)): + # Add the UTF8 BOM + output = BOM_UTF8 + output + + if not output.endswith(newline): + output += newline + if outfile is not None: + outfile.write(output) + else: + h = open(self.filename, 'wb') + h.write(output) + h.close() + + + def validate(self, validator, preserve_errors=False, copy=False, + section=None): + """ + Test the ConfigObj against a configspec. + + It uses the ``validator`` object from *validate.py*. + + To run ``validate`` on the current ConfigObj, call: :: + + test = config.validate(validator) + + (Normally having previously passed in the configspec when the ConfigObj + was created - you can dynamically assign a dictionary of checks to the + ``configspec`` attribute of a section though). + + It returns ``True`` if everything passes, or a dictionary of + pass/fails (True/False). If every member of a subsection passes, it + will just have the value ``True``. (It also returns ``False`` if all + members fail). + + In addition, it converts the values from strings to their native + types if their checks pass (and ``stringify`` is set). + + If ``preserve_errors`` is ``True`` (``False`` is default) then instead + of a marking a fail with a ``False``, it will preserve the actual + exception object. This can contain info about the reason for failure. + For example the ``VdtValueTooSmallError`` indicates that the value + supplied was too small. If a value (or section) is missing it will + still be marked as ``False``. + + You must have the validate module to use ``preserve_errors=True``. + + You can then use the ``flatten_errors`` function to turn your nested + results dictionary into a flattened list of failures - useful for + displaying meaningful error messages. + """ + if section is None: + if self.configspec is None: + raise ValueError('No configspec supplied.') + if preserve_errors: + # We do this once to remove a top level dependency on the validate module + # Which makes importing configobj faster + from validate import VdtMissingValue + self._vdtMissingValue = VdtMissingValue + section = self + # + spec_section = section.configspec + if copy and hasattr(section, '_configspec_initial_comment'): + section.initial_comment = section._configspec_initial_comment + section.final_comment = section._configspec_final_comment + section.encoding = section._configspec_encoding + section.BOM = section._configspec_BOM + section.newlines = section._configspec_newlines + section.indent_type = section._configspec_indent_type + + if '__many__' in section.configspec: + many = spec_section['__many__'] + # dynamically assign the configspecs + # for the sections below + for entry in section.sections: + self._handle_repeat(section[entry], many) + # + out = {} + ret_true = True + ret_false = True + order = [k for k in section._order if k in spec_section] + order += [k for k in spec_section if k not in order] + for entry in order: + if entry == '__many__': + continue + if (not entry in section.scalars) or (entry in section.defaults): + # missing entries + # or entries from defaults + missing = True + val = None + if copy and not entry in section.scalars: + # copy comments + section.comments[entry] = ( + section._configspec_comments.get(entry, [])) + section.inline_comments[entry] = ( + section._configspec_inline_comments.get(entry, '')) + # + else: + missing = False + val = section[entry] + try: + check = validator.check(spec_section[entry], + val, + missing=missing + ) + except validator.baseErrorClass, e: + if not preserve_errors or isinstance(e, self._vdtMissingValue): + out[entry] = False + else: + # preserve the error + out[entry] = e + ret_false = False + ret_true = False + else: + try: + section.default_values.pop(entry, None) + except AttributeError: + # For Python 2.2 compatibility + try: + del section.default_values[entry] + except KeyError: + pass + + if hasattr(validator, 'get_default_value'): + try: + section.default_values[entry] = validator.get_default_value(spec_section[entry]) + except KeyError: + # No default + pass + + ret_false = False + out[entry] = True + if self.stringify or missing: + # if we are doing type conversion + # or the value is a supplied default + if not self.stringify: + if isinstance(check, (list, tuple)): + # preserve lists + check = [self._str(item) for item in check] + elif missing and check is None: + # convert the None from a default to a '' + check = '' + else: + check = self._str(check) + if (check != val) or missing: + section[entry] = check + if not copy and missing and entry not in section.defaults: + section.defaults.append(entry) + # Missing sections will have been created as empty ones when the + # configspec was read. + for entry in section.sections: + # FIXME: this means DEFAULT is not copied in copy mode + if section is self and entry == 'DEFAULT': + continue + if copy: + section.comments[entry] = section._cs_section_comments.get(entry, []) + section.inline_comments[entry] = section._cs_section_inline_comments.get(entry, '') + check = self.validate(validator, preserve_errors=preserve_errors, copy=copy, section=section[entry]) + out[entry] = check + if check == False: + ret_true = False + elif check == True: + ret_false = False + else: + ret_true = False + ret_false = False + # + if ret_true: + return True + elif ret_false: + return False + return out + + + def reset(self): + """Clear ConfigObj instance and restore to 'freshly created' state.""" + self.clear() + self._initialise() + # FIXME: Should be done by '_initialise', but ConfigObj constructor (and reload) + # requires an empty dictionary + self.configspec = None + # Just to be sure ;-) + self._original_configspec = None + + + def reload(self): + """ + Reload a ConfigObj from file. + + This method raises a ``ReloadError`` if the ConfigObj doesn't have + a filename attribute pointing to a file. + """ + if not isinstance(self.filename, StringTypes): + raise ReloadError() + + filename = self.filename + current_options = {} + for entry in OPTION_DEFAULTS: + if entry == 'configspec': + continue + current_options[entry] = getattr(self, entry) + + configspec = self._original_configspec + current_options['configspec'] = configspec + + self.clear() + self._initialise(current_options) + self._load(filename, configspec) + + + +class SimpleVal(object): + """ + A simple validator. + Can be used to check that all members expected are present. + + To use it, provide a configspec with all your members in (the value given + will be ignored). Pass an instance of ``SimpleVal`` to the ``validate`` + method of your ``ConfigObj``. ``validate`` will return ``True`` if all + members are present, or a dictionary with True/False meaning + present/missing. (Whole missing sections will be replaced with ``False``) + """ + + def __init__(self): + self.baseErrorClass = ConfigObjError + + def check(self, check, member, missing=False): + """A dummy check method, always returns the value unchanged.""" + if missing: + raise self.baseErrorClass() + return member + + +# Check / processing functions for options +def flatten_errors(cfg, res, levels=None, results=None): + """ + An example function that will turn a nested dictionary of results + (as returned by ``ConfigObj.validate``) into a flat list. + + ``cfg`` is the ConfigObj instance being checked, ``res`` is the results + dictionary returned by ``validate``. + + (This is a recursive function, so you shouldn't use the ``levels`` or + ``results`` arguments - they are used by the function. + + Returns a list of keys that failed. Each member of the list is a tuple : + :: + + ([list of sections...], key, result) + + If ``validate`` was called with ``preserve_errors=False`` (the default) + then ``result`` will always be ``False``. + + *list of sections* is a flattened list of sections that the key was found + in. + + If the section was missing then key will be ``None``. + + If the value (or section) was missing then ``result`` will be ``False``. + + If ``validate`` was called with ``preserve_errors=True`` and a value + was present, but failed the check, then ``result`` will be the exception + object returned. You can use this as a string that describes the failure. + + For example *The value "3" is of the wrong type*. + + >>> import validate + >>> vtor = validate.Validator() + >>> my_ini = ''' + ... option1 = True + ... [section1] + ... option1 = True + ... [section2] + ... another_option = Probably + ... [section3] + ... another_option = True + ... [[section3b]] + ... value = 3 + ... value2 = a + ... value3 = 11 + ... ''' + >>> my_cfg = ''' + ... option1 = boolean() + ... option2 = boolean() + ... option3 = boolean(default=Bad_value) + ... [section1] + ... option1 = boolean() + ... option2 = boolean() + ... option3 = boolean(default=Bad_value) + ... [section2] + ... another_option = boolean() + ... [section3] + ... another_option = boolean() + ... [[section3b]] + ... value = integer + ... value2 = integer + ... value3 = integer(0, 10) + ... [[[section3b-sub]]] + ... value = string + ... [section4] + ... another_option = boolean() + ... ''' + >>> cs = my_cfg.split('\\n') + >>> ini = my_ini.split('\\n') + >>> cfg = ConfigObj(ini, configspec=cs) + >>> res = cfg.validate(vtor, preserve_errors=True) + >>> errors = [] + >>> for entry in flatten_errors(cfg, res): + ... section_list, key, error = entry + ... section_list.insert(0, '[root]') + ... if key is not None: + ... section_list.append(key) + ... else: + ... section_list.append('[missing]') + ... section_string = ', '.join(section_list) + ... errors.append((section_string, ' = ', error)) + >>> errors.sort() + >>> for entry in errors: + ... print entry[0], entry[1], (entry[2] or 0) + [root], option2 = 0 + [root], option3 = the value "Bad_value" is of the wrong type. + [root], section1, option2 = 0 + [root], section1, option3 = the value "Bad_value" is of the wrong type. + [root], section2, another_option = the value "Probably" is of the wrong type. + [root], section3, section3b, section3b-sub, [missing] = 0 + [root], section3, section3b, value2 = the value "a" is of the wrong type. + [root], section3, section3b, value3 = the value "11" is too big. + [root], section4, [missing] = 0 + """ + if levels is None: + # first time called + levels = [] + results = [] + if res is True: + return results + if res is False: + results.append((levels[:], None, False)) + if levels: + levels.pop() + return results + for (key, val) in res.items(): + if val == True: + continue + if isinstance(cfg.get(key), dict): + # Go down one level + levels.append(key) + flatten_errors(cfg[key], val, levels, results) + continue + results.append((levels[:], key, val)) + # + # Go up one level + if levels: + levels.pop() + # + return results + + +"""*A programming language is a medium of expression.* - Paul Graham""" diff --git a/sabnzbd/utils/feedparser.py b/sabnzbd/utils/feedparser.py new file mode 100644 index 0000000..bb802df --- /dev/null +++ b/sabnzbd/utils/feedparser.py @@ -0,0 +1,2858 @@ +#!/usr/bin/env python +"""Universal feed parser + +Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds + +Visit http://feedparser.org/ for the latest version +Visit http://feedparser.org/docs/ for the latest documentation + +Required: Python 2.1 or later +Recommended: Python 2.3 or later +Recommended: CJKCodecs and iconv_codec +""" + +__version__ = "4.1"# + "$Revision: 1.92 $"[11:15] + "-cvs" +__license__ = """Copyright (c) 2002-2006, Mark Pilgrim, All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE.""" +__author__ = "Mark Pilgrim " +__contributors__ = ["Jason Diamond ", + "John Beimler ", + "Fazal Majid ", + "Aaron Swartz ", + "Kevin Marks "] +_debug = 0 + +# HTTP "User-Agent" header to send to servers when downloading feeds. +# If you are embedding feedparser in a larger application, you should +# change this to your application name and URL. +USER_AGENT = "UniversalFeedParser/%s +http://feedparser.org/" % __version__ + +# HTTP "Accept" header to send to servers when downloading feeds. If you don't +# want to send an Accept header, set this to None. +ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1" + +# List of preferred XML parsers, by SAX driver name. These will be tried first, +# but if they're not installed, Python will keep searching through its own list +# of pre-installed parsers until it finds one that supports everything we need. +PREFERRED_XML_PARSERS = ["drv_libxml2"] + +# If you want feedparser to automatically run HTML markup through HTML Tidy, set +# this to 1. Requires mxTidy +# or utidylib . +TIDY_MARKUP = 0 + +# List of Python interfaces for HTML Tidy, in order of preference. Only useful +# if TIDY_MARKUP = 1 +PREFERRED_TIDY_INTERFACES = ["uTidy", "mxTidy"] + +# ---------- required modules (should come with any Python distribution) ---------- +import sgmllib, re, sys, copy, urlparse, time, rfc822, types, cgi, urllib, urllib2 +try: + from cStringIO import StringIO as _StringIO +except: + from StringIO import StringIO as _StringIO + +# ---------- optional modules (feedparser will work without these, but with reduced functionality) ---------- + +# gzip is included with most Python distributions, but may not be available if you compiled your own +try: + import gzip +except: + gzip = None +try: + import zlib +except: + zlib = None + +# If a real XML parser is available, feedparser will attempt to use it. feedparser has +# been tested with the built-in SAX parser, PyXML, and libxml2. On platforms where the +# Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some +# versions of FreeBSD), feedparser will quietly fall back on regex-based parsing. +try: + import xml.sax + xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers + from xml.sax.saxutils import escape as _xmlescape + _XML_AVAILABLE = 1 +except: + _XML_AVAILABLE = 0 + def _xmlescape(data): + data = data.replace('&', '&') + data = data.replace('>', '>') + data = data.replace('<', '<') + return data + +# base64 support for Atom feeds that contain embedded binary data +try: + import base64, binascii +except: + base64 = binascii = None + +# cjkcodecs and iconv_codec provide support for more character encodings. +# Both are available from http://cjkpython.i18n.org/ +try: + import cjkcodecs.aliases +except: + pass +try: + import iconv_codec +except: + pass + +# chardet library auto-detects character encodings +# Download from http://chardet.feedparser.org/ +try: + import chardet + if _debug: + import chardet.constants + chardet.constants._debug = 1 +except: + chardet = None + +# ---------- don't touch these ---------- +class ThingsNobodyCaresAboutButMe(Exception): pass +class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass +class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass +class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass +class UndeclaredNamespace(Exception): pass + +sgmllib.tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') +sgmllib.special = re.compile('' % (tag, ''.join([' %s="%s"' % t for t in attrs])), escape=0) + + # match namespaces + if tag.find(':') <> -1: + prefix, suffix = tag.split(':', 1) + else: + prefix, suffix = '', tag + prefix = self.namespacemap.get(prefix, prefix) + if prefix: + prefix = prefix + '_' + + # special hack for better tracking of empty textinput/image elements in illformed feeds + if (not prefix) and tag not in ('title', 'link', 'description', 'name'): + self.intextinput = 0 + if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'): + self.inimage = 0 + + # call special handler (if defined) or default handler + methodname = '_start_' + prefix + suffix + try: + method = getattr(self, methodname) + return method(attrsD) + except AttributeError: + return self.push(prefix + suffix, 1) + + def unknown_endtag(self, tag): + if _debug: sys.stderr.write('end %s\n' % tag) + # match namespaces + if tag.find(':') <> -1: + prefix, suffix = tag.split(':', 1) + else: + prefix, suffix = '', tag + prefix = self.namespacemap.get(prefix, prefix) + if prefix: + prefix = prefix + '_' + + # call special handler (if defined) or default handler + methodname = '_end_' + prefix + suffix + try: + method = getattr(self, methodname) + method() + except AttributeError: + self.pop(prefix + suffix) + + # track inline content + if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + # element declared itself as escaped markup, but it isn't really + self.contentparams['type'] = 'application/xhtml+xml' + if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': + tag = tag.split(':')[-1] + self.handle_data('' % tag, escape=0) + + # track xml:base and xml:lang going out of scope + if self.basestack: + self.basestack.pop() + if self.basestack and self.basestack[-1]: + self.baseuri = self.basestack[-1] + if self.langstack: + self.langstack.pop() + if self.langstack: # and (self.langstack[-1] is not None): + self.lang = self.langstack[-1] + + def handle_charref(self, ref): + # called for each character reference, e.g. for ' ', ref will be '160' + if not self.elementstack: return + ref = ref.lower() + if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'): + text = '&#%s;' % ref + else: + if ref[0] == 'x': + c = int(ref[1:], 16) + else: + c = int(ref) + text = unichr(c).encode('utf-8') + self.elementstack[-1][2].append(text) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for '©', ref will be 'copy' + if not self.elementstack: return + if _debug: sys.stderr.write('entering handle_entityref with %s\n' % ref) + if ref in ('lt', 'gt', 'quot', 'amp', 'apos'): + text = '&%s;' % ref + else: + # entity resolution graciously donated by Aaron Swartz + def name2cp(k): + import htmlentitydefs + if hasattr(htmlentitydefs, 'name2codepoint'): # requires Python 2.3 + return htmlentitydefs.name2codepoint[k] + k = htmlentitydefs.entitydefs[k] + if k.startswith('&#') and k.endswith(';'): + return int(k[2:-1]) # not in latin-1 + return ord(k) + try: name2cp(ref) + except KeyError: text = '&%s;' % ref + else: text = unichr(name2cp(ref)).encode('utf-8') + self.elementstack[-1][2].append(text) + + def handle_data(self, text, escape=1): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + if not self.elementstack: return + if escape and self.contentparams.get('type') == 'application/xhtml+xml': + text = _xmlescape(text) + self.elementstack[-1][2].append(text) + + def handle_comment(self, text): + # called for each comment, e.g. + pass + + def handle_pi(self, text): + # called for each processing instruction, e.g. + pass + + def handle_decl(self, text): + pass + + def parse_declaration(self, i): + # override internal declaration handler to handle CDATA blocks + if _debug: sys.stderr.write('entering parse_declaration\n') + if self.rawdata[i:i+9] == '', i) + if k == -1: k = len(self.rawdata) + self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0) + return k+3 + else: + k = self.rawdata.find('>', i) + return k+1 + + def mapContentType(self, contentType): + contentType = contentType.lower() + if contentType == 'text': + contentType = 'text/plain' + elif contentType == 'html': + contentType = 'text/html' + elif contentType == 'xhtml': + contentType = 'application/xhtml+xml' + return contentType + + def trackNamespace(self, prefix, uri): + loweruri = uri.lower() + if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/') and not self.version: + self.version = 'rss090' + if loweruri == 'http://purl.org/rss/1.0/' and not self.version: + self.version = 'rss10' + if loweruri == 'http://www.w3.org/2005/atom' and not self.version: + self.version = 'atom10' + if loweruri.find('backend.userland.com/rss') <> -1: + # match any backend.userland.com namespace + uri = 'http://backend.userland.com/rss' + loweruri = uri + if self._matchnamespaces.has_key(loweruri): + self.namespacemap[prefix] = self._matchnamespaces[loweruri] + self.namespacesInUse[self._matchnamespaces[loweruri]] = uri + else: + self.namespacesInUse[prefix or ''] = uri + + def resolveURI(self, uri): + return _urljoin(self.baseuri or '', uri) + + def decodeEntities(self, element, data): + return data + + def push(self, element, expectingText): + self.elementstack.append([element, expectingText, []]) + + def pop(self, element, stripWhitespace=1): + if not self.elementstack: return + if self.elementstack[-1][0] != element: return + + element, expectingText, pieces = self.elementstack.pop() + output = ''.join(pieces) + if stripWhitespace: + output = output.strip() + if not expectingText: return output + + # decode base64 content + if base64 and self.contentparams.get('base64', 0): + try: + output = base64.decodestring(output) + except binascii.Error: + pass + except binascii.Incomplete: + pass + + # resolve relative URIs + if (element in self.can_be_relative_uri) and output: + output = self.resolveURI(output) + + # decode entities within embedded markup + if not self.contentparams.get('base64', 0): + output = self.decodeEntities(element, output) + + # remove temporary cruft from contentparams + try: + del self.contentparams['mode'] + except KeyError: + pass + try: + del self.contentparams['base64'] + except KeyError: + pass + + # resolve relative URIs within embedded markup + if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: + if element in self.can_contain_relative_uris: + output = _resolveRelativeURIs(output, self.baseuri, self.encoding) + + # sanitize embedded markup + if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: + if element in self.can_contain_dangerous_markup: + output = _sanitizeHTML(output, self.encoding) + + if self.encoding and type(output) != type(u''): + try: + output = unicode(output, self.encoding) + except: + pass + + # categories/tags/keywords/whatever are handled in _end_category + if element == 'category': + return output + + # store output in appropriate place(s) + if self.inentry and not self.insource: + if element == 'content': + self.entries[-1].setdefault(element, []) + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + self.entries[-1][element].append(contentparams) + elif element == 'link': + self.entries[-1][element] = output + if output: + self.entries[-1]['links'][-1]['href'] = output + else: + if element == 'description': + element = 'summary' + self.entries[-1][element] = output + if self.incontent: + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + self.entries[-1][element + '_detail'] = contentparams + elif (self.infeed or self.insource) and (not self.intextinput) and (not self.inimage): + context = self._getContext() + if element == 'description': + element = 'subtitle' + context[element] = output + if element == 'link': + context['links'][-1]['href'] = output + elif self.incontent: + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + context[element + '_detail'] = contentparams + return output + + def pushContent(self, tag, attrsD, defaultContentType, expectingText): + self.incontent += 1 + self.contentparams = FeedParserDict({ + 'type': self.mapContentType(attrsD.get('type', defaultContentType)), + 'language': self.lang, + 'base': self.baseuri}) + self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams) + self.push(tag, expectingText) + + def popContent(self, tag): + value = self.pop(tag) + self.incontent -= 1 + self.contentparams.clear() + return value + + def _mapToStandardPrefix(self, name): + colonpos = name.find(':') + if colonpos <> -1: + prefix = name[:colonpos] + suffix = name[colonpos+1:] + prefix = self.namespacemap.get(prefix, prefix) + name = prefix + ':' + suffix + return name + + def _getAttribute(self, attrsD, name): + return attrsD.get(self._mapToStandardPrefix(name)) + + def _isBase64(self, attrsD, contentparams): + if attrsD.get('mode', '') == 'base64': + return 1 + if self.contentparams['type'].startswith('text/'): + return 0 + if self.contentparams['type'].endswith('+xml'): + return 0 + if self.contentparams['type'].endswith('/xml'): + return 0 + return 1 + + def _itsAnHrefDamnIt(self, attrsD): + href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None))) + if href: + try: + del attrsD['url'] + except KeyError: + pass + try: + del attrsD['uri'] + except KeyError: + pass + attrsD['href'] = href + return attrsD + + def _save(self, key, value): + context = self._getContext() + context.setdefault(key, value) + + def _start_rss(self, attrsD): + versionmap = {'0.91': 'rss091u', + '0.92': 'rss092', + '0.93': 'rss093', + '0.94': 'rss094'} + if not self.version: + attr_version = attrsD.get('version', '') + version = versionmap.get(attr_version) + if version: + self.version = version + elif attr_version.startswith('2.'): + self.version = 'rss20' + else: + self.version = 'rss' + + def _start_dlhottitles(self, attrsD): + self.version = 'hotrss' + + def _start_channel(self, attrsD): + self.infeed = 1 + self._cdf_common(attrsD) + _start_feedinfo = _start_channel + + def _cdf_common(self, attrsD): + if attrsD.has_key('lastmod'): + self._start_modified({}) + self.elementstack[-1][-1] = attrsD['lastmod'] + self._end_modified() + if attrsD.has_key('href'): + self._start_link({}) + self.elementstack[-1][-1] = attrsD['href'] + self._end_link() + + def _start_feed(self, attrsD): + self.infeed = 1 + versionmap = {'0.1': 'atom01', + '0.2': 'atom02', + '0.3': 'atom03'} + if not self.version: + attr_version = attrsD.get('version') + version = versionmap.get(attr_version) + if version: + self.version = version + else: + self.version = 'atom' + + def _end_channel(self): + self.infeed = 0 + _end_feed = _end_channel + + def _start_image(self, attrsD): + self.inimage = 1 + self.push('image', 0) + context = self._getContext() + context.setdefault('image', FeedParserDict()) + + def _end_image(self): + self.pop('image') + self.inimage = 0 + + def _start_textinput(self, attrsD): + self.intextinput = 1 + self.push('textinput', 0) + context = self._getContext() + context.setdefault('textinput', FeedParserDict()) + _start_textInput = _start_textinput + + def _end_textinput(self): + self.pop('textinput') + self.intextinput = 0 + _end_textInput = _end_textinput + + def _start_author(self, attrsD): + self.inauthor = 1 + self.push('author', 1) + _start_managingeditor = _start_author + _start_dc_author = _start_author + _start_dc_creator = _start_author + _start_itunes_author = _start_author + + def _end_author(self): + self.pop('author') + self.inauthor = 0 + self._sync_author_detail() + _end_managingeditor = _end_author + _end_dc_author = _end_author + _end_dc_creator = _end_author + _end_itunes_author = _end_author + + def _start_itunes_owner(self, attrsD): + self.inpublisher = 1 + self.push('publisher', 0) + + def _end_itunes_owner(self): + self.pop('publisher') + self.inpublisher = 0 + self._sync_author_detail('publisher') + + def _start_contributor(self, attrsD): + self.incontributor = 1 + context = self._getContext() + context.setdefault('contributors', []) + context['contributors'].append(FeedParserDict()) + self.push('contributor', 0) + + def _end_contributor(self): + self.pop('contributor') + self.incontributor = 0 + + def _start_dc_contributor(self, attrsD): + self.incontributor = 1 + context = self._getContext() + context.setdefault('contributors', []) + context['contributors'].append(FeedParserDict()) + self.push('name', 0) + + def _end_dc_contributor(self): + self._end_name() + self.incontributor = 0 + + def _start_name(self, attrsD): + self.push('name', 0) + _start_itunes_name = _start_name + + def _end_name(self): + value = self.pop('name') + if self.inpublisher: + self._save_author('name', value, 'publisher') + elif self.inauthor: + self._save_author('name', value) + elif self.incontributor: + self._save_contributor('name', value) + elif self.intextinput: + context = self._getContext() + context['textinput']['name'] = value + _end_itunes_name = _end_name + + def _start_width(self, attrsD): + self.push('width', 0) + + def _end_width(self): + value = self.pop('width') + try: + value = int(value) + except: + value = 0 + if self.inimage: + context = self._getContext() + context['image']['width'] = value + + def _start_height(self, attrsD): + self.push('height', 0) + + def _end_height(self): + value = self.pop('height') + try: + value = int(value) + except: + value = 0 + if self.inimage: + context = self._getContext() + context['image']['height'] = value + + def _start_url(self, attrsD): + self.push('href', 1) + _start_homepage = _start_url + _start_uri = _start_url + + def _end_url(self): + value = self.pop('href') + if self.inauthor: + self._save_author('href', value) + elif self.incontributor: + self._save_contributor('href', value) + elif self.inimage: + context = self._getContext() + context['image']['href'] = value + elif self.intextinput: + context = self._getContext() + context['textinput']['link'] = value + _end_homepage = _end_url + _end_uri = _end_url + + def _start_email(self, attrsD): + self.push('email', 0) + _start_itunes_email = _start_email + + def _end_email(self): + value = self.pop('email') + if self.inpublisher: + self._save_author('email', value, 'publisher') + elif self.inauthor: + self._save_author('email', value) + elif self.incontributor: + self._save_contributor('email', value) + _end_itunes_email = _end_email + + def _getContext(self): + if self.insource: + context = self.sourcedata + elif self.inentry: + context = self.entries[-1] + else: + context = self.feeddata + return context + + def _save_author(self, key, value, prefix='author'): + context = self._getContext() + context.setdefault(prefix + '_detail', FeedParserDict()) + context[prefix + '_detail'][key] = value + self._sync_author_detail() + + def _save_contributor(self, key, value): + context = self._getContext() + context.setdefault('contributors', [FeedParserDict()]) + context['contributors'][-1][key] = value + + def _sync_author_detail(self, key='author'): + context = self._getContext() + detail = context.get('%s_detail' % key) + if detail: + name = detail.get('name') + email = detail.get('email') + if name and email: + context[key] = '%s (%s)' % (name, email) + elif name: + context[key] = name + elif email: + context[key] = email + else: + author = context.get(key) + if not author: return + emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))''', author) + if not emailmatch: return + email = emailmatch.group(0) + # probably a better way to do the following, but it passes all the tests + author = author.replace(email, '') + author = author.replace('()', '') + author = author.strip() + if author and (author[0] == '('): + author = author[1:] + if author and (author[-1] == ')'): + author = author[:-1] + author = author.strip() + context.setdefault('%s_detail' % key, FeedParserDict()) + context['%s_detail' % key]['name'] = author + context['%s_detail' % key]['email'] = email + + def _start_subtitle(self, attrsD): + self.pushContent('subtitle', attrsD, 'text/plain', 1) + _start_tagline = _start_subtitle + _start_itunes_subtitle = _start_subtitle + + def _end_subtitle(self): + self.popContent('subtitle') + _end_tagline = _end_subtitle + _end_itunes_subtitle = _end_subtitle + + def _start_rights(self, attrsD): + self.pushContent('rights', attrsD, 'text/plain', 1) + _start_dc_rights = _start_rights + _start_copyright = _start_rights + + def _end_rights(self): + self.popContent('rights') + _end_dc_rights = _end_rights + _end_copyright = _end_rights + + def _start_item(self, attrsD): + self.entries.append(FeedParserDict()) + self.push('item', 0) + self.inentry = 1 + self.guidislink = 0 + id = self._getAttribute(attrsD, 'rdf:about') + if id: + context = self._getContext() + context['id'] = id + self._cdf_common(attrsD) + _start_entry = _start_item + _start_product = _start_item + + def _end_item(self): + self.pop('item') + self.inentry = 0 + _end_entry = _end_item + + def _start_dc_language(self, attrsD): + self.push('language', 1) + _start_language = _start_dc_language + + def _end_dc_language(self): + self.lang = self.pop('language') + _end_language = _end_dc_language + + def _start_dc_publisher(self, attrsD): + self.push('publisher', 1) + _start_webmaster = _start_dc_publisher + + def _end_dc_publisher(self): + self.pop('publisher') + self._sync_author_detail('publisher') + _end_webmaster = _end_dc_publisher + + def _start_published(self, attrsD): + self.push('published', 1) + _start_dcterms_issued = _start_published + _start_issued = _start_published + + def _end_published(self): + value = self.pop('published') + self._save('published_parsed', _parse_date(value)) + _end_dcterms_issued = _end_published + _end_issued = _end_published + + def _start_updated(self, attrsD): + self.push('updated', 1) + _start_modified = _start_updated + _start_dcterms_modified = _start_updated + _start_pubdate = _start_updated + _start_dc_date = _start_updated + + def _end_updated(self): + value = self.pop('updated') + parsed_value = _parse_date(value) + self._save('updated_parsed', parsed_value) + _end_modified = _end_updated + _end_dcterms_modified = _end_updated + _end_pubdate = _end_updated + _end_dc_date = _end_updated + + def _start_created(self, attrsD): + self.push('created', 1) + _start_dcterms_created = _start_created + + def _end_created(self): + value = self.pop('created') + self._save('created_parsed', _parse_date(value)) + _end_dcterms_created = _end_created + + def _start_expirationdate(self, attrsD): + self.push('expired', 1) + + def _end_expirationdate(self): + self._save('expired_parsed', _parse_date(self.pop('expired'))) + + def _start_cc_license(self, attrsD): + self.push('license', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('license') + + def _start_creativecommons_license(self, attrsD): + self.push('license', 1) + + def _end_creativecommons_license(self): + self.pop('license') + + def _addTag(self, term, scheme, label): + context = self._getContext() + tags = context.setdefault('tags', []) + if (not term) and (not scheme) and (not label): return + value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label}) + if value not in tags: + tags.append(FeedParserDict({'term': term, 'scheme': scheme, 'label': label})) + + def _start_category(self, attrsD): + if _debug: sys.stderr.write('entering _start_category with %s\n' % repr(attrsD)) + term = attrsD.get('term') + scheme = attrsD.get('scheme', attrsD.get('domain')) + label = attrsD.get('label') + self._addTag(term, scheme, label) + self.push('category', 1) + _start_dc_subject = _start_category + _start_keywords = _start_category + + def _end_itunes_keywords(self): + for term in self.pop('itunes_keywords').split(): + self._addTag(term, 'http://www.itunes.com/', None) + + def _start_itunes_category(self, attrsD): + self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None) + self.push('category', 1) + + def _end_category(self): + value = self.pop('category') + if not value: return + context = self._getContext() + tags = context['tags'] + if value and len(tags) and not tags[-1]['term']: + tags[-1]['term'] = value + else: + self._addTag(value, None, None) + _end_dc_subject = _end_category + _end_keywords = _end_category + _end_itunes_category = _end_category + + def _start_cloud(self, attrsD): + self._getContext()['cloud'] = FeedParserDict(attrsD) + + def _start_link(self, attrsD): + attrsD.setdefault('rel', 'alternate') + attrsD.setdefault('type', 'text/html') + attrsD = self._itsAnHrefDamnIt(attrsD) + if attrsD.has_key('href'): + attrsD['href'] = self.resolveURI(attrsD['href']) + expectingText = self.infeed or self.inentry or self.insource + context = self._getContext() + context.setdefault('links', []) + context['links'].append(FeedParserDict(attrsD)) + if attrsD['rel'] == 'enclosure': + self._start_enclosure(attrsD) + if attrsD.has_key('href'): + expectingText = 0 + if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): + context['link'] = attrsD['href'] + else: + self.push('link', expectingText) + _start_producturl = _start_link + + def _end_link(self): + value = self.pop('link') + context = self._getContext() + if self.intextinput: + context['textinput']['link'] = value + if self.inimage: + context['image']['link'] = value + _end_producturl = _end_link + + def _start_guid(self, attrsD): + self.guidislink = (attrsD.get('ispermalink', 'true') == 'true') + self.push('id', 1) + + def _end_guid(self): + value = self.pop('id') + self._save('guidislink', self.guidislink and not self._getContext().has_key('link')) + if self.guidislink: + # guid acts as link, but only if 'ispermalink' is not present or is 'true', + # and only if the item doesn't already have a link element + self._save('link', value) + + def _start_title(self, attrsD): + self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) + _start_dc_title = _start_title + _start_media_title = _start_title + + def _end_title(self): + value = self.popContent('title') + context = self._getContext() + if self.intextinput: + context['textinput']['title'] = value + elif self.inimage: + context['image']['title'] = value + _end_dc_title = _end_title + _end_media_title = _end_title + + def _start_description(self, attrsD): + context = self._getContext() + if context.has_key('summary'): + self._summaryKey = 'content' + self._start_content(attrsD) + else: + self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource) + + def _start_abstract(self, attrsD): + self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) + + def _end_description(self): + if self._summaryKey == 'content': + self._end_content() + else: + value = self.popContent('description') + context = self._getContext() + if self.intextinput: + context['textinput']['description'] = value + elif self.inimage: + context['image']['description'] = value + self._summaryKey = None + _end_abstract = _end_description + + def _start_info(self, attrsD): + self.pushContent('info', attrsD, 'text/plain', 1) + _start_feedburner_browserfriendly = _start_info + + def _end_info(self): + self.popContent('info') + _end_feedburner_browserfriendly = _end_info + + def _start_generator(self, attrsD): + if attrsD: + attrsD = self._itsAnHrefDamnIt(attrsD) + if attrsD.has_key('href'): + attrsD['href'] = self.resolveURI(attrsD['href']) + self._getContext()['generator_detail'] = FeedParserDict(attrsD) + self.push('generator', 1) + + def _end_generator(self): + value = self.pop('generator') + context = self._getContext() + if context.has_key('generator_detail'): + context['generator_detail']['name'] = value + + def _start_admin_generatoragent(self, attrsD): + self.push('generator', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('generator') + self._getContext()['generator_detail'] = FeedParserDict({'href': value}) + + def _start_admin_errorreportsto(self, attrsD): + self.push('errorreportsto', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('errorreportsto') + + def _start_summary(self, attrsD): + context = self._getContext() + if context.has_key('summary'): + self._summaryKey = 'content' + self._start_content(attrsD) + else: + self._summaryKey = 'summary' + self.pushContent(self._summaryKey, attrsD, 'text/plain', 1) + _start_itunes_summary = _start_summary + + def _end_summary(self): + if self._summaryKey == 'content': + self._end_content() + else: + self.popContent(self._summaryKey or 'summary') + self._summaryKey = None + _end_itunes_summary = _end_summary + + def _start_enclosure(self, attrsD): + attrsD = self._itsAnHrefDamnIt(attrsD) + self._getContext().setdefault('enclosures', []).append(FeedParserDict(attrsD)) + href = attrsD.get('href') + if href: + context = self._getContext() + if not context.get('id'): + context['id'] = href + + def _start_source(self, attrsD): + self.insource = 1 + + def _end_source(self): + self.insource = 0 + self._getContext()['source'] = copy.deepcopy(self.sourcedata) + self.sourcedata.clear() + + def _start_content(self, attrsD): + self.pushContent('content', attrsD, 'text/plain', 1) + src = attrsD.get('src') + if src: + self.contentparams['src'] = src + self.push('content', 1) + + def _start_prodlink(self, attrsD): + self.pushContent('content', attrsD, 'text/html', 1) + + def _start_body(self, attrsD): + self.pushContent('content', attrsD, 'application/xhtml+xml', 1) + _start_xhtml_body = _start_body + + def _start_content_encoded(self, attrsD): + self.pushContent('content', attrsD, 'text/html', 1) + _start_fullitem = _start_content_encoded + + def _end_content(self): + copyToDescription = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types) + value = self.popContent('content') + if copyToDescription: + self._save('description', value) + _end_body = _end_content + _end_xhtml_body = _end_content + _end_content_encoded = _end_content + _end_fullitem = _end_content + _end_prodlink = _end_content + + def _start_itunes_image(self, attrsD): + self.push('itunes_image', 0) + self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')}) + _start_itunes_link = _start_itunes_image + + def _end_itunes_block(self): + value = self.pop('itunes_block', 0) + self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0 + + def _end_itunes_explicit(self): + value = self.pop('itunes_explicit', 0) + self._getContext()['itunes_explicit'] = (value == 'yes') and 1 or 0 + +if _XML_AVAILABLE: + class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler): + def __init__(self, baseuri, baselang, encoding): + if _debug: sys.stderr.write('trying StrictFeedParser\n') + xml.sax.handler.ContentHandler.__init__(self) + _FeedParserMixin.__init__(self, baseuri, baselang, encoding) + self.bozo = 0 + self.exc = None + + def startPrefixMapping(self, prefix, uri): + self.trackNamespace(prefix, uri) + + def startElementNS(self, name, qname, attrs): + namespace, localname = name + lowernamespace = str(namespace or '').lower() + if lowernamespace.find('backend.userland.com/rss') <> -1: + # match any backend.userland.com namespace + namespace = 'http://backend.userland.com/rss' + lowernamespace = namespace + if qname and qname.find(':') > 0: + givenprefix = qname.split(':')[0] + else: + givenprefix = None + prefix = self._matchnamespaces.get(lowernamespace, givenprefix) + if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and not self.namespacesInUse.has_key(givenprefix): + raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix + if prefix: + localname = prefix + ':' + localname + localname = str(localname).lower() + if _debug: sys.stderr.write('startElementNS: qname = %s, namespace = %s, givenprefix = %s, prefix = %s, attrs = %s, localname = %s\n' % (qname, namespace, givenprefix, prefix, attrs.items(), localname)) + + # qname implementation is horribly broken in Python 2.1 (it + # doesn't report any), and slightly broken in Python 2.2 (it + # doesn't report the xml: namespace). So we match up namespaces + # with a known list first, and then possibly override them with + # the qnames the SAX parser gives us (if indeed it gives us any + # at all). Thanks to MatejC for helping me test this and + # tirelessly telling me that it didn't work yet. + attrsD = {} + for (namespace, attrlocalname), attrvalue in attrs._attrs.items(): + lowernamespace = (namespace or '').lower() + prefix = self._matchnamespaces.get(lowernamespace, '') + if prefix: + attrlocalname = prefix + ':' + attrlocalname + attrsD[str(attrlocalname).lower()] = attrvalue + for qname in attrs.getQNames(): + attrsD[str(qname).lower()] = attrs.getValueByQName(qname) + self.unknown_starttag(localname, attrsD.items()) + + def characters(self, text): + self.handle_data(text) + + def endElementNS(self, name, qname): + namespace, localname = name + lowernamespace = str(namespace or '').lower() + if qname and qname.find(':') > 0: + givenprefix = qname.split(':')[0] + else: + givenprefix = '' + prefix = self._matchnamespaces.get(lowernamespace, givenprefix) + if prefix: + localname = prefix + ':' + localname + localname = str(localname).lower() + self.unknown_endtag(localname) + + def error(self, exc): + self.bozo = 1 + self.exc = exc + + def fatalError(self, exc): + self.error(exc) + raise exc + +class _BaseHTMLProcessor(sgmllib.SGMLParser): + elements_no_end_tag = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', + 'img', 'input', 'isindex', 'link', 'meta', 'param'] + + def __init__(self, encoding): + self.encoding = encoding + if _debug: sys.stderr.write('entering BaseHTMLProcessor, encoding=%s\n' % self.encoding) + sgmllib.SGMLParser.__init__(self) + + def reset(self): + self.pieces = [] + sgmllib.SGMLParser.reset(self) + + def _shorttag_replace(self, match): + tag = match.group(1) + if tag in self.elements_no_end_tag: + return '<' + tag + ' />' + else: + return '<' + tag + '>' + + def feed(self, data): + data = re.compile(r'', self._shorttag_replace, data) # bug [ 1399464 ] Bad regexp for _shorttag_replace + data = re.sub(r'<([^<\s]+?)\s*/>', self._shorttag_replace, data) + data = data.replace(''', "'") + data = data.replace('"', '"') + if self.encoding and type(data) == type(u''): + data = data.encode(self.encoding) + sgmllib.SGMLParser.feed(self, data) + + def normalize_attrs(self, attrs): + # utility method to be called by descendants + attrs = [(k.lower(), v) for k, v in attrs] + attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] + return attrs + + def unknown_starttag(self, tag, attrs): + # called for each start tag + # attrs is a list of (attr, value) tuples + # e.g. for
        , tag='pre', attrs=[('class', 'screen')]
        +        if _debug: sys.stderr.write('_BaseHTMLProcessor, unknown_starttag, tag=%s\n' % tag)
        +        uattrs = []
        +        # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds
        +        for key, value in attrs:
        +            if type(value) != type(u''):
        +                value = unicode(value, self.encoding)
        +            uattrs.append((unicode(key, self.encoding), value))
        +        strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]).encode(self.encoding)
        +        if tag in self.elements_no_end_tag:
        +            self.pieces.append('<%(tag)s%(strattrs)s />' % locals())
        +        else:
        +            self.pieces.append('<%(tag)s%(strattrs)s>' % locals())
        +
        +    def unknown_endtag(self, tag):
        +        # called for each end tag, e.g. for 
        , tag will be 'pre' + # Reconstruct the original end tag. + if tag not in self.elements_no_end_tag: + self.pieces.append("" % locals()) + + def handle_charref(self, ref): + # called for each character reference, e.g. for ' ', ref will be '160' + # Reconstruct the original character reference. + self.pieces.append('&#%(ref)s;' % locals()) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for '©', ref will be 'copy' + # Reconstruct the original entity reference. + self.pieces.append('&%(ref)s;' % locals()) + + def handle_data(self, text): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + # Store the original text verbatim. + if _debug: sys.stderr.write('_BaseHTMLProcessor, handle_text, text=%s\n' % text) + self.pieces.append(text) + + def handle_comment(self, text): + # called for each HTML comment, e.g. + # Reconstruct the original comment. + self.pieces.append('' % locals()) + + def handle_pi(self, text): + # called for each processing instruction, e.g. + # Reconstruct original processing instruction. + self.pieces.append('' % locals()) + + def handle_decl(self, text): + # called for the DOCTYPE, if present, e.g. + # + # Reconstruct original DOCTYPE + self.pieces.append('' % locals()) + + _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match + def _scan_name(self, i, declstartpos): + rawdata = self.rawdata + n = len(rawdata) + if i == n: + return None, -1 + m = self._new_declname_match(rawdata, i) + if m: + s = m.group() + name = s.strip() + if (i + len(s)) == n: + return None, -1 # end of buffer + return name.lower(), m.end() + else: + self.handle_data(rawdata) +# self.updatepos(declstartpos, i) + return None, -1 + + def output(self): + '''Return processed HTML as a single string''' + return ''.join([str(p) for p in self.pieces]) + +class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor): + def __init__(self, baseuri, baselang, encoding): + sgmllib.SGMLParser.__init__(self) + _FeedParserMixin.__init__(self, baseuri, baselang, encoding) + + def decodeEntities(self, element, data): + data = data.replace('<', '<') + data = data.replace('<', '<') + data = data.replace('>', '>') + data = data.replace('>', '>') + data = data.replace('&', '&') + data = data.replace('&', '&') + data = data.replace('"', '"') + data = data.replace('"', '"') + data = data.replace(''', ''') + data = data.replace(''', ''') + if self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + data = data.replace('<', '<') + data = data.replace('>', '>') + data = data.replace('&', '&') + data = data.replace('"', '"') + data = data.replace(''', "'") + return data + +class _RelativeURIResolver(_BaseHTMLProcessor): + relative_uris = [('a', 'href'), + ('applet', 'codebase'), + ('area', 'href'), + ('blockquote', 'cite'), + ('body', 'background'), + ('del', 'cite'), + ('form', 'action'), + ('frame', 'longdesc'), + ('frame', 'src'), + ('iframe', 'longdesc'), + ('iframe', 'src'), + ('head', 'profile'), + ('img', 'longdesc'), + ('img', 'src'), + ('img', 'usemap'), + ('input', 'src'), + ('input', 'usemap'), + ('ins', 'cite'), + ('link', 'href'), + ('object', 'classid'), + ('object', 'codebase'), + ('object', 'data'), + ('object', 'usemap'), + ('q', 'cite'), + ('script', 'src')] + + def __init__(self, baseuri, encoding): + _BaseHTMLProcessor.__init__(self, encoding) + self.baseuri = baseuri + + def resolveURI(self, uri): + return _urljoin(self.baseuri, uri) + + def unknown_starttag(self, tag, attrs): + attrs = self.normalize_attrs(attrs) + attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] + _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) + +def _resolveRelativeURIs(htmlSource, baseURI, encoding): + if _debug: sys.stderr.write('entering _resolveRelativeURIs\n') + p = _RelativeURIResolver(baseURI, encoding) + p.feed(htmlSource) + return p.output() + +class _HTMLSanitizer(_BaseHTMLProcessor): + acceptable_elements = ['a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', + 'blockquote', 'br', 'button', 'caption', 'center', 'cite', 'code', 'col', + 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', + 'font', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', + 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', 'ol', 'optgroup', + 'option', 'p', 'pre', 'q', 's', 'samp', 'select', 'small', 'span', 'strike', + 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', + 'thead', 'tr', 'tt', 'u', 'ul', 'var'] + + acceptable_attributes = ['abbr', 'accept', 'accept-charset', 'accesskey', + 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', + 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'clear', 'cols', + 'colspan', 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', + 'enctype', 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', + 'id', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', + 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', + 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', + 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title', 'type', + 'usemap', 'valign', 'value', 'vspace', 'width'] + + unacceptable_elements_with_end_tag = ['script', 'applet'] + + def reset(self): + _BaseHTMLProcessor.reset(self) + self.unacceptablestack = 0 + + def unknown_starttag(self, tag, attrs): + if not tag in self.acceptable_elements: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack += 1 + return + attrs = self.normalize_attrs(attrs) + attrs = [(key, value) for key, value in attrs if key in self.acceptable_attributes] + _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) + + def unknown_endtag(self, tag): + if not tag in self.acceptable_elements: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack -= 1 + return + _BaseHTMLProcessor.unknown_endtag(self, tag) + + def handle_pi(self, text): + pass + + def handle_decl(self, text): + pass + + def handle_data(self, text): + if not self.unacceptablestack: + _BaseHTMLProcessor.handle_data(self, text) + +def _sanitizeHTML(htmlSource, encoding): + p = _HTMLSanitizer(encoding) + p.feed(htmlSource) + data = p.output() + if TIDY_MARKUP: + # loop through list of preferred Tidy interfaces looking for one that's installed, + # then set up a common _tidy function to wrap the interface-specific API. + _tidy = None + for tidy_interface in PREFERRED_TIDY_INTERFACES: + try: + if tidy_interface == "uTidy": + from tidy import parseString as _utidy + def _tidy(data, **kwargs): + return str(_utidy(data, **kwargs)) + break + elif tidy_interface == "mxTidy": + from mx.Tidy import Tidy as _mxtidy + def _tidy(data, **kwargs): + nerrors, nwarnings, data, errordata = _mxtidy.tidy(data, **kwargs) + return data + break + except: + pass + if _tidy: + utf8 = type(data) == type(u'') + if utf8: + data = data.encode('utf-8') + data = _tidy(data, output_xhtml=1, numeric_entities=1, wrap=0, char_encoding="utf8") + if utf8: + data = unicode(data, 'utf-8') + if data.count(''): + data = data.split('>', 1)[1] + if data.count('= '2.3.3' + assert base64 != None + user, passw = base64.decodestring(req.headers['Authorization'].split(' ')[1]).split(':') + realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0] + self.add_password(realm, host, user, passw) + retry = self.http_error_auth_reqed('www-authenticate', host, req, headers) + self.reset_retry_count() + return retry + except: + return self.http_error_default(req, fp, code, msg, headers) + +def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers): + """URL, filename, or string --> stream + + This function lets you define parsers that take any input source + (URL, pathname to local or network file, or actual data as a string) + and deal with it in a uniform manner. Returned object is guaranteed + to have all the basic stdio read methods (read, readline, readlines). + Just .close() the object when you're done with it. + + If the etag argument is supplied, it will be used as the value of an + If-None-Match request header. + + If the modified argument is supplied, it must be a tuple of 9 integers + as returned by gmtime() in the standard Python time module. This MUST + be in GMT (Greenwich Mean Time). The formatted date/time will be used + as the value of an If-Modified-Since request header. + + If the agent argument is supplied, it will be used as the value of a + User-Agent request header. + + If the referrer argument is supplied, it will be used as the value of a + Referer[sic] request header. + + If handlers is supplied, it is a list of handlers used to build a + urllib2 opener. + """ + + if hasattr(url_file_stream_or_string, 'read'): + return url_file_stream_or_string + + if url_file_stream_or_string == '-': + return sys.stdin + + if urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp'): + if not agent: + agent = USER_AGENT + # test for inline user:password for basic auth + auth = None + if base64: + urltype, rest = urllib.splittype(url_file_stream_or_string) + realhost, rest = urllib.splithost(rest) + if realhost: + user_passwd, realhost = urllib.splituser(realhost) + if user_passwd: + url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest) + auth = base64.encodestring(user_passwd).strip() + # try to open with urllib2 (to use optional headers) + request = urllib2.Request(url_file_stream_or_string) + request.add_header('User-Agent', agent) + if etag: + request.add_header('If-None-Match', etag) + if modified: + # format into an RFC 1123-compliant timestamp. We can't use + # time.strftime() since the %a and %b directives can be affected + # by the current locale, but RFC 2616 states that dates must be + # in English. + short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5])) + if referrer: + request.add_header('Referer', referrer) + if gzip and zlib: + request.add_header('Accept-encoding', 'gzip, deflate') + elif gzip: + request.add_header('Accept-encoding', 'gzip') + elif zlib: + request.add_header('Accept-encoding', 'deflate') + else: + request.add_header('Accept-encoding', '') + if auth: + request.add_header('Authorization', 'Basic %s' % auth) + if ACCEPT_HEADER: + request.add_header('Accept', ACCEPT_HEADER) + request.add_header('A-IM', 'feed') # RFC 3229 support + opener = apply(urllib2.build_opener, tuple([_FeedURLHandler()] + handlers)) + opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent + try: + return opener.open(request) + finally: + opener.close() # JohnD + + # try to open with native open function (if url_file_stream_or_string is a filename) + try: + return open(url_file_stream_or_string) + except: + pass + + # treat url_file_stream_or_string as string + return _StringIO(str(url_file_stream_or_string)) + +_date_handlers = [] +def registerDateHandler(func): + '''Register a date handler function (takes string, returns 9-tuple date in GMT)''' + _date_handlers.insert(0, func) + +# ISO-8601 date parsing routines written by Fazal Majid. +# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601 +# parser is beyond the scope of feedparser and would be a worthwhile addition +# to the Python library. +# A single regular expression cannot parse ISO 8601 date formats into groups +# as the standard is highly irregular (for instance is 030104 2003-01-04 or +# 0301-04-01), so we use templates instead. +# Please note the order in templates is significant because we need a +# greedy match. +_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-MM', 'YYYY-?OOO', + 'YY-?MM-?DD', 'YY-?OOO', 'YYYY', + '-YY-?MM', '-OOO', '-YY', + '--MM-?DD', '--MM', + '---DD', + 'CC', ''] +_iso8601_re = [ + tmpl.replace( + 'YYYY', r'(?P\d{4})').replace( + 'YY', r'(?P\d\d)').replace( + 'MM', r'(?P[01]\d)').replace( + 'DD', r'(?P[0123]\d)').replace( + 'OOO', r'(?P[0123]\d\d)').replace( + 'CC', r'(?P\d\d$)') + + r'(T?(?P\d{2}):(?P\d{2})' + + r'(:(?P\d{2}))?' + + r'(?P[+-](?P\d{2})(:(?P\d{2}))?|Z)?)?' + for tmpl in _iso8601_tmpl] +del tmpl +_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re] +del regex +def _parse_date_iso8601(dateString): + '''Parse a variety of ISO-8601-compatible formats like 20040105''' + m = None + for _iso8601_match in _iso8601_matches: + m = _iso8601_match(dateString) + if m: break + if not m: return + if m.span() == (0, 0): return + params = m.groupdict() + ordinal = params.get('ordinal', 0) + if ordinal: + ordinal = int(ordinal) + else: + ordinal = 0 + year = params.get('year', '--') + if not year or year == '--': + year = time.gmtime()[0] + elif len(year) == 2: + # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993 + year = 100 * int(time.gmtime()[0] / 100) + int(year) + else: + year = int(year) + month = params.get('month', '-') + if not month or month == '-': + # ordinals are NOT normalized by mktime, we simulate them + # by setting month=1, day=ordinal + if ordinal: + month = 1 + else: + month = time.gmtime()[1] + month = int(month) + day = params.get('day', 0) + if not day: + # see above + if ordinal: + day = ordinal + elif params.get('century', 0) or \ + params.get('year', 0) or params.get('month', 0): + day = 1 + else: + day = time.gmtime()[2] + else: + day = int(day) + # special case of the century - is the first year of the 21st century + # 2000 or 2001 ? The debate goes on... + if 'century' in params.keys(): + year = (int(params['century']) - 1) * 100 + 1 + # in ISO 8601 most fields are optional + for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: + if not params.get(field, None): + params[field] = 0 + hour = int(params.get('hour', 0)) + minute = int(params.get('minute', 0)) + second = int(params.get('second', 0)) + # weekday is normalized by mktime(), we can ignore it + weekday = 0 + # daylight savings is complex, but not needed for feedparser's purposes + # as time zones, if specified, include mention of whether it is active + # (e.g. PST vs. PDT, CET). Using -1 is implementation-dependent and + # and most implementations have DST bugs + daylight_savings_flag = 0 + tm = [year, month, day, hour, minute, second, weekday, + ordinal, daylight_savings_flag] + # ISO 8601 time zone adjustments + tz = params.get('tz') + if tz and tz != 'Z': + if tz[0] == '-': + tm[3] += int(params.get('tzhour', 0)) + tm[4] += int(params.get('tzmin', 0)) + elif tz[0] == '+': + tm[3] -= int(params.get('tzhour', 0)) + tm[4] -= int(params.get('tzmin', 0)) + else: + return None + # Python's time.mktime() is a wrapper around the ANSI C mktime(3c) + # which is guaranteed to normalize d/m/y/h/m/s. + # Many implementations have bugs, but we'll pretend they don't. + return time.localtime(time.mktime(tm)) +registerDateHandler(_parse_date_iso8601) + +# 8-bit date handling routines written by ytrewq1. +_korean_year = u'\ub144' # b3e2 in euc-kr +_korean_month = u'\uc6d4' # bff9 in euc-kr +_korean_day = u'\uc77c' # c0cf in euc-kr +_korean_am = u'\uc624\uc804' # bfc0 c0fc in euc-kr +_korean_pm = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr + +_korean_onblog_date_re = \ + re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ + (_korean_year, _korean_month, _korean_day)) +_korean_nate_date_re = \ + re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ + (_korean_am, _korean_pm)) +def _parse_date_onblog(dateString): + '''Parse a string according to the OnBlog 8-bit date format''' + m = _korean_onblog_date_re.match(dateString) + if not m: return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('OnBlog date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_onblog) + +def _parse_date_nate(dateString): + '''Parse a string according to the Nate 8-bit date format''' + m = _korean_nate_date_re.match(dateString) + if not m: return + hour = int(m.group(5)) + ampm = m.group(4) + if (ampm == _korean_pm): + hour += 12 + hour = str(hour) + if len(hour) == 1: + hour = '0' + hour + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('Nate date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_nate) + +_mssql_date_re = \ + re.compile('(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})(\.\d+)?') +def _parse_date_mssql(dateString): + '''Parse a string according to the MS SQL date format''' + m = _mssql_date_re.match(dateString) + if not m: return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('MS SQL date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_mssql) + +# Unicode strings for Greek date strings +_greek_months = \ + { \ + u'\u0399\u03b1\u03bd': u'Jan', # c9e1ed in iso-8859-7 + u'\u03a6\u03b5\u03b2': u'Feb', # d6e5e2 in iso-8859-7 + u'\u039c\u03ac\u03ce': u'Mar', # ccdcfe in iso-8859-7 + u'\u039c\u03b1\u03ce': u'Mar', # cce1fe in iso-8859-7 + u'\u0391\u03c0\u03c1': u'Apr', # c1f0f1 in iso-8859-7 + u'\u039c\u03ac\u03b9': u'May', # ccdce9 in iso-8859-7 + u'\u039c\u03b1\u03ca': u'May', # cce1fa in iso-8859-7 + u'\u039c\u03b1\u03b9': u'May', # cce1e9 in iso-8859-7 + u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7 + u'\u0399\u03bf\u03bd': u'Jun', # c9efed in iso-8859-7 + u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7 + u'\u0399\u03bf\u03bb': u'Jul', # c9f9eb in iso-8859-7 + u'\u0391\u03cd\u03b3': u'Aug', # c1fde3 in iso-8859-7 + u'\u0391\u03c5\u03b3': u'Aug', # c1f5e3 in iso-8859-7 + u'\u03a3\u03b5\u03c0': u'Sep', # d3e5f0 in iso-8859-7 + u'\u039f\u03ba\u03c4': u'Oct', # cfeaf4 in iso-8859-7 + u'\u039d\u03bf\u03ad': u'Nov', # cdefdd in iso-8859-7 + u'\u039d\u03bf\u03b5': u'Nov', # cdefe5 in iso-8859-7 + u'\u0394\u03b5\u03ba': u'Dec', # c4e5ea in iso-8859-7 + } + +_greek_wdays = \ + { \ + u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7 + u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7 + u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7 + u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7 + u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7 + u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7 + u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7 + } + +_greek_date_format_re = \ + re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') + +def _parse_date_greek(dateString): + '''Parse a string according to a Greek 8-bit date format.''' + m = _greek_date_format_re.match(dateString) + if not m: return + try: + wday = _greek_wdays[m.group(1)] + month = _greek_months[m.group(3)] + except: + return + rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \ + {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\ + 'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\ + 'zonediff': m.group(8)} + if _debug: sys.stderr.write('Greek date parsed as: %s\n' % rfc822date) + return _parse_date_rfc822(rfc822date) +registerDateHandler(_parse_date_greek) + +# Unicode strings for Hungarian date strings +_hungarian_months = \ + { \ + u'janu\u00e1r': u'01', # e1 in iso-8859-2 + u'febru\u00e1ri': u'02', # e1 in iso-8859-2 + u'm\u00e1rcius': u'03', # e1 in iso-8859-2 + u'\u00e1prilis': u'04', # e1 in iso-8859-2 + u'm\u00e1ujus': u'05', # e1 in iso-8859-2 + u'j\u00fanius': u'06', # fa in iso-8859-2 + u'j\u00falius': u'07', # fa in iso-8859-2 + u'augusztus': u'08', + u'szeptember': u'09', + u'okt\u00f3ber': u'10', # f3 in iso-8859-2 + u'november': u'11', + u'december': u'12', + } + +_hungarian_date_format_re = \ + re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') + +def _parse_date_hungarian(dateString): + '''Parse a string according to a Hungarian 8-bit date format.''' + m = _hungarian_date_format_re.match(dateString) + if not m: return + try: + month = _hungarian_months[m.group(2)] + day = m.group(3) + if len(day) == 1: + day = '0' + day + hour = m.group(4) + if len(hour) == 1: + hour = '0' + hour + except: + return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \ + {'year': m.group(1), 'month': month, 'day': day,\ + 'hour': hour, 'minute': m.group(5),\ + 'zonediff': m.group(6)} + if _debug: sys.stderr.write('Hungarian date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_hungarian) + +# W3DTF-style date parsing adapted from PyXML xml.utils.iso8601, written by +# Drake and licensed under the Python license. Removed all range checking +# for month, day, hour, minute, and second, since mktime will normalize +# these later +def _parse_date_w3dtf(dateString): + def __extract_date(m): + year = int(m.group('year')) + if year < 100: + year = 100 * int(time.gmtime()[0] / 100) + int(year) + if year < 1000: + return 0, 0, 0 + julian = m.group('julian') + if julian: + julian = int(julian) + month = julian / 30 + 1 + day = julian % 30 + 1 + jday = None + while jday != julian: + t = time.mktime((year, month, day, 0, 0, 0, 0, 0, 0)) + jday = time.gmtime(t)[-2] + diff = abs(jday - julian) + if jday > julian: + if diff < day: + day = day - diff + else: + month = month - 1 + day = 31 + elif jday < julian: + if day + diff < 28: + day = day + diff + else: + month = month + 1 + return year, month, day + month = m.group('month') + day = 1 + if month is None: + month = 1 + else: + month = int(month) + day = m.group('day') + if day: + day = int(day) + else: + day = 1 + return year, month, day + + def __extract_time(m): + if not m: + return 0, 0, 0 + hours = m.group('hours') + if not hours: + return 0, 0, 0 + hours = int(hours) + minutes = int(m.group('minutes')) + seconds = m.group('seconds') + if seconds: + seconds = int(seconds) + else: + seconds = 0 + return hours, minutes, seconds + + def __extract_tzd(m): + '''Return the Time Zone Designator as an offset in seconds from UTC.''' + if not m: + return 0 + tzd = m.group('tzd') + if not tzd: + return 0 + if tzd == 'Z': + return 0 + hours = int(m.group('tzdhours')) + minutes = m.group('tzdminutes') + if minutes: + minutes = int(minutes) + else: + minutes = 0 + offset = (hours*60 + minutes) * 60 + if tzd[0] == '+': + return -offset + return offset + + __date_re = ('(?P\d\d\d\d)' + '(?:(?P-|)' + '(?:(?P\d\d\d)' + '|(?P\d\d)(?:(?P=dsep)(?P\d\d))?))?') + __tzd_re = '(?P[-+](?P\d\d)(?::?(?P\d\d))|Z)' + __tzd_rx = re.compile(__tzd_re) + __time_re = ('(?P\d\d)(?P:|)(?P\d\d)' + '(?:(?P=tsep)(?P\d\d(?:[.,]\d+)?))?' + + __tzd_re) + __datetime_re = '%s(?:T%s)?' % (__date_re, __time_re) + __datetime_rx = re.compile(__datetime_re) + m = __datetime_rx.match(dateString) + if (m is None) or (m.group() != dateString): return + gmt = __extract_date(m) + __extract_time(m) + (0, 0, 0) + if gmt[0] == 0: return + return time.gmtime(time.mktime(gmt) + __extract_tzd(m) - time.timezone) +registerDateHandler(_parse_date_w3dtf) + +def _parse_date_rfc822(dateString): + '''Parse an RFC822, RFC1123, RFC2822, or asctime-style date''' + data = dateString.split() + if data[0][-1] in (',', '.') or data[0].lower() in rfc822._daynames: + del data[0] + if len(data) == 4: + s = data[3] + i = s.find('+') + if i > 0: + data[3:] = [s[:i], s[i+1:]] + else: + data.append('') + dateString = " ".join(data) + if len(data) < 5: + dateString += ' 00:00:00 GMT' + tm = rfc822.parsedate_tz(dateString) + if tm: + return time.gmtime(rfc822.mktime_tz(tm)) +# rfc822.py defines several time zones, but we define some extra ones. +# 'ET' is equivalent to 'EST', etc. +_additional_timezones = {'AT': -400, 'ET': -500, 'CT': -600, 'MT': -700, 'PT': -800} +rfc822._timezones.update(_additional_timezones) +registerDateHandler(_parse_date_rfc822) + +def _parse_date(dateString): + '''Parses a variety of date formats into a 9-tuple in GMT''' + for handler in _date_handlers: + try: + date9tuple = handler(dateString) + if not date9tuple: continue + if len(date9tuple) != 9: + if _debug: sys.stderr.write('date handler function must return 9-tuple\n') + raise ValueError + map(int, date9tuple) + return date9tuple + except Exception, e: + if _debug: sys.stderr.write('%s raised %s\n' % (handler.__name__, repr(e))) + pass + return None + +def _getCharacterEncoding(http_headers, xml_data): + '''Get the character encoding of the XML document + + http_headers is a dictionary + xml_data is a raw string (not Unicode) + + This is so much trickier than it sounds, it's not even funny. + According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type + is application/xml, application/*+xml, + application/xml-external-parsed-entity, or application/xml-dtd, + the encoding given in the charset parameter of the HTTP Content-Type + takes precedence over the encoding given in the XML prefix within the + document, and defaults to 'utf-8' if neither are specified. But, if + the HTTP Content-Type is text/xml, text/*+xml, or + text/xml-external-parsed-entity, the encoding given in the XML prefix + within the document is ALWAYS IGNORED and only the encoding given in + the charset parameter of the HTTP Content-Type header should be + respected, and it defaults to 'us-ascii' if not specified. + + Furthermore, discussion on the atom-syntax mailing list with the + author of RFC 3023 leads me to the conclusion that any document + served with a Content-Type of text/* and no charset parameter + must be treated as us-ascii. (We now do this.) And also that it + must always be flagged as non-well-formed. (We now do this too.) + + If Content-Type is unspecified (input was local file or non-HTTP source) + or unrecognized (server just got it totally wrong), then go by the + encoding given in the XML prefix of the document and default to + 'iso-8859-1' as per the HTTP specification (RFC 2616). + + Then, assuming we didn't find a character encoding in the HTTP headers + (and the HTTP Content-type allowed us to look in the body), we need + to sniff the first few bytes of the XML data and try to determine + whether the encoding is ASCII-compatible. Section F of the XML + specification shows the way here: + http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info + + If the sniffed encoding is not ASCII-compatible, we need to make it + ASCII compatible so that we can sniff further into the XML declaration + to find the encoding attribute, which will tell us the true encoding. + + Of course, none of this guarantees that we will be able to parse the + feed in the declared character encoding (assuming it was declared + correctly, which many are not). CJKCodecs and iconv_codec help a lot; + you should definitely install them if you can. + http://cjkpython.i18n.org/ + ''' + + def _parseHTTPContentType(content_type): + '''takes HTTP Content-Type header and returns (content type, charset) + + If no charset is specified, returns (content type, '') + If no content type is specified, returns ('', '') + Both return parameters are guaranteed to be lowercase strings + ''' + content_type = content_type or '' + content_type, params = cgi.parse_header(content_type) + return content_type, params.get('charset', '').replace("'", '') + + sniffed_xml_encoding = '' + xml_encoding = '' + true_encoding = '' + http_content_type, http_encoding = _parseHTTPContentType(http_headers.get('content-type')) + # Must sniff for non-ASCII-compatible character encodings before + # searching for XML declaration. This heuristic is defined in + # section F of the XML specification: + # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info + try: + if xml_data[:4] == '\x4c\x6f\xa7\x94': + # EBCDIC + xml_data = _ebcdic_to_ascii(xml_data) + elif xml_data[:4] == '\x00\x3c\x00\x3f': + # UTF-16BE + sniffed_xml_encoding = 'utf-16be' + xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') + elif (len(xml_data) >= 4) and (xml_data[:2] == '\xfe\xff') and (xml_data[2:4] != '\x00\x00'): + # UTF-16BE with BOM + sniffed_xml_encoding = 'utf-16be' + xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') + elif xml_data[:4] == '\x3c\x00\x3f\x00': + # UTF-16LE + sniffed_xml_encoding = 'utf-16le' + xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') + elif (len(xml_data) >= 4) and (xml_data[:2] == '\xff\xfe') and (xml_data[2:4] != '\x00\x00'): + # UTF-16LE with BOM + sniffed_xml_encoding = 'utf-16le' + xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') + elif xml_data[:4] == '\x00\x00\x00\x3c': + # UTF-32BE + sniffed_xml_encoding = 'utf-32be' + xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') + elif xml_data[:4] == '\x3c\x00\x00\x00': + # UTF-32LE + sniffed_xml_encoding = 'utf-32le' + xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') + elif xml_data[:4] == '\x00\x00\xfe\xff': + # UTF-32BE with BOM + sniffed_xml_encoding = 'utf-32be' + xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') + elif xml_data[:4] == '\xff\xfe\x00\x00': + # UTF-32LE with BOM + sniffed_xml_encoding = 'utf-32le' + xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') + elif xml_data[:3] == '\xef\xbb\xbf': + # UTF-8 with BOM + sniffed_xml_encoding = 'utf-8' + xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') + else: + # ASCII-compatible + pass + xml_encoding_match = re.compile('^<\?.*encoding=[\'"](.*?)[\'"].*\?>').match(xml_data) + except: + xml_encoding_match = None + if xml_encoding_match: + xml_encoding = xml_encoding_match.groups()[0].lower() + if sniffed_xml_encoding and (xml_encoding in ('iso-10646-ucs-2', 'ucs-2', 'csunicode', 'iso-10646-ucs-4', 'ucs-4', 'csucs4', 'utf-16', 'utf-32', 'utf_16', 'utf_32', 'utf16', 'u16')): + xml_encoding = sniffed_xml_encoding + acceptable_content_type = 0 + application_content_types = ('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity') + text_content_types = ('text/xml', 'text/xml-external-parsed-entity') + if (http_content_type in application_content_types) or \ + (http_content_type.startswith('application/') and http_content_type.endswith('+xml')): + acceptable_content_type = 1 + true_encoding = http_encoding or xml_encoding or 'utf-8' + elif (http_content_type in text_content_types) or \ + (http_content_type.startswith('text/')) and http_content_type.endswith('+xml'): + acceptable_content_type = 1 + true_encoding = http_encoding or 'us-ascii' + elif http_content_type.startswith('text/'): + true_encoding = http_encoding or 'us-ascii' + elif http_headers and (not http_headers.has_key('content-type')): + true_encoding = xml_encoding or 'iso-8859-1' + else: + true_encoding = xml_encoding or 'utf-8' + return true_encoding, http_encoding, xml_encoding, sniffed_xml_encoding, acceptable_content_type + +def _toUTF8(data, encoding): + '''Changes an XML data stream on the fly to specify a new encoding + + data is a raw sequence of bytes (not Unicode) that is presumed to be in %encoding already + encoding is a string recognized by encodings.aliases + ''' + if _debug: sys.stderr.write('entering _toUTF8, trying encoding %s\n' % encoding) + # strip Byte Order Mark (if present) + if (len(data) >= 4) and (data[:2] == '\xfe\xff') and (data[2:4] != '\x00\x00'): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-16be': + sys.stderr.write('trying utf-16be instead\n') + encoding = 'utf-16be' + data = data[2:] + elif (len(data) >= 4) and (data[:2] == '\xff\xfe') and (data[2:4] != '\x00\x00'): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-16le': + sys.stderr.write('trying utf-16le instead\n') + encoding = 'utf-16le' + data = data[2:] + elif data[:3] == '\xef\xbb\xbf': + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-8': + sys.stderr.write('trying utf-8 instead\n') + encoding = 'utf-8' + data = data[3:] + elif data[:4] == '\x00\x00\xfe\xff': + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-32be': + sys.stderr.write('trying utf-32be instead\n') + encoding = 'utf-32be' + data = data[4:] + elif data[:4] == '\xff\xfe\x00\x00': + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-32le': + sys.stderr.write('trying utf-32le instead\n') + encoding = 'utf-32le' + data = data[4:] + newdata = unicode(data, encoding) + if _debug: sys.stderr.write('successfully converted %s data to unicode\n' % encoding) + declmatch = re.compile('^<\?xml[^>]*?>') + newdecl = '''''' + if declmatch.search(newdata): + newdata = declmatch.sub(newdecl, newdata) + else: + newdata = newdecl + u'\n' + newdata + return newdata.encode('utf-8') + +def _stripDoctype(data): + '''Strips DOCTYPE from XML document, returns (rss_version, stripped_data) + + rss_version may be 'rss091n' or None + stripped_data is the same XML document, minus the DOCTYPE + ''' + entity_pattern = re.compile(r']*?)>', re.MULTILINE) + data = entity_pattern.sub('', data) + doctype_pattern = re.compile(r']*?)>', re.MULTILINE) + doctype_results = doctype_pattern.findall(data) + doctype = doctype_results and doctype_results[0] or '' + if doctype.lower().count('netscape'): + version = 'rss091n' + else: + version = None + data = doctype_pattern.sub('', data) + return version, data + +def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=[]): + '''Parse a feed from a URL, file, stream, or string''' + result = FeedParserDict() + result['feed'] = FeedParserDict() + result['entries'] = [] + if _XML_AVAILABLE: + result['bozo'] = 0 + if type(handlers) == types.InstanceType: + handlers = [handlers] + try: + f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers) + data = f.read() + except Exception, e: + result['bozo'] = 1 + result['bozo_exception'] = e + data = '' + f = None + + # if feed is gzip-compressed, decompress it + if f and data and hasattr(f, 'headers'): + if gzip and f.headers.get('content-encoding', '') == 'gzip': + try: + data = gzip.GzipFile(fileobj=_StringIO(data)).read() + except Exception, e: + # Some feeds claim to be gzipped but they're not, so + # we get garbage. Ideally, we should re-request the + # feed without the 'Accept-encoding: gzip' header, + # but we don't. + result['bozo'] = 1 + result['bozo_exception'] = e + data = '' + elif zlib and f.headers.get('content-encoding', '') == 'deflate': + try: + data = zlib.decompress(data, -zlib.MAX_WBITS) + except Exception, e: + result['bozo'] = 1 + result['bozo_exception'] = e + data = '' + + # save HTTP headers + if hasattr(f, 'info'): + info = f.info() + result['etag'] = info.getheader('ETag') + last_modified = info.getheader('Last-Modified') + if last_modified: + result['modified'] = _parse_date(last_modified) + if hasattr(f, 'url'): + result['href'] = f.url + result['status'] = 200 + if hasattr(f, 'status'): + result['status'] = f.status + if hasattr(f, 'headers'): + result['headers'] = f.headers.dict + if hasattr(f, 'close'): + f.close() + + # there are four encodings to keep track of: + # - http_encoding is the encoding declared in the Content-Type HTTP header + # - xml_encoding is the encoding declared in the ; changed +# project name +#2.5 - 7/25/2003 - MAP - changed to Python license (all contributors agree); +# removed unnecessary urllib code -- urllib2 should always be available anyway; +# return actual url, status, and full HTTP headers (as result['url'], +# result['status'], and result['headers']) if parsing a remote feed over HTTP -- +# this should pass all the HTTP tests at ; +# added the latest namespace-of-the-week for RSS 2.0 +#2.5.1 - 7/26/2003 - RMK - clear opener.addheaders so we only send our custom +# User-Agent (otherwise urllib2 sends two, which confuses some servers) +#2.5.2 - 7/28/2003 - MAP - entity-decode inline xml properly; added support for +# inline and as used in some RSS 2.0 feeds +#2.5.3 - 8/6/2003 - TvdV - patch to track whether we're inside an image or +# textInput, and also to return the character encoding (if specified) +#2.6 - 1/1/2004 - MAP - dc:author support (MarekK); fixed bug tracking +# nested divs within content (JohnD); fixed missing sys import (JohanS); +# fixed regular expression to capture XML character encoding (Andrei); +# added support for Atom 0.3-style links; fixed bug with textInput tracking; +# added support for cloud (MartijnP); added support for multiple +# category/dc:subject (MartijnP); normalize content model: 'description' gets +# description (which can come from description, summary, or full content if no +# description), 'content' gets dict of base/language/type/value (which can come +# from content:encoded, xhtml:body, content, or fullitem); +# fixed bug matching arbitrary Userland namespaces; added xml:base and xml:lang +# tracking; fixed bug tracking unknown tags; fixed bug tracking content when +# element is not in default namespace (like Pocketsoap feed); +# resolve relative URLs in link, guid, docs, url, comments, wfw:comment, +# wfw:commentRSS; resolve relative URLs within embedded HTML markup in +# description, xhtml:body, content, content:encoded, title, subtitle, +# summary, info, tagline, and copyright; added support for pingback and +# trackback namespaces +#2.7 - 1/5/2004 - MAP - really added support for trackback and pingback +# namespaces, as opposed to 2.6 when I said I did but didn't really; +# sanitize HTML markup within some elements; added mxTidy support (if +# installed) to tidy HTML markup within some elements; fixed indentation +# bug in _parse_date (FazalM); use socket.setdefaulttimeout if available +# (FazalM); universal date parsing and normalization (FazalM): 'created', modified', +# 'issued' are parsed into 9-tuple date format and stored in 'created_parsed', +# 'modified_parsed', and 'issued_parsed'; 'date' is duplicated in 'modified' +# and vice-versa; 'date_parsed' is duplicated in 'modified_parsed' and vice-versa +#2.7.1 - 1/9/2004 - MAP - fixed bug handling " and '. fixed memory +# leak not closing url opener (JohnD); added dc:publisher support (MarekK); +# added admin:errorReportsTo support (MarekK); Python 2.1 dict support (MarekK) +#2.7.4 - 1/14/2004 - MAP - added workaround for improperly formed
        tags in +# encoded HTML (skadz); fixed unicode handling in normalize_attrs (ChrisL); +# fixed relative URI processing for guid (skadz); added ICBM support; added +# base64 support +#2.7.5 - 1/15/2004 - MAP - added workaround for malformed DOCTYPE (seen on many +# blogspot.com sites); added _debug variable +#2.7.6 - 1/16/2004 - MAP - fixed bug with StringIO importing +#3.0b3 - 1/23/2004 - MAP - parse entire feed with real XML parser (if available); +# added several new supported namespaces; fixed bug tracking naked markup in +# description; added support for enclosure; added support for source; re-added +# support for cloud which got dropped somehow; added support for expirationDate +#3.0b4 - 1/26/2004 - MAP - fixed xml:lang inheritance; fixed multiple bugs tracking +# xml:base URI, one for documents that don't define one explicitly and one for +# documents that define an outer and an inner xml:base that goes out of scope +# before the end of the document +#3.0b5 - 1/26/2004 - MAP - fixed bug parsing multiple links at feed level +#3.0b6 - 1/27/2004 - MAP - added feed type and version detection, result['version'] +# will be one of SUPPORTED_VERSIONS.keys() or empty string if unrecognized; +# added support for creativeCommons:license and cc:license; added support for +# full Atom content model in title, tagline, info, copyright, summary; fixed bug +# with gzip encoding (not always telling server we support it when we do) +#3.0b7 - 1/28/2004 - MAP - support Atom-style author element in author_detail +# (dictionary of 'name', 'url', 'email'); map author to author_detail if author +# contains name + email address +#3.0b8 - 1/28/2004 - MAP - added support for contributor +#3.0b9 - 1/29/2004 - MAP - fixed check for presence of dict function; added +# support for summary +#3.0b10 - 1/31/2004 - MAP - incorporated ISO-8601 date parsing routines from +# xml.util.iso8601 +#3.0b11 - 2/2/2004 - MAP - added 'rights' to list of elements that can contain +# dangerous markup; fiddled with decodeEntities (not right); liberalized +# date parsing even further +#3.0b12 - 2/6/2004 - MAP - fiddled with decodeEntities (still not right); +# added support to Atom 0.2 subtitle; added support for Atom content model +# in copyright; better sanitizing of dangerous HTML elements with end tags +# (script, frameset) +#3.0b13 - 2/8/2004 - MAP - better handling of empty HTML tags (br, hr, img, +# etc.) in embedded markup, in either HTML or XHTML form (
        ,
        ,
        ) +#3.0b14 - 2/8/2004 - MAP - fixed CDATA handling in non-wellformed feeds under +# Python 2.1 +#3.0b15 - 2/11/2004 - MAP - fixed bug resolving relative links in wfw:commentRSS; +# fixed bug capturing author and contributor URL; fixed bug resolving relative +# links in author and contributor URL; fixed bug resolvin relative links in +# generator URL; added support for recognizing RSS 1.0; passed Simon Fell's +# namespace tests, and included them permanently in the test suite with his +# permission; fixed namespace handling under Python 2.1 +#3.0b16 - 2/12/2004 - MAP - fixed support for RSS 0.90 (broken in b15) +#3.0b17 - 2/13/2004 - MAP - determine character encoding as per RFC 3023 +#3.0b18 - 2/17/2004 - MAP - always map description to summary_detail (Andrei); +# use libxml2 (if available) +#3.0b19 - 3/15/2004 - MAP - fixed bug exploding author information when author +# name was in parentheses; removed ultra-problematic mxTidy support; patch to +# workaround crash in PyXML/expat when encountering invalid entities +# (MarkMoraes); support for textinput/textInput +#3.0b20 - 4/7/2004 - MAP - added CDF support +#3.0b21 - 4/14/2004 - MAP - added Hot RSS support +#3.0b22 - 4/19/2004 - MAP - changed 'channel' to 'feed', 'item' to 'entries' in +# results dict; changed results dict to allow getting values with results.key +# as well as results[key]; work around embedded illformed HTML with half +# a DOCTYPE; work around malformed Content-Type header; if character encoding +# is wrong, try several common ones before falling back to regexes (if this +# works, bozo_exception is set to CharacterEncodingOverride); fixed character +# encoding issues in BaseHTMLProcessor by tracking encoding and converting +# from Unicode to raw strings before feeding data to sgmllib.SGMLParser; +# convert each value in results to Unicode (if possible), even if using +# regex-based parsing +#3.0b23 - 4/21/2004 - MAP - fixed UnicodeDecodeError for feeds that contain +# high-bit characters in attributes in embedded HTML in description (thanks +# Thijs van de Vossen); moved guid, date, and date_parsed to mapped keys in +# FeedParserDict; tweaked FeedParserDict.has_key to return True if asking +# about a mapped key +#3.0fc1 - 4/23/2004 - MAP - made results.entries[0].links[0] and +# results.entries[0].enclosures[0] into FeedParserDict; fixed typo that could +# cause the same encoding to be tried twice (even if it failed the first time); +# fixed DOCTYPE stripping when DOCTYPE contained entity declarations; +# better textinput and image tracking in illformed RSS 1.0 feeds +#3.0fc2 - 5/10/2004 - MAP - added and passed Sam's amp tests; added and passed +# my blink tag tests +#3.0fc3 - 6/18/2004 - MAP - fixed bug in _changeEncodingDeclaration that +# failed to parse utf-16 encoded feeds; made source into a FeedParserDict; +# duplicate admin:generatorAgent/@rdf:resource in generator_detail.url; +# added support for image; refactored parse() fallback logic to try other +# encodings if SAX parsing fails (previously it would only try other encodings +# if re-encoding failed); remove unichr madness in normalize_attrs now that +# we're properly tracking encoding in and out of BaseHTMLProcessor; set +# feed.language from root-level xml:lang; set entry.id from rdf:about; +# send Accept header +#3.0 - 6/21/2004 - MAP - don't try iso-8859-1 (can't distinguish between +# iso-8859-1 and windows-1252 anyway, and most incorrectly marked feeds are +# windows-1252); fixed regression that could cause the same encoding to be +# tried twice (even if it failed the first time) +#3.0.1 - 6/22/2004 - MAP - default to us-ascii for all text/* content types; +# recover from malformed content-type header parameter with no equals sign +# ('text/xml; charset:iso-8859-1') +#3.1 - 6/28/2004 - MAP - added and passed tests for converting HTML entities +# to Unicode equivalents in illformed feeds (aaronsw); added and +# passed tests for converting character entities to Unicode equivalents +# in illformed feeds (aaronsw); test for valid parsers when setting +# XML_AVAILABLE; make version and encoding available when server returns +# a 304; add handlers parameter to pass arbitrary urllib2 handlers (like +# digest auth or proxy support); add code to parse username/password +# out of url and send as basic authentication; expose downloading-related +# exceptions in bozo_exception (aaronsw); added __contains__ method to +# FeedParserDict (aaronsw); added publisher_detail (aaronsw) +#3.2 - 7/3/2004 - MAP - use cjkcodecs and iconv_codec if available; always +# convert feed to UTF-8 before passing to XML parser; completely revamped +# logic for determining character encoding and attempting XML parsing +# (much faster); increased default timeout to 20 seconds; test for presence +# of Location header on redirects; added tests for many alternate character +# encodings; support various EBCDIC encodings; support UTF-16BE and +# UTF16-LE with or without a BOM; support UTF-8 with a BOM; support +# UTF-32BE and UTF-32LE with or without a BOM; fixed crashing bug if no +# XML parsers are available; added support for 'Content-encoding: deflate'; +# send blank 'Accept-encoding: ' header if neither gzip nor zlib modules +# are available +#3.3 - 7/15/2004 - MAP - optimize EBCDIC to ASCII conversion; fix obscure +# problem tracking xml:base and xml:lang if element declares it, child +# doesn't, first grandchild redeclares it, and second grandchild doesn't; +# refactored date parsing; defined public registerDateHandler so callers +# can add support for additional date formats at runtime; added support +# for OnBlog, Nate, MSSQL, Greek, and Hungarian dates (ytrewq1); added +# zopeCompatibilityHack() which turns FeedParserDict into a regular +# dictionary, required for Zope compatibility, and also makes command- +# line debugging easier because pprint module formats real dictionaries +# better than dictionary-like objects; added NonXMLContentType exception, +# which is stored in bozo_exception when a feed is served with a non-XML +# media type such as 'text/plain'; respect Content-Language as default +# language if not xml:lang is present; cloud dict is now FeedParserDict; +# generator dict is now FeedParserDict; better tracking of xml:lang, +# including support for xml:lang='' to unset the current language; +# recognize RSS 1.0 feeds even when RSS 1.0 namespace is not the default +# namespace; don't overwrite final status on redirects (scenarios: +# redirecting to a URL that returns 304, redirecting to a URL that +# redirects to another URL with a different type of redirect); add +# support for HTTP 303 redirects +#4.0 - MAP - support for relative URIs in xml:base attribute; fixed +# encoding issue with mxTidy (phopkins); preliminary support for RFC 3229; +# support for Atom 1.0; support for iTunes extensions; new 'tags' for +# categories/keywords/etc. as array of dict +# {'term': term, 'scheme': scheme, 'label': label} to match Atom 1.0 +# terminology; parse RFC 822-style dates with no time; lots of other +# bug fixes +#4.1 - MAP - removed socket timeout; added support for chardet library diff --git a/sabnzbd/utils/json.py b/sabnzbd/utils/json.py new file mode 100644 index 0000000..28c4594 --- /dev/null +++ b/sabnzbd/utils/json.py @@ -0,0 +1,94 @@ +import string +import types + +## json.py implements a JSON (http://json.org) reader and writer. +## Copyright (C) 2005 Patrick D. Logan +## Contact mailto:patrickdlogan@stardecisions.com +## +## 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +## Remark by ShyPike: removed the decoding of JSON, +## because it's not used by SABnzbd+ +## The full source package can be obtained from: +## http://sourceforge.net/projects/json-py + +class WriteException(Exception): + pass + +class JsonWriter(object): + + def _append(self, s): + self._results.append(s) + + def write(self, obj, escaped_forward_slash=False): + self._escaped_forward_slash = escaped_forward_slash + self._results = [] + self._write(obj) + return "".join(self._results) + + def _write(self, obj): + ty = type(obj) + if ty is types.DictType: + n = len(obj) + self._append("{") + for k, v in obj.items(): + self._write(k) + self._append(":") + self._write(v) + n = n - 1 + if n > 0: + self._append(",") + self._append("}") + elif ty is types.ListType or ty is types.TupleType: + n = len(obj) + self._append("[") + for item in obj: + self._write(item) + n = n - 1 + if n > 0: + self._append(",") + self._append("]") + elif ty is types.StringType or ty is types.UnicodeType: + self._append('"') + if ty is types.UnicodeType: + obj = obj.encode('utf-8', 'replace') + else: + try: + obj.decode('utf-8') + except: + obj = obj.decode('latin-1').encode('utf-8', 'replace') + obj = obj.replace('\\', r'\\') + if self._escaped_forward_slash: + obj = obj.replace('/', r'\/') + obj = obj.replace('"', r'\"') + obj = obj.replace('\b', r'\b') + obj = obj.replace('\f', r'\f') + obj = obj.replace('\n', r'\n') + obj = obj.replace('\r', r'\r') + obj = obj.replace('\t', r'\t') + self._append(obj) + self._append('"') + elif ty is types.IntType or ty is types.LongType: + self._append(str(obj)) + elif ty is types.FloatType: + self._append("%f" % obj) + elif obj is True: + self._append("true") + elif obj is False: + self._append("false") + elif obj is None: + self._append("null") + else: + raise WriteException, "Cannot write in JSON: %s" % repr(obj) diff --git a/sabnzbd/utils/kronos.py b/sabnzbd/utils/kronos.py new file mode 100644 index 0000000..79ac945 --- /dev/null +++ b/sabnzbd/utils/kronos.py @@ -0,0 +1,579 @@ +#!/usr/bin/python +"""Module that provides a cron-like task scheduler. + +This task scheduler is designed to be used from inside your own program. +You can schedule Python functions to be called at specific intervals or +days. It uses the standard 'sched' module for the actual task scheduling, +but provides much more: + +* repeated tasks (at intervals, or on specific days) +* error handling (exceptions in tasks don't kill the scheduler) +* optional to run scheduler in its own thread or separate process +* optional to run a task in its own thread or separate process + +If the threading module is available, you can use the various Threaded +variants of the scheduler and associated tasks. If threading is not +available, you could still use the forked variants. If fork is also +not available, all processing is done in a single process, sequentially. + +There are three Scheduler classes: + + Scheduler ThreadedScheduler ForkedScheduler + +You usually add new tasks to a scheduler using the add_interval_task or +add_daytime_task methods, with the appropriate processmethod argument +to select sequential, threaded or forked processing. NOTE: it is impossible +to add new tasks to a ForkedScheduler, after the scheduler has been started! +For more control you can use one of the following Task classes +and use schedule_task or schedule_task_abs: + + IntervalTask ThreadedIntervalTask ForkedIntervalTask + SingleTask ThreadedSingleTask ForkedSingleTask + WeekdayTask ThreadedWeekdayTask ForkedWeekdayTask + MonthdayTask ThreadedMonthdayTask ForkedMonthdayTask + +Kronos is the Greek God of Time. + +Kronos scheduler (c) Irmen de Jong. +This version has been extracted from the Turbogears source repository +and slightly changed to be completely stand-alone again. Also some fixes +have been made to make it work on Python 2.6 (sched module changes). +The version in Turbogears is based on the original stand-alone Kronos. +This is open-source software, released under the MIT Software License: +http://www.opensource.org/licenses/mit-license.php + +""" + +__version__="2.0" + +__all__ = [ + "DayTaskRescheduler", + "ForkedIntervalTask", + "ForkedMonthdayTask", + "ForkedScheduler", + "ForkedSingleTask", + "ForkedTaskMixin", + "ForkedWeekdayTask", + "IntervalTask", + "MonthdayTask", + "Scheduler", + "SingleTask", + "Task", + "ThreadedIntervalTask", + "ThreadedMonthdayTask", + "ThreadedScheduler", + "ThreadedSingleTask", + "ThreadedTaskMixin", + "ThreadedWeekdayTask", + "WeekdayTask", + "add_interval_task", + "add_monthday_task", + "add_single_task", + "add_weekday_task", + "cancel", + "method", +] + +import os +import sys +import sched +import time +import traceback +import weakref + +class method: + sequential="sequential" + forked="forked" + threaded="threaded" + +class Scheduler: + """The Scheduler itself.""" + + def __init__(self): + self.running=True + self.sched = sched.scheduler(time.time, self.__delayfunc) + + def __delayfunc(self, delay): + # This delay function is basically a time.sleep() that is + # divided up, so that we can check the self.running flag while delaying. + # there is an additional check in here to ensure that the top item of + # the queue hasn't changed + if delay<10: + time.sleep(delay) + else: + toptime = self._getqueuetoptime() + endtime = time.time() + delay + period = 5 + stoptime = endtime - period + while self.running and stoptime > time.time() and \ + self._getqueuetoptime() == toptime: + time.sleep(period) + if not self.running or self._getqueuetoptime() != toptime: + return + now = time.time() + if endtime > now: + time.sleep(endtime - now) + + def _acquire_lock(self): + pass + + def _release_lock(self): + pass + + def add_interval_task(self, action, taskname, initialdelay, interval, + processmethod, args, kw): + """Add a new Interval Task to the schedule. + + A very short initialdelay or one of zero cannot be honored, you will + see a slight delay before the task is first executed. This is because + the scheduler needs to pick it up in its loop. + + """ + if initialdelay < 0 or interval < 1: + raise ValueError("Delay or interval must be >0") + # Select the correct IntervalTask class. Not all types may be available! + if processmethod == method.sequential: + TaskClass = IntervalTask + elif processmethod == method.threaded: + TaskClass = ThreadedIntervalTask + elif processmethod == method.forked: + TaskClass = ForkedIntervalTask + else: + raise ValueError("Invalid processmethod") + if not args: + args = [] + if not kw: + kw = {} + task = TaskClass(taskname, interval, action, args, kw) + self.schedule_task(task, initialdelay) + return task + + def add_single_task(self, action, taskname, initialdelay, processmethod, + args, kw): + """Add a new task to the scheduler that will only be executed once.""" + if initialdelay < 0: + raise ValueError("Delay must be >0") + # Select the correct SingleTask class. Not all types may be available! + if processmethod == method.sequential: + TaskClass = SingleTask + elif processmethod == method.threaded: + TaskClass = ThreadedSingleTask + elif processmethod == method.forked: + TaskClass = ForkedSingleTask + else: + raise ValueError("Invalid processmethod") + if not args: + args = [] + if not kw: + kw = {} + task = TaskClass(taskname, action, args, kw) + self.schedule_task(task, initialdelay) + return task + + def add_daytime_task(self, action, taskname, weekdays, monthdays, timeonday, + processmethod, args, kw): + """Add a new Day Task (Weekday or Monthday) to the schedule.""" + if weekdays and monthdays: + raise ValueError("You can only specify weekdays or monthdays, " + "not both") + if not args: + args = [] + if not kw: + kw = {} + if weekdays: + # Select the correct WeekdayTask class. + # Not all types may be available! + if processmethod == method.sequential: + TaskClass = WeekdayTask + elif processmethod == method.threaded: + TaskClass = ThreadedWeekdayTask + elif processmethod == method.forked: + TaskClass = ForkedWeekdayTask + else: + raise ValueError("Invalid processmethod") + task=TaskClass(taskname, weekdays, timeonday, action, args, kw) + if monthdays: + # Select the correct MonthdayTask class. + # Not all types may be available! + if processmethod == method.sequential: + TaskClass = MonthdayTask + elif processmethod == method.threaded: + TaskClass = ThreadedMonthdayTask + elif processmethod == method.forked: + TaskClass = ForkedMonthdayTask + else: + raise ValueError("Invalid processmethod") + task=TaskClass(taskname, monthdays, timeonday, action, args, kw) + firsttime=task.get_schedule_time(True) + self.schedule_task_abs(task, firsttime) + return task + + def schedule_task(self, task, delay): + """Add a new task to the scheduler with the given delay (seconds). + + Low-level method for internal use. + + """ + if self.running: + # lock the sched queue, if needed + self._acquire_lock() + try: + task.event = self.sched.enter(delay, 0, task, + (weakref.ref(self),) ) + finally: + self._release_lock() + else: + task.event = self.sched.enter(delay, 0, task, + (weakref.ref(self),) ) + + def schedule_task_abs(self, task, abstime): + """Add a new task to the scheduler for the given absolute time value. + + Low-level method for internal use. + + """ + if self.running: + # lock the sched queue, if needed + self._acquire_lock() + try: + task.event = self.sched.enterabs(abstime, 0, task, + (weakref.ref(self),) ) + finally: + self._release_lock() + else: + task.event = self.sched.enterabs(abstime, 0, task, + (weakref.ref(self),) ) + + def start(self): + """Start the scheduler.""" + self._run() + + def stop(self): + """Remove all pending tasks and stop the Scheduler.""" + self.running = False + self._clearschedqueue() + + def cancel(self, task): + """Cancel given scheduled task.""" + self.sched.cancel(task.event) + + if sys.version_info>=(2,6): + # code for sched module of python 2.6+ + def _getqueuetoptime(self): + return self.sched._queue[0].time + def _clearschedqueue(self): + self.sched._queue[:] = [] + else: + # code for sched module of python 2.5 and older + def _getqueuetoptime(self): + return self.sched.queue[0][0] + def _clearschedqueue(self): + self.sched.queue[:] = [] + + def _run(self): + # Low-level run method to do the actual scheduling loop. + while self.running: + try: + self.sched.run() + except Exception,x: + print >>sys.stderr, "ERROR DURING SCHEDULER EXECUTION",x + print >>sys.stderr, "".join( + traceback.format_exception(*sys.exc_info())) + print >>sys.stderr, "-" * 20 + # queue is empty; sleep a short while before checking again + if self.running: + time.sleep(5) + + +class Task: + """Abstract base class of all scheduler tasks""" + + def __init__(self, name, action, args, kw): + """This is an abstract class!""" + self.name=name + self.action=action + self.args=args + self.kw=kw + + def __call__(self, schedulerref): + """Execute the task action in the scheduler's thread.""" + try: + self.execute() + except Exception,x: + self.handle_exception(x) + self.reschedule(schedulerref()) + + def reschedule(self, scheduler): + """This method should be defined in one of the sub classes!""" + raise NotImplementedError("You're using the abstract base class 'Task'," + " use a concrete class instead") + + def execute(self): + """Execute the actual task.""" + self.action(*self.args, **self.kw) + + 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 + + +class SingleTask(Task): + """A task that only runs once.""" + + def reschedule(self, scheduler): + pass + + +class IntervalTask(Task): + """A repeated task that occurs at certain intervals (in seconds).""" + + def __init__(self, name, interval, action, args=None, kw=None): + Task.__init__(self, name, action, args, kw) + self.interval = interval + + def reschedule(self, scheduler): + """Reschedule this task according to its interval (in seconds).""" + scheduler.schedule_task(self, self.interval) + + +class DayTaskRescheduler: + """A mixin class that contains the reschedule logic for the DayTasks.""" + + def __init__(self, timeonday): + self.timeonday = timeonday + + def get_schedule_time(self, today): + """Calculate the time value at which this task is to be scheduled.""" + now = list(time.localtime()) + if today: + # schedule for today. let's see if that is still possible + if (now[3], now[4]) >= self.timeonday: + # too bad, it will be tomorrow + now[2] += 1 + else: + # tomorrow + now[2] += 1 + # set new time on day (hour,minute) + now[3], now[4] = self.timeonday + # seconds + now[5] = 0 + return time.mktime(now) + + def reschedule(self, scheduler): + """Reschedule this task according to the daytime for the task. + + The task is scheduled for tomorrow, for the given daytime. + + """ + # (The execute method in the concrete Task classes will check + # if the current day is a day on which the task must run). + abstime = self.get_schedule_time(False) + scheduler.schedule_task_abs(self, abstime) + + +class WeekdayTask(DayTaskRescheduler, Task): + """A task that is called at specific days in a week (1-7), at a fixed time + on the day. + + """ + + def __init__(self, name, weekdays, timeonday, action, args=None, kw=None): + if type(timeonday) not in (list, tuple) or len(timeonday) != 2: + raise TypeError("timeonday must be a 2-tuple (hour,minute)") + if type(weekdays) not in (list, tuple): + raise TypeError("weekdays must be a sequence of weekday numbers " + "1-7 (1 is Monday)") + DayTaskRescheduler.__init__(self, timeonday) + Task.__init__(self, name, action, args, kw) + self.days = weekdays + + def execute(self): + # This is called every day, at the correct time. We only need to + # check if we should run this task today (this day of the week). + weekday = time.localtime().tm_wday + 1 + if weekday in self.days: + self.action(*self.args, **self.kw) + + +class MonthdayTask(DayTaskRescheduler, Task): + """A task that is called at specific days in a month (1-31), at a fixed + time on the day. + + """ + + def __init__(self, name, monthdays, timeonday, action, args=None, kw=None): + if type(timeonday) not in (list, tuple) or len(timeonday) != 2: + raise TypeError("timeonday must be a 2-tuple (hour,minute)") + if type(monthdays) not in (list, tuple): + raise TypeError("monthdays must be a sequence of monthdays numbers " + "1-31") + DayTaskRescheduler.__init__(self, timeonday) + Task.__init__(self, name, action, args, kw) + self.days = monthdays + + def execute(self): + # This is called every day, at the correct time. We only need to + # check if we should run this task today (this day of the month). + if time.localtime().tm_mday in self.days: + self.action(*self.args, **self.kw) + + +try: + import threading + + class ThreadedScheduler(Scheduler): + """A Scheduler that runs in its own thread.""" + + def __init__(self): + Scheduler.__init__(self) + # we require a lock around the task queue + self._lock = threading.Lock() + + def start(self): + """Splice off a thread in which the scheduler will run.""" + self.thread = threading.Thread(target=self._run) + self.thread.setDaemon(True) + self.thread.start() + + def stop(self): + """Stop the scheduler and wait for the thread to finish.""" + Scheduler.stop(self) + try: + self.thread.join() + except AttributeError: + pass + + def _acquire_lock(self): + """Lock the thread's task queue.""" + self._lock.acquire() + + def _release_lock(self): + """Release the lock on th ethread's task queue.""" + self._lock.release() + + + class ThreadedTaskMixin: + """A mixin class to make a Task execute in a separate thread.""" + + def __call__(self, schedulerref): + """Execute the task action in its own thread.""" + threading.Thread(target=self.threadedcall).start() + self.reschedule(schedulerref()) + + def threadedcall(self): + # This method is run within its own thread, so we have to + # do the execute() call and exception handling here. + try: + self.execute() + except Exception,x: + self.handle_exception(x) + + class ThreadedIntervalTask(ThreadedTaskMixin, IntervalTask): + """Interval Task that executes in its own thread.""" + pass + + class ThreadedSingleTask(ThreadedTaskMixin, SingleTask): + """Single Task that executes in its own thread.""" + pass + + class ThreadedWeekdayTask(ThreadedTaskMixin, WeekdayTask): + """Weekday Task that executes in its own thread.""" + pass + + class ThreadedMonthdayTask(ThreadedTaskMixin, MonthdayTask): + """Monthday Task that executes in its own thread.""" + pass + +except ImportError: + # threading is not available + pass + + +if hasattr(os, "fork"): + import signal + + class ForkedScheduler(Scheduler): + """A Scheduler that runs in its own forked process.""" + + def __del__(self): + if hasattr(self, "childpid"): + os.kill(self.childpid, signal.SIGKILL) + + def start(self): + """Fork off a new process in which the scheduler will run.""" + pid = os.fork() + if pid == 0: + # we are the child + signal.signal(signal.SIGUSR1, self.signalhandler) + self._run() + os._exit(0) + else: + # we are the parent + self.childpid = pid + # can no longer insert in the scheduler queue + del self.sched + + def stop(self): + """Stop the scheduler and wait for the process to finish.""" + os.kill(self.childpid, signal.SIGUSR1) + os.waitpid(self.childpid, 0) + + def signalhandler(self, sig, stack): + Scheduler.stop(self) + + + class ForkedTaskMixin: + """A mixin class to make a Task execute in a separate process.""" + + def __call__(self, schedulerref): + """Execute the task action in its own process.""" + pid = os.fork() + if pid == 0: + # we are the child + try: + self.execute() + except Exception,x: + self.handle_exception(x) + os._exit(0) + else: + # we are the parent + self.reschedule(schedulerref()) + + + class ForkedIntervalTask(ForkedTaskMixin, IntervalTask): + """Interval Task that executes in its own process.""" + pass + + class ForkedSingleTask(ForkedTaskMixin, SingleTask): + """Single Task that executes in its own process.""" + pass + + class ForkedWeekdayTask(ForkedTaskMixin, WeekdayTask): + """Weekday Task that executes in its own process.""" + pass + + class ForkedMonthdayTask(ForkedTaskMixin, MonthdayTask): + """Monthday Task that executes in its own process.""" + pass + + + +if __name__=="__main__": + def testaction(arg): + print ">>>TASK",arg,"sleeping 3 seconds" + time.sleep(3) + print "<<>> elem_quote('hello') + 'hello' + >>> elem_quote('hello', nonquote=False) + '"hello"' + >>> elem_quote('"hello"') + '\\'"hello"\\'' + >>> elem_quote(3) + Traceback (most recent call last): + TypeError: Can only quote strings. "3" + >>> elem_quote(3, stringify=True) + '3' + >>> elem_quote('hello', encoding='ascii') + u'hello' + >>> elem_quote('\\n') + Traceback (most recent call last): + QuoteError: Multiline values can't be quoted. + " + " + """ + if not isinstance(member, basestring): + if stringify: + member = str(member) + else: + # FIXME: is this the appropriate error message ? + raise TypeError('Can only quote strings. "%s"' % str(member)) + if encoding and isinstance(member, str): + # from string to unicode + member = unicode(member, encoding) + if '\n' in member: + raise QuoteError('Multiline values can\'t be quoted.\n"%s"' % str(member)) + # + if nonquote and badchars.match(member) is not None: + return member + # this ordering of tests determines which quote character will be used in + # preference - here we have \" first... + elif member.find('"') == -1: + return '"%s"' % member + # but we will use either... which may not suit some people + elif member.find("'") == -1: + return "'%s'" % member + else: + raise QuoteError('Value can\'t be quoted : "%s"' % member) + +def unquote(inline, fullquote=True, retain=False): + """ + Unquote a value. + + If the value isn't quoted it returns the value. + + If the value is badly quoted it raises ``UnQuoteError``. + + If retain is ``True`` (default is ``False``) then the quotes are left + around the value (but leading or trailing whitespace will have been + removed). + + If fullquote is ``False`` (default is ``True``) then unquote will only + unquote the first part of the ``inline``. If there is anything after the + quoted element, this will be returned as well (instead of raising an + error). + + In this case the return value is ``(value, rest)``. + + >>> unquote('hello') + 'hello' + >>> unquote('"hello"') + 'hello' + >>> unquote('"hello') + Traceback (most recent call last): + UnQuoteError: Value is badly quoted: ""hello" + >>> unquote('"hello" fish') + Traceback (most recent call last): + UnQuoteError: Value is badly quoted: ""hello" fish" + >>> unquote("'hello'", retain=True) + "'hello'" + >>> unquote('"hello" fish', fullquote=False) + ('hello', ' fish') + """ + mat = inquotes.match(inline) + if mat is None: + if inline.strip()[0] not in '\'\"': # not quoted + return inline + else: + # badly quoted + raise UnQuoteError('Value is badly quoted: "%s"' % inline) + quoted, rest = mat.groups() + if fullquote and rest.strip(): + # badly quoted + raise UnQuoteError('Value is badly quoted: "%s"' % inline) + if not retain: + quoted = quoted[1:-1] + if not fullquote: + return quoted, rest + else: + return quoted + +def quote_escape(value, lf='&mjf-lf;', quot='&mjf-quot;'): + """ + Escape a string so that it can safely be quoted. You should use this if the + value to be quoted *may* contain line-feeds or both single quotes and double + quotes. + + If the value contains ``\n`` then it will be escaped using ``lf``. By + default this is ``&mjf-lf;``. + + If the value contains single quotes *and* double quotes, then all double + quotes will be escaped using ``quot``. By default this is ``&mjf-quot;``. + + >>> quote_escape('hello') + 'hello' + >>> quote_escape('hello\\n') + 'hello&mjf-lf;' + >>> quote_escape('hello"') + 'hello"' + >>> quote_escape('hello"\\'') + "hello&mjf-quot;'" + >>> quote_escape('hello"\\'\\n', '&fish;', '&wobble;') + "hello&wobble;'&fish;" + """ + if '\n' in value: + value = value.replace('\n', lf) + if '\'' in value and '\"' in value: + value = value.replace('"', quot) + return value + +def quote_unescape(value, lf='&mjf-lf;', quot='&mjf-quot;'): + """ + Unescape a string escaped by ``quote_escape``. + + If it was escaped using anything other than the defaults for ``lf`` and + ``quot`` you must pass them to this function. + + >>> quote_unescape("hello&wobble;'&fish;", '&fish;', '&wobble;') + 'hello"\\'\\n' + >>> quote_unescape('hello') + 'hello' + >>> quote_unescape('hello&mjf-lf;') + 'hello\\n' + >>> quote_unescape("'hello'") + "'hello'" + >>> quote_unescape('hello"') + 'hello"' + >>> quote_unescape("hello&mjf-quot;'") + 'hello"\\'' + >>> quote_unescape("hello&wobble;'&fish;", '&fish;', '&wobble;') + 'hello"\\'\\n' + """ + return value.replace(lf, '\n').replace(quot, '"') + +def simplelist(inline): + """ + Parse a string to a list. + + A simple regex that extracts quoted items from a list. + + It retains quotes around elements. (So unquote each element) + + >>> simplelist('''hello, goodbye, 'title', "name", "I can't"''') + ['hello', 'goodbye', "'title'", '"name"', '"I can\\'t"'] + + FIXME: This doesn't work fully (allows some badly formed lists): + e.g. + >>> simplelist('hello, fish, "wobble" bottom hooray') + ['hello', 'fish', '"wobble"', 'bottom hooray'] + """ + return paramfinder.findall(inline) + +############################################## +# LineParser - a multi purpose line parser +# handles lines with comma seperated values on it, followed by a comment +# correctly handles quoting +# *and* can handle nested lists - marked between '[...]' or '(...)' +# See the docstring for how this works +# by default it returns a (list, comment) tuple ! +# There are several keyword arguments that control how LineParser works. + +class LineParser(object): + """An object to parse nested lists from strings.""" + + liststart = { '[' : ']', '(' : ')' } + quotes = ['\'', '"'] + + def __init__(self, options=None, **keywargs): + """Initialise the LineParser.""" + self.reset(options, **keywargs) + + def reset(self, options=None, **keywargs): + """Reset the parser with the specified options.""" + if options is None: + options = {} + options.update(keywargs) + # + defaults = { + 'recursive': True, + 'comment': True, + 'retain': False, + 'force_list': False, + 'csv': False + } + defaults.update(options) + if defaults['csv']: + defaults.update({ + 'recursive': False, + 'force_list': True, + 'comment': False, + }) + # check all the options are valid + for entry in defaults.keys(): + if entry not in ['comment', + 'retain', + 'csv', + 'recursive', + 'force_list']: + raise TypeError, ("'%s' is an invalid keyword argument for " + "this function" % entry) + # + self.recursive = defaults['recursive'] + self.comment = defaults['comment'] + self.retain = defaults['retain'] + self.force_list = defaults['force_list'] + + def feed(self, inline, endchar=None): + """ + Parse a single line (or fragment). + + Uses the options set in the parser object. + + Can parse lists - including nested lists. (If ``recursive`` is + ``False`` then nested lists will cause a ``BadLineError``). + + Return value depends on options. + + If ``comment`` is ``False`` it returns ``outvalue`` + + If ``comment`` is ``True`` it returns ``(outvalue, comment)``. (Even if + comment is just ``''``). + + If ``force_list`` is ``False`` then ``outvalue`` may be a list or a + single item. + + If ``force_list`` is ``True`` then ``outvalue`` will always be a list - + even if it has just one member. + + List syntax : + + * Comma separated lines ``a, b, c, d`` + * Lists can optionally be between square or ordinary brackets + - ``[a, b, c, d]`` + - ``(a, b, c, d)`` + * Nested lists *must* be between brackets - ``a, [a, b, c, d], c`` + * A single element list can be shown by a trailing quote - ``a,`` + * An empty list is shown by ``()`` or ``[]`` + + Elements can be quoted with single or double quotes (but can't contain + both). + + The line can optionally end with a comment (preeded by a '#'). + This depends on the ``comment`` attribute. + + If the line is badly built then this method will raise one of : :: + + CommentError, BadLineError, UnQuoteError + + Using the ``csv`` option is the same as setting : :: + + 'recursive': False + 'force_list': True + 'comment': False + """ + # preserve the original line + # for error messages + if endchar is None: + self.origline = inline + inline = inline.lstrip() + # + outlist = [] + comma_needed = False + found_comma = False + while inline: + # NOTE: this sort of operation would be quicker + # with lists - but then can't use regexes + thischar = inline[0] + if thischar == '#': + # reached a comment + # end of the line... + break + # + if thischar == endchar: + return outlist, inline[1:] + # + if comma_needed: + if thischar == ',': + inline = inline[1:].lstrip() + comma_needed = False + found_comma = True + continue + raise BadLineError('Line is badly built :\n%s' % self.origline) + # + try: + # the character that marks the end of the list + listend = self.liststart[thischar] + except KeyError: + pass + else: + if not self.recursive and endchar is not None: + raise BadLineError('Line is badly built :\n%s' % self.origline) + newlist, inline = self.feed(inline[1:], endchar=listend) + outlist.append(newlist) + inline = inline.lstrip() + comma_needed = True + continue + # + if thischar in self.quotes: + # this might raise an error + # FIXME: trap the error and raise a more appropriate one ? + element, inline = unquote(inline, fullquote=False, + retain=self.retain) + inline = inline.lstrip() + outlist.append(element) + comma_needed = True + continue + # + # must be an unquoted element + mat = unquoted.match(inline) + if mat is not None: + # FIXME: if the regex was better we wouldn't need an rstrip + element = mat.group(1).rstrip() + # group 2 will be ``None`` if we reach the end of the line + inline = mat.group(2) or '' + outlist.append(element) + comma_needed = True + continue + # or it's a badly built line + raise BadLineError('Line is badly built :\n%s' % self.origline) + # + # if we've been called recursively + # we shouldn't have got this far + if endchar is not None: + raise BadLineError('Line is badly built :\n%s' % self.origline) + # + if not found_comma: + # if we didn't find a comma + # the value could be a nested list + if outlist: + outlist = outlist[0] + else: + outlist = '' + if self.force_list and not isinstance(outlist, list): + if outlist: + outlist = [outlist] + else: + outlist = [] + if not self.comment: + if inline: + raise CommentError('Comment not allowed :\n%s' % self.origline) + return outlist + return outlist, inline + +def lineparse(inline, options=None, **keywargs): + """ + A compatibility function that mimics the old lineparse. + + Also more convenient for single line use. + + Note: It still uses the new ``LineParser`` - and so takes the same + keyword arguments as that. + + >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' # a comment''') + (['hello', 'goodbye', "I can't do that", 'You "can" !'], '# a comment') + >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' # a comment''', comment=False) + Traceback (most recent call last): + CommentError: Comment not allowed : + "hello", 'goodbye', "I can't do that", 'You "can" !' # a comment + >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' # a comment''', recursive=False) + (['hello', 'goodbye', "I can't do that", 'You "can" !'], '# a comment') + >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' # a comment''', csv=True) + Traceback (most recent call last): + CommentError: Comment not allowed : + "hello", 'goodbye', "I can't do that", 'You "can" !' # a comment + >>> lineparse('''"hello", 'goodbye', "I can't do that", 'You "can" !' ''', comment=False) + ['hello', 'goodbye', "I can't do that", 'You "can" !'] + >>> lineparse('') + ('', '') + >>> lineparse('', force_list=True) + ([], '') + >>> lineparse('[]') + ([], '') + >>> lineparse('()') + ([], '') + >>> lineparse('()', force_list=True) + ([], '') + >>> lineparse('1,') + (['1'], '') + >>> lineparse('"Yo"') + ('Yo', '') + >>> lineparse('"Yo"', force_list=True) + (['Yo'], '') + >>> lineparse('''h, i, j, (h, i, ['hello', "f"], [], ([]),), k''') + (['h', 'i', 'j', ['h', 'i', ['hello', 'f'], [], [[]]], 'k'], '') + >>> lineparse('''h, i, j, (h, i, ['hello', "f"], [], ([]),), k''', recursive=False) + Traceback (most recent call last): + BadLineError: Line is badly built : + h, i, j, (h, i, ['hello', "f"], [], ([]),), k + >>> lineparse('fish#dog') + ('fish', '#dog') + >>> lineparse('"fish"#dog') + ('fish', '#dog') + >>> lineparse('(((())))') + ([[[[]]]], '') + >>> lineparse('((((,))))') + Traceback (most recent call last): + BadLineError: Line is badly built : + ((((,)))) + >>> lineparse('hi, ()') + (['hi', []], '') + >>> lineparse('"hello", "",') + (['hello', ''], '') + >>> lineparse('"hello", ,') + Traceback (most recent call last): + BadLineError: Line is badly built : + "hello", , + >>> lineparse('"hello", ["hi", ""], ""') + (['hello', ['hi', ''], ''], '') + >>> lineparse('''"member 1", "member 2", ["nest 1", ("nest 2", 'nest 2b', ['nest 3', 'value'], nest 2c), nest1b]''') + (['member 1', 'member 2', ['nest 1', ['nest 2', 'nest 2b', ['nest 3', 'value'], 'nest 2c'], 'nest1b']], '') + >>> lineparse('''"member 1", "member 2", ["nest 1", ("nest 2", 'nest 2b', ['nest 3', 'value'], nest 2c), nest1b]]''') + Traceback (most recent call last): + BadLineError: Line is badly built : + "member 1", "member 2", ["nest 1", ("nest 2", 'nest 2b', ['nest 3', 'value'], nest 2c), nest1b]] + """ + p = LineParser(options, **keywargs) + return p.feed(inline) + +############################################################################ +# a couple of functions to help build lists + +def list_stringify(inlist): + """ + Recursively rebuilds a list - making sure all the members are strings. + + Can take any iterable or a sequence as the argument and always + returns a list. + + Useful before writing out lists. + + Used by makelist if stringify is set. + + Uses the ``str`` function for stringification. + + Every element will be a string or a unicode object. + + Doesn't handle decoding strings into unicode objects (or vice-versa). + + >>> list_stringify([2, 2, 2, 2, (3, 3, 2.9)]) + ['2', '2', '2', '2', ['3', '3', '2.9']] + >>> list_stringify(None) + Traceback (most recent call last): + TypeError: 'NoneType' object is not iterable + >>> list_stringify([]) + [] + + FIXME: can receive any iterable - e.g. a sequence + >>> list_stringify('') + [] + >>> list_stringify('Hello There') + ['H', 'e', 'l', 'l', 'o', ' ', 'T', 'h', 'e', 'r', 'e'] + """ + outlist = [] + for item in inlist: + if not isinstance(item, (tuple, list)): + if not isinstance(item, basestring): + item = str(item) + else: + item = list_stringify(item) + outlist.append(item) + return outlist + + +def makelist(inlist, listchar='', stringify=False, escape=False, encoding=None): + """ + Given a list - turn it into a string that represents that list. (Suitable + for parsing by ``LineParser``). + + listchar should be ``'['``, ``'('`` or ``''``. This is the type of bracket + used to enclose the list. (``''`` meaning no bracket of course). + + If you have nested lists and listchar is ``''``, makelist will + automatically use ``'['`` for the nested lists. + + If stringify is ``True`` (default is ``False``) makelist will stringify the + inlist first (using ``list_stringify``). + + If ``escape`` is ``True`` (default is ``False``) makelist will call + ``quote_escape`` on each element before passing them to ``elem_quote`` to + be quoted. + + If encoding keyword is not ``None``, all strings are decoded to unicode + with the specified encoding. Each item will then be a unicode object + instead of a string. + + >>> makelist([]) + '[]' + >>> makelist(['a', 'b', 'I can\\'t do it', 'Yes you "can" !']) + 'a, b, "I can\\'t do it", \\'Yes you "can" !\\'' + >>> makelist([3, 4, 5, [6, 7, 8]], stringify=True) + '3, 4, 5, [6, 7, 8]' + >>> makelist([3, 4, 5, [6, 7, 8]]) + Traceback (most recent call last): + TypeError: Can only quote strings. "3" + >>> makelist(['a', 'b', 'c', ('d', 'e'), ('f', 'g')], listchar='(') + '(a, b, c, (d, e), (f, g))' + >>> makelist(['hi\\n', 'Quote "heck\\''], escape=True) + 'hi&mjf-lf;, "Quote &mjf-quot;heck\\'"' + >>> makelist(['a', 'b', 'c', ('d', 'e'), ('f', 'g')], encoding='UTF8') + u'a, b, c, [d, e], [f, g]' + """ + if stringify: + inlist = list_stringify(inlist) + listdict = {'[' : '[%s]', '(' : '(%s)', '' : '%s'} + outline = [] + # this makes '[' the default for empty or single value lists + if len(inlist) < 2: + listchar = listchar or '[' + for item in inlist: + if not isinstance(item, (list, tuple)): + if escape: + item = quote_escape(item) + outline.append(elem_quote(item, encoding=encoding)) + else: + # recursive for nested lists + outline.append(makelist(item, listchar or '[', + stringify, escape, encoding)) + return listdict[listchar] % (', '.join(outline)) + +############################################################################ +# CSV functions +# csvread, csvwrite + +def csvread(infile): + """ + Given an infile as an iterable, return the CSV as a list of lists. + + infile can be an open file object or a list of lines. + + If any of the lines are badly built then a ``CSVError`` will be raised. + This has a ``csv`` attribute - which is a reference to the parsed CSV. + Every line that couldn't be parsed will have ``[]`` for it's entry. + + The error *also* has an ``errors`` attribute. This is a list of all the + errors raised. Error in this will have an ``index`` attribute, which is the + line number, and a ``line`` attribute - which is the actual line that + caused the error. + + Example of usage : + + .. raw:: html + + {+coloring} + + handle = open(filename) + # remove the trailing '\n' from each line + the_file = [line.rstrip('\n') for line in handle.readlines()] + csv = csvread(the_file) + + {-coloring} + + >>> a = '''"object 1", 'object 2', object 3 + ... test 1 , "test 2" ,'test 3' + ... 'obj 1',obj 2,"obj 3"''' + >>> csvread(a.splitlines()) + [['object 1', 'object 2', 'object 3'], ['test 1', 'test 2', 'test 3'], ['obj 1', 'obj 2', 'obj 3']] + >>> csvread(['object 1,']) + [['object 1']] + >>> try: + ... csvread(['object 1, "hello', 'object 1, # a comment in a csv ?']) + ... except CSVError, e: + ... for entry in e.errors: + ... print entry.index, entry + 0 Value is badly quoted: ""hello" + 1 Comment not allowed : + object 1, # a comment in a csv ? + """ + out_csv = [] + errors = [] + index = -1 + p = LineParser(csv=True) + for line in infile: + index += 1 + try: + values = p.feed(line) + except ListQuoteError, e: + values = [] + e.line = line + e.index = index + errors.append(e) + # + out_csv.append(values) + # + if errors: + e = CSVError("Parsing CSV failed. See 'errors' attribute.") + e.csv = out_csv + e.errors = errors + raise e + return out_csv + +def csvwrite(inlist, stringify=False): + """ + Given a list of lists it turns each entry into a line in a CSV. + (Given a list of lists it returns a list of strings). + + The lines will *not* be ``\n`` terminated. + + Set stringify to ``True`` (default is ``False``) to convert entries to + strings before creating the line. + + If stringify is ``False`` then any non string value will raise a + ``TypeError``. + + Every member will be quoted using ``elem_quote``, but no escaping is done. + + Example of usage : + + .. raw:: html + + {+coloring} + + # escape each entry in each line (optional) + for index in range(len(the_list)): + the_list[index] = [quote_escape(val) for val in the_list[index]] + # + the_file = csvwrite(the_list) + # add a '\n' to each line - ready to write to file + the_file = [line + '\n' for line in the_file] + + {-coloring} + + >>> csvwrite([['object 1', 'object 2', 'object 3'], ['test 1', 'test 2', 'test 3'], ['obj 1', 'obj 2', 'obj 3']]) + ['"object 1", "object 2", "object 3"', '"test 1", "test 2", "test 3"', '"obj 1", "obj 2", "obj 3"'] + >>> csvwrite([[3, 3, 3]]) + Traceback (most recent call last): + TypeError: Can only quote strings. "3" + >>> csvwrite([[3, 3, 3]], True) + ['3, 3, 3'] + """ + out_list = [] + for entry in inlist: + if stringify: + new_entry = [] + for val in entry: + if not isinstance(val, basestring): + val = str(val) + new_entry.append(val) + entry = new_entry + this_line = ', '.join([elem_quote(val) for val in entry]) + out_list.append(this_line) + return out_list + +############################################################################ + +def _test(): + import doctest + doctest.testmod() + +if __name__ == "__main__": + _test() + + +""" +ISSUES/TODO +=========== + +Fix bug in simplelist + +Triple quote multiline values ? + +Doesn't allow Python style string escaping (but has '&mjf-quot;' and '&mjf-lf;'). + +Uses both \' and \" as quotes and sometimes doesn't quote at all - see +elem_quote - may not *always* be compatible with other programs. + +Allow space seperated lists ? e.g. 10 5 100 20 + +Lineparser could create tuples. + +Allow ',' as an empty list ? + +CHANGELOG +========= + +2005/08/28 - Version 1.4.0 +-------------------------- + +* Greater use of regular expressions for added speed +* Re-implemented ``lineparse`` as the ``LineParser`` object +* Added doctests +* Custom exceptions +* Changed the behaviour of ``csvread`` and ``csvwrite`` +* Removed the CSV ``compare`` function and the ``uncomment`` function +* Only ``'#'`` allowed for comments +* ``elem_quote`` raises exceptions +* Changed behaviour of ``unquote`` +* Added ``quote_escape`` and ``quote_unescape`` +* Removed the ``uni_conv`` option in the CSV functions + +.. note:: + + These changes are quite extensive. If any of them cause you problems then + let me know. I can provide a workaround in the next release. + +2005/06/01 Version 1.3.0 +Fixed bug in lineparse handling of empty list members. + Thnks to bug report and fix by Par Pandit +The 'unquote' function is now regex based. + (bugfix it now doesn't return a tuple if fullquote is 0) +Added the simplelist regex/function. +elem_quote and uncomment use a regex for clarity and speed. +Added a bunch of asserts to the tests. + +2005/03/07 Version 1.2.1 +makelist improved - better handling of empty or single member lists + +2005/02/23 Version 1.2.0 +Added uncomment for ConfigObj 3.3.0 +Optimised unquote - not a character by character search any more. +lineparse does full '&mjf..;' escape conversions - even when unquote isn't used +makelist and elem_quote takes an 'encoding' keyword for string members to be used to decode strigns to unicode +optimised makelist (including a minor bugfix) +Change to lineparse - it wouldn't allow '[' or '(' inside elements unless they were quoted. + +2004/12/04 Version 1.1.2 +Changed the license (*again* - now OSI compatible). +Empty values are now quoted by elem_quote. + +30-08-04 Version 1.1.1 +Removed the unicode hammer in csvread. +Improved docs. + +16-08-04 Version 1.1.0 +Added handling for non-string elements in elem_quote (optional). +Replaced some old += with lists and ''.join() for speed improvements... +Using basestring and hasattr('__getitem__') tests instead of isinstance(list) and str in a couple of places. +Changed license text. +Made the tests useful. + +19-06-04 Version 1.0.0 +Seems to work ok. A worthy successor to listparse and csv_s - although not as elegant as it could be. + +""" diff --git a/sabnzbd/utils/osx.py b/sabnzbd/utils/osx.py new file mode 100644 index 0000000..985e3df --- /dev/null +++ b/sabnzbd/utils/osx.py @@ -0,0 +1,53 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +#""" +#TO FIX : Translations are not working with this implementation +# Growl Registration may only be done once per run ? +# Registration is made too early, the language module has not read the text file yet +#from sabnzbd.lang import T +#NOTIFICATION = {'startup':'grwl-notif-startup','download':'grwl-notif-dl','pp':'grwl-notif-pp','other':'grwl-notif-other'} +NOTIFICATION = {'startup':'1. On Startup/Shutdown','download':'2. On adding NZB','pp':'3. On post-processing','complete':'4. On download terminated','other':'5. Other Messages'} + +try: + import Growl + import os.path + import logging + + if os.path.isfile('sabnzbdplus.icns'): + nIcon = Growl.Image.imageFromPath('sabnzbdplus.icns') + elif os.path.isfile('osx/resources/sabnzbdplus.icns'): + nIcon = Growl.Image.imageFromPath('osx/resources/sabnzbdplus.icns') + else: + nIcon = Growl.Image.imageWithIconForApplication('Terminal') + + def sendGrowlMsg(nTitle , nMsg, nType=NOTIFICATION['other']): + gnotifier = SABGrowlNotifier(applicationIcon=nIcon) + gnotifier.register() + #TO FIX + #gnotifier.notify(T(nType), nTitle, nMsg) + gnotifier.notify(nType, nTitle, nMsg) + + class SABGrowlNotifier(Growl.GrowlNotifier): + applicationName = "SABnzbd" + #TO FIX + #notifications = [T(notification) for notification in NOTIFICATION.values()] + notifications = NOTIFICATION.values() + +except ImportError: + def sendGrowlMsg(nTitle , nMsg, nType): + pass diff --git a/sabnzbd/utils/rarfile.py b/sabnzbd/utils/rarfile.py new file mode 100644 index 0000000..8bd913d --- /dev/null +++ b/sabnzbd/utils/rarfile.py @@ -0,0 +1,522 @@ +# rarfile.py +# +# Copyright (c) 2005 Marko Kreen +# +# Improved by ShyPike 2008-08-11: +# - use tempfile.mkstemp() instead of the unsafe os.tempnam() +# - Improve compatibility with Python's ZipFile support: +# - Always use Unix separators '/' in pathnames (ascii & unicode) +# - Foldernames must always end with a '/' (ascii & unicode) +# - Use CP850 as default codepage +# - Convert ASCII filenames to Python's default 'latin-1' encoding +# +# Optimized to fit in SABnzbd: +# - No extract hack (not needed for just rarred NZB files). +# - Use "SimpleRarExtract" function of newsunpack.py +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +import os, re +from struct import pack, unpack +from binascii import crc32 +from cStringIO import StringIO +import tempfile +import logging +import sabnzbd + +# whether to speed up decompression by using tmp archive +_use_extract_hack = 0 + +# +# rar constants +# + +RAR_ID = "Rar!\x1a\x07\x00" + +# block types +RAR_BLOCK_MARK = 0x72 # r +RAR_BLOCK_MAIN = 0x73 # s +RAR_BLOCK_FILE = 0x74 # t +RAR_BLOCK_OLD_COMMENT = 0x75 # u +RAR_BLOCK_OLD_EXTRA = 0x76 # v +RAR_BLOCK_OLD_SUB = 0x77 # w +RAR_BLOCK_OLD_RECOVERY = 0x78 # x +RAR_BLOCK_OLD_AUTH = 0x79 # y +RAR_BLOCK_SUB = 0x7a # z +RAR_BLOCK_ENDARC = 0x7b # { + +# main header flags +RAR_MAIN_VOLUME = 0x0001 +RAR_MAIN_COMMENT = 0x0002 +RAR_MAIN_LOCK = 0x0004 +RAR_MAIN_SOLID = 0x0008 +RAR_MAIN_NEWNUMBERING = 0x0010 +RAR_MAIN_AUTH = 0x0020 +RAR_MAIN_RECOVERY = 0x0040 +RAR_MAIN_PASSWORD = 0x0080 +RAR_MAIN_FIRSTVOLUME = 0x0100 + +# file header flags +RAR_FILE_SPLIT_BEFORE = 0x0001 +RAR_FILE_SPLIT_AFTER = 0x0002 +RAR_FILE_PASSWORD = 0x0004 +RAR_FILE_COMMENT = 0x0008 +RAR_FILE_SOLID = 0x0010 +RAR_FILE_DICTMASK = 0x00e0 +RAR_FILE_DICT64 = 0x0000 +RAR_FILE_DICT128 = 0x0020 +RAR_FILE_DICT256 = 0x0040 +RAR_FILE_DICT512 = 0x0060 +RAR_FILE_DICT1024 = 0x0080 +RAR_FILE_DICT2048 = 0x00a0 +RAR_FILE_DICT4096 = 0x00c0 +RAR_FILE_DIRECTORY = 0x00e0 +RAR_FILE_LARGE = 0x0100 +RAR_FILE_UNICODE = 0x0200 +RAR_FILE_SALT = 0x0400 +RAR_FILE_VERSION = 0x0800 +RAR_FILE_EXTTIME = 0x1000 +RAR_FILE_EXTFLAGS = 0x2000 + +RAR_ENDARC_NEXT_VOLUME = 0x0001 +RAR_ENDARC_DATACRC = 0x0002 +RAR_ENDARC_REVSPACE = 0x0004 + +# flags common to all blocks +RAR_SKIP_IF_UNKNOWN = 0x4000 +RAR_LONG_BLOCK = 0x8000 + +# Host OS types +RAR_OS_MSDOS = 0 +RAR_OS_OS2 = 1 +RAR_OS_WIN32 = 2 +RAR_OS_UNIX = 3 + +# +# Public interface +# +def is_rarfile(fn): + '''Check quickly whether file is rar archive.''' + try: + buf = open(fn, "rb").read(len(RAR_ID)) + return buf == RAR_ID + except: + return False + +class RarInfo: + '''An entry in rar archive.''' + + def isdir(self): + '''Returns True if the entry is a directory.''' + if self.type == RAR_BLOCK_FILE: + return (self.flags & RAR_FILE_DIRECTORY) == RAR_FILE_DIRECTORY + return False + +class RarFile: + '''Rar archive handling.''' + def __init__(self, rarfile, mode="r", charset='cp850', info_callback=None): + self.rarfile = rarfile + self.charset = charset + + self.info_list = [] + self.is_solid = 0 + self.uses_newnumbering = 0 + self.uses_volumes = 0 + self.info_callback = info_callback + self.got_mainhdr = 0 + file, ext = os.path.splitext(rarfile) + if 'r' in ext: + self._gen_volname = self._gen_oldvol + else: + self._gen_volname = self._gen_newvol + + if mode != "r": + raise Exception("Only mode=r supported") + + self._parse() + + def namelist(self): + '''Return list of filenames in rar''' + res = [] + for f in self.info_list: + res.append(f.filename) + return res + + def unamelist(self): + '''Return list of unicode filenames in rar''' + res = [] + for f in self.info_list: + res.append(f.unicode_filename) + return res + + def infolist(self): + '''Return rar entries.''' + return self.info_list + + def getinfo(self, fname): + '''Return RarInfo for fname.''' + if type(fname) == type(u''): + target = fname.replace(u'\\', u'/') + for f in self.info_list: + if f.unicode_filename.endswith(u'/') and not target.endswith(u'/'): + if (target+u'/') == f.unicode_filename: + return f + else: + if target == f.unicode_filename: + return f + else: + target = fname.replace('\\', '/') + for f in self.info_list: + if f.filename.endswith('/') and not target.endswith('/'): + if (target+'/') == f.filename: + return f + else: + if target == f.filename: + return f + + def read(self, fname): + '''Return decompressed data.''' + inf = self.getinfo(fname) + if not inf: + raise Exception("No such file") + + if inf.isdir(): + raise Exception("No data in directory") + + if inf.compress_type == 0x30: + res = self._extract_clear(inf) + elif _use_extract_hack and not self.is_solid and not self.uses_volumes: + res = self._extract_hack(inf) + else: + res = self._extract_unrar(self.rarfile, inf) + return res + + def close(self): + pass + + def printdir(self): + for f in self.info_list: + print f.filename + + # store entry + def _process_entry(self, item): + # RAR_BLOCK_NEWSUB has files too: CMT, RR + if item.type == RAR_BLOCK_FILE: + # use only first part + if (item.flags & RAR_FILE_SPLIT_BEFORE) == 0: + # Always use Unix separators + item.filename = item.filename.replace('\\', '/') + item.unicode_filename = item.unicode_filename.replace(u'\\', u'/') + # Folder items must end with '/' + if (item.flags & RAR_FILE_DIRECTORY) == RAR_FILE_DIRECTORY: + item.filename += '/' + item.unicode_filename += u'/' + self.info_list.append(item) + + if self.info_callback: + self.info_callback(item) + + # read rar + def _parse(self): + fd = open(self.rarfile, "rb") + id = fd.read(len(RAR_ID)) + if id != RAR_ID: + raise Exception("Not a Rar") + + volume = 0 # first vol (.rar) is 0 + more_vols = 0 + while 1: + h = self._parse_header(fd) + if not h: + if more_vols: + volume += 1 + fd = open(self._gen_volname(volume), "rb") + more_vols = 0 + if fd: + continue + break + h.volume = volume + + if h.type == RAR_BLOCK_MAIN and not self.got_mainhdr: + if h.flags & RAR_MAIN_NEWNUMBERING: + self.uses_newnumbering = 1 + self._gen_volname = self._gen_newvol + self.uses_volumes = h.flags & RAR_MAIN_VOLUME + self.is_solid = h.flags & RAR_MAIN_SOLID + self.got_mainhdr = 1 + elif h.type == RAR_BLOCK_ENDARC: + more_vols = h.flags & RAR_ENDARC_NEXT_VOLUME + + # store it + self._process_entry(h) + + # skip data + if h.add_size > 0: + fd.seek(h.add_size, 1) + + def _parse_header(self, fd): + h = self._parse_block_header(fd) + if h and (h.type == RAR_BLOCK_FILE or h.type == RAR_BLOCK_SUB): + self._parse_file_header(h) + return h + + # common header + def _parse_block_header(self, fd): + HDRLEN = 7 + h = RarInfo() + h.header_offset = fd.tell() + buf = fd.read(HDRLEN) + if not buf: + return None + + t = unpack(" HDRLEN: + h.data = fd.read(h.header_size - HDRLEN) + else: + h.data = "" + h.file_offset = fd.tell() + + if h.flags & RAR_LONG_BLOCK: + h.add_size = unpack("> 5 + min = stamp & 0x3F; stamp = stamp >> 6 + hr = stamp & 0x1F; stamp = stamp >> 5 + day = stamp & 0x1F; stamp = stamp >> 5 + mon = stamp & 0x0F; stamp = stamp >> 4 + yr = (stamp & 0x7F) + 1980 + return (yr, mon, day, hr, min, sec) + + # new-style volume name + def _gen_newvol(self, volume): + # allow % in filenames + fn = self.rarfile.replace("%", "%%") + + m = re.search(r"([0-9][0-9]*)[^0-9]*$", fn) + if not m: + raise Exception("Cannot construct volume name") + n1 = m.start(1) + n2 = m.end(1) + fmt = "%%0%dd" % (n2 - n1) + volfmt = fn[:n1] + fmt + fn[n2:] + return volfmt % (volume + 1) + + # old-style volume naming + def _gen_oldvol(self, volume): + if volume == 0: return self.rarfile + i = self.rarfile.rfind(".") + base = self.rarfile[:i] + if volume <= 100: + ext = ".r%02d" % (volume - 1) + else: + ext = ".s%02d" % (volume - 101) + return base + ext + + # read uncompressed file + def _extract_clear(self, inf): + volume = inf.volume + buf = "" + cur = None + while 1: + f = open(self._gen_volname(volume), "rb") + if not cur: + f.seek(inf.header_offset) + + while 1: + cur = self._parse_header(f) + if cur.type in (RAR_BLOCK_MARK, RAR_BLOCK_MAIN): + if cur.add_size: + f.seek(cur.add_size, 1) + continue + if cur.filename == inf.filename: + buf += f.read(cur.add_size) + break + + raise Exception("file not found?") + + # no more parts? + if (cur.flags & RAR_FILE_SPLIT_AFTER) == 0: + break + + volume += 1 + + return buf + + # put file compressed data into temporary .rar archive, and run + # unrar on that, thus avoiding unrar going over whole archive + def _extract_hack(self, inf): + BSIZE = 32*1024 + + size = inf.compress_size + inf.header_size + rf = open(self.rarfile, "rb") + rf.seek(inf.header_offset) + tmpf, tmpname = tempfile.mkstemp(suffix='.rar', text=False) + + # create main header: crc, type, flags, size, res1, res2 + mh = pack(" 0: + if size > BSIZE: + buf = rf.read(BSIZE) + else: + buf = rf.read(size) + os.write(tmpf, buf) + size -= len(buf) + os.close(tmpf) + + buf = self._extract_unrar(tmpname, inf) + os.unlink(tmpname) + return buf + + # extract using unrar + def _extract_unrar(self, rarfile, inf): + fn = inf.filename + if sabnzbd.WIN32: + # Windows unrar wants '\', not '/' + fn = fn.replace("/", "\\") + else: + # shell escapes for Unix/OSX + fn = fn.replace("`", "\\`") + fn = fn.replace('"', '\\"') + fn = fn.replace("$", "\\$") + + err, buf = sabnzbd.SimpleRarExtract(rarfile, fn) + if err > 0: + raise Exception("Error reading file") + return buf + +class _UnicodeFilename: + def __init__(self, name, encdata): + self.std_name = name + self.encdata = encdata + self.pos = self.encpos = 0 + self.buf = StringIO() + + def enc_byte(self): + c = self.encdata[self.encpos] + self.encpos += 1 + return ord(c) + + def std_byte(self): + return ord(self.std_name[self.pos]) + + def put(self, lo, hi): + self.buf.write(chr(lo) + chr(hi)) + self.pos += 1 + + def decode(self): + hi = self.enc_byte() + flagbits = 0 + while self.encpos < len(self.encdata): + if flagbits == 0: + flags = self.enc_byte() + flagbits = 8 + flagbits -= 2 + t = (flags >> flagbits) & 3 + if t == 0: + self.put(self.enc_byte(), 0) + elif t == 1: + self.put(self.enc_byte(), hi) + elif t == 2: + self.put(self.enc_byte(), self.enc_byte()) + else: + n = self.enc_byte() + if n & 0x80: + c = self.enc_byte() + for i in range((n & 0x7f) + 2): + lo = (self.std_byte() + c) & 0xFF + self.put(lo, hi) + else: + for i in range(n + 2): + self.put(self.std_byte(), 0) + return self.buf.getvalue().decode("utf-16le", "replace") + diff --git a/sabnzbd/utils/rsslib.py b/sabnzbd/utils/rsslib.py new file mode 100644 index 0000000..19e5629 --- /dev/null +++ b/sabnzbd/utils/rsslib.py @@ -0,0 +1,340 @@ +#"""RSS 2.0 Generator +# +#This library encapsulates the generation of an RSS (2.0) feed +# +# +#You may freely use this code in any way you can think of. +#""" +import xml.sax.saxutils + +#------------------------------------------------------------------------------ +def encode_for_xml(unicode_data, encoding='ascii'): + """ + Encode unicode_data for use as XML or HTML, with characters outside + of the encoding converted to XML numeric character references. + """ + try: + return unicode_data.encode(encoding, 'xmlcharrefreplace') + except ValueError: + # ValueError is raised if there are unencodable chars in the + # data and the 'xmlcharrefreplace' error handler is not found. + # Pre-2.3 Python doesn't support the 'xmlcharrefreplace' error + # handler, so we'll emulate it. + return _xmlcharref_encode(unicode_data, encoding) + +def _xmlcharref_encode(unicode_data, encoding): + """Emulate Python 2.3's 'xmlcharrefreplace' encoding error handler.""" + chars = [] + # Step through the unicode_data string one character at a time in + # order to catch unencodable characters: + for char in unicode_data: + try: + chars.append(char.encode(encoding, 'strict')) + except UnicodeError: + chars.append('&#%i;' % ord(char)) + return ''.join(chars) + + + +class RSS: +# """ +# RSS +# +# This class encapsulates the creation of an RSS 2.0 feed +# +# The RSS2.0 spec can be found here: +# http://blogs.law.harvard.edu/tech/rss +# +# +# RSS validator : http://rss.scripting.com +# +# +# The generation of an RSS feed is simple, the following is a +# sample: +# from rsslib import RSS, Item, Namespace +# rss = RSS() +# rss.channel.link = "http://channel.com" +# rss.channel.title = "my channel title" +# rss.channel.description = "my channel description" +# +# ns = Namespace( "foobar", "http://foobar.baz" ) +# rss.channel.namespaces.append( ns ) +# +# item = Item() +# item.link = "http://link.com" +# item.description = "my link description" +# item.title ="my item title" +# item.nsItems[ns.name + ":foo"] = "bar" +# rss.channel.items.append( item ) +# +# item = Item() +# item.link = "http://link2.com" +# item.description = "my link2 description" +# item.title ="my item2 title" +# item.nsItems[ns.name +":foo"] = "foo bar baz" +# rss.channel.items.append( item ) +# +# print rss.write() +# +# output: +# +# +# +# my channel title +# http://channel.com +# my channel description +# +# my item title +# http://link.com +# my link description +# bar +# +# +# my item2 title +# http://link2.com +# my link2 description +# foo bar baz +# +# +# +# +# +# author: cmallory /a t/ berserk /dot/ o r g +# """ + def __init__(self): + self.channel = Channel() + self.version = "2.0" + self.contents = None + +# if __name__ == "__main__" : +# from rsslib import RSS, Item, Namespace +# rss = RSS() +# rss.channel.link = "http://channel.com" +# rss.channel.title = "my channel title" +# rss.channel.description = "my channel description" +# +# ns = Namespace( "foobar", "http://foobar.baz" ) +# rss.addNamespace( ns ) +# +# item = Item() +# item.link = "http://link.com" +# item.description = "my link description" +# item.title ="my item title" +# +# item.enclosure.url = "http://enclosure.url.com" +# item.enclosure.length = 12345 +# item.enclosure.type = "audio/mpeg" +# +# item.nsItems[ns.name + ":foo"] = "bar" +# rss.addItem( item ) +# +# item = Item() +# item.link = "http://link2.com" +# item.description = "my link2 description" +# item.title ="my item2 title" +# item.nsItems[ns.name +":foo"] = "foo bar baz" +# rss.addItem( item ) +# +# print rss.write() + + + #Write out the rss document + def write( self ): + + self.contents = "\n" + #contents += "\n" + + self.contents += " element + def generateChannel( self ): + contents = "" + if ( self.channel.initialized() ): + contents += "\n" + contents += self.optionalWrite("title", self.channel.title ); + contents += self.optionalWrite("link", self.channel.link ); + contents += self.optionalWrite("description", self.channel.description ); + + contents += self.optionalWrite("language", self.channel.language ); + contents += self.optionalWrite("copyright", self.channel.copyright ); + contents += self.optionalWrite("category", self.channel.category ); + contents += self.optionalWrite("managingEditor", self.channel.managingEditor ); + contents += self.optionalWrite("webMaster", self.channel.webMaster ); + contents += self.optionalWrite("pubDate", self.channel.pubDate ); + contents += self.optionalWrite("lastBuildDate", self.channel.lastBuildDate ); + contents += self.optionalWrite("docs", self.channel.docs ); + contents += self.optionalWrite("cloud", self.channel.cloud ); + contents += self.optionalWrite("ttl", self.channel.ttl ); + contents += self.optionalWrite("generator", self.channel.generator ); + contents += self.optionalWrite("image", self.channel.image ); + contents += self.optionalWrite("rating", self.channel.rating ); + contents += self.optionalWrite("textInput", self.channel.textInput ); + contents += self.optionalWrite("skipHours", self.channel.skipHours ); + contents += self.optionalWrite("skipDays", self.channel.skipDays ); + + contents += "\n" + self.generateItems() + "\n" + else : + contents = "[Channel not properly initialized. " + contents +="A required field is not set.(title/link/description]" + + return contents + + #Generates all items within a channel + def generateItems( self ): + c = "" + for i in self.channel.items : + + c += "" + + c += self.optionalWrite("title", i.title); + c += self.optionalWrite("link", i.link ); + c += self.optionalWrite("description", i.description); + c += self.optionalWrite("author", i.author ); + c += self.optionalWrite("pubDate", str(i.pubDate) ) + c += self.optionalWrite("category", i.category ) + c += self.optionalWrite("comments", i.comments ) + c += self.optionalWrite("guid", i.guid ) + c += self.optionalWrite("source", i.source ) + + if ( i.enclosure.url != "" ): + c+= "\n" + + for k in i.nsItems.keys(): + c += self.optionalWrite( k , i.nsItems[ k ] ) + + c += "\n\n" + + return c + + + def addNamespace( self, ns ): + if ( self.channel.namespaces is not None ): + self.channel.namespaces.append( ns ) + + def addItem( self, item ): + if ( self.channel is not None): + self.channel.items.append( item ) + + + def optionalWrite( self, key, val ): + if ( val is not None and val != "" ): + return "<" + key + ">" + encode_for_xml(xml.sax.saxutils.escape(val)) + "\n" + else: + return "" + + +#Namespace +class Namespace: + def __init__( self, name, url ): + self.url = url + self.name = name + + +class Channel: +# """ +# Channel +# +# (http://blogs.law.harvard.edu/tech/rss) +# +# This object represents an RSS channel (as of ver2.0) +# """ + + def __init__( self ): + # + # Required Fields + # + self.title= None + self.link= None + self.description= None + # + # Optional Fields + # + self.language = "" + self.copyright = "" + self.managingEditor = "" + self.webMaster = "" + self.pubDate = "" + self.lastBuildDate = "" + self.category = "" + self.generator = "" + self.docs = "" + self.cloud = "" + self.ttl = "" + self.image = "" + self.rating = "" + self.textInput = "" + self.skipHours = "" + self.skipDays = "" + + self.items = [] + self.namespaces = [] + + def initialized( self ): + return self.title is not None and self.link is not None and self.description is not None + +class Item: +# """ +# Item +# +# http://blogs.law.harvard.edu/tech/rss#hrelementsOfLtitemgt +# +# A channel may contain any number of <item>s. An item may +# represent a "story" -- much like a story in a newspaper or magazine; +# if so its description is a synopsis of the story, and the link +# points to the full story. An item may also be complete in itself, +# if so, the description contains the text (entity-encoded HTML is +# allowed; see examples), and the link and title may be omitted. +# All elements of an item are optional, however at least one of +# title or description must be present. +# """ + def __init__( self ): + + self.title = "" + self.link = "" + self.description = "" + self.author = "" + self.category = "" + self.comments = "" + self.enclosure = "" + self.guid = "" + self.pubDate = "" + self.source = "" + self.enclosure = Enclosure() + + self.nsItems = {} + + +class Enclosure: + +# """ +# Enclosure +# +# sub-element of +# +# is an optional sub-element of . +# +# It has three required attributes: +# +# url: says where the enclosure is located, +# length: says how big it is in bytes, and +# type: says what its type is, a standard MIME type. +# +# The url must be an http url. +# +# Example: +# +# """ + def __init__(self): + self.url = "" + self.length = 0 + self.type = "" + diff --git a/sabnzbd/utils/servertests.py b/sabnzbd/utils/servertests.py new file mode 100644 index 0000000..99b43cc --- /dev/null +++ b/sabnzbd/utils/servertests.py @@ -0,0 +1,121 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.utils.servertests - Debugging server connections. Currently only NNTP server tests are done. +""" + +import socket +import sys + +from sabnzbd.newswrapper import NewsWrapper +from sabnzbd.downloader import Server, clues_login, clues_too_many +from sabnzbd.config import get_servers +from sabnzbd.codecs import xml_name +from sabnzbd.interface import IntConv +from sabnzbd.lang import T + +def test_nntp_server_dict(kwargs): + # Grab the host/port/user/pass/connections/ssl + host = kwargs.get('host', '').strip() + if not host: + return False, T('srv-noHost') + username = kwargs.get('username', '').strip() + password = kwargs.get('password', '').strip() + connections = IntConv(kwargs.get('connections', 0)) + if not connections: + return False, T('srv-noConnections') + ssl = IntConv(kwargs.get('ssl', 0)) + port = IntConv(kwargs.get('port', 0)) + if not port: + if ssl: + port = 563 + else: + port = 119 + + + return test_nntp_server(host, port, username=username, \ + password=password, ssl=ssl) + + +def test_nntp_server(host, port, username=None, password=None, ssl=None): + ''' Will connect (blocking) to the nttp server and report back any errors ''' + timeout = 4.0 + if '*' in password and not password.strip('*'): + # If the password is masked, try retrieving it from the config + servers = get_servers() + got_pass = False + for server in servers: + if host in server: + srv = servers[server] + password = srv.password() + got_pass = True + if not got_pass: + return False, T('srv-starredPass') + try: + s = Server(-1, host, port, timeout, 1, 0, ssl, username, password) + except: + return False, T('srv-invalidDetails') + + try: + nw = NewsWrapper(s, -1, block=True) + nw.init_connect() + while not nw.connected: + nw.lines = [] + nw.recv_chunk(block=True) + nw.finish_connect() + + except socket.timeout, e: + if port != 119 and not ssl: + return False, T('srv-timedoutSSL') + else: + return False, T('srv-timedout') + except socket.error, e: + return False, xml_name(str(e)) + + except: + return False, xml_name(str(sys.exc_info()[1])) + + + if not username or not password: + nw.nntp.sock.sendall('ARTICLE test\r\n') + try: + nw.lines = [] + nw.recv_chunk(block=True) + except: + return False, xml_name(str(sys.exc_info()[1])) + + # Could do with making a function for return codes to be used by downloader + code = nw.lines[0][:3] + + if code == '480': + return False, T('srv-noAuth') + + elif code == '100' or code.startswith('2') or code.startswith('4'): + return True, T('srv-success') + + elif code == '502' or clues_login(nw.lines[0]): + return False, T('srv-failedAuth') + + elif clues_too_many(nw.lines[0]): + return False, T('srv-tooManyConnections') + + else: + return False, T('srv-generalFail@1') % xml_name(nw.lines[0]) + + # Close the connection + nw.terminate(quit=True) diff --git a/sabnzbd/utils/ssmtplib.py b/sabnzbd/utils/ssmtplib.py new file mode 100644 index 0000000..fc17bba --- /dev/null +++ b/sabnzbd/utils/ssmtplib.py @@ -0,0 +1,159 @@ +"""SMTP over SSL client. + +Public class: SMTP_SSL +Public errors: SMTPSSLException +""" + +# Author: Matt Butcher , Feb. 2007 +# License: MIT License (or, at your option, the GPL, v.2 or later as posted at +# http://gnu.org). +## +## Begin License +# +# Copyright (c) 2007 M Butcher +# +# 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. +## +##End License +# +# This is just a minor modification to the smtplib code by Dragon De Monsyn. +import smtplib, socket + +__version__ = "1.00" + +__all__ = ['SMTPSSLException', 'SMTP_SSL'] + +SSMTP_PORT = 465 + +class SMTPSSLException(smtplib.SMTPException): + """Base class for exceptions resulting from SSL negotiation.""" + +class SMTP_SSL (smtplib.SMTP): + """This class provides SSL access to an SMTP server. + SMTP over SSL typical listens on port 465. Unlike StartTLS, SMTP over SSL + makes an SSL connection before doing a helo/ehlo. All transactions, then, + are done over an encrypted channel. + + This class is a simple subclass of the smtplib.SMTP class that comes with + Python. It overrides the connect() method to use an SSL socket, and it + overrides the starttles() function to throw an error (you can't do + starttls within an SSL session). + """ + certfile = None + keyfile = None + + def __init__(self, host='', port=0, local_hostname=None, keyfile=None, certfile=None): + """Initialize a new SSL SMTP object. + + If specified, `host' is the name of the remote host to which this object + will connect. If specified, `port' specifies the port (on `host') to + which this object will connect. `local_hostname' is the name of the + localhost. By default, the value of socket.getfqdn() is used. + + An SMTPConnectError is raised if the SMTP host does not respond + correctly. + + An SMTPSSLError is raised if SSL negotiation fails. + + Warning: This object uses socket.ssl(), which does not do client-side + verification of the server's cert. + """ + self.certfile = certfile + self.keyfile = keyfile + smtplib.SMTP.__init__(self, host, port, local_hostname) + + def connect(self, host='localhost', port=0): + """Connect to an SMTP server using SSL. + + `host' is localhost by default. Port will be set to 465 (the default + SSL SMTP port) if no port is specified. + + If the host name ends with a colon (`:') followed by a number, + that suffix will be stripped off and the + number interpreted as the port number to use. This will override the + `port' parameter. + + Note: This method is automatically invoked by __init__, if a host is + specified during instantiation. + """ + # MB: Most of this (Except for the socket connection code) is from + # the SMTP.connect() method. I changed only the bare minimum for the + # sake of compatibility. + if not port and (host.find(':') == host.rfind(':')): + i = host.rfind(':') + if i >= 0: + host, port = host[:i], host[i+1:] + try: port = int(port) + except ValueError: + raise socket.error, "nonnumeric port" + if not port: port = SSMTP_PORT + if self.debuglevel > 0: print>>stderr, 'connect:', (host, port) + msg = "getaddrinfo returns an empty list" + self.sock = None + for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): + af, socktype, proto, canonname, sa = res + try: + self.sock = socket.socket(af, socktype, proto) + if self.debuglevel > 0: print>>stderr, 'connect:', (host, port) + self.sock.connect(sa) + # MB: Make the SSL connection. + sslobj = socket.ssl(self.sock, self.keyfile, self.certfile) + except socket.error, msg: + if self.debuglevel > 0: + print>>stderr, 'connect fail:', (host, port) + if self.sock: + self.sock.close() + self.sock = None + continue + break + if not self.sock: + raise socket.error, msg + + # MB: Now set up fake socket and fake file classes. + # Thanks to the design of smtplib, this is all we need to do + # to get SSL working with all other methods. + self.sock = smtplib.SSLFakeSocket(self.sock, sslobj) + self.file = smtplib.SSLFakeFile(sslobj); + + (code, msg) = self.getreply() + if self.debuglevel > 0: print>>stderr, "connect:", msg + return (code, msg) + + def setkeyfile(self, keyfile): + """Set the absolute path to a file containing a private key. + + This method will only be effective if it is called before connect(). + + This key will be used to make the SSL connection.""" + self.keyfile = keyfile + + def setcertfile(self, certfile): + """Set the absolute path to a file containing a x.509 certificate. + + This method will only be effective if it is called before connect(). + + This certificate will be used to make the SSL connection.""" + self.certfile = certfile + + def starttls(self, keyfile = None, certfile = None): + """Raises an exception. + You cannot do StartTLS inside of an ssl session. Calling starttls() will + return an SMTPSSLException""" + raise SMTPSSLException, "Cannot perform StartTLS within SSL session." + diff --git a/sabnzbd/utils/upload.py b/sabnzbd/utils/upload.py new file mode 100644 index 0000000..d593b41 --- /dev/null +++ b/sabnzbd/utils/upload.py @@ -0,0 +1,66 @@ +#!/usr/bin/python -OO +# Copyright 2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.utils.upload - File assosiation functions for adding nzb files to sabnzbd +""" + +import urllib2 +import urllib +import logging +import os +import sabnzbd.cfg as cfg +from sabnzbd.misc import get_ext, get_filename +from sabnzbd.dirscanner import ProcessArchiveFile, ProcessSingleFile + +def upload_file(url, fp): + """ Function for uploading nzbs to a running sabnzbd instance """ + try: + fp = urllib.quote_plus(fp) + pp = cfg.dirscan_pp() + script = cfg.dirscan_script() + priority = cfg.dirscan_priority() + url = '%sapi?mode=addlocalfile&name=%s&pp=%s&script=%s&priority=%s' % (url, fp, pp, script, priority) + username = cfg.username() + password = cfg.password() + apikey = cfg.api_key() + if username and password: + url = '%s&ma_username=%s&ma_password=%s' % (url, username, password) + if apikey: + url = '%s&apikey=%s' % (url, apikey) + u = urllib2.urlopen(url) + except: + logging.error("Failed to upload file: %s", fp) + logging.debug("Traceback: ", exc_info = True) + + +def add_local(f): + """ Function for easily adding nzb/zip/rar/nzb.gz to sabnzbd """ + if os.path.exists(f): + fn = get_filename(f) + if fn: + pp = cfg.dirscan_pp() + script = cfg.dirscan_script() + priority = cfg.dirscan_priority() + if get_ext(fn) in ('.zip','.rar', '.gz'): + ProcessArchiveFile(fn, f, pp=pp, script=script, priority=priority, keep=True) + elif get_ext(fn) in ('.nzb'): + ProcessSingleFile(fn, f, pp=pp, script=script, priority=priority, keep=True) + else: + logging.error("Filename not found: %s", f) + else: + logging.error("File not found: %s", f) \ No newline at end of file diff --git a/sabnzbd/version.py b/sabnzbd/version.py new file mode 100644 index 0000000..980850c --- /dev/null +++ b/sabnzbd/version.py @@ -0,0 +1,8 @@ +# This file will be patched by setup.py +# The __version__ should be set to the branch name +# (e.g. "trunk" or "0.4.x") + +# You MUST use double quotes (so " and not ') + +__version__ = "trunk" +__baseline__ = "unknown" diff --git a/sabnzbd/wizard.py b/sabnzbd/wizard.py new file mode 100644 index 0000000..816bff7 --- /dev/null +++ b/sabnzbd/wizard.py @@ -0,0 +1,272 @@ +#!/usr/bin/python -OO +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +sabnzbd.wizard - Wizard Webinterface +""" + +import os +import cherrypy +from Cheetah.Template import Template + +import sabnzbd +from sabnzbd.constants import * +from sabnzbd.lang import T, list_languages, reset_language +from sabnzbd.utils.servertests import test_nntp_server_dict +import sabnzbd.interface +import sabnzbd.config as config +import sabnzbd.cfg as cfg + +#------------------------------------------------------------------------------ +class Wizard: + def __init__(self, web_dir, root, prim): + self.__root = root + # Get the path for the folder named wizard + self.__web_dir = sabnzbd.WIZARD_DIR + self.__prim = prim + self.info = {'webdir': sabnzbd.WIZARD_DIR, + 'steps':5, 'version':sabnzbd.__version__, + 'T': T} + + @cherrypy.expose + def index(self, **kwargs): + + info = self.info.copy() + info['num'] = '' + info['number'] = 0 + info['lang'] = cfg.language() + info['languages'] = list_languages(sabnzbd.DIR_LANGUAGE) + + if not os.path.exists(self.__web_dir): + # If the wizard folder does not exist, simply load the normal page + raise cherrypy.HTTPRedirect('') + else: + template = Template(file=os.path.join(self.__web_dir, 'index.html'), + searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) + return template.respond() + + @cherrypy.expose + def one(self, **kwargs): + # Handle special options + language = kwargs.get('lang') + if language and language != cfg.language(): + cfg.language.set(language) + reset_language(language) + + info = self.info.copy() + info['num'] = '» %s' % T('wizard-step-one') + info['number'] = 1 + info['skin'] = cfg.web_dir().lower() + + template = Template(file=os.path.join(self.__web_dir, 'one.html'), + searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) + return template.respond() + + @cherrypy.expose + def two(self, **kwargs): + # Save skin setting + if kwargs: + if 'skin' in kwargs: + sabnzbd.interface.change_web_dir(kwargs['skin']) + + info = self.info.copy() + info['num'] = '» %s' % T('wizard-step-two') + info['number'] = 2 + + host = cfg.cherryhost() + info['host'] = host + # Allow special operation if host is not one of the defaults + if host not in ('localhost','0.0.0.0'): + info['custom_host'] = True + else: + info['custom_host'] = False + + if sabnzbd.newswrapper.HAVE_SSL: + info['have_ssl'] = True + else: + info['have_ssl'] = False + + info['enable_https'] = cfg.enable_https() + info['autobrowser'] = cfg.autobrowser() + info['web_user'] = cfg.username() + info['web_pass'] = cfg.password() + + template = Template(file=os.path.join(self.__web_dir, 'two.html'), + searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) + return template.respond() + + @cherrypy.expose + def three(self, **kwargs): + # Save access/autobrowser/autostart + if kwargs: + if 'access' in kwargs: + cfg.cherryhost.set(kwargs['access']) + cfg.enable_https.set(kwargs.get('enable_https',0)) + cfg.autobrowser.set(kwargs.get('autobrowser',0)) + cfg.username.set(kwargs.get('web_user', '')) + cfg.password.set(kwargs.get('web_pass', '')) + if not cfg.username() or not cfg.password(): + sabnzbd.interface.set_auth(cherrypy.config) + info = self.info.copy() + info['num'] = '» %s' % T('wizard-step-three') + info['number'] = 3 + info['session'] = cfg.api_key() + + servers = config.get_servers() + if not servers: + info['host'] = '' + info['port'] = '' + info['username'] = '' + info['password'] = '' + info['connections'] = '' + info['ssl'] = 0 + else: + for server in servers: + # If there are multiple servers, just use the first enabled one + s = servers[server] + info['host'] = s.host() + info['port'] = s.port() + info['username'] = s.username() + info['password'] = s.password.get_stars() + info['connections'] = s.connections() + info['ssl'] = s.ssl() + if s.enable(): + break + template = Template(file=os.path.join(self.__web_dir, 'three.html'), + searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) + return template.respond() + + @cherrypy.expose + def four(self, **kwargs): + # Save server details + if kwargs: + kwargs['enable'] = 1 + sabnzbd.interface.handle_server(kwargs) + + info = self.info.copy() + info['num'] = '» %s' % T('wizard-step-four') + info['number'] = 4 + info['newzbin_user'] = cfg.newzbin_username() + info['newzbin_pass'] = cfg.newzbin_password.get_stars() + info['newzbin_bookmarks'] = cfg.newzbin_bookmarks() + info['matrix_user'] = cfg.matrix_username() + info['matrix_apikey'] = cfg.matrix_apikey() + template = Template(file=os.path.join(self.__web_dir, 'four.html'), + searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) + return template.respond() + + @cherrypy.expose + def five(self, **kwargs): + # Save server details + if kwargs: + if 'newzbin_user' in kwargs and 'newzbin_pass' in kwargs: + cfg.newzbin_username.set(kwargs.get('newzbin_user','')) + cfg.newzbin_password.set(kwargs.get('newzbin_pass','')) + cfg.newzbin_bookmarks.set(kwargs.get('newzbin_bookmarks', '0')) + if 'matrix_user' in kwargs and 'matrix_apikey' in kwargs: + cfg.matrix_username.set(kwargs.get('matrix_user','')) + cfg.matrix_apikey.set(kwargs.get('matrix_apikey','')) + + config.save_config() + + info = self.info.copy() + info['num'] = '» %s' % T('wizard-step-five') + info['number'] = 5 + info['helpuri'] = 'http://wiki.sabnzbd.org/' + info['session'] = cfg.api_key() + + info['access_url'], info['urls'] = self.get_access_info() + + template = Template(file=os.path.join(self.__web_dir, 'five.html'), + searchList=[info], compilerSettings=sabnzbd.interface.DIRECTIVES) + return template.respond() + + def get_access_info(self): + ''' Build up a list of url's that sabnzbd can be accessed from ''' + # Access_url is used to provide the user a link to sabnzbd depending on the host + access_uri = 'localhost' + cherryhost = cfg.cherryhost() + + if cherryhost == '0.0.0.0': + import socket + host = socket.gethostname() + socks = [host] + # Grab a list of all ips for the hostname + addresses = socket.getaddrinfo(host, None) + for addr in addresses: + address = addr[4][0] + # Filter out ipv6 addresses (should not be allowed) + if ':' not in address and address not in socks: + socks.append(address) + if cherrypy.request.headers.has_key('host'): + host = cherrypy.request.headers['host'] + host = host.rsplit(':')[0] + access_uri = host + socks.insert(0, host) + else: + socks.insert(0, 'localhost') + + elif cherryhost == '::': + import socket + host = socket.gethostname() + socks = [host] + # Grab a list of all ips for the hostname + addresses = socket.getaddrinfo(host, None) + for addr in addresses: + address = addr[4][0] + # Only ipv6 addresses will work + if ':' in address: + address = '[%s]' % address + if address not in socks: + socks.append(address) + if cherrypy.request.headers.has_key('host'): + host = cherrypy.request.headers['host'] + host = host.rsplit(':')[0] + access_uri = host + socks.insert(0, host) + else: + socks.insert(0, 'localhost') + + elif not cherryhost: + import socket + socks = [socket.gethostname()] + access_uri = socket.gethostname() + else: + socks = [cherryhost] + access_uri = cherryhost + + urls = [] + for sock in socks: + if sock: + if cfg.enable_https(): + url = 'https://%s:%s/sabnzbd/' % (sock, cfg.https_port()) + else: + url = 'http://%s:%s/sabnzbd/' % (sock, cfg.cherryport()) + + urls.append(url) + + if cfg.enable_https(): + access_url = 'https://%s:%s/sabnzbd/' % (access_uri, cfg.https_port()) + else: + access_url = 'http://%s:%s/sabnzbd/' % (access_uri, cfg.cherryport()) + + return access_url, urls + + @cherrypy.expose + def servertest(self, **kwargs): + result, msg = test_nntp_server_dict(kwargs) + return msg diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..1bb82ce --- /dev/null +++ b/setup.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +# +# Copyright 2008-2009 The SABnzbd-Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Installer diff --git a/win/nsis/Include/registerExtension.nsh b/win/nsis/Include/registerExtension.nsh new file mode 100644 index 0000000..720eefd --- /dev/null +++ b/win/nsis/Include/registerExtension.nsh @@ -0,0 +1,71 @@ +!define registerExtension "!insertmacro registerExtension" +!define unregisterExtension "!insertmacro unregisterExtension" +!define SHCNE_ASSOCCHANGED 0x8000000 +!define SHCNF_IDLIST 0 + +; Source = http://nsis.sourceforge.net/File_Association +; Patched for SABnzbd by swi-tch + +!macro registerExtension icon executable extension description + Push "${icon}" ; "full path to icon.ico" + Push "${executable}" ; "full path to my.exe" + Push "${extension}" ; ".mkv" + Push "${description}" ; "MKV File" + Call registerExtension +!macroend + +; back up old value of .opt +Function registerExtension +!define Index "Line${__LINE__}" + pop $R0 ; ext name + pop $R1 + pop $R2 + pop $R3 + push $1 + push $0 + DeleteRegKey HKEY_CURRENT_USER "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$R1" + ReadRegStr $1 HKCR $R1 "" + StrCmp $1 "" "${Index}-NoBackup" + StrCmp $1 "OptionsFile" "${Index}-NoBackup" + WriteRegStr HKCR $R1 "backup_val" $1 +"${Index}-NoBackup:" + WriteRegStr HKCR $R1 "" $R0 + ReadRegStr $0 HKCR $R0 "" + StrCmp $0 "" 0 "${Index}-Skip" + WriteRegStr HKCR $R0 "" $R0 + WriteRegStr HKCR "$R0\shell" "" "open" + WriteRegStr HKCR "$R0\DefaultIcon" "" "$R3,0" +"${Index}-Skip:" + WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' + WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" + WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' + pop $0 + pop $1 +!undef Index +System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)' +FunctionEnd + +!macro unregisterExtension extension description + Push "${extension}" ; ".mkv" + Push "${description}" ; "MKV File" + Call un.unregisterExtension +!macroend + +Function un.unregisterExtension + pop $R1 ; description + pop $R0 ; extension +!define Index "Line${__LINE__}" + ReadRegStr $1 HKCR $R0 "" + StrCmp $1 $R1 0 "${Index}-NoOwn" ; only do this if we own it + ReadRegStr $1 HKCR $R0 "backup_val" + StrCmp $1 "" 0 "${Index}-Restore" ; if backup="" then delete the whole key + DeleteRegKey HKCR $R0 + Goto "${Index}-NoOwn" +"${Index}-Restore:" + WriteRegStr HKCR $R0 "" $1 + DeleteRegValue HKCR $R0 "backup_val" + DeleteRegKey HKCR $R1 ;Delete key with association name settings +"${Index}-NoOwn:" +!undef Index +System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)' +FunctionEnd \ No newline at end of file diff --git a/win/nsis/Plugins/KillProc.dll b/win/nsis/Plugins/KillProc.dll new file mode 100644 index 0000000000000000000000000000000000000000..9b34748a6b62959aeea45aa22b85fcdc27ca0ca7 GIT binary patch literal 25088 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 E2Q$Nb4FCWD literal 0 HcmV?d00001 diff --git a/win/nsis/Plugins/KillProc.txt b/win/nsis/Plugins/KillProc.txt new file mode 100644 index 0000000..c4f72cf --- /dev/null +++ b/win/nsis/Plugins/KillProc.txt @@ -0,0 +1,64 @@ +KillProc Plugin for NSIS (2006-12-16) +===================================== + +This plugin is intended for searching and killing processes. +Usefull if you want to kill all running instances of a certain application. + + +Functions +--------- + +KillProc::FindProcesses - Enumerate all running instances of the specified process +KillProc::KillProcesses - Kills all running instances of the specified process + + +Parameters +---------- + +$0: Specifies the name of the process to be killed (e.g. "foo.exe") + + +Return Values +------------- + +$0: The number of processes found/killed +$1: The number of processes that could not be killed (-1 indicates serious problems) + + +Example +------- + +Section + StrCpy $0 "foo.exe" + DetailPrint "Searching for processes called '$0'" + KillProc::FindProcesses + StrCmp $1 "-1" wooops + DetailPrint "-> Found $0 processes" + + StrCmp $0 "0" completed + Sleep 1500 + + StrCpy $0 "foo.exe" + DetailPrint "Killing all processes called '$0'" + KillProc::KillProcesses + StrCmp $1 "-1" wooops + DetailPrint "-> Killed $0 processes, faild to kill $1 processes" + + Goto completed + + wooops: + DetailPrint "-> Error: Something went wrong :-(" + Abort + + completed: + DetailPrint "Everything went okay :-D" +SectionEnd + + +Credits +------- + +Written by MuldeR (http://mulder.at.gg/) + +More information at: +http://forum.doom9.org/showthread.php?p=902927#post902927 diff --git a/win/par2/COPYING b/win/par2/COPYING new file mode 100755 index 0000000..d60c31a --- /dev/null +++ b/win/par2/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/win/par2/README_FIRST.txt b/win/par2/README_FIRST.txt new file mode 100755 index 0000000..8a8cad4 --- /dev/null +++ b/win/par2/README_FIRST.txt @@ -0,0 +1,917 @@ +=== Table of contents === + +--- Introduction --- +--- About the NVIDIA CUDA version --- +--- Installing the pre-built Windows (32-bit) version --- +--- Installing the pre-built Mac OS X version --- +--- Installing the pre-built Linux version --- +--- Installing the pre-built FreeBSD version --- +--- Building and installing on UNIX type systems --- +--- Building and installing on Mac OS X systems --- +--- Building and installing on Windows operating systems --- +--- Building and installing on FreeBSD --- +--- Technical Details --- +--- Version History --- + +=== Table of contents === + + + +--- Introduction --- + + +This is a concurrent (multithreaded) version of par2cmdline 0.4, a utility to +create and repair data files using Reed Solomon coding. par2 parity archives +are commonly used on Usenet postings to allow corrupted postings to be +repaired instead of needing the original poster to repost the corrupted +file(s). + +For more information about par2, go to this web site: + +http://parchive.sourceforge.net/ + +The original version of par2cmdline 0.4 was downloaded from: + +http://sourceforge.net/projects/parchive + + +This version has been modified to utilise the Intel Threading Building Blocks +library, which enables it to process files concurrently instead of the +original version's serial processing. Computers with more than one CPU or core +such as those using Intel Core Duo, Intel Core Duo 2, or AMD Athlon X2 CPUs +can now create or repair par2 archives much quicker than the original version. +For example, dual core machines can achieve near-double performance when +creating or repairing. + +The Intel Threading Building Blocks library is obtained from: + +http://osstbb.intel.com/ + + +The licensing of this source code has not been modified: it is still published +under the GPLv2 (or later), and the COPYING file is included in this +distribution as per the GPL. + + +To download the source code or some operating system builds of the +concurrent version of par2cmdline 0.4, go to: + +http://www.chuchusoft.com/par2_tbb + + +--- About the NVIDIA CUDA version --- + + +*** The NVIDIA CUDA version should be considered experimental. *** + +There is no guarantee that the NVIDIA CUDA version will perform correctly. Even +though it has been tested on test data and correctly worked on those files, it may +not work on your files since the GPU program is new and may have unknown bugs in +it. Caveat emptor. + +The NVIDIA CUDA version of the par2 program has been modified to utilise NVIDIA +CUDA 2.0 technology, which enables it to process data using the processor (GPU) on +certain video cards. Most of the processing is still performed by the computer's +CPU but some will be offloaded to the video card's GPU. The amount of offloading +depends on how much speed/power the GPU has. After processing all of the data for +par2 creation or par2 repair, the program will display, as a percentage, how much +of the processing was done by the GPU (or whether the GPU was not available for +use). + +There are two factors which determine how much processing the GPU can provide: + + (1) the amount of video card memory. Some of the memory will be used for the video + display, and this is partly determined by the operating system. For example, if + the OS/video-driver performs drawing acceleration using extra video memory, less + memory is available for CUDA use. For example, on a 128MB video card running + Mac OS X 10.5, only about 22MB was available for use by CUDA applications. If + the parity data totals more than 22MB, only a portion of that data can be + processed by the GPU. Of course this is only an example and your system will + probably have a different amount of memory available for CUDA use. + Because of OS use, it is recommended that for Mac OS X, a video card with at + least 256MB of video memory is recommended. For Windows XP, a video card of at + least 128MB is recommended, and for Windows Vista, at least 256MB is recommended. + + (2) the video card's speed, which depends on both the GPU's speed and the video + memory's bandwidth. For the GPU, its speed depends on both its clock rate and + the number of stream processors it has. For example, a GeForce 8600 GT has 32 + stream processors compared to a 9800 GTX which has 128 stream processors. + Memory bandwidth depends on both how wide the data path is between the GPU + and its memory (for example, a 64-bit wide data bus will transfer data half + as quickly as a 128-bit wide data bus), as well as the clock rate of the + video memory - the higher the clock rate, the faster the GPU can move data + from/to the video memory and this in turn affects how fast it processes data. + +Hardware requirements: + + Requires a "Compute Capability 1.1" device, which is any 200 series GeForce card, + any 9 series GeForce card, and most 8 series GeForce card EXCEPT for the first + generation cards such as the 8800 Ultra, 8800 GTX, 8800 GTS, and certain Tesla + and Quadro cards: search the web for "Compute Capability 1.0" devices. 1.0-only + devices are not capable of being used. Cards such as the 8400, 8500, 8600, + 8800 GS, 8800 GT, 8800M GTS (mobile), and 8800M GTX (mobile) are capable of + being used. + + Mobile variants will also work, for example, 8600 refers to both the desktop and + mobile versions such as 8600 GT (desktop) and 8600M GT (mobile). + +Software requirements: + + The CUDA runtime/toolkit may need to be downloaded and installed by you because NVIDIA do + not permit redistribution of it with third party executables. If you need to install the + runtime, please search for "NVIDIA CUDA toolkit" in your favourite search engine. + + On Windows, it appears that the CUDA runtime/toolkit ships with recent video card driver + software from NVIDIA. You can verify this by checking for it at this path: + "C:\Windows\system32\nvcuda.dll". + + On Mac OS X 10.5, check for the driver at this path: "/System/Library/Extensions/CUDA.kext", + and for the runtime library at this path: "/usr/local/cuda/lib/libcudart.dylib". Mac OS X + users will probably need to download and install the CUDA runtime/toolkit. You should be + aware that the default install options for the CUDA runtime/toolkit does *not* install the + required CUDA driver, so it needs to be installed by performing a *custom* install of the + runtime/toolkit: be sure to check the checkbox for "CUDA.kext". + +Limitations: + + [1] only available as a 32-bit executable for Windows XP and later, and Intel Mac OS X + 10.5.2 and later. Due to time constraints, other systems such as GNU/Linux are not + available at this time. You are most welcome to modify/build/test it for other + systems if you feel up to the challenge :) + + [2] "low end" GPUs are "slow", ie, they do not contribute to much of the processing. + For example, to create 128MB (256 blocks of 524288 bytes) of parity data on a + 128MB 8600M GT in a Core 2 Duo 2.2GHz machine, about 2% of the workload was + offloaded to the GPU. For the same 128MB of parity data, a 256MB 8600M GT in a + Core 2 Duo 2.4GHz machine offloaded about 5% of the workload to the GPU (mainly + because having more memory allowed more data to be processed on the video card). + + It is expected that "high end" video cards will have even higher GPU offloading, + but without access to such a video card (yes, some of us can't splurge on that + top-of-the-line video card!), it's mere speculation as to what sort of performance + will occur. :) Maybe someone will send an email with some answers :) + + [3] sometimes the CUDA runtime reports little or no available memory on the video card + for use by programs, which will result in this version not being able to use the + GPU for processing. This problem is probably related to video display acceleration + by the OS, in which case, closing windows and/or applications will probably free + up video memory. It may, however, require a reboot to reset the video card (you + should do this only as a last resort). + +Licensing: + + The source code for the CUDA-specific parts of the par2cmdline-0.4 program is provided + and released under the GPLv2, which is believed to be compatible with NVIDIA's licensing + of the sample source code/libraries in the CUDA SDK, from which the par2 processing + code is based on (but IANAL). + +Building: + + If you're interested in building this version, you will need to set up the following + development environment(s): + + Mac OS X: + - 10.5.2 or later + - Xcode 3.0 or later installed + - TBB 2.1 or later installed + - NVIDIA CUDA 2.0 toolkit installed, including the driver by performing a custom install. + The following assumes it is installed into "/usr/local/cuda". + - NVIDIA CUDA 2.0 SDK installed. The following assumes it is installed into "/Developer/CUDA". + + Windows: + - XPSP2 or later + - Visual C++ Express 2005 installed + - Visual C++ Express 2008 installed + - TBB 2.1 or later installed + - NVIDIA CUDA 2.0 toolkit installed. The following assumes it is installed into "C:\CUDA". + - NVIDIA CUDA 2.0 SDK installed. The following assumes it is installed into + "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK" . + + The following build instructions assume that you have already successfully built the non-CUDA + version of the par2 program. If you haven't done so, it is strongly recommended you do so first, + so that any issues relating to the non-CUDA version are fixed before you try building the CUDA + version (which has its own set of possible build issues). + + Mac building: + - copy the par2_cuda folder into /Developer/CUDA/projects + - open a Terminal window, cd to /Developer/CUDA/projects/par2_cuda + - enter 'make' to build the par2_cuda static library + - cd to your folder. Enter 'configure gpgpu=cuda && make' to build the + par2 program. If it fails to compile, check your Makefile for incorrect paths, fix, try + building again, etc. If it fails to link, check your Makefile for incorrect paths, fix, try + building again, etc. When the par2 program is linked, it will assume that the + libcudart.dylib library is in "/usr/local/cuda/lib". + - copy the libtbb.dylib file into the folder (or wherever you built the par2 + executable) + - run the program. If it fails to run, make sure "/usr/local/cuda/lib/libcudart.dylib" exists. + - if it fails to find any GPU resources for processing, check that you have installed the + runtime correctly including the custom installing of the CUDA driver (which should be at + "/System/Library/Extensions/CUDA.kext"). + + Windows building: + - copy the par2_cuda folder into "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects" + - open the "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects\par2_cuda_lib.vcproj" + file using Visual C++ Express 2005 + - build the 'release' configuration (ignore the warnings about import linkage mismatches - they + are due to TBB's requirement of the DLL version of the CRT whereas CUDA programs are supposed + to link to the static version of the CRT - this causes the mismatch but won't cause crashes or + malfunctions). + - open the par2.vcproj file in the folder using Visual C++ Express 2008 + - build the 'releaseCUDA' configuration + - copy the tbb.dll file into the ReleaseCUDA folder in the folder + - run the program. If it fails to run, make sure cudart.dll is in the %PATH% environment variable + (there should be an entry for "C:\cuda\bin"). + - if it fails to find any GPU resources for processing, check that you have installed the + runtime correctly. + +*** Just to repeat, the NVIDIA CUDA version should be considered experimental. *** + + +--- Installing the pre-built Windows version (32-bit or 64-bit) --- + + +The Windows version is distributed as an executable (par2.exe) which has +built into it (i.e., statically linked) the Intel Threading Building Blocks +2.2 library, built from the tbb22_20090809oss_src.tar.gz distribution. The +Windows version no longer requires a specific version of the C runtime +library because the par2.exe executable is now built by statically linking +with the C runtime library. + +To install, copy the par2.exe file and then invoke it from the command line. + +To uninstall, delete the par2.exe file along with any files from the +distribution folder. + + +--- Installing the pre-built Mac OS X version --- + + +The Mac version is an universal build of the concurrent version +of par2cmdline 0.4 for Mac OS X 10.4 (32-bit binaries) and 10.5 (64-bit +binaries). In other words, the par2 executable file contains both a 32-bit +x86 and a 64-bit x86_64 build of the par2 sources. +It is distributed as an executable (par2) along with the required Intel +Threading Building Blocks 2.2 library (libtbb.dylib). The libtbb.dylib file +is also universal (32-bit and 64-bit versions for x86/x86_64 are inside it). + +To install, place the par2 and libtbb.dylib files in a folder and +invoke them from the command line. + +To uninstall, delete the par2 and libtbb.dylib files along with any +files from the distribution folder. + + +--- Installing the pre-built Linux version --- + + +The Linux versions are a 32-bit i386 and 64-bit x86_64 build of the +concurrent version of par2cmdline 0.4 for GNU/Linux kernel version 2.6 +with GCC 4. It is distributed as an executable (par2) along with the +required Intel Threading Building Blocks 2.2 library (libtbb.so and +libtbb.so.2). There are separate distributions for the 32-bit and +64-bit versions. + +To install, place the par2, libtbb.so and libtbb.so.2 files in a +folder and invoke them from the command line. + +To uninstall, delete the par2, libtbb.so and libtbb.so.2 files along +with any files from the distribution folder. + + +--- Installing the pre-built FreeBSD version --- + + +Both the 32-bit and 64-bit binaries were built using RELEASE 7.0 of FreeBSD. +It is distributed as an executable (par2) along with the required Intel +Threading Building Blocks 2.2 library (libtbb.so). There are separate +distributions for the 32-bit and 64-bit versions. + +To install: copy libtbb.so to /usr/local/lib, copy par2 to a convenient +location, eg, /usr/local/bin, then remove the distribution directory. You +will need superuser permission to copy files to the /usr/local area. + +To uninstall, delete the par2 and libtbb.so files along with any +files from the distribution folder. + + +--- Building and installing on UNIX type systems --- + + +For UNIX or similar systems, the included configure script should be used to +generate a makefile which is then built with a Make utility. Before using +them however, you may need to modify the configure scripts as detailed below. + +Because this version depends on the Intel Threading Building Blocks library, +you will need to tell the build system where the headers and libraries are in +order to compile and link the program. There are 2 ways to do this: use the +tbbvars.sh script included in TBB to add the appropriate environment variables, +or manually modify the Makefile to use the appropriate paths. The tbbvars.sh +file is in the tbboss_src/build directory. To manually modify the +Makefile: + + In `Makefile.am', for Darwin/Mac OS X, change the AM_CXXFLAGS line to: + +AM_CXXFLAGS = -Wall -I../tbb22_20090809oss_src/include -gfull -O3 -fvisibility=hidden -fvisibility-inlines-hidden + + or for other POSIX systems, change the AM_CXXFLAGS line to: + +AM_CXXFLAGS = -Wall -I../tbb22_20090809oss_src/include + +and modify the path to wherever your extracted Intel TBB files are. Note that it +should point at the `include' directory inside the main tbb directory. + +For linking, the file `Makefile.am' has this line: + +LDADD = -lstdc++ -ltbb -L. + +thus the tbb library is already added to the list of libraries to link against. +You will need to have libtbb.a (or libtbb.dylib or libtbb.so etc.) in your +library path (usually /usr/lib). + +Alternatively, if the TBB library is not in a standard library directory (or +on the linker's list of library paths) then add a library path so the linker +can link to the TBB: + +LDADD = -lstdc++ -ltbb -L + +For example: + +LDADD = -lstdc++ -ltbb -L. + +The Mac OS X distribution of this project is built using a relative-path +for the dynamic library. Please see the next section for more information. + +The GNU/Linux distribution of this project is built using a relative-path +for the dynamic library (by passing the "-R $ORIGIN" option to the linker). + + +--- Building and installing on Mac OS X systems --- + + +The Mac version is an universal build of the concurrent version +of par2cmdline 0.4 for Mac OS X 10.4 (32-bit binaries) and 10.5 (64-bit +binaries). In other words, the par2 executable file contains both a 32-bit +x86 and a 64-bit x86_64 build of the par2 sources. +It is distributed as an executable (par2) along with the required Intel +Threading Building Blocks 2.2 library (libtbb.dylib). The libtbb.dylib file +is also universal (32-bit and 64-bit versions for x86/x86_64 are inside it). + +The par2 32-bit executable is built for 10.4, and the 64-bit executable is +built for 10.5, which are then symbol stripped and combined using the lipo +tool. The 64-bit executable needs to be built for 10.5 because the 10.4 +build of the 64-bit executable was found to (1) cause the "fat" executable +to crash when it was run under 10.5, and (2) not be able to correctly read +par2 files when those files resided on a SMB server (ie, a shared folder on +a Windows computer). Combining the mixed-OS executables solves both of these +problems (see the 20080116 version release notes below for details). + +The libtbb.dylib file is built from the TBB 2.2 tbb22_20090809oss_src.tar.gz +distribution. It was built for the x86 and x86_64 architectures +and will therefore run on all Macs that support 10.4 or 10.5. + +Normally, the libtbb.dylib file is built so that for a client program to use +it, it would usually have to be placed in /usr/lib, which would therefore +require administrator privileges to install it onto a Mac OS X system. The +version included in this distribution does not require that it be installed, +and is therefore usable "out of the box". To implement this change, the +macos.gcc.inc file was modified with this line: + +LIB_LINK_FLAGS = -dynamiclib -Wl,-install_name,@executable_path/$@ + +Other required changes are: + +ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 + LINK_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 + LIB_LINK_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 +endif + +ifeq (ia32,$(arch)) + CPLUS = g++-4.0 + C_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 + CPLUS_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 + LINK_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 + LIB_LINK_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 +endif + +To build the executables, configure needs to be invoked in a particular manner for both x86 and x64 builds: + +cd /build + +../configure --build=i686-apple-darwin10.2.0 --host=i686-apple-darwin10.2.0 CXX=g++-4.0 && sed -e 's/CXXFLAGS = -g -O2/CXXFLAGS = #-g -O2/' Makefile > Makefile.tmp && mv Makefile.tmp Makefile && make && strip par2 && mv par2 par2-x86 && make clean + +../configure --build=i686-apple-darwin10.2.0 --host=x86_64-apple-darwin10.2.0 && sed -e 's/CXXFLAGS = -g -O2/CXXFLAGS = #-g -O2/' Makefile > Makefile.tmp && mv Makefile.tmp Makefile && make && strip par2 && mv par2 par2-x86_64 && make clean + +The par2 executable has been symbol stripped (using the 'strip' command line +tool). + + +--- Building and installing on Windows operating systems --- + + +This modified version has been built and tested on Windows XP SP2 using Visual +Studio/C++ 2010 beta 2. It statically links with both the TBB and the C runtime +library and the included project and makefiles are set up for that. + +For Windows, the project file for Visual Studio 2010 has been included. Open +the project file in Visual Studio and go to the project properties window. +For the C/C++ include paths, make sure the path to where you extracted the +Intel TBB files is correct. Similarly for the linker paths. + +To build the 32-bit version, download the source tarball from the website and +open the sln/vcproj project files in the win32 directory with Visual C++ 2010. +You will also need to build the TBB in a modified manner so that it statically +links against the C runtime library and it itself is linked as a static library, +instead of as a DLL. To do this, use the modified TBB makefiles in the +windows-tbb directory. To use the TBB makefile, you'll need to use GNU make, +which can be built from its source tarsal. + +To build the 64-bit version, install the "Windows 2003 Server R2" version +of the platform SDK and open a command line window for a 64-bit Windows XP +build environment (in the Platform SDK program group in the Start Menu). You +can also use any non-Express version of Visual C++. +Change the directory to the par2cmdline-0.4-tbb- directory. Move or +copy the Makefile in the win64 directory to its parent (ie, to the +par2cmdline-0.4-tbb- directory). Then invoke the 'nmake' command to +build the binary. The result should be an executable file named +par2_win64.exe in the par2cmdline-0.4-tbb- directory. This can +then be renamed to par2.exe if so desired. As for the 32-bit version, you +will need to build the TBB in a modified manner. More details are in the +win64 Makefile. + + + +--- Building and installing on FreeBSD --- + + +Instructions: + +[1] build and install TBB +- extract TBB from the source archive. +- on a command line, execute: + + cp -r /include/tbb /usr/local/include + cd && /usr/local/bin/gmake + # change the next line to match your machine's configuration: + cp /build/FreeBSD_em64t_gcc_cc4.1.0_kernel7.0_release/libtbb.so /usr/local/lib + +[2] build and install par2cmdline-0.4-tbb +- extract and build par2cmdline-0.4-tbb using tar, ./configure, and make +- copy built binary to where you want to install it (eg, /usr/local/bin) + +[3] cleanup +- remove and par2cmdline-0.4-tbb source directories + + +--- Technical Details --- + + +All source code modifications have been isolated to blocks that have this form: + +#if WANT_CONCURRENT + + + +#else + + + +#endif + +to make it easier to see what was modified and how it was done. + +The technique used to modify the original code was: + +[1] add timing code to instrument/document the places where concurrency would be of + benefit. The CTimeInterval class was used to time sections of the code. +[2] decide which functions to make concurrent, based on the timing information + obtained in step [1]. +[3] for each function to make concurrent, study it and its sub-functions for + concurrent access problems (shared data points) +[4] read the Intel TBB tutorials and reference manual to learn how to use the + library to convert serial code to concurrent code + +It was then decided to apply concurrency to: + +- loading of recovery packets (par2 files), which necessitated changes to some member + variables in par2repairer.h: + - sourcefilemap [LoadDescriptionPacket, LoadVerificationPacket] + - recoverypacketmap [LoadRecoveryPacket] + - mainpacket [LoadMainPacket] + - creatorpacket [LoadCreatorPacket] + They were changed to use concurrent-safe containers/wrappers. To handle concurrent + access to pointer-based member variables, the pointers are wrapped in atomic + wrappers. tbb::atomic does not have operator-> which is needed to deference + the wrapped pointers so a sub-class of tbb::atomic was created, named + atomic_ptr. For maps and vectors, tbb's concurrent_hash_map and concurrent_vector + were used. + Because DiskFileMap needed to be accessed concurrently, a concurrent version of it + was created (class ConcurrentDiskFileMap) +- source file verification +- repairing data blocks + +In the original version, progress information was written to cout (stdout) in a serial +manner, but the concurrent version would produce garbled overlapping output unless +output was made concurrent-safe. This was achieved in two ways: for simple infrequent +output routines, a simple mutex was used to gate access to cout to only one thread at +a time. For frequent use of cout, such as during the repair process, an atomic integer +variable was used to gate access, but *without* blocking a thread that would have +otherwise been blocked if a mutex had been used instead. The code used is: + + if (0 == cout_in_use.compare_and_swap(outputendindex, 0)) { // <= this version doesn't block - only need 1 thread to write to cout + cout << "Processing: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush; + cout_in_use = 0; + } + +Initially cout_in_use is set to zero so that the first thread to put its value of +outputendindex into cout_in_use will get a zero back from cout_in_use.compare_and_swap() +and therefore enter the 'true block' of the 'if' statement. Other threads that then try +to put their value of outputendindex into cout_in_use while the first thread is still +using cout will fail to do so and so they will skip the 'true block' but they won't block. + +For par2 creation, similar modifications were made to the source code that also allowed +concurrent processing to occur. + +To convert from serial to concurrent operation, for() loops were changed to using Intel +TBB parallel_for() calls, with a functor object (callback) supplied to provide the body +of the parallel for loop. To access member variable in the body of the parallel loop, +new member functions were added so that the functor's operator() could dispatch into the +original object to do the for loop body's processing. + +It should be noted that there are two notable parts of the program that could not be +made concurrent: (1) file verification involves computing MD5 hashes for the entire file +but computing the hash is an inherently serial computation, and (2) computing the Reed- +Solomon matrix for use in creation or repair involves matrix multiplication over a Galois +field, which is also an inherently serial computation and so it too could not be made into +a concurrent operation. + +Nevertheless, the majority of the program's execution time is spent either repairing the +lost data, or in creating the redundancy information for later repair, and both of these +operations were able to be made concurrent with a near twice speedup on the dual core +machines that the concurrent version was tested on. + +Note that it is important that the computer has sufficient memory (1) to allow the caching +of data and (2) to avoid virtual memory swapping, otherwise the creation or repair process +will become I/O bound instead of CPU bound. Computers with 1 to 2GB of RAM should have +enough memory to not be I/O bound when creating or repairing parity/data files. + + +--- Version History --- + + +The changes in the 20100203 version are: + +- modified Makefile.am to use "ARCH_SCALAR" instead of "ARCH" to avoid a FreeBSD name clash +- fixed a 64-bit-only bug in reedsolomon-x86_64-mmx.s where a size of 8 bytes caused a segfault +(forgot to test for zero like the reedsolomon-i686-mmx.s file does); this bug only manifests in +the 64-bit Mac, 64-bit Linux and 64-bit FreeBSD versions; reproduced by creating/repairing a +file of exactly 16384 bytes +- updated to Intel TBB 2.2 (tbb22_20090809oss) +- the Mac build no longer includes the PowerPC variants (I don't use a PowerPC Mac anymore) +- the 32-bit and 64-bit Windows builds of both par2 and the TBB library are now statically +linked against the C runtime library to avoid the problem of requiring the installation of +the correct CRT library (DLL). As well, par2 is statically linked against the TBB library +to allow just one executable file to be installed (i.e., just par2.exe). + +The changes in the 20090203 version are: + +- fixed a bug which affected the Linux and Mac versions whereby repairs would fail if +the file being repaired was short or had one or two bad blocks (because the async write +to the file's last byte was failing). +- on Windows, the program now stores directory paths in par2 files using '/' as the path +separator instead of '\' (as per the Par 2.0 specification document). Note: directory +paths are stored only when the '-d' switch is used. +- merged the sources from the CPU-only and CPU/GPU versions so that both versions now +build from the same set of source files using different 'configure' options (Mac, Linux, +FreeBSD) or project files (Windows). See above for building instructions. + +The changes in the 20081009 version are: + +- added support for NVIDIA CUDA 2.0 technology, which allows the GPU on the video card to + be used to perform some of the processing workload in addition to the CPU on the mainboard. + See the "--- About the NVIDIA CUDA version ---" section in this file for limitations, + requirements, build instructions, licensing, and more information. + +The changes in the 20081005 version are: + +- asynchronous reading of a large number of small files would sometimes not complete which + caused the program to hang. Fixed by reverting to synchronous reading (most of the benefit + of async I/O is from async writing so this change does not affect overall performance). +- some operating systems have limits on the number of open files which was easily exceeded + when a large number of small files are being processed for par2 creation or for repair. + Fixed by closing the source files as soon as they are no longer needed to be opened (which + is determined by counting how many data blocks the file provides for creation/repair). + +The changes in the 20080919 version are: + +- added more information to a few of the error messages to make it easier to specify + block counts, etc. when using the -d option. +- redundancy can now be specified using floating point values instead of integral values, + eg, 8.5% instead of 8% or 9%. +- added the -0 option to create dummy par2 files. This was done so that the actual size + of the par2 files can be quickly determined. For example, suppose you wish to fill up + a CD-R's or DVD-R's remaining empty space with par2 files of the files filling up the + disc, then by using the -0 option, you can quickly work out whether the par2 files + will fit and by how much, which in turn allows you to maximize the use of the remaining + empty space (you would alter the block count number and/or size so that the optimal + number of blocks are created to fill up the remaining space). To determine how much + CD-R or DVD-R space you have to fill, find out how many blocks your blank disc has + (using a burning program such as ImgBurn [Windows]) and how many blocks your data + would occupy when burned (using an image creation program such as mkisofs [all + platforms] which has a handy -print-size option). ImgBurn [Windows] can also tell + you how many blocks you have for filling if you use its 'build' command. + WARNING: be careful when using this command that you don't burn the dummy par2 files + that it creates because they don't have any valid data in them. Remember, they are + created only to determine the actual size of the real par2 files that would be + created if you had not used the -0 option. +- added MMX-based code from Paul Houle's phpar2_12src version of par2cmdline-0.4. As + a result, the repair and creation of par2 files using x86 or x86_64 MMX code is about + 20% faster than the scalar version in singlethreaded testing. Multithreaded testing + showed no noticable improvement (ie, YMMV). The scalar version is used if your CPU + is not MMX capable. MMX CPUs: Intel Pentium II and later, AMD Athlon64 and later. +- added asynchronous I/O for platforms that support such I/O: Mac OS X, Windows, + GNU/Linux. This results in a small (~1-5%) improvement in throughput, especially for + repairing. Unfortunately, using async I/O causes a crash under FreeBSD, so the + pre-built binaries are built to only use synchronous I/O. +- first release of 32-bit and 64-bit PowerPC binaries for Mac OS X. The 32-bit version + requires at least 10.4, and the 64-bit version requires at least 10.5. The 64-bit + version is UNTESTED (because of lack of access to a G5 Mac). +- first release of a 64-bit x86_64 binary for GNU/Linux. Tested under the 64-bit + version of Gentoo 2008.0. +- the 64-bit Windows binary is built using the tbb20_20080408oss release of the TBB; + the Mac, GNU/Linux, FreeBSD and 32-bit Windows binaries are built using the + tbb21_009oss release of the TBB. The tbb21_009oss release does not support the + VC7.1 runtime libraries on Win64 so it was necessary to fallback to a previous + version for the Windows 64-bit binary. + +The changes in the 20080420 version are: + +- added the -t0 option to allow verification to be done serially but still perform + repair concurrently, and for creation, MD5 checksumming will be done serially + and par2 data creation will be done concurrently. The default is to perform + all operations concurrently, so if you want the new behaviour, you will need to + manually specify -t0 on the command line or build your own custom version of + the executable. +- if the realpath() API returned NULL, the par2 files created would end up with + the name of the first file in the list of files to create par2 files for. Fixed. +- no longer includes duplicate file names in the list of files to create redundancy + data for (which would otherwise bloat the .par2 files) +- now displays the instruction set being executed +- updated to use the tbb20_017oss_src.tar.gz version of the Intel TBB library. + +The changes in the 20080203 version are: + +- the Linux version wasn't working because it was not built correctly: the + reedsolomon-inner-i386-posix.s was using an incorrect include directive. Fixed. + *** WARNING *** + A consequence of this error is that par2 files created with the 20080116 Linux + binary contain incorrect repair data and therefore cannot be used to repair + data files. The par2 files will need to be created again using either the + 20071128 build of the Linux binary or this build of it. + *** WARNING *** +- tweaked the Makefile and par2cmdline.h to allow for building under FreeBSD. +- first release of 32-bit and 64-bit binaries for FreeBSD (built under RELEASE 6.2). +- updated to use the 20080115 version of the Intel TBB library. + +The changes in the 20080116 version are: + +- the initial processing (creation) and verification (repair) of target files + is now performed serially because of complaints that concurrent processing + was causing disk thrashing. Since this part of the program's operation is + mostly I/O bound, the change back to serial processing is a reasonable change. +- full paths are now only displayed when a -d parameter is given to the + program, otherwise the original behavior of displaying just the file name + now occurs. +- Unicode support was added. This requires some explanation. + + Windows version: previous versions processed file names and directory + paths using the default code page for non-Unicode programs, which is + typically whatever the current locale setting is. In other words, + file names that had characters that could not be represented in the + default code page ended up being mangled by the program, resulting + in .par2 files which contained mangled file names (directory names + also suffered mangling). Such .par2 files could not be used on other + computers unless they also used the same code page, which for POSIX + systems is very unlikely. The correct solution is to store and retrieve + all file names and directory paths using a Unicode representation. + To keep some backward compatibility, the names should be stored in + an 8-bit-per-character format (so that older .par2 files can still + be processed by the program), so decomposed (a.k.a. composite) UTF-8 + was chosen as the canonical file name encoding for the storage of + file names and directory paths in .par2 files. + To implement this change, the Windows version now takes all file + names from the operating system as precomposed UTF-16 and converts + them to decomposed UTF-8 strings which are stored in memory and + in .par2 files. If the operating system needs to use the string, + it is converted back into precomposed UTF-16 and then passed to + the OS for use. + + POSIX version: it is assumed that the operating system will deliver + and accept decomposed (a.k.a. composite) UTF-8 characters to/from + the program so no conversion is performed. Darwin / Mac OS X is + one such system that passes and accepts UTF-8 character strings, so + the Mac OS X version of the program works correctly with .par2 + files containing Unicode file names. If the operating system + does not deliver nor accept decomposed UTF-8 character strings, + this version (and previous versions) will not create .par2 files + that contain Unicode file names or directory paths, and which + will cause mangled file/directory names when used on other + operating systems. + + Summary: + [1] for .par2 files created on Windows using a version of + this program prior to this version and which contain non-ASCII + characters (characters outside the range of 0 - 127 (0x00 - 0x7F) + in numeric value, this program will be able to use such files + but will probably complain about missing files or will create + repaired files using the wrong file name or directory path, ie, + file name mangling will occur. + [2] for .par2 files created on UTF-8 based operating systems + using a prior version of this program, this version will be + able to correctly use such files (ie, the changes made to the + program should not cause any change in behavior, and no file + name mangling will occur). + [3] for .par2 files created on non-UTF-8 based operating systems + using a prior version of this program, this version will be + able to use such files but file name mangling will occur. + [4] for .par2 files created on UTF-8 based operating systems + using this version of this program, file name mangling will + not occur. + [5] for .par2 files created on non-UTF-8 based operating systems + using this version of this program, file name mangling will + occur. + +- split up the reedsolomon-inner.s file so that it builds + correctly under Darwin and other POSIX systems. +- changed the way the pre-built Mac OS X version is built because + the 64-bit version built under 10.4 (1) crashes when it is run + under 10.5, and (2) does not read par2 files when the files + reside on a SMB server (ie, a shared folder on a Windows + computer) because 10.4's SMB client software appears to + incorrectly service 64-bit client programs. These problems only + occurred with the 64-bit version; the 32-bit version works + correctly. + + To solve both of these problems, the pre-built executable is now + released containing both a 32-bit executable built under 10.4 + and a 64-bit executable built under 10.5. When run under 10.4, + the 64-bit executable does not execute because it is linked + against the 10.5 system libraries, so under 10.4, only the + 32-bit executable is executed, which solves problem (2). When + run under 10.5 on a 64-bit x86 computer, the 64-bit executable + executes, which solves problem (1), and because 10.5's SMB + client correctly services 64-bit client programs, problem (2) + is solved. + +The changes in the 20071128 version are: + +- if par2 was asked to verify/repair with just a single .par2 file, it would + crash. Fixed. +- built for GNU/Linux using the Gentoo distribution (i386 version). +- updated to use the 20071030 version of the Intel TBB library. + +The changes in the 20071121 version are: + +- changed several concurrent loops from using TBB's parallel_for to + parallel_while so that files will be processed in a sequential (but + still concurrent/threaded) manner. For example, 100 files were + previously processed on dual core machines as: + Thread 1: file 1, file 2, file 3, ..., file 50 + Thread 2: file 50, file 51, file 52, ..., file 100 + which caused hard disk head thrashing. Now the threads will + process the files from file 1 to file 100 on a + first-come-first-served basis. +- limited the rate at which cout was called to at most 10 times per + second. +- when building for i386 using GCC, this version will now build + with an assembler version of the inner Reed-Solomon loop because + the code generated by GCC was not as fast/small as the Visual + C++ version. Doing this should bring the GCC-built (POSIX) + version's speed up to that of the Visual C++ (Windows) version. +- for canonicalising paths on POSIX systems, the program will now + try to use the realpath() API, if it's available, instead of the + fragile code in the original version. +- on POSIX systems, attempting to use a parameter of "-d." for par2 + creation would cause the program to fail because it was not + resolving a partial path to a canonical full path. Fixed. + +The changes in the 20071022 version are: + +- synchronised the sources with the version of par2cmdline in the CVS at +- built against the 20070927 version of the Intel TBB +- tweaked the inner loop of the Reed Solomon code so that the compiler + will produce faster/better/smaller code (which may or may not speed up + the program). +- added support for creating and repairing data files in directory trees + via the new -d command line switch. + + The original modifications for this were done by Pacer: + + + + This version defaults to the original behaviour of par2cmdline: if no + -d switch is provided then the data files are expected to be in the same + directory that the .par2 files are in. + + Providing a -d switch will change the way that par2cmdline behaves as follows. + For par2 creation, any file inside the provided will have + its sub-path stored in the par2 files. For par2 repair, files for + verification/repair will be searched for inside the provided . + + Example: + + in /users/home/vincent/pictures/ there is + 2007_01_vacation_fiji + 01.jpg + 02.jpg + 03.jpg + 04.jpg + 2007_03_business_trip_usa + 01.jpg + 02.jpg + 2007_06_wedding + 01.jpg + 02.jpg + 03.jpg + 04.jpg + 05.jpg + 06.jpg + + Using the command: + +./par2 c -d/users/home/vincent/pictures/ /users/home/vincent/pictures.par2 /users/home/vincent/pictures + + will create par2 files in /users/home/vincent containing sub-paths such as: + + 2007_01_vacation_fiji/01.jpg + 2007_01_vacation_fiji/02.jpg + 2007_01_vacation_fiji/03.jpg + 2007_01_vacation_fiji/04.jpg + 2007_03_business_trip_usa/01.jpg + 2007_03_business_trip_usa/02.jpg + 2007_06_wedding/01.jpg + etc. etc. + + If you later try to repair the files which are now in /users/home/joe/pictures, + you would use the command: + + ./par2 r -d/users/home/joe/pictures/ /users/home/joe/pictures.par2 + + The par2 file could be anywhere on your disk: as long as the -d + switch specifies the root of the files, the verification/repair will occur correctly. + + Notes: + + [1] the directory given to -d does not need to have a trailing '/' character. + [2] on Windows, either / or \ can be used. + [3] partial paths can be used. For example, if the current directory is + /users/home/vincent, then this be used instead of the above command: + + ./par2 c -dpictures pictures.par2 pictures + + [4] if a directory has spaces or other characters that need escaping from the + shell then the use of double quotes is recommended. For example: + + ./par2 c "-dpicture collection" "picture collection.par2" "picture collection" + + +The changes in the 20070927 version are: + +- applied a fix for a bug reported by user 'shenhanc' in +Par2CreatorSourceFile.cpp where a loop variable would not get +incremented when silent output was requested. + +The changes in the 20070926 version are: + +- fixed an integer overflow bug in Par2CreatorSourceFile.cpp which resulted +in incorrect MD5 hashes being stored in par2 files when they were created +from source files that were larger than or equal to 4GB in size. This bug +affected all 32-bit builds of the program. It did not affect the 64-bit +builds on those platforms where sizeof(size_t) == 8. + +The changes in the 20070924 version are: + +- the original par2cmdline-0.4 sources were not able to process files +larger than 2GB on the Win32 platform because diskfile.cpp used the +stat() function which only returns a signed 32-bit number on Win32. +This was changed to use _stati64() which returns a proper 64-bit file +size. Note that the FAT32 file system from the Windows 95 era does not +support files larger than 1 GB so this change is really applicable only +to files on NTFS disks - the default file system on Windows 2000/XP/Vista. + +The changes in the 20070831 version are: + +- modified to utilise Intel TBB 2.0. + + + +Vincent Tan. +February 03, 2010. + +// +// Modifications for concurrent processing, Unicode support, and hierarchial +// directory support are Copyright (c) 2007-2010 Vincent Tan. +// Search for "#if WANT_CONCURRENT" for concurrent code. +// Concurrent processing utilises Intel Thread Building Blocks 2.2, +// Copyright (c) 2007-2009 Intel Corp. +// diff --git a/win/par2/par2-classic.exe b/win/par2/par2-classic.exe new file mode 100644 index 0000000000000000000000000000000000000000..62e8ef74c155ad9fb45082a66f3e53c5a81340f2 GIT binary patch literal 229376 zcmeFadwf*Yxi`Kivk3zkm;nYHB-OEur_ltBCe`4ic7P-V4RK~dW>83iE!r`q8pBLL zg-AMyW@j;$ws@+or_~+-B;J-4;i^Q=Ahwl$Jbk|Y^_iG(Dr$CduM#qU@DaJ(LS>0if6 zFO1rL*?L3C_RHo4?^^1pslDe1wYUGs@%`KHzWbh#<9l~FYQuLs?z-Dia7&rvNB1ng zo{OP|OeMSF!>9xmR`8}SWdimTduZ!z{z2e06Td%Eq*&UEdE<9bX2qr%;kg3`S|~!H3;?o>NzW1nBX~qL z+<_N#9rVvFNv(q(zrOt%17Bm{YYcpifv+*}H3q)Mz}Fb~8UtTr z;A;$gje-9MFwnkj=sz|iqp6h@IOVW0vPo8O)BRAdK}u$d+-JAaYh{M5b~KwKcghB- zO_n+f3^HA}(fe96UQi}u3`uOBQ;rsllj-fYZ2`8zX>Ce`C$c#Vh2af$dbTL{;XUL2)dS+KFG_km6Ph^D?(50~Pl@$vz+o-|HipZwK0=m`m3t)%WwKzH}x5w~f$-I^IUzTq+M^%=K&`8P(Si1MXCR;0s>TuPA* zJ)F`h8>IzRth2IWC2utB2c&#Qi0bvFOE9s}X3 zsWp_MNYP@sX)|sNTE=Q8U-?z<%UN%ABIw>XQ(F8Kv5#l5ayeZiy=GQuD)X~_k*$`< znR5YlRJo&13HR2?Y+uheS-pMzpPqTCiXjw*QDfwcHCiNh zN|It#D(y-sjb&R^r)-kg+|Mf)D`N=01?=xMs;Eg+V`hHY$33V96;w;{A~Cx0A{*tc zmO6`MiC>Smf&e4;If;;FSlgrc+qMnk&7Vbw8e1{SW0`?@ttp|@%I>}|5{dH% zu-p&UGDpsxW8HNl_;rM+Lc6PT>10-D^ME(_0$??#)zvwrwesXX0<)#WX>HsbS_pPr z8Yp8GHrFwb`8$z*Yi(xJ0aggUS}E5}Vq4E=D>P*D@a3Rz^s7p#u;sMI3kP`1)wv+q zM$?J#R8**hZM8P`BUx*|6Kj4d43Uj8Jq&?M=SQNa`NPnYjTM^9{DGVUL`N09QI8?I z*eSJ`+>M*Vr&!pO*~a<>53qu3?8Yuvd%ejOua`69Y#;ccsa2`qO88J1vM>u2K7#-D zY$CxXv6(U}$u=1~n>Jh4#+v7T*tl7vy71_~5?gi8z-k_ITQ6_LHPY_}$r(ZwO$X|I z7#^?OQgCf{)O;%nt8eak3{1#Oq*mq`GK`ymVC2)qjlsj;|GPn2ziSe4W7x#Xdv)QoTSKmpQE6?E zQhFiCsQ*MEyhlG0eBH-_2j;PgLoAK(TynAXL@XsLUmS8n5Pp>$G(ub&w|->NM6ya}5Xr7Mk>tu=rToMCG*?^Q$jmkfs2-!T zl25&H4aT`|xCqYQ-3r_vR!Z zO!i`YLN<_jTHEydGK5wQc=*}(2MG4ehk{^ztnh6x1`({)YHS0^hQ52kZTd2uEi%uM zjhnuNTz`oczKUE)UqtF1Wa1T>J^VmIsB#GAA_o~gN>O@qk$JGrfJP2Et-|V?zRbq< z!{&*h*KD>evy+T8s1BG?AamGZnQgAlWh2>E{w{Jfov=LgB&sZDKeQQ-M7}szM{hP# z*;#hi#-*3Bn{D25Bpp7PNHl#?SI2I#ucwU-*QVO5*@JS=w5CtO-J}$LXsfk=wkoQi zRx4Ti0vLN0ps+!Yk+?j4mOWZV)>aBktTxs~uo+LX2W-ZEp}~{-n`o7)gcaE-Unx~o zX;o_WW3cAvOewf(`D}?lbt;jFbeINsowBI>{@5`5ZUd^4wigq&SJP(Ih5=)fDjCb% zS+JT$vQ51FgwEFsg)%vCzA_mpY_y>XNYNLXTviYu;QYvGK;8t~RKP8Mz5aRVOn* zy(!~b=9-#KmKS3^qb)DOA~8S{2xW1dTG`bkpua*0R~!O4`_lzE_p+57+U_QqEX2V= z_uVxRZz5aAq#xf0MER%#86M9J&@CE#1 z1@P2Oje(H&yyyR|{SBYd`wOu_v=Z5p$lT@HE5uFByAU@C%R|4=#m%QWKKyv2<3po` z2ac(z{w(bKs`K-IdHp}7`b(T{3KUnd``?MB5s6y>UQ~8^ki&sD z9%PXCFTuLO;_GHnIfoa?&gDQQFYh-<#x?~r@e*f&W@<({JOe%Z%JCujna+*|FiK{g z`vr|sbs{-Vo=DuR4HE_|0BkrgQhXH|mmr8i#;rC=I`!%L?!6000`qlDuAts9;a`0K zT-KM`LKTCCpuYLScQ2&4oE{R>nq4O^P2l9YiohEQO%^Q_!=+s0XYj&F%H_ zypx)V;_>ina6bT=xci6WHRor}QUC0CRRJLvjMrfd;xOa&yA%J^c!3>czXwD=3&S2y zrJ)`|ul@i##b(PaTY*g_D{k4fOpebs5v7DKErY##38-~8tOY;63N0cJu`IwGiQ-r?#Dd8fkh#^%dp}oYO^GuDgRmgUWmy9@9?7R5hKd!* z9{#GDKMvW0f5I%L@dRQaq3UIJi|p|RFh0vrpxOYVb02>df<>v4S(#i_sa(9^eD)=L zEVuw4-m;tnBw{a7DrKe8q*R)fN~|B*XbGt@U8!^^mCokM45c!wxiULmR3ea6SuD7{ zxiT+W?_oQDAv>?^1?1?e0#d3%J&P0!Qe{x7T%uIg5StJ5nHG=m5Ab~Rt@DYeq4x>Q zD4$xic$P%=*-^IIxgH5hqw{H8a#~-(ujJZFg2ZN7J>?=v`l|qGtut56mW@kuqtl^2 zy+D_>PP_VKQ{Q3TS&FW9O1OA&rL11Gvk6x=J<^-bwn0=VUZGOr%}+S@;f1o;Sr82x zbRD?S6X5H>8hmyDgtIJCni=BYjoz}66tW>5@~}CEGw@%U!@w>I$Lq6`)+k2 z(t6eto#&kIL+fUw@fg|r%P~6uDZ(~$)B0bl>{P2>H-A>Ukt~)>|zNX?G6Vtxi-+ z9u1JrMge0AKLpcl`U+C`DHZmrF-R)f-Qc6ToA2fGthW0LXYM z@cO;?5b1KERFZW zsf_YV)mM7>@qX$U&|zsh1xGqoE>(Zm$KM@D{Q#-eW`6G*BzhpSlod`#Q$p)Ws--c5 zO6}m=yTLBAb&1z)L+Y1y>uu`R^^N*Cq{Xo&iUq9@!F4DSblist;FCRg*89 z&xvf574=q88|nTGCShLY&N?65$;r@MJPP`1I1Wx_{Ey|nHT_?TmPcr@70@?vxGcimFL z8MWaOxzS*0S~(VoDKdjNA6`MXr8X?qKKuY~YtvY%l^*V<^p#R1p5kg>Hmzl3V{7PJ zmJK_7e6*^-FipS6vcZB{qVlTfycs)L+iX|6;y2gr5jBUb-;q{H(y~#jzAIT8|Au9K zV9^ttmjr$>2phEH>D~%H5>Sm0P}#6MS8BC9Y#?Y%1j^C>TPzz|J-qsJK@NcLI?INU=vstlKVB_?LJu>))$4-_x|J-GeG?9| zjkB?e4MlRdZP_T+{vE2T?gaw4DM}3$Sy7zrOxtB?T#4t%A!E+ww3wywGz38~8$IbB zt;7Bx-nSHGH-g>k#cc-NQYnDTin4&mNdM?%S3y4$D*r`*`uZ^))Je!<*>F+Ryee97 z)6Ut*suX3_{f!FtFSa~92lWWB+_-^+O=Cq48oY1ev9l=K&>aFq0*5Z7v=oWPZxFWv zr0KX7a5w>nIxg7)jw>x2HhKB=NjNTMMIe(^KwPxMvy;VUi_9=+>UQFdc(6R2Kw|=$ z6Sx@!%|SeN7G)T^KT6Y}If@ikWG7Jj=yo`I`l~9dlk{Yd4xuM|-JXVe`yf(MP`Tg( zYm$^Ef2@(xDhL#ThSk&>aefLUbyKqdBb{XN1%&Wkw1OTFXH0 zABtOn>igA#LZGJV1@9Sne>ZLg0faC(Sj4h4-YHTr6qMqmluD#T>eEv!jagK1rPMMz z1p|^~t^Yo%(}T)d4h%ob)MQ|Vb0geF;!1OwEnlW*#S?1arZ zOOCE}uESfOr;P1D7AiB6Plw`yb-IIb-i2G`hnRNBN(R&(X%MTXlMO@n?)KSveqCg60oH&$vnpo==wFp zM>_Io!3;JGu+-?Jj(GU5xxfIUUe?PJ)vSgu39Ujgb7Ls!B#MmhclRr!bl8HsZNvwJU8C?qNTY!72qoM za(4{ypI6yHC9jG~iu6jLrPSO()MB(WHGM@{%LX(b{6rm}{+jT@FKfiIq1fQ%6V;sH z)0_bMNnPN_-cBSe8>~Lw4|;&XftQo07mcD99_odgjMqw8uUkj9U?i%;%OChiXC%Ux zAkB47f**M)2c(0H;dN~U5$B?68b3?Z^%z$6x8MuZe;@xVxErn^{AZJCRMR2D8^b6m zUIW;C6!8MLy-4!`r@TeY4_FCEG(=KhH2*p5RzOM)5<1J91Tk}@c=#^tbE21EdCH+d z+K*dQKsluD&8Q|xiotaN4y{rrd|p0DgYgLVm4n@@%-T_@0EpcX}>m*-H zd=|RZlff{dA1on+aCi)Pd70i&*r?nsPrqBXH2o5EhB3^e-UpWhJayXhM-l-rUAf~u zaihjE9GioB3^CCCDBDW@cO zM8=($2h=jCGZ)X8r`zeWPE4Czo!y&Adx7s(3%>J$q=|qw0+{Z%kTFS-lxM9FRcf>M z*_FF&KDGbI%*!Teh{hODk1dTHX42r|iYTILjXS7FjatO@2G%*8$~ZLj^RzR^gWZ0k9fLsb6Gy_+RmaSy53Cj(iaX527CQRVfWB{w3XYNYXIo z2`(ZU5qqOekdA^z&Z@-1`Y{99!QXiwUA2ha>>Er``G%YW!?~Zm0_7vIk>qx+r!^JWRL>!*#wTnci@2x3Uy|zE{6=vn^_EVsUdS` z%TIQKHCa(H8Qx`JrC>hL)BPr>DrlvsIZ8)Oxc+J&NRtyt#q@fFGJ7m79zGs!=!1!4Du)+-&jc=#N(2-bou zG!Ug&A_$MfJOdBv-0$1e)6#S`Ih|@?rEpseTd=H-RyrT63r%Urf%!^Z zLG_48>ls?`%o7&a-#$b)=V95h*dE!ELVl-s7+CdGjSs%LMz`Pwt$L=wu?35tkwagQ z0-`lw-id{R#sjc23CiB|Xl1Uj%X7=P`2z^jy-*aIS@35yhyMB#2n=pQX?7YJni7mJ zGc|o;d59rfpu7wXEaz9C3Yan;U~D~lW8uqT%8d(}7T4a4izc5)(~Gp&2V-n6@Wt+$fRQi6j$T4MGsL%aKc_a&M&V z4c~};R_xp0FBgA#_{+zi8-E1^7p}!#{CE-*B`UJSnTP2t6&&#z>NQ!`eK9fi=|tu3 z8o(DjWYe&Sc{;xrGF(UG9k_qiz*alg0hQXm4W9l$NS+S^0?rl-8an6^E)j2C?UpQ= zZmB!VEiIeomM*!+sY~Ia}DSRqq>4yftO_)SbJ! z{|`RyQfx03HJrl{0g~mRI;^(R?%}p=Uey7|P9Qp7X}x!rl=&_O-6{c<0$$mbvpZ*V z(}~*LWfREN1imC!_Kb=??L771Bv)5$_p(&iJg2?(J!K>i zV1<8HF=)UVevZcJ)`8u&ZQHm;${@HHgSwfBjNODHF+Y{+@M`CV&WH;tqNYCPzTqj9Y6_r{G1R?hG zTyI^tpSKEwrSInjs;9F3IVXZ=vBC%zwZj-)i`N)+b@w#{ORE5G4BP|zLwUjZ7!7m? z5Of+NADsmZer2i5f3ux>pt#^~(k0ws26~YBRQm0+;9@VaF%G(!OWUE~)~8VsJo4j( zX57Hmi55B(D~v_OBQvi_@rW@iHb1o(g`(xzN(vhjr1Ce(Pc5PAOcNVZBNEIQ#w@^O zr$OqsE|sJ3Ap=I70+Q%TchWNl9n9i;e}Lv@$r0}GpiQ#2bNQ@0Ad@#*%khxS>+ZzE z3TK9u=u_+#!?AzEo2qTO+PMng>O!Z)x#C#^{}5`rp<^}D&)eZ;aB3KZ@iKb=qM1g? z?DO#JvXN1E+C+L6tK$GNS&S@8m=#nMU^hmq9BivH4*vU!S7siQ;x#e1S(#x5fM!0C zdQd7yx*c9piZ_SW4bf_DUHCjlct2Po1t2uIh-uER@Zc2Gb!PeA7bbbGE6&{c#- zR4r(;NoXfsu~$*sHoa{EfsKN#WW2VuJ#t@0B4m8l(B9n*cO(ru#8Z$UG_#{GLycmm z``GWRDnlctv_|$NAOu_CrP)F;QOWH8DF379=SPGF$gx#~tYezNI*GO*c z(OrxQcBFGrazwT9#MaIxlzY~ol~c!5^(TT9oewFh`+h-3lE=pqtkD%3BZtmLT9>0I zWssP{*^31FnoX(-pjaknZ9$K)bM)RV1@ zW@GY%h?Civd~pMz=N32QxaUUS3lvWcZu3d@owh2)A$Cj%KquQCUA}ykZ{i$G+_q4VQzB{qGl0K#ELSo0vs9(lg$c~EnY-B?0O)PWdp<-fH0M{ z>}xrrS~gIeC#m15Pc6pwy8GYhS1~X>bW98YJm=cigZZE>#1K5Pyfp@r{63SgckoqHIcx zPiBDIhHQYuji*vMazNa>Q^k$yMd)QSobZt@aGEeyULZITmxZabRGtaJeCzoPikvc> zy<5D~;FdWS{u43%DfBrtD&Fg_;lGLZ>Qm^rfQcDeJSZAUWo{FK=$N&v<+f>!2f`P# znWmQcbZ2He_50B0%D4sXn30Gw;Y+B#aV~4v3@mDip(E-$MC2`?21FzzHMvL@j)l?O3?T{!ILC%yrBQ0| zC1g9|vi4v^pgRWyy%lA)W`@4a(U(O7z}MCV&-Pb z*;*O*}c)tJ7d{;{HdXw`uRyrwWxQEM`l+Dks@ z@T=n!o(q+%4b2pmqK?d1!v9X~DRg|u*j%hz$m3id(~trBL>n2k0Z5t$F0j`kz00v6 z&(;#tMhe3FvDn)R#H1i*C#6ZJVfzOx5 z>F&+3YY(;6QQf%`VqdO+RATIn}D{0e+0y;5Q?ERIQehlZ=Fjd zdSH_)spyZqUPhZ*k18R)l8mj7*ZJ|WO0h#Jb}Gf$N^x%7Eks#!abB_*`mf2mk(#{I zVlsvQ-!{>63Xc&!&hUtYJLKT-7~=2rNUsw{DDJW#hw)1mnv5NXtAqiG?O*V4fpc`@ zhxci#C@?h(XbE?oGuy`lY9lS}kjBpT;p&T;ov7^)T&bW*QQI}hl#1G}z}5D+pY@6Q z0_?P?GS|mtwMw>^Brw&A3~qJJILpI7+N$*`XE(jm5T{*$k3k4{MbG-B2!K5R5naxL za?9Ll2up)Fv^3Fl0)qwH-VOt=%pZx#0a{;zYg~E{?V6fDr|*N3R`n_BTjt8l--fHFlh{raqX*3%h~PP zXL+=(Y4^$z>_?`akqXRQ_9ICE6^a5;P<#u7rXOs*K_4OR_yYLX03L{x5X>CN%1z|w zXeYP69>jiPp0U!&3LPrYrvcPT0&1ldQq&HpQ`mmMosopwZ$}m_mUsxi!P`)#;coX&Ep}bRPaQy* z;a0eqlT$fGQ0)^DRIYXrK{X);s8TUqn!fN_lZc*r`-ZJb#aT-u390DZ54~)Qv5RK` zcnbSA@HWU1n4EQ;;-KHs_|Dj2PguI(1CEmGw4`ypCsgP;5|*^@S5OTs~=-ex>4=8w85xgcpvQtfbLLnI)=>qXd6vckcS z6kh_Kg~@oSfM*1<3p>Wcr6yW-g*6$LpEXpr`-Ahq0P2pwOQ0o)R!HoQ!Hc`rO@i?M zxFM0awpAlyuP}KLuXdCh;OgxvqA8XwbX{aQ?fKpNzCdd}k&=*Mt1HVK*?1z=mHw??nSCSqM06%7*AHm_>&(h)^z@SCtG{nYvpmJ+4))L=Ny9<4! zR|Kk%zJ!c_;WrYxQs)<}(k1zYRchH{d`&{BIL8j#?{BRs&u)>*dZAQ-8e8{y7Z_hMrTsVFF2ml|F z-N;`Vl6?$7&+u>~tRHlM&4zOxwCue4(Fn6nMZ|v}EQu5B7Hh+MkY*BA?LyZ!oxog{ z&9wr7Rub}cHbNLwxQ+ieATJH~Q4IitM$VRVq9+wmD|7_J3g>()77GfX^zqxY8-?wt zBpnsJmDAb+A48|z!+(f6X5Sn>f=bz3+Biw4fN&q`%<#aKhmeE1onF6>KS}o(iAaYX z_Jr8tE%5N`Vc1b$N}P)a)}R)$PQD0Q9!iZ4ldvb}a76#5bR@?NOk^T?biM#AR0SOHaX9yZK-+u--mmrr#-i}_#PM%uCfL2UOO z1zU@;@xQET%Q7?}Lu=kFEH{pD0z&x^J!$4QVT!NnNi6UA_|t7D3`37jDj7pfuv7d- zs(J^nLcJHNN`b_rJ$%`Lf%OI0`{meorsc$@PeQd3I68%w_^a*w+TRm^00ol(Q`3n- zrhlj?u12Nk^8#{9p$ZJ~)WtL@xbd$B32`u5Y6?Gwcj%oN2{e5$@I?TUxIqacsv0u| zVOduUnJfVREi;Ci*ex^046ztNZ=8rYIe%!5spP5!u>nNex8=eb5i1gY; z7>{aR@OBi2#_bo;HzM?=;w+E7h^lYF;V~aZ3qSOfd6ja`3B{OpV3x&yi`PhsmVf9g z3pN7h$jF!I@2&jD^uF-zXyMzQvfv7OUw(*}=E@{~`thB5qUN zSoQry&EsawE)Ablw|}-_D8OA5E$HzM82PaMFenuIwXh8oJ%r!p;P@jHVX^ZfG<62m zA~iMpUXRs@dnoMk9BL!RNU|^Zdkz-B|EKl+*KqaW#Et)HeU%r~2l@>TLp%-$s(&26 zb}8AYB~CZoPQ9cJp!@RqGcYFr;II*EM_@}quZV~>MCtnY4I6af|0NM?fN#w(@HvHL zkVEq^hhla@HDzIZ(uGY9K$^j2Xa}Mc+qICsSq3q4%_o-V$BTvZqFAIALsQK+wz>K( zjkFQea_Oow4rpd`?Nt!vkye}oblbAAmKRs8sh}W?re<8wWi$2HR&C%%OXPS zACM%`e}kU2Y=bUe`I2f7Jdg4I!!YArqFRDD>}a7_^e-WOsZPNbI%&MDKv1x(OjvzE z35zKHvY><@B;;S7m}pn`{IA4Vn;40X^TR9)34IqQ8?Ep*s8id=>DH4IM31L$keD+g_Y)c9!97D5cFpTB_YNLmr;$fD3( zJ`2`Kq@!ezWvHqQl&7saoQ>q@lrG0$h2+kZ%$X-*Cc2qAlO(_jr=8fmBqTRq+>_Rs zGG}II%60h5Wk(x6k`NFvv*8?(5cXZ3yQi{wbmvTiw4fbnFwjC{T5d5^B@ODu*s?GD0iAm*!8;oDy1>+a#%@gztK<8uc1?X`HfCq<%SHSfr=MxW>N#^m(Fs%}E z6(>dvF4Wkf#z1=@3=%*)K>3zFUvX_8G+(jjY<3+Sn6Cs9G%w45sNg$k@&mNC81gf* zuHp$z&7T&!G(S5$v1NuKe|bpGpC2BLCalOO^^B&qnjQ*lv|?o3*lWQGP!?-f*8o@L zJ!olcq%lN#GEJ%v;TbuQv&ESIAhwi3?0Bd|Y@gPUzeQtf{f!s^D5k@)1wD^71ibuXtm4B6=^UBWGRshiB8FL1TllX8Jw`alYV1uX>c_f{*Nx6R zj>^$Y&&QbfxM{*NUq716(ij1N-yy+-LW{B9QQ}|2I7P)q$hdQE)|JZD#U#LWBNr{@E#Q+uERl`^&8k)B+mT*uQdii( z3s~1H#5~&Wsm}8ADk1E#@fk|R=|_E7r3l;}$9rejoR=7h^Sq?Pvydo(8%L(?j3J0wdP`rc@g|2&4V z#~-BPc`EMEDvHb~R?vE3dbb}`k9jPD&aopXli8?tXqfqtd9VTY)$-^M1M;XHs~r&U znmp>G$0PgKGTzH^|OZ_l-zLwvdaN8XUSj|0mjicA)(YI3PkGLA2k4sSf)1 zI6%s8h@oD@(HraMN-w+^or~rlV;wp zd3$23*20YYCpRQSRpZ_sv!1FtGCC3;jr=R$!Uku`{zF9R*e^Jk?kuMmc$KDUeMF-x zaOz{2+knSOn|T;Q8*ufr7er87fVNez`43NNq*4GGU1{vyUZ3B?e~c%*+=NS{!!7uH z0nZm!#0sGM+TGno;t|q+fa64)(0|3G{|uQkPPAF+X6lSi!&NhAS;N|CxN-&@F^$cW zXEeM|$Za@HcwG=4_2)aA$92vyNbN|$#1*>^(Rt(V(9)pK>~GIJZ@wGp4XXNVwU~RW zDy@c8TDFI`Aj*PN+BzZG_|1qu5n3%**J|mQ_OC*(NU?=7{-I9OR;^L_d{Sy>hz2K# z1w72^o=|J@nVMl9LY2)EGlC^fPbbhwXDB?0hFV7EXJVOP6>d{Pru=D8bhfYzOVP%E zh4~1>BoioHh)IN%$o~}}0jEKrhH-b`XS~GPgbrLNbl^?UF0QQuNfM45KoSP^Srqe= z15*Ki^DlIy*Bt@=g_!S{T^p;jag5knk%!je3V0c!AbM;VU@GR#jFW9w%)cXJ05)Je z{m>GvLkc%K|A3s7t$cK zpw=8k%`LMHq_SrN%@2lmh?=oIC)#nN4Wb0%X-2!3BH-mxbHHlp%4 zq>HYt72bNr7`w@CYj(N@u7l4}3r`>0i%S^qru=vY9Ba(uE)e zG8oh;8#J}0@#mBa0B6R%0GSQ}2&f=qzZeVZx`q-T zQT<4v6a=*YHW*r!gmr-P0dNJKh@%R*ApkEzo3~S&YOGw#O;*5rA|?Z6L>Kh$@a+0&Jlsz{Jdcp_d!gJQ%*^r1b|Ge8B}gLoAAgRQrg0 z5lwW)&Gbt0kNNu=u(aQXerpF>Zo~<5U3~0Mu_1=Agad#mK-*MbL=xv<`P*=)Wf$+G zLf90GFLlzU7@Y_-@pstr!4BFVQ2?)Ci$?F3ajxZDsV57kr+d4S>S-Am(WF zgdju@?B*XJoEMoei&7U8P6+p$0$NN!CTw3j&Ey11^CMcou;J`5Y-HA(l~kO1fD_DT z3vZeDY#Vxj4dfl22(jbi*P+tF^cIphv(u}ZOS3wQrU}X)?4b+$$uo@oluj%vf-bRO zN!yiqR5jo5C)8QsECCQ6KsE0*pk8uqL{gr5!lBUDc{m?Msy5JX5btq@_QWhKVqtqn zDax=k{TgYBi5W+1^IpK1Z?+wbh6MMy=3b%nj^zUj8{ss7)vht9g z(xawm@j=`F2mrhIoloM>pd~mxfP8+icl3SmEzCP4l?btx=iweTiTqg6n{;iFG18F% z2TfM$Y}y=HhQn(di0OI=oBj||kTs5K3Br3mhH$>mi(Wa^URjzp4(Spmo*SXe26xHr z4fcW_^ez>o@aKQ4_2f#uOHb)3cCAZljOXb;pi4XW&wnGjZmF7o< z&JjuFYyP8RB=Ygj0U+s}kk$E!|5XcC4c~KrhA%NO9YrX1>ACZ}bp$H!tGZ?6Z$G7V ztL$m*W{aLOLru{_SEs7odiB>Lp32ORA#{<6*2xL>t2zVj%Hti#{v}<&sd=SNr6`-~ zP!N${lt(9d!GYJu7hr!+U6{zIB2VNYqb{WI;-}DO?0E-kz!m!bS)@0g^wvD^1S`s> z`R;sI9LMIA=DN088b3q<41+jjY@sjUf#Dt;L>sRULLzwA%l`;%3nT)f#h&0o5PDf4 zSb~c`=*Dj~V#Bj^>IdVkAb5Ba2%5@l;+Y7d^zg9y?BTsS(R@FdW0c5IrsvqA=Fk{q z-R}j16#g6PqW}!S4)|=qjNb{&5K0$-AM%r!DTa%wQlG6<=8^~sM!tZST?3GU=>+63 z;Fk}8&$~dhD%ha|1oj5?*~7oBgS{@9!zXe)q30lar=sd%V8_7{;Oj@8NF;Co?r<;? zI@M7iB$xX@`Pmv74;_JAFaH)+HBtAl*dGMGHV*{%OI%LE`3xuzOI)B^s)GMeC-3*w z6bwiy9n5SQr;U$=99c%1=J6g z_cW_g<$a_-rFI04^{K1TB>%5*Qi2$W0m;8er+roOuO>nzJR5a-zF$u{I)p;@Kp}ua zmi%(47&&zLJi;CT4Um{Ovcr}}Cy*3RbhV?se8s4g_2Q(EY*z8W6d zBFW@x4}Vf^6t$y3I%qyutg_(#7LOS7xil+zzD>u4YoJl~|U_QD8 z8#h#k`#ju78=WiApP?JHYn`i*MoVGo+yh>UE;G1}FCA08P;APl^S9s7##M(>DCk@d zfAZhN__~gxf5lq=3edk?%a5lgu-bMV>qJX*Ubi@}w@oaqrSo1=J_P!p`Vfxknv@21vJ z2u$K6IzxwunxBM3>ABxeE=%IT1MD(ksh?+)Y}Yc<0(G8&ZztJAVp;$#JHM^2QAh2 zLB+utC0js({jKk)kl@?{U{!;q3h^9fj2b#>_XYm|eEL-%=A|Tn$uK#*R=c@fP0{4^ zEa)G!@is<8YXgf!9=`u^oia>S*S2bnXl)QpfF4W-FWk>41`jU8w=7zU5%l2)wVFaD z)l(2u-U^7&V{!n_5>g@L%mDW75>Em4(Ni;xZ5B4`7xFb=wqQZN2t3H5qb9N&=_LG{ z0a7{b3oOBjg)6oIY&z-^?Z9PYrKx8!_Cs54qDPta!|fl7FD%uY*aCTaW_XgwiyAt6Mg@3a6QN92jOdjWi?-8$ zXbOkb93xq$GRxHSg8(0|Wx~^~*kZ*Yoys`ZTvJ$PM|-BIP2a0Ft=x$31|hTzfFgE1 z2}rSwRqH}|dIn%I0hVGDo)DMTQl8Z^Bdgh))m)g>QkeC;;f8ig(G*@Ls zRtjI6xp4Qq;unHm0{Zt4via)!(XjB+4fkrF%2C3+ z>4Z38e+s^@M~>g+Rs@LPK!CX>cq)JqpT{E8FmV}(T&HvNXa1|`CM{WU7w&cOyiN7b zv8wd8pPdZ<3&z@m@4UbSOt9;)FjKuPkqB@D3bhnX10ui@=R$AM85R`z1b!|arZcL) zpn4!bJ6a|z4y+*N5>sl*T|JV&1Qx5VhMc5^kYPX#k=|NJs_1fLLnqJasz`V=lF`M3 zkLm&^OOrMjvy7H@{!^%MI>{n?hyrcsrK6L?k|w$?Ouc+!jZ^R&A%9o6_!p^b-?J&u zV>Ujv5bPrv1bwR7cKj1D6~H+ID}oRz!tR41wNTFI(O(lR5W}JMqE9G9KKY`L*{wqRrhB}QOJg)&*QM}-x2>}cjzvXsIDzx52Pk#fJcm}`PM85 z2@x{YIRo;#kGc7oU zrBIF+nn={aWAPI@>-I6c_e9~_f-6l8aMU4o?D1gWbM_FOnbkNM>=z?ZduQZP7zgNr zQ{A&~N4kJP*h5$*-im!LKrtQr$|%J!v%p2nn&^h4LY6+WAYYUOh{TXV zFv|(w2Y?p(0A({uk-mp9b4<*C%}~!kug8Z^jiPaSFZ0JRc}JN3cGl0QfiQ8tBN0^| zcE;(*zZJ-%e)<4*{*@|#piZK5VPO!x6J~^!fwr=}{=~!rZL0huj2<3o`cs8o5!NbU z*lV*MegHdn1N~hfOn!k`9#h|dy@M#DORCjQ8c4RWf`5Q)4IMN}L&O#0NuhsaMBO7G zwj6=|_@M2x23n!bBEK-q9Icin!WV+W*d|EWbR^q*MuC{@syr)nBK}o7SrgPi5oLuG zV2YR{Oo&`t5Ma8iX?N&KJzRhKGBPcfk?@1jgRi`Z&{#UK1ipJ{Has4o`XdnF*E3QJ z)5l8s6RnM{1Pd&xA4zJkDMjyE8bd_wn4|(88x+Se3~*K`51i$?IP46RVNwW7+QaWW zgKVT&v20zTm^$6E0g~GWeM%(4zx6s^qh#bkd~7;k!*_@Pq9&hx%!_X@L9KlcnVMQx zW}+5rKzsxyPn_(*M^WW8wH1|H2URZ8lBBk@LV2!z z;aqHXlOTHy3WoD25)0S!6P(Qd5kSZD!sDDcn~o*^tPI^^ME zc;}?5mQ@zcd(a<3$9uj3(WAZ?N7BxWclxOepRzvkXs{Cue}ogV>sa`AqAB!-no9Np z@?-r4@*~n)qiaCyov#M@fO3|jzJ=^4)p&gug@%weMvxdyzuZ{xpha=;h6uxhTAqi= zZ~>350e``@Rh>ZQ(^Sa;9;3VlWX{uceJ(OP`66TnkRCLajf^&uGxISIM*)H%g&FxV5OtvobBwi1{JXI%h66wFdu zjMF@nA}gOT1rxwW1gIw5GQVlp`#wGyDj%EJ6esRbO6|o9gftF#>!Y_#;*6lSh<;d zjc;X^=1tiM&4q8uv-ZbbTb7w|ZWzW2=W;>(HXW#&&5H8a*s=i5^1c7#L;`W?CY-fI z=P$Hl-ItZ-qoFeLZSLZ45mQjJfFRen2L}im@u3y$-{)gR7zd!DN$jKTdM|T_aZ|`D zyjcdFu9Q5%NmIkR|Mn71V6y#z=<|d%K^<`Av*KvDu$fF53YlKc9{|;`S@?R!vg>eU z6rMmfOEVGkk14zfrV1TShi})xaK$)yh=@b{BNzu-6c^sZ=jz zetB?a*asn%l@T=xsVB1Lf%G75SZS6J73usxCSj~`unmc4JKv9!yFm^sK#DSKhH*ra zbVeMgh7O6tikIRQa8>fT!fFW(Vp`_SBBsLUwi8V!0(F;^v2*2?7ca)KjX4Kd*1ze5 zxpC$#VP3I-dCfSt5g&Gk*OS-edb94EY>p|jD>Nl}UdM&>Ty=6MMfPi4GpK*GghK(* z%Xxrsp`KiguZKVyfg5?-L?o7)U8+xPtsPDJO*sAy5&kCCy)&Jcq98JhCB<~U6KG+o zUn($b!ikTgam6u@6dY~E1Oyiw4t>OBIYMCEKOqSg8mwIrPfWy)O-X;cs|^kmAZU9n z9Xq$9HWlk%mAAG>Vg~F?cUKb$z~f?CVUER9=!X;n`rX9V3LrNZJLb1r>})xriZR-D#g%8eaxd zBBu=D@o;+^3wD11Q&u{%5?NjKW)vRbDmB%m3Pv{@cTI@XXO;-c+I+mi=_%iagPVAp z0rVF+fO~umPeuM4&yG?mf5fPvqF>M2L;y@zOI3gmk~AR37q93 zn!hN6u;w=zcd7{SXY-Fv3xtdUpjxjWV@sjQftSOW^`k7vz51d@mA;-r9!iJfD8SOQL8v1b8< zN4hfaH99_5YX|4ykO`em?TBtTGLN&ZncHLMQevl4AVP3}*||{K<0lg=j+4VqhmX5r zD<5cTtzQ$72;_7)l>q87At?iQ8O-F`g8762SZL3T#rjiReeBfA zF;Vk#q)m{++GD#57E9v0#?EMgsE`6WZB#D22|cBq1bgH#7WORESoo)eBMgU*CIa5Z z%J4ZYqI(?9Iu<+pr%INpB+t?p=*y9_Ff3=XWW z*B>G}3SG+{EOynC$LF$du?g^zqqF>r%&g9g?|E-Y>k5sFs2|^gmJ|eK#fT8$Sw%(S z#6=r|zzAWH{*3xM_v2-e_eUDr{IPx`(E`3|wGoh$H<&$O+!f8Gen?SyEY=!@P%_L#9KY@1)9?_1n<36lf>cB8 zcw_aId%S#tcwDJ9<+V;HSuj?XaoLL5LQ|o7(A&Mo=~S z5eJ$CwMTOwE{o1M>p@`H3lKYz4y)@N{BW0E5iL6Fr)iBnfp5uyIl~uGzdU~Z(FFcQ z-rBvW(c$`Z={Nl4`m6Ef$y_5N8)et0wI8r|*ca%bmHOvGfu+}imv!z7U+fPIJlNSq zaO5>9Ruok%Xw(sj%dY;~E*E&NZg!;oEF?p+=;X3N^?Z}zGYw}WM`Xwlb)y0#7U6QF zM|ROlg0;2-xVKV8RBt%j)gP*MeTq|{$|VS%Npv1>9IotLY@9NgasmW29_hqM8{LIq zIjX3i`Vqbit+?KS#2O3Hlm=t8{47h2d?JfVx+fzqn}E8g8*y1l>mErdz-AR@vr14N zJf9(Y(BxI-nOGu)#f8k;bq?`~LdXEv=g*dw!|k+;zb;U$0{C zMn093&*47wbrQ;=q(v|JIWz!D0(ud#04%xs!apO$HI&{-(wm9!%$X-yr{GURJp?fb zo)uhwmRYc};XfNYoq{EgfKqb(S^gH0?-A@gQRWU?q~Gx18{$*Gf{$R2Q(>!0%?=jN zY!{U}>Q|s8=bEMymPZ)S0K8;)goRb+L(3i+V3Tsbf)YT(dcz&oNWbGj1yI&oz-k%ZK$-YH zE@?m^c}?xeQ2#F5fhJJ@DY$B-j>XYU z)VD_GP8w+l@M0Wg6A0r#u^z+^n1ldiYBU7`Kj_mxkj-#mj~$XDttD(}Iol8B11`U7h}V2aN+qh6d{T|h^&&d$axU}7;H zz>0~$m=e0dTwtO{q?iFJxmzmtxRu!jIFCfRr5FdH!Ttim>b?OD!fwV9W0|{xo+UFR zq5??H$*L$q(S6j;0@*d+6uqY;bUn!rmd5|sg;XosKHOo@=)5R|Ev|MsveAmAt?e+7 zt^9KU4fsh5MQ6Lo!nX58_^us}m8Ml88~=HlFr{nw7RrgwPT??Ydb6BQN4AK1lyrzM zK{lp-sR`o?TZ*5G&`Kwb5?Ru8UY=MagT4l(-YR4Ec$b!`9+!5?c#iEr z#x2PBDKZwDjr*hQNY`tzhV~=Ca;$rF?1M>ZTa7yatpgn5K;|y??$m=wE4D&W{_?*q zD~>m`;WrU`ezSPPmT~{o9=7M??x}mz-Y|M>)RikcAD-RNd1WVH{Kyp z!wwqHh@N+;{dS@&E&qK|me7@x1&r_r7`Fg(yU>k2tQ*h{^RtcbMql~n zxHUg)Xvc2?Z~?lsGZ>P0k>xEhB*>O)+!}rS=lAwwL^J2E=<_ep6-jNR&@pSYT-@E*ha}9C)o``)qW$N+R`yffw6FpT?Zk_-iX-YDFO?7r*_k5roBOwoE*(ETL(t7%vO*> zBLj$I?~f8A`q|XuESR76juFHXeW~H2r}j0(8$L2fv5&{bj*LgwPk|&)1Cj4wK+hPL z)Atks8}=>48%^O&^h)NLG8qgF9a-L&X2agcUeOWzXpQ% z(+H}@40TG zek8o#8Gh5l;B?ux$-;zmKw-wn+z#k`D}HG^e;)#{@H+!y`rdiL0T$&)dWA!Je)M+- zKVI6(U(orC@WHPrbl%Olz6M>}D_EZ_==^em5Tch8ZuwsLtsw%NptDe{4)F7U5TbNe zRJAA6+?;<=XlY9``!leGJDuh{X6(q=W_vO8_~`LtkN4=+Df&y{y~*Ks>}uMMWW1Mg z*!BVIsCpFB_Tdj!Fl`^c$BZO~4-8lI?uJN%ZLp?Zz?JM_I72U(GMskY8gXzsJmuMV!88-81Xv01N%HpoEe zsj^Dj7XLDJX*++90s?>}?qm!o7bSoqNuU_;)h7GWbpzmY7z|)Z1Q4&SBjaV( z$?nik#%}%Rv8Ap2eL38f9DdWDxI>53u_)DNx#JY+gM%6 zwjH5gN9QKq1Au9faz)b;{|s;96m5K{H`nU1c5e>fT7(lC3Y)p+oD&e zhyFVD{-1mt437=JF+6-AG4VZpqpiDpTjG|C4%=qneYo}7>*JTU^7jTn3BNrsu}iOT zf^Y1>iJLQ6pt8b${DL!%318a6#SZ}}{MKNgehH{w1?m@VJN0_I5c);$AM9D$vIu2Z z_)S;1b77Y~8j4p?^$W z{NOE1*YUR}d_ckU0i^wK_s+x|?t2yff-V_}#(buCpVnI`Q?4*JO<( z@uzxBNcT*L|J~A7&jdd9mVyYzL1({<%!pfNqw(qkSXty@buZ^qF#!c%z0|obG1453RS@J~_Hw8z=+G)g1sjz(%d@0Vh zi5Qz4PD`{!66) zFUi;tns`>m_U5_qt|#X91jBIp*qj{-zv)PPi6;lth32_KihRI>BhCKzBQFm}F1odn zJM2>8ShN3Vri;sBgkhh;S`#+96JgzQO9#db|mSkdcHPqz*CtrXcA&4q6$IjklcH=A?6mWE|MzDA-qeB z>2SgNy0GC!_Iy69o2YS)asR3Z+JdJChJm>~KBO z;?_609-&5w_q^E-^bsji7nKdoh4(v@iue;&W^;jvBW5+_*_z7|n*0gP1@TRJ@y%y9 zxtj|HHRTOzE*se7AJ|+lpeb)abD6!#Z*MM0Y|2Y)E*sqBAKYAUMpNDy&1H@zzoWUp z)s*LIE*sM1AJSZKW>emo&1KFerF5Al183YcUqt%;7_8ML-g}(F*lZJHvrUZ6HZeBO zujN%}c~Oi7UlC!Wl14F}&z@SlukpjWGffL*vB%>vG7N-gG0>uaE3^}`+?KJX z6*I-O7S8s)Ye_JIku>v34DXXqg1cxw31?pYg|gl}A_B2&9YXc-mVSCm&koxMQzgEm znWabCl!1oX~Vvl2|2ed-KD#_`txW zhri0rgry&eb3)CYwz!_QB|TEZ6ok;`N%h8A1(&0OYm*$Pd~7UkG7yzR z_=val3elss>IZVSzX=SZX`i@@+g(pQy_JZwt|xZ5p7^m`*^V#mQ4{27{@FI}y9PJ^ zY-=6A38S|+A^$s&+r0He%YW5I^VTIT1ReVC0Fg#)|5YR4u8LAZuUyOCguH>8g08M* zJ4CJ$CNQf>N1(h$3Eqn2L#UPRAjO~(sr z{!qC3HmdTTGK@v-`em#k*@&ogl0tvB(^ym>6N>>d5!+?LpKm}D(^$rz&XvbUnU`1;hUnT&! zW5=7iBXMJw`sHA^F?d2jluLpL>JXQ4jf7TD4fc$jXPeaZM;<0+^q3Emx_&Mo0c)xf zITP?KLPdFwJ#XE)jENJj0_tbZm`U{}*B(A;f|Y(0EpQ1LC$-#wmRqmoF7z#~2ow+` zM&xlLq2)WT7cG&#DUfWuz$II|Vf=&(pHVxYCwFew**&>|uA#>LJVM*UqxvpePwqlJ zw?awxYoDGT74Rx^rN#!PL{IYV3P{Ye+Z!gsHHrS^U%7BOCAdwH&( z7;Z}H+hg&!pV2;X9|INFWuL4~*++=PNJu1QzCVj7E{)@*^u&E=IZIKA6xy3}MyH3I zqe%s!7kYzN#04(UuO+~`KEk#eW6QINw%#*XpG-Kz&~@?JIZX+!C)Qx%Ig}qi5ro87 z%Aqns0C~@peOJ)SIyEskrY zACpdaoFlP)Y+`o{SP8~aSgS9f8!~>tCr)+0Xhpxi4->q&*T$a`!tD#@Cz&@59PBqg zNh{M4%};X2Pw>7~`AN>l^!ZE7PvYn=H_6s$Zj$8YiCe!&Zjy1iOlHj!YBKkIuG}Op zYD99A2r8gu9i|YyH#f=D>*?~Txk+L(^gu6?WN%A}D8x{L5&9{)b|5AUNr8N(*EY4w zi9+r9k&G+$%3jP8Is&$w_i4X@V@6<`|vg4gI(z_np@s935TDS#A zg$LLzM60Y-pb?D_OcNhc{(F4*-|IdXJ}ksr#KecQ#L48#%UAOm_>lAk@!_%@@L?IJ zrB=Q6^Wj6!gkF3&F|l8Kxa!)^#s_wE_WfkR3)x%Xl`x`L<`xpgDA~NlZN+F&n#Yu= zC91h2QJOPQL}#nG@ni`cyS7{Dd;4xiREgLVW(5~H2EeSj8t+XI!b-5Vc32RwDbBUL znMaoY1ML$uw|3B~xjlr*K8rjdlYQY;bGQi%SXIrBzj{giq&Oo-P=6wtLP!_}D9e9D zL%{ELJ-St&=&{MRo1^#-!WT9tkFB0XRkP+`sfo84`5@TrWS6tG>3L){>A^6GQ+n3Y z4HAfXc0!Ss=QgUY6$XK_C{Z^MZqKB|~*Z^!2MhQX2 z$xY2ctEQQqndr>(9a>dlb|$~KGxNc1*P|G`Pf1c8vPsgqoCrS%{8z-lf3+-xDE#C- zJPH0Wec=B?#TSJC8qVEJj|u-m;O_zcyk7W^uF5$D{wKjZ0G~bhDK$4qGil;Xxr761 zZffEp<3rhJzM?OAP@W>M>M0r}`}ly>XdvQ#qsr#lmxkqnd5P>eZ81AePc}PFq}2hc zhTpyP%^o5aFWndi25EjVfEp#c(_`h7#kXp>6e}cSl-aUOnR>*e2iLmWmORGm6tlM| zXxy%4i`48TV+!AjB}a}}bGVjIM=of3A#yKS+Ep?$e#L(QW0U4{8(u-0ljUmIO35W3 z#k(4QDd@P!O{&eFx^bX^r`b6WkK4=mcd_e<4X!6N^ZfaW>xo~=RobRz8d%_H);i{M z>Kxdt$?3DnIWU`W`>nDl^hHjt+Y;jEO{Bdfv%PfM8|8Xpo9l_@zUSGrjSCXZwrHd4 zjOHJy<~*vowK%LSayIs`{*nQc_4h4Vk|Gf+B_^`Rwv9Jlc|#W^x?w77H^H^?37#m@ zfnOsLGN(Adzs8`yu1BXNXKe3&Z!BU=SA(oWs^#4C6k74P?qk*2U`x^LOZ?SixG+~> zQ@KJH7|ktE4Zo51LF9h5y07LvW_hwSoAZSMRg2=&85Lp8Y+F8sQCWW_r~ttmOaELA zXA37vkDAYAnn;INdp%S1VV#ge^ZeE9Okhk0$q_K!IVhX3iTl;aEOPofT)|gm2=J`K zyQ7z0B{h2-$Q1^K?C03p(%s{*h3)KojFJtnxEk)~SJJ=N<;W+?79`&&!pq{X3QjVu=z#3~XK^v!+0?yT*|gz9kCEJfXo!$Tynpm(kwkm=(L8Sk@N@ zY%P)Y?zGywQ?axQW$ zdk$)o@rvNr;v1^HQ4FanH8H{r_Of0mwmLWDk9LIYqff`Qnz(@T%GnX7wKv<_b6L#o{hi4oRwlENENG%dDJUVwyJ<6)TcK>m#^%ng8Lz9v;5c^G zSG6L<=jQ+jK(^kS>D85wbp z(ESc$0i}aivf(IOHu-2>TJ>Yp@tf?$L+tptxb>;}d$a15R8@dcm59rnVUC^Fbmtzx3zE>PMobe@$sAYmQ&M`QcwsTKO<7)EC#M zt*>4}aa%`Wbs$=;+N!qRSpA;BUt!&wyTQ}!4Scj%J{nCc84;JM_zpOzU`v>-uWn+* z@HvPpHyWq0Kw##`U9zplgTqB@-H?p!dTVz#>FBlGJodk`Y^^M>JvW~^*!Q9LS}tO7 zqZ|2&zEWD!mfMAUP>+LaB#*u8(e;JeatBYfl};(VQ5BYAbQ|H?ayOR&_L+cXm~M}& z_QW&YYCBmXh|chs{d!aAH2xje$chx>b#;snl4nghn5hpaEpNHLTAGbIZ)EI0@~5$X z5eW7B?i4t&ZsMPp-8P9|k8Al06!+bC7w=q>;5M%7j0pGAqnn)~gcRF#x}5&f3-v@~ zNVY{{dhcp@KzPID(z+b96qmfbk~ShOtd#ES_X$LuO-Db}B;{v`22!u`S#FYyG zVE(*OU~3*xlek36m3Y0?*?>`0TAdk%<{>cH9LuRIWGwHo?oBlR2rB$#a7~9siw~iQ z=7VdKP^WOsqA{K7QW zt}_~6slB3lm5iMt2{&CGOAnIoNj*KPcg#z~$Jlf&#uYg$LAKPNM@K)+YQdzr zA!(t*xR4fHk9L(B-$ZaEk@4)H9D&r^aaoss1l-m44<@TgxHke z54$+4*FK`ak+CMYsRw?38Zn|-=XHK?79MnesqsS2DUCxF`ZT`il*Ty@L|d0OGuDh{ z)Cf?^0uj7(EguL4B5;j)02#$^D#`%fD)|T_ke#sjI^{~I0xH-x%3)M3b+yp%={}~8 zpH0ybI%9GaKZ)GyH#V3-OIhnzsr$~n$oqr1bu76mu69WCBysiNp!K1Eh4pupeoI2e zc9z%-*OQ+#vY$D1=ba=@ZnnqQ+W#8gm5H?0K6*n}y6cJct|ykNgW03)`g){Hj0ox;6sY2I zU|mH&madZ>!1g-pgkr3dR4`%`Ws+UX1`Bn}P0`DUQ@}nXqQ2#$zzl@|u9d%);Sp!& z6prDhU;ru#!4I}tAHf#&c_Lyk)s|cFSw$R`GrJ=thTl1J; zCfQn=oZ?R_xOPtj!!7_6oSE)w31yw*dK4vw?HGgSu^nylxF{ow;Z=ogxq@I5*gFMR zmi<%26?4cl_lbxa0#R!4QI0w1CcT`_UKO*;|HoT=(I|#Yc91&BM#t*N0wjVIvM9^R z5g>Wr-!up;(Y(tDmZ|-P{j0fELUs40@H|L2w>c|_$4N0I*nfU-%Ko!-Up|C4Vi$*3 zPzkr?8T<8Pt5kpzA+55wa=g|2&T7NHQ1ax=q7={ad6vhsOi3~{hi6Dt$B0>6Nufmf z`lmLFxUXgu6JEv}$C`+-Y5y|=$6i4<(Q2cc?y=m8)2BXZ}Gs zE|URgA7cjOek*~B-AbTB%#e3bebOpgwCZ-cCL_vk9zPO8DbtLqSyE`MHp`7((^(I& zp*vJ+Aw%EAK!FPc&bY&SKXr^_FZT49(G?z7MMBSdg&z)?iKdVIUcyufGi;zu*<{{r{j7w32Rd`nb;>z|@BxC5iqiiFIK-$6~NvmzC>={yObu z8|^0-yPIM@Bk;X`czP9iT(T2YXC_3r`>%{sYusmjF7IaC^b4;@K{F?mOUW z{1tOmJ&J)s@s(Lrox)XTsnh{Oiwr{v(TAd385QT7zhDT6t zvO>8D%|BEax}o;GlaX(`3a_<2xVwj~aYU#-)kMvJcTOL?G}n7q?Y+J(>8-2bE8(PJ$^um`@Tz)Moj>o!ZNrSD1^U*27TAakVg1kZIg>iwu1riSErQ3KgUp)655h z^aGuEW%MwH4J#-djnC1yJ0+?+1)sA!7xw8+pPnXyY1=LrD=0#+$f!-Kki}-y{t)&_ z?#-_GZmDoJWXQbV6xVqvzqqTa(4_>sYXD3|YZ|;uxRn1OH*spPM=%N5S+g=)^tL+~L`U9FDqnb=Q$q{x%f$deb$Czj0O5;jk^vi2(! zZp<-G)Nyv0EW2;;iulFZ)rZ(-`Cg{K+K6tr&5<_aBW>36q*ti4dxC0n9&LioC+{5J z$Ce1<8zH!{L^wixv3V~t#+l`a{dwg{xzu-sZcZs?oz?vV z;5Qk!KVmNYXPGN`Jmc>K>Z7Ld2MVi;MN(@T^N*=pt6iP*-L-dOPKODd95n*BDg(MI zilLR5L7Td|43u!WL@FQUljXE+2)Gj*^bNOLiBg@NxWK6euB(czj zQQ{xe;OTv`Dr$9LB$&_@3`w#dg(Se9wUo(yuQuzNhE2;(L0m_@17o>pZB_ueP_1Bl7L3@jbUO zeiGjkN@>RTq*QNwPu@y=Pfy?Yo~NyoFK;Ejr{{F>Jw2z3?`;R3*#gvaX$RhHX5PWcMof3`+Rrjj}vLvtI`hn4p+`Aob9e&@_`D!{V6cq4%cuB41@cJVcmD)<7_PwJ{gT%ly{GH zy-*PL#a{@XXO{ML>05AL9{xbhdBceh{+Y4C-+`2Z!7;JH1K@N&vB56|s$zYYiVhBk z?l!WvGM_f}8G>2fCgH)02@lR!G1HEO2j3*&!EbJ!BsSLbtnlCj;;x8>2S2YjJot3G zZewe9ONemF(~1faZvQo1g5$U86o7{vdyS(uV3x2#gjbatS8b6E$SwiH@j0;*>Sd^p za#nQr>W4>G(q?{cXOVHDB+u2 zjUs{3r`UZ9?5+kSiSEgqfsFNSc`Wh4zsDJl!kp93Vhu^m)m-8M=K-dA!6?<%NkDE7 zhP8Q)%xgV?|22PWS(PkJoSoXTsZnRuDDX7pd73I=l^iri0psJ%tigKo8$)Bhks~z* zs(HcePa=bmqbfGI#2+CxxOy+G$9(%2e1VptpT^@wefdqE zH_cGvLH-9Hlx?CF_xpN@`;BcX!7v%EnacRyA58)oTq|+EBO+F7Rh_z?hgVmec0FfY z+0R;94IcNio)@4BwLVxV^CwEmGW>va2O&XV{w!UkQ~3k2nRzhaZFq!@9UfE6wg?U9 zNZUyKrQ&DQa(~(P`aCfWzvUx1tdok^I(*?$7wkAFuzp)-q{6Ow@{t5vxWDrA&Qeb$ z$Of_3#3{+vF1{)pLQ{;te3hYv`bu1xtya{g(5Ob*k1Iug0i$h{UoK3ITU^A7Z0m@$ zwZ*V+XV!pv6HtfWNGK$h&}Ec@cn8;_PwMT~dJ5Q%nWF0av5Gm8A%fy1Prp9oTxHuj zLn0tb1T#A_ZhT8`7U%jT{l&B$1k~{D4B1t%NMd(!5Se$4t(6R|#@v|0L}w`WypXE-f$CavjFS zFHjpYO;<-1@u_0tm#R)uqz?Gh+Ry%Ag(Fm&u!0I84d}TgoIAti91uP15X0gjXUWn9 zSHo=_V4jm5g!$kBVgiqz33()+UWai_y~!uN0H2g)hH=f)zMrIB>nS4Wt0<}@{`&8Q zqb*1=UR}r;fph|SG&wulcyojrV3}8+1b-H`Bt9U_{o2`d>=1JE4Ej7tfYC6@nKYIYcB9k4j0 zX^KPo$qh8pVJu{9J2OFbg6+C#bPjNo856#3A_5Hs$8y~J3I#Z%1{kBcP19J?bG#K? ztC+S-1u;)p=h5^iIp(nVtzn^`kJC?^j7w-Nr->v04|1Bg%REiw_+!oxk6b42IALEf z#=7{0`NTRgeEe;|{t|3?-b-RJ;N%%ASjs6hu2w5aWHW)-J`$_7#5=RdNHbr@4h1hn z+a~(1EaZjbB(p4!pevF$TqYQj(W3(Erji`wTjs!uEfcXb7AWigbQ3@f=X@Aw3N zPGMp5y$d5p4v7)-KKri8P1lPxUvl*l#xC1mJ(nL-^D{49jTfl2fu-*^{@1!UwPx!s zS140?F@@0iNMf3Nf(aSdnedEW(-kraBC%gn{6#Q1p6iMwK6p!?(UnC@36nw3NDjn%6q z=MGsv)4U^DktvrLt~9_s3N4NU|7Q0PRtL*K;oxQ&clqcLhgST9S)bW@n@Ycwy(H5g z@W`|1{ajb$&uBFES$+ICBEH2Gs*nF}?fHEkBoqZo`#z`%DKtq1?6FpHO6cC;Hx{fCOGeYM?6uvk8998D++f4AoF3OLMgl9*9y2Na1HF zvR#eS>3!D#^&&zX#>f&QCaLxVp*((BTBDg_hK7uud3Omaq) z(2^xQQCRIQGD^*_e@ffHG80&)0ZYDoXXCf{&Y~1(M;xS3h?~%Vh}!_Dgm7PwOhw$} z6A6mAy(_e)4{=lQmv|TUW_u_CC{96&dVY^jK#Q{P76MoM9g8$=qm?q_LG-qKg?`L+ zv%usd(FHcmZ)oQ0c7zm)f=?3C_l*a7dhlM_Yz#p`N5emx$Hn0vQC+ z_N6o1Nwp(O%Vx(*wuRB}0fV3*J`@tOT_ZLij28KbSc*cV#yfoz$OXQ zZ;wQKS>OoeJoT}@`DxZ{oVZwCeZfWz97>O>v*Z3r~0Ayw~ssojI9reV$c!RoXG%M~V}^0W3PXgl&^A>jW2mpUYY4?5Lcds%s*9|u0mrO?>X%2bwe0!b>u zP16m-t4(woH?5PWPNpTe))TV-f)d2t`pl~%Wu zDY0@fjvz=R2%vR7fvI%*+UKR7d~Ol^M|xY7c9e*w+@Xw>5AcPvis=%904MapnFZqxqZWvT6rnRX1`}RKKR5HH%ms;y6C+NZZC(5mStC z68drd?6jk{Pa3z^CF(8Vy#qqd9|iY}g!*}kic5v@FfEoaDZ`Gb$ar2xf;Mp4QLSXG zp`Em?&_1FQr`WcNKhCC)C{yRi*nq$`95x2b2zi!Mz+D-9VE=VC=#gi^w?^95;V`gNt;o8YY68ifRE`Y=1FO-+} zvrwcug8R3-SW&mw^@(;Z6;@=7WWzy@rx<;u`ij5EBppb?d8HDN@|#Y3B9BZV+aTX;(r)Nd%}Zc4{gn zvqpZ=#mPi=*A^33JQZ^><7uZFJzsm^s~l*mpB3_zEqOobf!(4}2s~Q3r4jWe=4k{r z`4vz^Vl7!fau9IR`LU=9p!=}zVo}%DQLv1`Lo-c>m65P^-_Lnwgul)UN%r!=h0Od6xZPQdwmDL7@`xLa z4X3hNtDJ*0#(c3M@}fkmtk5c_$#6SDizPDyqyhm9t0y(ys1?Rd+P=pukF13+kP{7_ zJlXi(J>cr%WJxwt;3za|%`za1N2^R~&rOz-K~p8WOK&bhj}@Q+d>*{#WM(Ng37&|M zv<8)QPVgZqa%!5Hv0sQ$gSQ^)^Nc#gU7MtRpH#AsD1xNu(aKaM7J^XEG+Ll%zICp~ z$3P+oV*459h_Lsll*D2MVTy(x5+?{n5+mOtscLEHF7+i%eWZwmmBTr&m-2b}67=E| zY-=zjywoBeD`~3SxZ&&SQ^9AIZa`VENt08OZi zrC=ssF!c+o|0Ti=WnO*vNO_G^=*;u2iw5(FB^7$->-2VuaeFd94GOl1Tt{+^Noz&M zEnd~@v5%WQ>bDC3CgUDg+bviSNqVOyw#L!{Kcipw7Ng4Do{(ET2`2OSg#C_;H z@>~jc^B2}QeRGJ39OthZW*C_|JXif7(Hk$Pj!bc}Yz4KKO8sI1huNs)hse9Tyh~^x@h;P# zq2ah)JrfBB0)6v*KL3p1G3MoUd1WToBKrx)V06lf-L8gqd49)O7RBo{XF3lQXGH9b&^EGwPGgk zXcl(BwW5S;@>&a&^S=ppJ*!Mie9xL~eZ|-5T6P&l=AQ|AO7pH|=W|PUq=v6k)iK}r zOe?JUUqPm}>=VpgsdJZV&9&?Rw|zT|B4foap4KFOC;LoW92wQ6$Q+~rQ!+W@4A-Y* zVUV=m)%bUw`*yk-ALiF@j7OBi$A#L{Ux7i6K}W5&{qXik4~6J>jS;si3NxhKIDWB0 z_0DSfL~SN!HkZ)6AXdgJ%4+A8;431$_xOztiV{qS-QaasV?q-(fFjO#@N6K1##0xwJj1nI2nnDz@RIy`Vb_Wqc~CPH0MkirvxLX4 zpx9`@ETxLrZPZgkc&2}How9*-m*$$TJ%N_VYjfNd=` z5|D#f3lH0V=9EcTN(Yq8JKfjdUBb=08hu`gZ(ar5%$2|)yzJ0o*^G9br?5u&VHM+l z51lZ|e#m&wo8_BV9aH{|A}Rl1q{7mCQDbM!KUY}+n;ahwYTIPx16ezD1XKE9& zG9>->LeQ{&zQfnYG;J#rO&d8^!yn|?UEcfo@s%Qgz1uAFfZR{XaWyXIB2*!Q zYo+<{hH6K_SRxY4Gm@WR=p4Q&>9w41JdNu2tm+4%ufA!$I;4E`^z&$K zi{Ty450(h{cdVqQ#X3OAOoOOG!;P9!zJG@|hs9!X55ILk0}(l5!fnYWB8mnm$@7Y}`jwYGHcqpWG5$)?KUlwd=*8TKXqEx15CM3- zGCPjy>+bUIld21p%8o@Ods>1Bw%?#13hzJf(9nnp;QHV3|~~%Z@lqUOFsjXA-&C`G3nqyWByPz6s`vG z3R8L+NT#T8@{Eta#&<-1a#U2vUTXvf=^N3{!K0rS+rB9WFnn0F3Xi<6~uWNNSbnLklg_Foi^O%oJ5srH!@ADE0jeDc-QzJu~ zDMN~`&l-6d$CrhxWIHkT;G!#?vietZMv-yux#|myTPA3y(sstqyj{^i1h{iKQSK~0L8CG)WN<{9kZqR|(;a~;O@1x7IK{1BDF+#6q49{>N_(!dZ_+B0%bF^k z#@#%ns!-me1TfsJR){WXE*J8qRGV%$=1GwTuMD(hkM6)8U6@?qiu^{g*)VF)xvVK! zZLs)4?oi4|3A&*aB578+#}!WyyVw+p*B2RQL`&?FR!&)<>Z5{17>A;QH7SO`)k`rR z;SP!s|FsCkkOvWp0lipq3cbMA$s`sK$~J-89VLUgHoLi9mPkc7!k>I$y&;566Q)2JI@T>dW*95NM-o)<|Q~&s?Npr#PNn_{0 zw{s*>=*??UKdz3xj-t1sEew!FE(E=gpJSnS{Cf($Wvif5g56n`Mh`g?qmkZ3{0_e3 zZ>O(4{HL%2edBPm7{gEvg4YOwOCtJw%4fM6e<28t-ZwJAXg!(T3r0p{TP2oe#FX0T z@sSKXzFlSIb(g@qD1WpwkxU&IDb<+O$fIQ6EKl22TvlX^*e@bxF*8NXJTC)FGbyik zBm3NH$v)p4$!6QC?FS-+-)gXNZpE?|Ng+@Z`L(&dO? zY{ltK4+_^SkA#;oo>PzRl<(;G^Optc7BMwEWHSG}{8RiSE&D`HoN4KwdYfj`FjT0R z2_?P>6->OBHaxX?tij~aGeR0f`PsPNlrBFnUt)<$`@S}jQ`KYE50!!UzyujQOtJ6~ zKPa)J5bM|Rd5vpAv-1MqK*TofDml&szNc@AXz<$4kbT3AoL2=zb$4B$Z+VVUB&Mt6 z;0m_Plz6TfxiJGI4Jh@nI)cJj#}d<&;cw zoHjb)+9!d6z`P@q6E-3yWj7!4 z8=HnIWCbHqX)dnon#dp*prFLp5vue@NQbGzCFIP!g?&C9hHEuHT`r$akA6C{&!>MuF}|1)`E;{+ ze}Ve6H9RlvR>PAF8hMP#D1HQ=jBGB zii8~DID|Vb*_0Ee_U?$Ev^QUgXlNSEj122t-yog8Lg~a)!pj=PIb3XpmYe7 zt0~_HlCmfy`v%faHX#+LLtFhm#r4J6p#r~Ab3gfQ{~*hzm>?g<1uzjA`w2VoinjbH z54F4HAXAe+|4dT$;s-myl3x;+B{xSe%hxOO(l(E1$C++m%|PGFBnx<%bk_hn_!)sY za1+IBUBR7k1XA2cCfl2{Yb1Wq;;SQb@i$jwwDN$l+7m^GZ=Mm0i8{qV2QOt5Cf;V= zd!%1mjEmI>%5mg(&xp$R`WRTJJojioC?|SG>9eC z!Zg%Nmgeza8DKTGZ=BWGTU@L{{u$R*EZw*w(v2=SR1>S0Qm6V*^cep?ecD}1G1{FT zY4@&3yE+%JNBLfyDbA#Mk)z}r4Z|bsSw3u)n)m;S)VNk4VaDUSHkkPmv~dfgJe)pm zVI* z5;9bJpqJTAm9lH+X_fr%k73NEAuj5SsIpekbU3m;T7vI15UNBb`3c59c`5Y$c{x52M^XS% z{C^7kf1=v8tkaY7?ZzW~n&FS98G>|%}?p0?aehrIcJ@oM*lW za0RYBz>h zRe@a9y56isYqL~m$PSrjK4LI4Md3W%S`{2H#G4LA?*wuwa6$Y|HF|WU7 zcpySsj1LE^`yX;&y^xm5j6k3AFPZOeiIi_M?`KH)bX7j5Px(KX@2`^gd!S5ZhPTiA z<>vd5^8V-Qy}i%-D)W6$9PekU_y4xV!k=rtf1URV{>#n#4(<_`B)cos=%bR~=up$h z=tuZ;E|ZN95HtzHuFhvIr;L9gtG9f1y%F5UKBO#A-Ih^FvN9?eBz%&xKV{leX%QSD z2#pfidY_k5kP)B=Oqt6V!Ex27V+-i~o$P|S4hgb0z_80Hc3_^XVIoiYd5}tZuEyI{ z8GBx!keeEAs>N5|INlWn#J7&gP3B=-;0&a#|3coZ8?)oFMuoU|jeXmcQt7Cx0iApt z2aszXX20NY99NBaB+hv3G|SqNTkQp{2`SrxP#AbuIu-0YJWG z0eEd}v#@Z<3b?CG;BX``ftwlyP8lq1HvWPX!whPvfEyOuigZ(W7S+-}4k_TGE!_Z% zD!>KAi~Q%WA#uK{I!^kx6=1C?Ge?StW)lfl$w--?q!=Z|<~S)kh;kN7sd3*xg)8Wp zazi&uTBvlm4qfD44ZI=Z51wMV`81AP5CNJPKHO+lY0p(r7a-|nZ5T@$CFWxg!=ucf zdJh!t-kr(ZVC3+iFU};&Dz2!PRY-5SU-;d93%Bg3_R@EKq45?E1lX5r(WsS zX1Mh_PjF2VF@NTJYIh*a=`&?|xXx6ToQZcQW(Y zNPEG~q@Y3J&(Ur_?S;#f;34C~5Ug=RT$MJ)U!@J*_GWjBm;gvVs6>ciZZMp%6p{po z{AyJ@WVEV%$%!7JWGCfUDVvRll`;EWwaPf$yV@zkj+8BQ#MCGj;JTfo4-K}Y6hWYT zX#@-F9W(L`7nh>eJL)bINrt|Sea&6&3jU0BD)vUKdf^BNIc@Rha8R<2GG5v7jr}xwLf<(n@+XxJq|U*)DOc z&y=gJ^Cw~iUzM?;N}CcFx-I_8ZZP4?ZqWASHHcHcnO;fy?ppR2*@X}djazz5s3$Xm z^^V5F;2QQRu5Xe8@P+2RaEPvD*P73gkd?s2oRsitc8W3O?Fe!tXfUs2{0<~&@fHd| z@5K2qUOR&yZL-~$8;N8WIHz3V9Ya-zqvceF)OO!7y}fqdj2Qf({r&%rv@ct4Klzvx zje*`kV?6p~x0WaI_$;zz^5uyAJo+F^TBpJ?JM?mAXa>25-NZz|H_^xw6Ws~f+Qe*q zYKc}*5^S%~2ZhQiv;>SewX5xz;%Va@`cx;x23tLCyj!2@QOuoowWm)uC&|Y)%}P*! z*U1gac}^dw4T7|5QxTFmL%D8$XsTN)cN*I`FY5(pGAvpvDKxxx0iz9R^bYX2ac&GkwO8KqiGo?YcfAOjvt%hj-l#YHM4e+shZ za{Q|n->KE#sXtYZ%uIV){_0OHRM+xXU$8{Gb&0;9LA$jOGDSW`+tWSV(7Y*{@&>e z(zRRD^#x@a=< z*@!I1+P(d(MH!V-^N;)*CKpc%m4C#;h!e`{4jzT9_$82B7_!gIKeG126B72EvtA_Z zB0cu#Q#?dt4`mfXxzm+?vPvHrle=T3)WVeL({hhwTe&;zD)-1))@)PJ~Wiu<2%|<4w54u0Gi4_;(GK%C~E1 zv`;*Vn@ek703Tml+&MA>knJi5k_uGuq|pf0Z92^kFG8Q$XyM~+RhM1HM8enS z)$Z%;pg4@ZtD#Nm@llCvJ54@%XO%uskR-?T)ozb*Wo2*+=qs5t&8rtn#> zKHX#6Saq5GnvnAvLEnj@O-xXMV?k?Qt3n#lGJ5n)Y3nU|slNB^K1lhx>&fKl>WI<$ zso$%*EP+qZJbjv6y9#WlU9VsSIqn(MaUuH%+g9HuR!t;{3HcA!$ZA6tY7LacW=p4D zDptS~B@Tdx7s<9Ya+^F3vT8fRvShLlxrkkBs;oQLvK1eLBa*|UDkg`?Zx5M>WaW@a!6GNUmWOwQ~B z)Ge|deHlRgFF<{s6ecSV^13#Og<4XK_+FWCO_xoQ%o0#rX!2j(1 zasYtE?3Y#V17~Ds`_eL)OhI@VZS^zu%M*wqzxaO1+B+$O3Bw`$=lM}TcW1eN6oTg{ z=Hze-BG+Ks+^Mw(qUQ_AXRe~kR639gI#FF6XI&>@TfEz~9FJvLP9=J^U9XMveZXo@ z=ieASs##X%ep`^LmyNP*8n&}M815-X=TlT@besEPx_&t!a?mV8g~s5j@B!CjYBx&= z<@w?jksh~1xX+);60I0OeiNBXfAuIXP1WLzeUZIrK&tFTQ>}ZGr2JKOqA$35VG0ms zM^Ym-Zg(~AgGmUkCj+kExOYdK*!ZeYf0A__u+xQf@=UurMMc_Ij~AyfNHCVJwj4>ioeq zLJ+e0;yg$Kqc-UrNYwcT77)3*8%>{^fPt<*tt|ZOS=B89?)z0bd z*$#S#bQqzFe5ACzu*~=>Vw;Q&iU||Ez#Oauw}G8$TSs&>|R+Dh$NfP}$lYd$K%MVQH zjZdoZjmoLPur0Wq9&Jkq?@h4DL2HzM*jD)g5&b42-YlO4E)dZG0gp(BYoFzl`Ha;| zHEz0nux_xvIjuu)8PSFnQ3t+7Z6jJh(EJ+5(qjV5yz!JwQYFvQ*QH4&uoNlHueWQ6 z-k!E@#9?{HvXSjpIwQfZN2v}7i%KR&={5s>M0F-t&rQ_}Mg>WsvJLpxCtw=LfZ%$; zHY+A5!=y7~7)O6_TMq;GAneR3y?FYwdodOWYx3qxsNR&i?9=qZnf3{NzyROsgDi6C z!^A#M~;fZ zH;;G8+YVwVLCoZUTPN3)EzbW75k<< zH2|1_a-Yor0F5$+NlG!>=mS$xR}X+ zE$c8Pn^~Y+BJE~=M+jow52_EL;xsAX^mk*)$n*OlBVR(swa2%dLg*wtUp51mMDPbY zVcBw1j6#mDxD_KHfdEFyK(DApUFn4>O5Eal^rc|S=v5;dy9&GCBm_X?cC9e8Hj%`C zgWAVsf*258`Um+S^~W8MNi6RsXGsjY7kMb%=e zoFZWK>a)<~j8VcMTyBF$ZLSr+_#wC}IL%BsFr`oghcD6=m#)fUiIEMTf77b$; zkEyGxek}U!{cp#9TlO2iZM+HDmQ+g;0iwXEm!%f#m7_q=mkSkw?&v8lGHirk*Vp5L z-roJ*_2^t{YRcF8#vlTRtV5AZ)`2LkvsfR9NNh5dxN z-xrW77E2CEal*!*gcsw(`o`cJwj+N+>8MvuQ&isLtDFhV6q8p;rz8;?Qd|vAxNKiy zAej^G03$I89xPD`7<(`g6nm`KgbOe5pg_zNVgY8S7nT-DOy0i?GfO;6iDsoLMD{ma z%9e0g0Ra(lDneaSKQ+bDAwezW1N>t!nCatSZ8QoqQ?xX4u->KaYj}@~ z;+K4cb-izR63@AMtk}oC?`ENXRz)H;;QAk^_!VBm4At> zYqoWMzK1&)M6bxU$#2~7jIw`j_#I;`@CIAwV)wRQ&7~aS)KXxARJNtUm}E;?*0mw9cA5{EaFNSt{73pXD815ltX85gCdxU2qvT4iExQ>9ic?#uOfybrgi(e(e=v; zd>ID?5mtBC9zHc5Oh4s28H*rN{eH_cV*TcyZom;B zZW00LS-<(2l0Gdz)8;*~^zl-5Cpx(P)e}7t^YrwnEpryM8snJ!lkzj^Rtu(`?0#rH zqU`0gKz^oB&c(3djju4@R*t4Dm7^&S4Cqaxlu&M5J|7DViLsJ@ahxJyr^(VJl3)+1 zz~-ndP39-gKlKx`MMcv<@rfN6L7)5yc>XArgdF1Q-X~X6ifj2CA$=U_`KHJvQ~BrR z-zcUnDdZG|XO=9#ko_#4W^y|QvIep+P<~0{M1r3JawAdP`&nt6#=jn+Cr!5t<|izQ z(35&~e}43R>c38?G)_a2pY@Z;X@;3}=VnG|lVmIU)7Ts~uSNRD4|5l}N#A z2cX36Li^n-3X_CM;ZFD0MGB@;I`!3mBMmc!nWS~9(wwPS@{A9z6A2jUY#e4{r+>=w zhWE7eGi5^NQ#lc-Bu_8uH)q+lW>;zXrO*JZDr#OcGw_HfLqH7aj|5KKV_=@R5v&>#gb zilummGhTanC4n~O*pLawsHAVUm$}PQ*@MTJS)mk#PJt6Ovq6dEja}8XY^})dPRa;% z9r&kk=|9W}wI5V5H>nKJ$#4Am)(BEvpzb&G{*+DXKg|er@mfZU{bmUw^5NF}os<|# zRs^AIhAdv;g^SzzUl+O62JzWJm6AlNp?>pwYv)HAzHj4|o?SKk0XdRdtNIDgbx zEezzz`J)J@#py4SKkEFqaHq$WW`dF$ii4DyKdSEz#KdKr$Co}EQ*_fNokJNh-I0)8 zKm;%coAwZPv0wBg2+VT+9x>7AE*4pT5R>--r0{ww{+Fs z?>={X?B7TG*}ro>Ghe_CW+G%iDPKV4zfbfRU;G@vu||ZMcb1aE2Mb`|#=uzoi|`%f zJY8N^ND!_2UIhuJlh8J}*6sU9HwSC%-_6b)sXa`!ByEudCSs->nnPl~MTc5ln1<_o zMe-3y&muPL|4BZAgYXik^zl~s=ze0Tf9q8!?&r-%a2ojj^rt@!{=E4TruGNlZaCC_ z;QJ}c)z1MRDr`p5;bd6$26B^HkD_x5Q6R5z9Y45{n!{t`^wEb@{$1C`gwMog4Ep2K_u+1B6_X6i@{lFQ)!anf!wii6$ z4IcCgybr^Q3cS7Tp0+(RKIzxqJk=#b7EUcuW*3ntS0grQ?LKY#$9MV`IRkZCt;2Vu zZQ{rA0Yaw~_quBkqz`WmBNY$`)r1U2pX${J8Caew?iiEOHG+vv9fR1SxjeI}OeUsj z`o~(Wo9XHLgI>E&UnHjvAz(LPqi+$gj8}?_jc<#hl>nJ|1VkJH$as#CjtT#`F9d&m zFZ|yA;I9@YVN$Y|o2*Yw!7YS|iNNXYT5ZCK{I5HZsuSicNsODzuzFtkvLdp*!@*ck zm2=Q;dQi*TetG~EsW=7rsK0a64+euES}U&pghQ$bGK|LsMsahfOx8F8^>reSAPc{p zuVB*|dp`oJxtM!%{N|nlg7~Re@oB{!Mw_xrtcXhgrDIMvWskVaOfj%IM3__hZ`@|e z1w%^rVd(M-(QnF}Y1>R&>Ahkry*u1B(zaV)m~4! z@g%2MqO{US0@i91$&-f3S0vc&OS>pcB%rlPg=L}AT}9<8*zKC#Je3H!PKa1h$bNgs zP6T5|StQ=AREmvv`)ME@MKX~r3|iRNLLxN`pId5=QM1rU6Xo$*R4(q2hvX1jL!R5w zq;O&8hv+8+Eqe4K<9)JWP))_f-On{Z$u77pZAZ*3nS<|ZCkXMp1pv<|ND>hV*h`{^ z!eZl%odUlK|3kelmC7+(+1{egoY9@+`jd*4(1SGbP%8QL0)na=8L3CsA{Y%Y1GO`=o z{Qu5Ba>-LNVW-VMvJ*cMI2s(bqWMP}Zc>vKn}6i5l;S+VxN{Vard5f}Kk@=+SwSz( zG;k3AP5zO8%;xh<)v5VMy5=ar_{OREN2XROw20&qiR2%trZFr3$e+JQZG;PS)yh9I zLe+`pA2I2fehNKXx~~CF*YrXsXTrpNtRVtP-f+kt3Mu>Df6T=e);Mzq?N>55zL&Kr z9|w}e6@SyJShtRi;m(n^jTSKzCt)&xOKO=B>;d>jr0q6KciG6!5^(}~`p4eM3270E z)`>3;^Pnc-^z|T4ByJ#od7K`GvRSQcgR*UavaSF8jVKCNxS8*+w{_gOVQ!%|#c90w z1no|d6<$ajV*+{?7x}e&0}O+9Z#{oygEz8XqEdv?{ZvLuh+U(+H~f2e2fYi)o!)LT zZ$$!^18!TEsis~T-7oT9Fb~sAi-gM1I`F889a@tD*(A6)+5ss*E2h6bkNn2P7!C`1 zmO5|jnQPl&`$!Vw5XiRD-bozxI9)-d|3iA9hh#eaWyZ8FNm_73EfA9cipN(k0n|#} zCJcLRrS9GtgA9hG9ar!tppA4=x<|}#w?z!S(j`R<(>8?~WnBDLU+BH*0AylH+A&GH z!&uskI6TCJtWR{?wxR>q4~NVFRV2~&Plfwk)tCgC(DOko^Cb#)sl(QSizO_wBHPJR>8Xo09mwRX5lBUr$-@ z;x_~Tic!cSJc@hy*Rj)`b+>BdAwCWNTCG0(+59UT{bY-Wo#KS2?E0pYALNJ!IA>BpN z^*Fc3Y|dQ54`2S)$%m0bvG6gYKQGS44&f8DJW1l%j~~DwzY&i#yxedp;E`(O5NuaH z@8r->Zgg*!PB}2#C$OR%BXSA!u|+Nx=j*wCUipp&zF8cxA0O#^6}`tM!*)J?AI8(F zGJcGH#GWLS+jG68seAlh7S-yzggA5<<&qmfq9N-PCoFkrbrUayRCO4>$h%w2ra}ev zlxU*^3C0f(&`3eG+{7EBxzTf{VM#;OobhI1?dECP%`>%|XQ9(HUwqR7NR*m4=W93n zwVO+j4@HGTCp%0sKjJ`idL~$WZm{OO{4+{LatrJ#mKf$OM{rcTp15Fet3Fh)4$Np` zxqgeE+%@m3u+(tEzV?8mRdSPWq1^bOU1*RSD#db+#1<1wFy$*?K^|BTk*%QYDc7&H zD?{QWMmA3ExJeRM^N2}x57=JnCEg;9CpkifwKIQuxk3jKf4yaJtwlyFyj&Mm0+;IF zcjzDV+b~HoekKqBxZtBAqxw7irTy#;t6ypaXc2ghsJ{`Rejd zqEn>gs}s=ILOwo+y!Q0?v>5z61)t8bKK8lriSG3)uWL9;%WZIU;XMOm<#nG{-or6I zaA^XpI#d|{UZ#xC~J|%y_z|Wn(;P}I8{2)1!zhKqc|2%&I@a;MkK9YbySGDs< z1f$^zjTY>1*3M>RU&?cW*v)W6b{^R|?8d5f^v`^*%t++v0OPl&sf4@fzN54x zlC%EY>giwNzfaz8gZuK$lTsCSj%c7>r6mH>36 zum=myY2H~X>cfxDW&IiGp!ctmARH(F#rq{1dJ~#Civ}dXS~PYiv@}IxTYEU)Wvc-8 zk`6nYY;_V@RTgxDaW#>DjM9rhzd^yZUWpD-r>a%Q{U2{{10Gd%E&L~B2m?fClo7`g zb!bN$P1I;o4NPhi2_eYWOg>ThYNa|-YB8Astbo8IF(=2dw&iMDE!x($^p&gjtrfLs z6Tl>jd`VTT)~eUmjX_1N5-TO|Z|!|%k^r{1_kW*1&qL;%efHS>}Z9{wGS?Jjk$MfP1j7#)V8n9+1Firb+ z1i%s7gNhLMJDC1LL3XI`F?`V`dXtaIJB1;rCN&qf!fu!z+MAqJ#V+P}hyDQX(4oC} zhb}iUP(ugt4qfgxKJUuY-l4UZH#I>vi5+U#sni5TvkUoKqTOl|#|33Y?aLz=QAf7v zS;1puEwC=pb1=vFNEO)2ennORwAyR3Qqkhj649Zlb#jN>bObyp&o?w)!W+g zt*HyD{htn%$D00>9H&3EDPaXC7<$D*>$l&pX-Ll4i1fmW-`hQTo1Ub(9c^?MxRoG;U^+v-1DwMBF{^O-C9#C`Z#z$#&-lquW5W=`AXO1XNkwQg+?dk+S3Bo*@*6?j*_lkL2BVqF<|e%udh}x0rZ&h1A&X&~EQX|u zJLWaWs^l7D8&Wys>0MIJ5y-K{X-V7wus%Z$_Y)3$`l9RSPo`ExGN(UlYtm=SlEA0~ zK^*R2dpW2G>o1Nqxx3e~G7Q$nNOVx9-&Z^wXMUqE;g-*XlSy(a+SfZQ!ddhT38 z^q5PCqbJW?LYVa;61TzYrRS*ivJwVa*2~vrvCQaTy(C>7G&rzi?*G79G7mq&K3>`{ zw-dvL3f`8Z$#Kl>M9mv8ypwy(?ZjB!OkrZ>YjRmQ>~ue`a#n&FQP@1Km3a{uIj zbSigJXy4LiqneVstY>{|{qI0S^2vMYrZ|nY?-VvDK3prH<3k2bSn;5TK3!JN)JS-d z$WKmXk3o_86??2iL>-C9xw&ILUiI)xk(LK6hh(JW0c_Mapz;F$pmlwn4J+c#*Fpfe z-_Y)+FSLAoRQe6>og%YlZ>^*S9r!+;=XIj#rTvjI*CC_9LQNfK-6?lD>?r z_e0M#20@k5WbHc{$=W*uE$`rk>+N9v!Tg?NX~vAuF01jdHLMB8+(7F03@>A80A8OE z=>c&PguB*Gog<3^d)`WH3C@VWMQV<3*u&`F)qtRq_3aPe$o>8c%+72MgiQ>z!|B+0RTNx#``+KSqgraL=+udc&Pscxj7SQy)Bop%UO*Q{_!c!Da zP9QB)jq9Qhe|nh|lZNDgF*~BpgX>^XfI>v=@I6h~pqxA9XewETsS6(G>xy7h0*_>n zA|5(9ONCX_CbPH%yUXln1*>PP$lD0UlhdNgFEX%cWp<`LZLwXmBGD1xOk8D8TEbyl zELI^wp60DAsYG{f@_vyygSB3JkM<`cC{@NmQX88U)}>1q_x6 z*#(~ao4O+jdwc&J`>6ZfS{=quTUaEiT)^OHlpjC3;Ikph^Mq zeQ`09$-58z5M0*TIGUHHvpx{lzhax=izoNbpn0tTOBuUo>F7QCiDiTpk-Tznvq#$B z*M&MmJrLVG%8O@+p!A&@{GLP(6&U?bqK)d-rsY)IHOL?7l1L0ns~hUWYGyl_BMQxz z`R&VdvkpqmF%khbFR^7wnRLcZKzcGf4cNUF;6Rv&Q$OMZS;a_b@qoRi2IK@< ziD%p5Q9#V|5p2RXXA3pjg$Xu@dL}(x}uZ)`h0y;qtF!RAVIla*x zi3JyeB2nFizyBuPgwN}(`p;vNy6D#Gyp$y?lesY;V zajA9=d4S1ddBPHPXKOb9`omq72e2avCTA+nr287w`R03y0yIi!L0Naz%4fbHp|~~J z$2v&~DQ*q^jW>14W+SIqvrS&PZGZ-sa{1L8yNoWCh2D!@n2h_4{{BFBelKdF>F&%M z+?`$VeRb*{^Zhv8X)#~eaTd$O_4^i-XT1S40&S+C|Bs7pu>>bAo+bDBjQ#m8=s-U<%SGZTe07(u`irTm zDH&E(CV#40&{!M|2QzxVE*=2>albAyIaP%9SglSuwm0cw>Mo(_Ec~!~_t(19#zXv1 z=nwU+G+j7{kpxr*#ym14b*+>EsuA_LQ%3jxoBY)lU1H9c5 zTSlXN`~T%}ms>L#^bJMQ7DT?@kwd>Hbu=E}$SGTc--wj}o-@r=D+W*tUTNanTxWPM7;h zy4;}|>HZ!5wI0rYNcNeItc{J&nxcov0XUEVg5O~N1o*q)o$?kk)>aqqlw z9di%u8|r`(QsKq{{7E_l4D#MYM_HI>ccQaQ-3v7zB21=Hn6?b^q>~c|mOG@Ih^1`+ zw%&eN$MMA9b<4*vU8_kGmxNC(l^{7@&m(TnBYTUUv3<#o8we{4`RVL+7yYqps_dKb z*8odUoq8$fpE@23)U6?oHA2pK%TrI562oC{jeWOnf+T;0d)FG3odjze#LcFSIZ#*8 z%Q(2$PLPJt*!q94bhy3Dn|}~jfrOYXr9Rt)?-a+@vs4TwJJd^ zts@n!pk>-~MR3G8dmpn1xtynV=#4lP%UR}x!0otS3~O(F5Pyy#i$vweE7O!K{u5xh zg!N!^vy19*-dt^Et2?QN%?4Mf}IBO>ObRTZ|X zYMmKne;)gn%Z`dyp!KtjKFX!=5udVIi9c>f9i@?l+@MzLD@ZZ2g3&q2_7Lkur$g6TX>H?Eu;xDe^7O|>rUP)qAp=O_Q!^-2- z0NO~<_jv_v^KwzHaMlk8DLo>_Q+>>M)*RSK_fsrK1JQBiGzPLh$`A8B-QKU`|8QW@ zp;F@n0^ix)taHhns*C>YL3(eb#-w+ zJwoD=n!4)3_afksboMc9ly^glW4q+!zZltHf3=M)u8TQ z&o>b_yBh3+^;(*HcedUDh-d6p9Sjdyucja_xZi(JW%5=X)?C$2z}l^zw*@4su8Tz~ zJk{ic0Vu8J%N+S~;1cK&Zl=Y$UhNW%Lg4mAtzMD=Ri5GEXi=>`z6A&^P-8eWIuL@u z7}OI^4R@?P>WvaaOOtE&$EgIVsd2ZPmxX?KwUz;eC$^mCt*z1Bg%e8A^Sl#(!D!o;sGm0NjYvPQ-8FLV!Bg~yd z-O`R#ge65t8&p&27~g-uclBkS=~B_lEgg*~d2acbG%j~Ayu77X9$|dhu|!=i04p)e zhG&UD@6{c-6vOe5?9lrJc5+ldv{#)WRX6K>Mhb3%N4opxT z)$8NfW?-J$!f(~|L~TGaCVS1AZ9-nQ_~bIZK&E7}FMp?Ik+uk_7Z)?ccV=I~uaR-w zC2k+Yt3xgq>@(aA_38|l!Qs1D7ZPfFIlqlLOd5UmBo^@|C9=9uq0h(|Bcb0*sjw_Q z`pY`U+A5PH_i=g6e*y8)twG$maDFK!s*j&S$%pksCO2y|{_y93XnBNO8d<;cC4;QB zK_YK{evbxB851@N=U}B$<MqD+z=kjk=lwS0VNFVPkEER{fhC7wqndLG$V^r@Zu zgyts@@pdYA(bmgmfqy0O*MPOZ{?Kk|`d;d{_o<1}xX5#8CF@9jSK=i>+ra2f3TW%@ zcr7zOJ%wfJazI1t#r6zW4a+o)H2qHG9romKW#}MXC~gX}9z+OduQOC0tfe`@cafi{ zA6`VnqnATCBk-&}T@J{MoKv)jsPKHUPI@IC2UdC=cPBK^x{<^gK5>1{FAm0tj&YvC^XF9vemVhu)8t^$f`nhba^I{jAbLyf%B}LWP}<8`)dv}434|>CwBme zUb~P0AbBFKfjIumpa<)w`XNoVAds(6EX9~OzoOqJbB;o#%WiOC$vRo&+1^MsD%K1w zSN(`JE>VVs(KSn-L}6*E5QtDd9eO7@r}Bn45bDfh;|8jAShbJ{E2e8SgrV02y3)BGz2f$Hu>q7P4T zPxB8XVKUJ-zazuLp&z5^%FIj+sQs5|K-aqx6PfR8B_9Cp%E%lv@UIQz168ErpGr4h z)k@N`^e8#fv`{f&bbP9PlPmF+jCeU+eiX7JtlsHDn&JU2dF{F&4s!E%VlXjo3-&b# zDa3!{`z)xP_Lk5rZ+v8E3fBm|GFT2Pq(-Je3-pe)RjlClwab6?OM+*ULYOp8ke#{NhI=$e~H#v9QR{9}~+50eN zuiAfyF?-4G3;lgrEorYd%^ccGjYHM0(BK(zXHbjz)=E= z8N42cwvmI^lAW7F(UjyMJS_boMLP7arXTM1$SKXw#ZSZ^2Jw2#TkIpfp!N4ElEzC0 z&bOVcIQA1pDho1JiDE@ z*hkh$#KtIdnf&Q^2`7cZ?syJYKF*ieJ67f(2NE{*1Dja3T#*nq$x9=rQ1|ET%iQg= zXwC-ir$kBX{N&s3;xM<6kD~ZPc%Uc zMa~Gm6RaYl=0K?G)govKJjOgzxwWiJ!dB2s8pm||Ea!pt-KyY!(tZs$m4n-V1$t4h z-sX~PaQhWUw=edwTH)KrxAz~8NM=}(0pUlXF$asD zV?#JMUnS?{_a~!rp_nTBwkC8^b{A19C~V3C?ZmhJvSM?&%pS?7{7(HP4NCpMthhio z7F3}`yej;R^>l(>Pe_x}%jqP+!g-wZO_E+&sh2@bM7Tn0u$Q~qXN_+bzp}3QG$Y@t zH}^@&Z{^q@8J?oXlmFrE?XIyChYhd?@Dr!8yWQ;W&4%6f+Fxm(GM?SzX~83?5CW`p zBr?;esFIMeeab0>ihapG6h9L&vlvpKgM=YPgL40nEwJ(wPGw{`5)*T|!F8m|)68+p z_rRyOSC0S8^1`9`HS=VjC|w~gP&m^6JV-^q-T2PQw#E{#CmVhy*B(9i(^xyp8p93N z2>Zmr$xaEjHd){TJh!yr(*yM}R+Du9bIjgGZ_zac7y z<@=rFJhG<`?T~{jUXYxY>vvAQsVPJJ@~4|p%lSC*mRRmjq`#jJcFDyko?v*&K{m*b z$bN{=7S4ebx5M*WRo=F+k680^lznzlP_0atmz&sp0}&6xAjRp!f- zo*7Pb7`gIWQ_|h+y6N zZvK`!#0-Y#C~K%A&q`i!=L}NMy<#gF{jyN1iTbCm)?d6Nr>0u}YWq@yPs!N0VWE#S z&cc`YSDs_^CpI0nb2bger_7nQZ#yO)|A+Cf-n46hMSB7>SP;89CR7i&!X ziNa7U6*JHKH=%79tbHwh= z_>-6MHvmD+OM@`5zm_zc9$?c-J4DN)Ov`mVp2?#g*b7%Pu%}|>q;2QX-j}?-iePE# zj1i#tcJ)Op`h)@RqdrL$%Xj5Rx0O-HCFeQOKmO*HRkW~vqtD@-+ zLWw=i$RfFzE|WzOx{Mh>f}CNWNsE)Ij~(>uJbqh0V!*dueM?&Dqi+p#Vl9%~ln}c( z!q?aJXw;}a>1=G48I% zAAW{!*Sb_yYBQkZ{VY~Vy*kVx4pi3=t)ZNLI9Do|v^?>Y3)H)pZr~MlfM!JWwuAWP zeKo$1s+PJ!;$qtu8=vUFU~!kai;Wh(>SUI(k7Ff}o^QEfJc!a=!A60jo}sBjs1f&J zGNVG2{9@CJt|xS^8#2n)wWlvxd`nHT{BXFwL9IilGl7$`BgyMsOFBtFR{hERAPCA4xv7buiLH=8~)N+iLLZZ@B8Tz zr`uzO*7r9!DcUWkGABD8cyF)Gbo zFr01zy6t2eK237c6*>W(w7mN-0L!GJJ{ehjJgwl^%grdVtkEzZb#yQBjtd@Ta>o8F z;hDxzmkb9b=+XP%mm@KheZEyl5CNA%6b8+q=1&ZccEkd!v1a-M=z5O^+|6EV& zsSKfaWb(csaLIt*)o`-c3uwe^c&d{D42Gz*0*QDed7H$yR^2 z4HM(^n-DQav3nA90(qiGHu2gyql@5Q@=vNNHW$AWMm>?=kmn) zyW}|a5tHL0$pNy`k35{VO_j;>Zed)UAn>mpgCa_Q!*xG_(`J_*DJ(28%3Ki3nGknD1q%d8mZ z?A3$3v#$ps4XReaXE1)}-DoczYzGGaPB;r#;Q@Q%=e0dC2b{ltL*IvL=j=hmA}P*D zp4l&A1mI**c-iB0z(v6&ht()F*Vy$;W{i9K zGH-tVs&q(Tz5kTiw+X`?s`52Xvo+7nrDeITS!bRuu{HC|(|JaH>&=YRT23YmKnwuh zvjD(O)wcQwjNQDgWNtv&Yj-;Ld?&Y2RqK@8yVRBB)}X(EHJWODX@2w}iiM40;4M&y zuo^$4bi$O*rF5!$6#BtHp=w>|0C*`gW}2L73cYo+6q17hx9IuNDRi1C z^nZ0Bfs-z@aG;P1O83?dDfDKW9^6VPbcY-+Y<;+hZX1C`L-bMphNBz#Yho!>I%Rv* z-MX%e)9<(H_p^u8-Dc_@FLhTEY-Q=h=

        U_z}U#4Wdrd75v3{H(;1zDtK*`fI;u6 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 literal 0 HcmV?d00001 diff --git a/win/par2/x64/COPYING b/win/par2/x64/COPYING new file mode 100755 index 0000000..d60c31a --- /dev/null +++ b/win/par2/x64/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/win/par2/x64/README_FIRST.txt b/win/par2/x64/README_FIRST.txt new file mode 100755 index 0000000..8a8cad4 --- /dev/null +++ b/win/par2/x64/README_FIRST.txt @@ -0,0 +1,917 @@ +=== Table of contents === + +--- Introduction --- +--- About the NVIDIA CUDA version --- +--- Installing the pre-built Windows (32-bit) version --- +--- Installing the pre-built Mac OS X version --- +--- Installing the pre-built Linux version --- +--- Installing the pre-built FreeBSD version --- +--- Building and installing on UNIX type systems --- +--- Building and installing on Mac OS X systems --- +--- Building and installing on Windows operating systems --- +--- Building and installing on FreeBSD --- +--- Technical Details --- +--- Version History --- + +=== Table of contents === + + + +--- Introduction --- + + +This is a concurrent (multithreaded) version of par2cmdline 0.4, a utility to +create and repair data files using Reed Solomon coding. par2 parity archives +are commonly used on Usenet postings to allow corrupted postings to be +repaired instead of needing the original poster to repost the corrupted +file(s). + +For more information about par2, go to this web site: + +http://parchive.sourceforge.net/ + +The original version of par2cmdline 0.4 was downloaded from: + +http://sourceforge.net/projects/parchive + + +This version has been modified to utilise the Intel Threading Building Blocks +library, which enables it to process files concurrently instead of the +original version's serial processing. Computers with more than one CPU or core +such as those using Intel Core Duo, Intel Core Duo 2, or AMD Athlon X2 CPUs +can now create or repair par2 archives much quicker than the original version. +For example, dual core machines can achieve near-double performance when +creating or repairing. + +The Intel Threading Building Blocks library is obtained from: + +http://osstbb.intel.com/ + + +The licensing of this source code has not been modified: it is still published +under the GPLv2 (or later), and the COPYING file is included in this +distribution as per the GPL. + + +To download the source code or some operating system builds of the +concurrent version of par2cmdline 0.4, go to: + +http://www.chuchusoft.com/par2_tbb + + +--- About the NVIDIA CUDA version --- + + +*** The NVIDIA CUDA version should be considered experimental. *** + +There is no guarantee that the NVIDIA CUDA version will perform correctly. Even +though it has been tested on test data and correctly worked on those files, it may +not work on your files since the GPU program is new and may have unknown bugs in +it. Caveat emptor. + +The NVIDIA CUDA version of the par2 program has been modified to utilise NVIDIA +CUDA 2.0 technology, which enables it to process data using the processor (GPU) on +certain video cards. Most of the processing is still performed by the computer's +CPU but some will be offloaded to the video card's GPU. The amount of offloading +depends on how much speed/power the GPU has. After processing all of the data for +par2 creation or par2 repair, the program will display, as a percentage, how much +of the processing was done by the GPU (or whether the GPU was not available for +use). + +There are two factors which determine how much processing the GPU can provide: + + (1) the amount of video card memory. Some of the memory will be used for the video + display, and this is partly determined by the operating system. For example, if + the OS/video-driver performs drawing acceleration using extra video memory, less + memory is available for CUDA use. For example, on a 128MB video card running + Mac OS X 10.5, only about 22MB was available for use by CUDA applications. If + the parity data totals more than 22MB, only a portion of that data can be + processed by the GPU. Of course this is only an example and your system will + probably have a different amount of memory available for CUDA use. + Because of OS use, it is recommended that for Mac OS X, a video card with at + least 256MB of video memory is recommended. For Windows XP, a video card of at + least 128MB is recommended, and for Windows Vista, at least 256MB is recommended. + + (2) the video card's speed, which depends on both the GPU's speed and the video + memory's bandwidth. For the GPU, its speed depends on both its clock rate and + the number of stream processors it has. For example, a GeForce 8600 GT has 32 + stream processors compared to a 9800 GTX which has 128 stream processors. + Memory bandwidth depends on both how wide the data path is between the GPU + and its memory (for example, a 64-bit wide data bus will transfer data half + as quickly as a 128-bit wide data bus), as well as the clock rate of the + video memory - the higher the clock rate, the faster the GPU can move data + from/to the video memory and this in turn affects how fast it processes data. + +Hardware requirements: + + Requires a "Compute Capability 1.1" device, which is any 200 series GeForce card, + any 9 series GeForce card, and most 8 series GeForce card EXCEPT for the first + generation cards such as the 8800 Ultra, 8800 GTX, 8800 GTS, and certain Tesla + and Quadro cards: search the web for "Compute Capability 1.0" devices. 1.0-only + devices are not capable of being used. Cards such as the 8400, 8500, 8600, + 8800 GS, 8800 GT, 8800M GTS (mobile), and 8800M GTX (mobile) are capable of + being used. + + Mobile variants will also work, for example, 8600 refers to both the desktop and + mobile versions such as 8600 GT (desktop) and 8600M GT (mobile). + +Software requirements: + + The CUDA runtime/toolkit may need to be downloaded and installed by you because NVIDIA do + not permit redistribution of it with third party executables. If you need to install the + runtime, please search for "NVIDIA CUDA toolkit" in your favourite search engine. + + On Windows, it appears that the CUDA runtime/toolkit ships with recent video card driver + software from NVIDIA. You can verify this by checking for it at this path: + "C:\Windows\system32\nvcuda.dll". + + On Mac OS X 10.5, check for the driver at this path: "/System/Library/Extensions/CUDA.kext", + and for the runtime library at this path: "/usr/local/cuda/lib/libcudart.dylib". Mac OS X + users will probably need to download and install the CUDA runtime/toolkit. You should be + aware that the default install options for the CUDA runtime/toolkit does *not* install the + required CUDA driver, so it needs to be installed by performing a *custom* install of the + runtime/toolkit: be sure to check the checkbox for "CUDA.kext". + +Limitations: + + [1] only available as a 32-bit executable for Windows XP and later, and Intel Mac OS X + 10.5.2 and later. Due to time constraints, other systems such as GNU/Linux are not + available at this time. You are most welcome to modify/build/test it for other + systems if you feel up to the challenge :) + + [2] "low end" GPUs are "slow", ie, they do not contribute to much of the processing. + For example, to create 128MB (256 blocks of 524288 bytes) of parity data on a + 128MB 8600M GT in a Core 2 Duo 2.2GHz machine, about 2% of the workload was + offloaded to the GPU. For the same 128MB of parity data, a 256MB 8600M GT in a + Core 2 Duo 2.4GHz machine offloaded about 5% of the workload to the GPU (mainly + because having more memory allowed more data to be processed on the video card). + + It is expected that "high end" video cards will have even higher GPU offloading, + but without access to such a video card (yes, some of us can't splurge on that + top-of-the-line video card!), it's mere speculation as to what sort of performance + will occur. :) Maybe someone will send an email with some answers :) + + [3] sometimes the CUDA runtime reports little or no available memory on the video card + for use by programs, which will result in this version not being able to use the + GPU for processing. This problem is probably related to video display acceleration + by the OS, in which case, closing windows and/or applications will probably free + up video memory. It may, however, require a reboot to reset the video card (you + should do this only as a last resort). + +Licensing: + + The source code for the CUDA-specific parts of the par2cmdline-0.4 program is provided + and released under the GPLv2, which is believed to be compatible with NVIDIA's licensing + of the sample source code/libraries in the CUDA SDK, from which the par2 processing + code is based on (but IANAL). + +Building: + + If you're interested in building this version, you will need to set up the following + development environment(s): + + Mac OS X: + - 10.5.2 or later + - Xcode 3.0 or later installed + - TBB 2.1 or later installed + - NVIDIA CUDA 2.0 toolkit installed, including the driver by performing a custom install. + The following assumes it is installed into "/usr/local/cuda". + - NVIDIA CUDA 2.0 SDK installed. The following assumes it is installed into "/Developer/CUDA". + + Windows: + - XPSP2 or later + - Visual C++ Express 2005 installed + - Visual C++ Express 2008 installed + - TBB 2.1 or later installed + - NVIDIA CUDA 2.0 toolkit installed. The following assumes it is installed into "C:\CUDA". + - NVIDIA CUDA 2.0 SDK installed. The following assumes it is installed into + "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK" . + + The following build instructions assume that you have already successfully built the non-CUDA + version of the par2 program. If you haven't done so, it is strongly recommended you do so first, + so that any issues relating to the non-CUDA version are fixed before you try building the CUDA + version (which has its own set of possible build issues). + + Mac building: + - copy the par2_cuda folder into /Developer/CUDA/projects + - open a Terminal window, cd to /Developer/CUDA/projects/par2_cuda + - enter 'make' to build the par2_cuda static library + - cd to your folder. Enter 'configure gpgpu=cuda && make' to build the + par2 program. If it fails to compile, check your Makefile for incorrect paths, fix, try + building again, etc. If it fails to link, check your Makefile for incorrect paths, fix, try + building again, etc. When the par2 program is linked, it will assume that the + libcudart.dylib library is in "/usr/local/cuda/lib". + - copy the libtbb.dylib file into the folder (or wherever you built the par2 + executable) + - run the program. If it fails to run, make sure "/usr/local/cuda/lib/libcudart.dylib" exists. + - if it fails to find any GPU resources for processing, check that you have installed the + runtime correctly including the custom installing of the CUDA driver (which should be at + "/System/Library/Extensions/CUDA.kext"). + + Windows building: + - copy the par2_cuda folder into "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects" + - open the "C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects\par2_cuda_lib.vcproj" + file using Visual C++ Express 2005 + - build the 'release' configuration (ignore the warnings about import linkage mismatches - they + are due to TBB's requirement of the DLL version of the CRT whereas CUDA programs are supposed + to link to the static version of the CRT - this causes the mismatch but won't cause crashes or + malfunctions). + - open the par2.vcproj file in the folder using Visual C++ Express 2008 + - build the 'releaseCUDA' configuration + - copy the tbb.dll file into the ReleaseCUDA folder in the folder + - run the program. If it fails to run, make sure cudart.dll is in the %PATH% environment variable + (there should be an entry for "C:\cuda\bin"). + - if it fails to find any GPU resources for processing, check that you have installed the + runtime correctly. + +*** Just to repeat, the NVIDIA CUDA version should be considered experimental. *** + + +--- Installing the pre-built Windows version (32-bit or 64-bit) --- + + +The Windows version is distributed as an executable (par2.exe) which has +built into it (i.e., statically linked) the Intel Threading Building Blocks +2.2 library, built from the tbb22_20090809oss_src.tar.gz distribution. The +Windows version no longer requires a specific version of the C runtime +library because the par2.exe executable is now built by statically linking +with the C runtime library. + +To install, copy the par2.exe file and then invoke it from the command line. + +To uninstall, delete the par2.exe file along with any files from the +distribution folder. + + +--- Installing the pre-built Mac OS X version --- + + +The Mac version is an universal build of the concurrent version +of par2cmdline 0.4 for Mac OS X 10.4 (32-bit binaries) and 10.5 (64-bit +binaries). In other words, the par2 executable file contains both a 32-bit +x86 and a 64-bit x86_64 build of the par2 sources. +It is distributed as an executable (par2) along with the required Intel +Threading Building Blocks 2.2 library (libtbb.dylib). The libtbb.dylib file +is also universal (32-bit and 64-bit versions for x86/x86_64 are inside it). + +To install, place the par2 and libtbb.dylib files in a folder and +invoke them from the command line. + +To uninstall, delete the par2 and libtbb.dylib files along with any +files from the distribution folder. + + +--- Installing the pre-built Linux version --- + + +The Linux versions are a 32-bit i386 and 64-bit x86_64 build of the +concurrent version of par2cmdline 0.4 for GNU/Linux kernel version 2.6 +with GCC 4. It is distributed as an executable (par2) along with the +required Intel Threading Building Blocks 2.2 library (libtbb.so and +libtbb.so.2). There are separate distributions for the 32-bit and +64-bit versions. + +To install, place the par2, libtbb.so and libtbb.so.2 files in a +folder and invoke them from the command line. + +To uninstall, delete the par2, libtbb.so and libtbb.so.2 files along +with any files from the distribution folder. + + +--- Installing the pre-built FreeBSD version --- + + +Both the 32-bit and 64-bit binaries were built using RELEASE 7.0 of FreeBSD. +It is distributed as an executable (par2) along with the required Intel +Threading Building Blocks 2.2 library (libtbb.so). There are separate +distributions for the 32-bit and 64-bit versions. + +To install: copy libtbb.so to /usr/local/lib, copy par2 to a convenient +location, eg, /usr/local/bin, then remove the distribution directory. You +will need superuser permission to copy files to the /usr/local area. + +To uninstall, delete the par2 and libtbb.so files along with any +files from the distribution folder. + + +--- Building and installing on UNIX type systems --- + + +For UNIX or similar systems, the included configure script should be used to +generate a makefile which is then built with a Make utility. Before using +them however, you may need to modify the configure scripts as detailed below. + +Because this version depends on the Intel Threading Building Blocks library, +you will need to tell the build system where the headers and libraries are in +order to compile and link the program. There are 2 ways to do this: use the +tbbvars.sh script included in TBB to add the appropriate environment variables, +or manually modify the Makefile to use the appropriate paths. The tbbvars.sh +file is in the tbboss_src/build directory. To manually modify the +Makefile: + + In `Makefile.am', for Darwin/Mac OS X, change the AM_CXXFLAGS line to: + +AM_CXXFLAGS = -Wall -I../tbb22_20090809oss_src/include -gfull -O3 -fvisibility=hidden -fvisibility-inlines-hidden + + or for other POSIX systems, change the AM_CXXFLAGS line to: + +AM_CXXFLAGS = -Wall -I../tbb22_20090809oss_src/include + +and modify the path to wherever your extracted Intel TBB files are. Note that it +should point at the `include' directory inside the main tbb directory. + +For linking, the file `Makefile.am' has this line: + +LDADD = -lstdc++ -ltbb -L. + +thus the tbb library is already added to the list of libraries to link against. +You will need to have libtbb.a (or libtbb.dylib or libtbb.so etc.) in your +library path (usually /usr/lib). + +Alternatively, if the TBB library is not in a standard library directory (or +on the linker's list of library paths) then add a library path so the linker +can link to the TBB: + +LDADD = -lstdc++ -ltbb -L + +For example: + +LDADD = -lstdc++ -ltbb -L. + +The Mac OS X distribution of this project is built using a relative-path +for the dynamic library. Please see the next section for more information. + +The GNU/Linux distribution of this project is built using a relative-path +for the dynamic library (by passing the "-R $ORIGIN" option to the linker). + + +--- Building and installing on Mac OS X systems --- + + +The Mac version is an universal build of the concurrent version +of par2cmdline 0.4 for Mac OS X 10.4 (32-bit binaries) and 10.5 (64-bit +binaries). In other words, the par2 executable file contains both a 32-bit +x86 and a 64-bit x86_64 build of the par2 sources. +It is distributed as an executable (par2) along with the required Intel +Threading Building Blocks 2.2 library (libtbb.dylib). The libtbb.dylib file +is also universal (32-bit and 64-bit versions for x86/x86_64 are inside it). + +The par2 32-bit executable is built for 10.4, and the 64-bit executable is +built for 10.5, which are then symbol stripped and combined using the lipo +tool. The 64-bit executable needs to be built for 10.5 because the 10.4 +build of the 64-bit executable was found to (1) cause the "fat" executable +to crash when it was run under 10.5, and (2) not be able to correctly read +par2 files when those files resided on a SMB server (ie, a shared folder on +a Windows computer). Combining the mixed-OS executables solves both of these +problems (see the 20080116 version release notes below for details). + +The libtbb.dylib file is built from the TBB 2.2 tbb22_20090809oss_src.tar.gz +distribution. It was built for the x86 and x86_64 architectures +and will therefore run on all Macs that support 10.4 or 10.5. + +Normally, the libtbb.dylib file is built so that for a client program to use +it, it would usually have to be placed in /usr/lib, which would therefore +require administrator privileges to install it onto a Mac OS X system. The +version included in this distribution does not require that it be installed, +and is therefore usable "out of the box". To implement this change, the +macos.gcc.inc file was modified with this line: + +LIB_LINK_FLAGS = -dynamiclib -Wl,-install_name,@executable_path/$@ + +Other required changes are: + +ifeq (intel64,$(arch)) + CPLUS_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 + LINK_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 + LIB_LINK_FLAGS += -m64 -arch x86_64 -mmacosx-version-min=10.5 +endif + +ifeq (ia32,$(arch)) + CPLUS = g++-4.0 + C_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 + CPLUS_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 + LINK_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 + LIB_LINK_FLAGS += -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 +endif + +To build the executables, configure needs to be invoked in a particular manner for both x86 and x64 builds: + +cd /build + +../configure --build=i686-apple-darwin10.2.0 --host=i686-apple-darwin10.2.0 CXX=g++-4.0 && sed -e 's/CXXFLAGS = -g -O2/CXXFLAGS = #-g -O2/' Makefile > Makefile.tmp && mv Makefile.tmp Makefile && make && strip par2 && mv par2 par2-x86 && make clean + +../configure --build=i686-apple-darwin10.2.0 --host=x86_64-apple-darwin10.2.0 && sed -e 's/CXXFLAGS = -g -O2/CXXFLAGS = #-g -O2/' Makefile > Makefile.tmp && mv Makefile.tmp Makefile && make && strip par2 && mv par2 par2-x86_64 && make clean + +The par2 executable has been symbol stripped (using the 'strip' command line +tool). + + +--- Building and installing on Windows operating systems --- + + +This modified version has been built and tested on Windows XP SP2 using Visual +Studio/C++ 2010 beta 2. It statically links with both the TBB and the C runtime +library and the included project and makefiles are set up for that. + +For Windows, the project file for Visual Studio 2010 has been included. Open +the project file in Visual Studio and go to the project properties window. +For the C/C++ include paths, make sure the path to where you extracted the +Intel TBB files is correct. Similarly for the linker paths. + +To build the 32-bit version, download the source tarball from the website and +open the sln/vcproj project files in the win32 directory with Visual C++ 2010. +You will also need to build the TBB in a modified manner so that it statically +links against the C runtime library and it itself is linked as a static library, +instead of as a DLL. To do this, use the modified TBB makefiles in the +windows-tbb directory. To use the TBB makefile, you'll need to use GNU make, +which can be built from its source tarsal. + +To build the 64-bit version, install the "Windows 2003 Server R2" version +of the platform SDK and open a command line window for a 64-bit Windows XP +build environment (in the Platform SDK program group in the Start Menu). You +can also use any non-Express version of Visual C++. +Change the directory to the par2cmdline-0.4-tbb- directory. Move or +copy the Makefile in the win64 directory to its parent (ie, to the +par2cmdline-0.4-tbb- directory). Then invoke the 'nmake' command to +build the binary. The result should be an executable file named +par2_win64.exe in the par2cmdline-0.4-tbb- directory. This can +then be renamed to par2.exe if so desired. As for the 32-bit version, you +will need to build the TBB in a modified manner. More details are in the +win64 Makefile. + + + +--- Building and installing on FreeBSD --- + + +Instructions: + +[1] build and install TBB +- extract TBB from the source archive. +- on a command line, execute: + + cp -r /include/tbb /usr/local/include + cd && /usr/local/bin/gmake + # change the next line to match your machine's configuration: + cp /build/FreeBSD_em64t_gcc_cc4.1.0_kernel7.0_release/libtbb.so /usr/local/lib + +[2] build and install par2cmdline-0.4-tbb +- extract and build par2cmdline-0.4-tbb using tar, ./configure, and make +- copy built binary to where you want to install it (eg, /usr/local/bin) + +[3] cleanup +- remove and par2cmdline-0.4-tbb source directories + + +--- Technical Details --- + + +All source code modifications have been isolated to blocks that have this form: + +#if WANT_CONCURRENT + + + +#else + + + +#endif + +to make it easier to see what was modified and how it was done. + +The technique used to modify the original code was: + +[1] add timing code to instrument/document the places where concurrency would be of + benefit. The CTimeInterval class was used to time sections of the code. +[2] decide which functions to make concurrent, based on the timing information + obtained in step [1]. +[3] for each function to make concurrent, study it and its sub-functions for + concurrent access problems (shared data points) +[4] read the Intel TBB tutorials and reference manual to learn how to use the + library to convert serial code to concurrent code + +It was then decided to apply concurrency to: + +- loading of recovery packets (par2 files), which necessitated changes to some member + variables in par2repairer.h: + - sourcefilemap [LoadDescriptionPacket, LoadVerificationPacket] + - recoverypacketmap [LoadRecoveryPacket] + - mainpacket [LoadMainPacket] + - creatorpacket [LoadCreatorPacket] + They were changed to use concurrent-safe containers/wrappers. To handle concurrent + access to pointer-based member variables, the pointers are wrapped in atomic + wrappers. tbb::atomic does not have operator-> which is needed to deference + the wrapped pointers so a sub-class of tbb::atomic was created, named + atomic_ptr. For maps and vectors, tbb's concurrent_hash_map and concurrent_vector + were used. + Because DiskFileMap needed to be accessed concurrently, a concurrent version of it + was created (class ConcurrentDiskFileMap) +- source file verification +- repairing data blocks + +In the original version, progress information was written to cout (stdout) in a serial +manner, but the concurrent version would produce garbled overlapping output unless +output was made concurrent-safe. This was achieved in two ways: for simple infrequent +output routines, a simple mutex was used to gate access to cout to only one thread at +a time. For frequent use of cout, such as during the repair process, an atomic integer +variable was used to gate access, but *without* blocking a thread that would have +otherwise been blocked if a mutex had been used instead. The code used is: + + if (0 == cout_in_use.compare_and_swap(outputendindex, 0)) { // <= this version doesn't block - only need 1 thread to write to cout + cout << "Processing: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush; + cout_in_use = 0; + } + +Initially cout_in_use is set to zero so that the first thread to put its value of +outputendindex into cout_in_use will get a zero back from cout_in_use.compare_and_swap() +and therefore enter the 'true block' of the 'if' statement. Other threads that then try +to put their value of outputendindex into cout_in_use while the first thread is still +using cout will fail to do so and so they will skip the 'true block' but they won't block. + +For par2 creation, similar modifications were made to the source code that also allowed +concurrent processing to occur. + +To convert from serial to concurrent operation, for() loops were changed to using Intel +TBB parallel_for() calls, with a functor object (callback) supplied to provide the body +of the parallel for loop. To access member variable in the body of the parallel loop, +new member functions were added so that the functor's operator() could dispatch into the +original object to do the for loop body's processing. + +It should be noted that there are two notable parts of the program that could not be +made concurrent: (1) file verification involves computing MD5 hashes for the entire file +but computing the hash is an inherently serial computation, and (2) computing the Reed- +Solomon matrix for use in creation or repair involves matrix multiplication over a Galois +field, which is also an inherently serial computation and so it too could not be made into +a concurrent operation. + +Nevertheless, the majority of the program's execution time is spent either repairing the +lost data, or in creating the redundancy information for later repair, and both of these +operations were able to be made concurrent with a near twice speedup on the dual core +machines that the concurrent version was tested on. + +Note that it is important that the computer has sufficient memory (1) to allow the caching +of data and (2) to avoid virtual memory swapping, otherwise the creation or repair process +will become I/O bound instead of CPU bound. Computers with 1 to 2GB of RAM should have +enough memory to not be I/O bound when creating or repairing parity/data files. + + +--- Version History --- + + +The changes in the 20100203 version are: + +- modified Makefile.am to use "ARCH_SCALAR" instead of "ARCH" to avoid a FreeBSD name clash +- fixed a 64-bit-only bug in reedsolomon-x86_64-mmx.s where a size of 8 bytes caused a segfault +(forgot to test for zero like the reedsolomon-i686-mmx.s file does); this bug only manifests in +the 64-bit Mac, 64-bit Linux and 64-bit FreeBSD versions; reproduced by creating/repairing a +file of exactly 16384 bytes +- updated to Intel TBB 2.2 (tbb22_20090809oss) +- the Mac build no longer includes the PowerPC variants (I don't use a PowerPC Mac anymore) +- the 32-bit and 64-bit Windows builds of both par2 and the TBB library are now statically +linked against the C runtime library to avoid the problem of requiring the installation of +the correct CRT library (DLL). As well, par2 is statically linked against the TBB library +to allow just one executable file to be installed (i.e., just par2.exe). + +The changes in the 20090203 version are: + +- fixed a bug which affected the Linux and Mac versions whereby repairs would fail if +the file being repaired was short or had one or two bad blocks (because the async write +to the file's last byte was failing). +- on Windows, the program now stores directory paths in par2 files using '/' as the path +separator instead of '\' (as per the Par 2.0 specification document). Note: directory +paths are stored only when the '-d' switch is used. +- merged the sources from the CPU-only and CPU/GPU versions so that both versions now +build from the same set of source files using different 'configure' options (Mac, Linux, +FreeBSD) or project files (Windows). See above for building instructions. + +The changes in the 20081009 version are: + +- added support for NVIDIA CUDA 2.0 technology, which allows the GPU on the video card to + be used to perform some of the processing workload in addition to the CPU on the mainboard. + See the "--- About the NVIDIA CUDA version ---" section in this file for limitations, + requirements, build instructions, licensing, and more information. + +The changes in the 20081005 version are: + +- asynchronous reading of a large number of small files would sometimes not complete which + caused the program to hang. Fixed by reverting to synchronous reading (most of the benefit + of async I/O is from async writing so this change does not affect overall performance). +- some operating systems have limits on the number of open files which was easily exceeded + when a large number of small files are being processed for par2 creation or for repair. + Fixed by closing the source files as soon as they are no longer needed to be opened (which + is determined by counting how many data blocks the file provides for creation/repair). + +The changes in the 20080919 version are: + +- added more information to a few of the error messages to make it easier to specify + block counts, etc. when using the -d option. +- redundancy can now be specified using floating point values instead of integral values, + eg, 8.5% instead of 8% or 9%. +- added the -0 option to create dummy par2 files. This was done so that the actual size + of the par2 files can be quickly determined. For example, suppose you wish to fill up + a CD-R's or DVD-R's remaining empty space with par2 files of the files filling up the + disc, then by using the -0 option, you can quickly work out whether the par2 files + will fit and by how much, which in turn allows you to maximize the use of the remaining + empty space (you would alter the block count number and/or size so that the optimal + number of blocks are created to fill up the remaining space). To determine how much + CD-R or DVD-R space you have to fill, find out how many blocks your blank disc has + (using a burning program such as ImgBurn [Windows]) and how many blocks your data + would occupy when burned (using an image creation program such as mkisofs [all + platforms] which has a handy -print-size option). ImgBurn [Windows] can also tell + you how many blocks you have for filling if you use its 'build' command. + WARNING: be careful when using this command that you don't burn the dummy par2 files + that it creates because they don't have any valid data in them. Remember, they are + created only to determine the actual size of the real par2 files that would be + created if you had not used the -0 option. +- added MMX-based code from Paul Houle's phpar2_12src version of par2cmdline-0.4. As + a result, the repair and creation of par2 files using x86 or x86_64 MMX code is about + 20% faster than the scalar version in singlethreaded testing. Multithreaded testing + showed no noticable improvement (ie, YMMV). The scalar version is used if your CPU + is not MMX capable. MMX CPUs: Intel Pentium II and later, AMD Athlon64 and later. +- added asynchronous I/O for platforms that support such I/O: Mac OS X, Windows, + GNU/Linux. This results in a small (~1-5%) improvement in throughput, especially for + repairing. Unfortunately, using async I/O causes a crash under FreeBSD, so the + pre-built binaries are built to only use synchronous I/O. +- first release of 32-bit and 64-bit PowerPC binaries for Mac OS X. The 32-bit version + requires at least 10.4, and the 64-bit version requires at least 10.5. The 64-bit + version is UNTESTED (because of lack of access to a G5 Mac). +- first release of a 64-bit x86_64 binary for GNU/Linux. Tested under the 64-bit + version of Gentoo 2008.0. +- the 64-bit Windows binary is built using the tbb20_20080408oss release of the TBB; + the Mac, GNU/Linux, FreeBSD and 32-bit Windows binaries are built using the + tbb21_009oss release of the TBB. The tbb21_009oss release does not support the + VC7.1 runtime libraries on Win64 so it was necessary to fallback to a previous + version for the Windows 64-bit binary. + +The changes in the 20080420 version are: + +- added the -t0 option to allow verification to be done serially but still perform + repair concurrently, and for creation, MD5 checksumming will be done serially + and par2 data creation will be done concurrently. The default is to perform + all operations concurrently, so if you want the new behaviour, you will need to + manually specify -t0 on the command line or build your own custom version of + the executable. +- if the realpath() API returned NULL, the par2 files created would end up with + the name of the first file in the list of files to create par2 files for. Fixed. +- no longer includes duplicate file names in the list of files to create redundancy + data for (which would otherwise bloat the .par2 files) +- now displays the instruction set being executed +- updated to use the tbb20_017oss_src.tar.gz version of the Intel TBB library. + +The changes in the 20080203 version are: + +- the Linux version wasn't working because it was not built correctly: the + reedsolomon-inner-i386-posix.s was using an incorrect include directive. Fixed. + *** WARNING *** + A consequence of this error is that par2 files created with the 20080116 Linux + binary contain incorrect repair data and therefore cannot be used to repair + data files. The par2 files will need to be created again using either the + 20071128 build of the Linux binary or this build of it. + *** WARNING *** +- tweaked the Makefile and par2cmdline.h to allow for building under FreeBSD. +- first release of 32-bit and 64-bit binaries for FreeBSD (built under RELEASE 6.2). +- updated to use the 20080115 version of the Intel TBB library. + +The changes in the 20080116 version are: + +- the initial processing (creation) and verification (repair) of target files + is now performed serially because of complaints that concurrent processing + was causing disk thrashing. Since this part of the program's operation is + mostly I/O bound, the change back to serial processing is a reasonable change. +- full paths are now only displayed when a -d parameter is given to the + program, otherwise the original behavior of displaying just the file name + now occurs. +- Unicode support was added. This requires some explanation. + + Windows version: previous versions processed file names and directory + paths using the default code page for non-Unicode programs, which is + typically whatever the current locale setting is. In other words, + file names that had characters that could not be represented in the + default code page ended up being mangled by the program, resulting + in .par2 files which contained mangled file names (directory names + also suffered mangling). Such .par2 files could not be used on other + computers unless they also used the same code page, which for POSIX + systems is very unlikely. The correct solution is to store and retrieve + all file names and directory paths using a Unicode representation. + To keep some backward compatibility, the names should be stored in + an 8-bit-per-character format (so that older .par2 files can still + be processed by the program), so decomposed (a.k.a. composite) UTF-8 + was chosen as the canonical file name encoding for the storage of + file names and directory paths in .par2 files. + To implement this change, the Windows version now takes all file + names from the operating system as precomposed UTF-16 and converts + them to decomposed UTF-8 strings which are stored in memory and + in .par2 files. If the operating system needs to use the string, + it is converted back into precomposed UTF-16 and then passed to + the OS for use. + + POSIX version: it is assumed that the operating system will deliver + and accept decomposed (a.k.a. composite) UTF-8 characters to/from + the program so no conversion is performed. Darwin / Mac OS X is + one such system that passes and accepts UTF-8 character strings, so + the Mac OS X version of the program works correctly with .par2 + files containing Unicode file names. If the operating system + does not deliver nor accept decomposed UTF-8 character strings, + this version (and previous versions) will not create .par2 files + that contain Unicode file names or directory paths, and which + will cause mangled file/directory names when used on other + operating systems. + + Summary: + [1] for .par2 files created on Windows using a version of + this program prior to this version and which contain non-ASCII + characters (characters outside the range of 0 - 127 (0x00 - 0x7F) + in numeric value, this program will be able to use such files + but will probably complain about missing files or will create + repaired files using the wrong file name or directory path, ie, + file name mangling will occur. + [2] for .par2 files created on UTF-8 based operating systems + using a prior version of this program, this version will be + able to correctly use such files (ie, the changes made to the + program should not cause any change in behavior, and no file + name mangling will occur). + [3] for .par2 files created on non-UTF-8 based operating systems + using a prior version of this program, this version will be + able to use such files but file name mangling will occur. + [4] for .par2 files created on UTF-8 based operating systems + using this version of this program, file name mangling will + not occur. + [5] for .par2 files created on non-UTF-8 based operating systems + using this version of this program, file name mangling will + occur. + +- split up the reedsolomon-inner.s file so that it builds + correctly under Darwin and other POSIX systems. +- changed the way the pre-built Mac OS X version is built because + the 64-bit version built under 10.4 (1) crashes when it is run + under 10.5, and (2) does not read par2 files when the files + reside on a SMB server (ie, a shared folder on a Windows + computer) because 10.4's SMB client software appears to + incorrectly service 64-bit client programs. These problems only + occurred with the 64-bit version; the 32-bit version works + correctly. + + To solve both of these problems, the pre-built executable is now + released containing both a 32-bit executable built under 10.4 + and a 64-bit executable built under 10.5. When run under 10.4, + the 64-bit executable does not execute because it is linked + against the 10.5 system libraries, so under 10.4, only the + 32-bit executable is executed, which solves problem (2). When + run under 10.5 on a 64-bit x86 computer, the 64-bit executable + executes, which solves problem (1), and because 10.5's SMB + client correctly services 64-bit client programs, problem (2) + is solved. + +The changes in the 20071128 version are: + +- if par2 was asked to verify/repair with just a single .par2 file, it would + crash. Fixed. +- built for GNU/Linux using the Gentoo distribution (i386 version). +- updated to use the 20071030 version of the Intel TBB library. + +The changes in the 20071121 version are: + +- changed several concurrent loops from using TBB's parallel_for to + parallel_while so that files will be processed in a sequential (but + still concurrent/threaded) manner. For example, 100 files were + previously processed on dual core machines as: + Thread 1: file 1, file 2, file 3, ..., file 50 + Thread 2: file 50, file 51, file 52, ..., file 100 + which caused hard disk head thrashing. Now the threads will + process the files from file 1 to file 100 on a + first-come-first-served basis. +- limited the rate at which cout was called to at most 10 times per + second. +- when building for i386 using GCC, this version will now build + with an assembler version of the inner Reed-Solomon loop because + the code generated by GCC was not as fast/small as the Visual + C++ version. Doing this should bring the GCC-built (POSIX) + version's speed up to that of the Visual C++ (Windows) version. +- for canonicalising paths on POSIX systems, the program will now + try to use the realpath() API, if it's available, instead of the + fragile code in the original version. +- on POSIX systems, attempting to use a parameter of "-d." for par2 + creation would cause the program to fail because it was not + resolving a partial path to a canonical full path. Fixed. + +The changes in the 20071022 version are: + +- synchronised the sources with the version of par2cmdline in the CVS at +- built against the 20070927 version of the Intel TBB +- tweaked the inner loop of the Reed Solomon code so that the compiler + will produce faster/better/smaller code (which may or may not speed up + the program). +- added support for creating and repairing data files in directory trees + via the new -d command line switch. + + The original modifications for this were done by Pacer: + + + + This version defaults to the original behaviour of par2cmdline: if no + -d switch is provided then the data files are expected to be in the same + directory that the .par2 files are in. + + Providing a -d switch will change the way that par2cmdline behaves as follows. + For par2 creation, any file inside the provided will have + its sub-path stored in the par2 files. For par2 repair, files for + verification/repair will be searched for inside the provided . + + Example: + + in /users/home/vincent/pictures/ there is + 2007_01_vacation_fiji + 01.jpg + 02.jpg + 03.jpg + 04.jpg + 2007_03_business_trip_usa + 01.jpg + 02.jpg + 2007_06_wedding + 01.jpg + 02.jpg + 03.jpg + 04.jpg + 05.jpg + 06.jpg + + Using the command: + +./par2 c -d/users/home/vincent/pictures/ /users/home/vincent/pictures.par2 /users/home/vincent/pictures + + will create par2 files in /users/home/vincent containing sub-paths such as: + + 2007_01_vacation_fiji/01.jpg + 2007_01_vacation_fiji/02.jpg + 2007_01_vacation_fiji/03.jpg + 2007_01_vacation_fiji/04.jpg + 2007_03_business_trip_usa/01.jpg + 2007_03_business_trip_usa/02.jpg + 2007_06_wedding/01.jpg + etc. etc. + + If you later try to repair the files which are now in /users/home/joe/pictures, + you would use the command: + + ./par2 r -d/users/home/joe/pictures/ /users/home/joe/pictures.par2 + + The par2 file could be anywhere on your disk: as long as the -d + switch specifies the root of the files, the verification/repair will occur correctly. + + Notes: + + [1] the directory given to -d does not need to have a trailing '/' character. + [2] on Windows, either / or \ can be used. + [3] partial paths can be used. For example, if the current directory is + /users/home/vincent, then this be used instead of the above command: + + ./par2 c -dpictures pictures.par2 pictures + + [4] if a directory has spaces or other characters that need escaping from the + shell then the use of double quotes is recommended. For example: + + ./par2 c "-dpicture collection" "picture collection.par2" "picture collection" + + +The changes in the 20070927 version are: + +- applied a fix for a bug reported by user 'shenhanc' in +Par2CreatorSourceFile.cpp where a loop variable would not get +incremented when silent output was requested. + +The changes in the 20070926 version are: + +- fixed an integer overflow bug in Par2CreatorSourceFile.cpp which resulted +in incorrect MD5 hashes being stored in par2 files when they were created +from source files that were larger than or equal to 4GB in size. This bug +affected all 32-bit builds of the program. It did not affect the 64-bit +builds on those platforms where sizeof(size_t) == 8. + +The changes in the 20070924 version are: + +- the original par2cmdline-0.4 sources were not able to process files +larger than 2GB on the Win32 platform because diskfile.cpp used the +stat() function which only returns a signed 32-bit number on Win32. +This was changed to use _stati64() which returns a proper 64-bit file +size. Note that the FAT32 file system from the Windows 95 era does not +support files larger than 1 GB so this change is really applicable only +to files on NTFS disks - the default file system on Windows 2000/XP/Vista. + +The changes in the 20070831 version are: + +- modified to utilise Intel TBB 2.0. + + + +Vincent Tan. +February 03, 2010. + +// +// Modifications for concurrent processing, Unicode support, and hierarchial +// directory support are Copyright (c) 2007-2010 Vincent Tan. +// Search for "#if WANT_CONCURRENT" for concurrent code. +// Concurrent processing utilises Intel Thread Building Blocks 2.2, +// Copyright (c) 2007-2009 Intel Corp. +// diff --git a/win/par2/x64/par2.exe b/win/par2/x64/par2.exe new file mode 100755 index 0000000000000000000000000000000000000000..0650433eec84842ec69c2bd10b1402779f357f83 GIT binary patch literal 515072 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

        Hll%UU=2M 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¬r)+%GG)N_w^-TrbO7*RwB- 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

        DQO-)kods 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 literal 0 HcmV?d00001 diff --git a/win/unrar/UnRAR.exe b/win/unrar/UnRAR.exe new file mode 100644 index 0000000000000000000000000000000000000000..7c4bac47201d879fd14cd7e9bd1f05b7fbe41e4b GIT binary patch literal 246272 zcmeEvdwdkt+5gP$CRxamS!98rL87i2Ow`Dt1`;qp2#66kw++h83#QxDTf=U!n!?7} z4LcbohDs1yOR1N>*ixkxLr@4CE=jlu2wt#Qi`v?=E?5x7q$2zKK4*4wLHqvtem-x1 zfBgb8bFR;M&U2pgJkNQ~nc3U#Y7&fsAeeAPqk_3@>`r#i`-}7MlefK={(8Heed+$%L_CA#U!-vuf?kG)v@Zm-GUpHjP zV0#R7>y+R9?p*rr?)dd_^_1?@h<{w|?EV{`U(G4(ewN1zyZ?#ju}|B&zryoe`mXLO zoG-sdKm7xut8T@Z@I1mT7UuDC6pcU&-t$>JbE*lQ4k=R}_T z^(_cn5j>73QG>z=Cg4GTL@)lg5h46v^RNkY%&+4GsVr6C&)x?wzH7KqSj0mnVdf(| zF!1Ix35!w%q3L6TkTx)9K+I`GYyDGz=XgT(U;JI?x&KiQ@>04`i14Dm_I5(Alr9K& zUst{89?w03;GT*!>U#m62k`9omk)wmrxz2}?M6m6I0!fk7ZE4*{pAZn=(_5~)%PJu z?<*RtM&z3Bl*_-a`u+zVM!}g^A|EsmuEO)#@025~{{P?qA_dekyJ=j=H?hQ}p7zda zm?ipprh8L;j~SMFFY-NRT;R2A6od7_2L)ll4wK;PxyO4YGON8~ka?MRln4MIraoX(yI1`b^yI3Bp;3TPl!W`!7H$v&=s-Jq|P>} zh34F@8i#tQ{WC*_R%=MlJy>HA37Jt;n9$Szs>$EP+jaKoq3S^?T9s zGsgNy`Irw|U5lq2N|z4{B~JA~M}fUeWM3WzR*l3J>T1p*FH>oCEtOS@>^Aj)Qf5zO z^G6_&qKGKGh@uzaRTW-U?oN`P_%Adsx4m$;Ab6#~&k?Cq>(?PxnOpyJfb@)V*AD@L z*OsA+a>qy)TYN7n>@r7w+))2A%H>JbKghE$xzE@33S!wy?m{;%2VKoyqyT^*+_`YU{JHY3oPKkKI9#pEwg^HX zy^~3=zeBRSHrDm4ZetRsy`` zU6yg7@C=CKswAx~8^cNzNW~Ne(J?cRA*!rh1wic8Z=zAaxg=*T@s;Gi7;IHqT8iR> z-V%gxGNRkTk3t1|-3+c`G)*3`r{zZCT(zSaBVP-ys~?T zC|h>~%+TeC5`P5tNR0vD@5{TsL^ECQodM2b*Xuak9OG@zgg|uZjq*2XKh2hF?Y1#X z$Ev$CcgmqOUrq_6+oNKs*W!EBQ0PtcJ!+ieNhU^{k=s-IyU2A_f@T^6c?Cr3dG`tq z^-dYD6~w3~Vo;mOKuT_-GJ@9@IO!Qw&YndF(LGRZ2oxA5M_v?vdY(_uL&YaBBh`A& z`<$84S}~H39qet$V{ceJ8O>Cxjd^(ZKE9<=YS~c6!>J^B4 zu692$1jA8Kj6u{2M><)D`$!BnHULV)q0nbW z-^XHbwL-D3Lt$i5q5+9=+p{Pu1RGW4NzLuS)hiGPHfp?LLs#gt#85a11yRS>whm?O z!PQUlBE)Mo&MHxtvYQ(PL0dYq!fhP_RG)DI)e818jlv$a1E zc8u7g055kxCIy<1v}F?}wpPzd zk^2k8g$C=yq27!AhoQ)v;>2Rnn?j1L-QYh=iY$`A)feeQ9N58LS4~2($_}x z7d*pTsY8_kJ~~v4`XQ=~oKaTmYP7fnjPl1f!9NFBu8v^fKCoEiM!DPL&DKS~=uMBq zywum$1*}I`{|n$n5U#ud5GhUJl!=L1PMJ6dvnMM>=nWmuLB2M^Oz>U?DoAhb4pYHyCUAZ^m zJBr)C65|HNt){3hQ$vB>94r_b?bYHj;3Pkxk8`J(Yb=>lObWu`eP2hT$`n%^3tgW> zzDiE^wu#T<&O{nmwbpLwEJTkmqYKSEWrisbsu@f|pdLUXMg@pdnrEmgsUwUbXK@M3 zOClJSUW4L0?H?Q1KIC_IfB9{>Kz^s|^1I=g55P96$DUm!xO|_8%r=_DxHriW3S*`S z>Qa;cn9j9t{X<(QYNkt^Y>Kf@@Iq91Qv%04F}r6vm>D8B6<3;?Qc+%vF&|HzWOJVu z1;^n^rR=AIF=~uzGsN6NbIp)U^!0#~jqdF@Y?yMkbT#HzN{2}j)XCZ%qIRp$kTe5m z^U)_k)GJ|sJIe{S)PydK51jQ}0n^1sl&pnl(u*F$K&+j?7YmEgIM$g&wl_H{UMA<|hTtUI>d2k~I?FgzJK*JJ8V*%vgPR`FR zr+S(hyGj3gGr1l=OjV}b#`So^og^|X3oxSKXNW8^bi?Bzf@ykyAI-$`MRqe+KO1&& zJ~Ayp_c&#LhY<$ct1Gy`P8N0)rJtUO4Fd8B7BztetL2XY4sDXCo&AOer8#+g~Gn1iqN&TL2V!$C@fnjJJ z`C6h;b_-C4Dti}zq2qshHy(0$2oQq?vNiBk7fh<5XY0uduzH94LsH=HnB6fWRr3D{ z5e&}AUK{q8uwkFkvu|9|g!aa>Ypw%pVKzIp74|s^ApfAlB8U@rqMxWM*w0-A~CcEbJ>NoQ#{Sd)<1<_pzz&@%gaoH^z_c~2GBs- z`~Z-9SQlv(K(B=T{xlb951Z7aa^h(XjM%%9s|HU|Iu<46AV=?_MDou;j!vykWW}j`-{}n zm{h2v<*ega&YGPWut40W$|e2WJN zvI3Njt;V4OY%Ko`LRxD~hja#l>79wKv@9HpH7R62ExndrgW$_+&^h%@wz3-`3wVJz(P!V!*8kgv*u zYssn)t|bdDxRxYoa4k3C*OCbzTuTO>zMNCW1lMxQeJxq;!L@66jt4C(YsqkqnTKo1 z9#z(oZQ5Bs6S+xXTV-t#LY?*bxRaPu>SG1(`~a4^K%@8JLLum8=0@SO(9@!4kc-s|-2PEJbmNxtkG>8#jpRAW-Mj4a z+QDig4N-2_k`el{A$M=>^~(mUeDRQbsOAdyi6KDd@@a8N;4bEpAig>qRR_}`?pAQY zKr>gsXSSTCoZNZ}6HfHnTrM`Q7E+AOqq~a@$3uOR7uiBZ47`ZMi;U8XeDSy_^qRrF zog~|XGiwZV1=-o�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 literal 0 HcmV?d00001 diff --git a/win/unrar/license.txt b/win/unrar/license.txt new file mode 100644 index 0000000..afbdc87 --- /dev/null +++ b/win/unrar/license.txt @@ -0,0 +1,34 @@ + ****** ***** ****** UnRAR - free utility for RAR archives + ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ****** ******* ****** License for use and distribution of + ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ** ** ** ** ** ** FREEWARE version + ~~~~~~~~~~~~~~~~ + + The UnRAR utility is freeware. This means: + + 1. All copyrights to RAR and the utility UnRAR are exclusively + owned by the author - Alexander Roshal. + + 2. The UnRAR utility may be freely distributed. It is allowed + to distribute UnRAR inside of other software packages. + + 3. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS". + NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT + YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, + DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING + OR MISUSING THIS SOFTWARE. + + 4. Neither RAR binary code, WinRAR binary code, UnRAR source or UnRAR + binary code may be used or reverse engineered to re-create the RAR + compression algorithm, which is proprietary, without written + permission of the author. + + 5. If you don't agree with terms of the license you must remove + UnRAR files from your storage devices and cease to use the + utility. + + Thank you for your interest in RAR and UnRAR. + + + Alexander L. Roshal \ No newline at end of file diff --git a/win/unrar/x64/UnRAR.exe b/win/unrar/x64/UnRAR.exe new file mode 100644 index 0000000000000000000000000000000000000000..57d8cba9653bd53b21d194ecc8d64308816f8f7c GIT binary patch literal 262144 zcmeFad3aPs7B_r5-5~)IZa{+UG}t=P00!fdq=WViH*i}!zzm=`Za8Sf8AciC#tot4 z?S^z;E~2>245QABI?mvNgF=D`Ss)37C4eG|3o2?g4T|7k*zE6js&01z>ifLkAK!l; z&qLp;Q&p!jR3}Vw{_);B?i`t&-OXj8 z?tSKwLlc)D+K~J|e*3)}CLun4`-}~@^6vv1rr>+yfqOR;;d|e2pWbjIz7v-p-q6b7 zGd2vucl`GIH~gB%ALifR+&z5;;XJnm6U!y(j)h&M%V%D2T{7*6G)(HA)>V>rrAgA~ zHV!^;CBiv8=;06w1C&lb_?P@rh%*l`yX2`#7P86$Dv%^URMvt}P#QSiF5N+aSq@2? zg|EjUtsF)G>)#QFbUCUl_+OedFbVs=`5sA=mQttw!oQLJJMZ@+ZFL)v6G7DWbMiYS zY1+uyciis3U6O)-L>}Oj?!k8tzMcMgK=nwGP1^r15~e|-2IH%eWOe-WNK)O%St28E zBibstkp8=$;tFGFQPH#lg?STuCG&?W^Nkaquf)6_S z2hIyVn4S^HE-LF1$P_tO+8VcR)r`mXqEvZdUF`OqlC)Ke-0aG{LDLU8HRA)#%<82X zC)qzU($5(h4hVi#Fq{}oKtVnFV<_k&;E3FwO`es z+MYjCE%?5XxI9g3R$a~?6N!WtnF=<}$k8IR`fA2^$E(`MVsOZz{m^EbQPp-H#&k_% z9z;S8Zv`w^OTCTA21IJxvL%Ua{k08QTiBtSCFvb0NafzsOrOic?m-PpHDeFO^4Pk& zY|>JB&5~Z@D9ge&;L*&|r)MC3IKPohj^@xpch{Ux;viM9exTbpK%AHwecog^(4q})xUXa;CR56Gco zXc0TyB~6OO5Q;ABa=Rpz%JL&GB39~>7yS+2;Q92 z^fj|je3mA$r8lK$f3=cm5AXA%vQ~B#sE%JLTD6R)SgrC8WdkU!zev09th98NNKcb| z=FP5YUgM@5uknYzUSp2aYkYBAqa~Y>f-F?e<#RXkCgs!Es7zL-DAz-XJU=f)k^7x$ z^mEOKl@}gYtKVSg6xOdSFz%mzA0f z@KZCNydQF?8Qa*c5DWCUKLZ&^Vf!L)9RbQtIi{UTBnbIHwdgGpPC3-y##KwL&+2Td#6vc@uRN?)ry|VR=nBgb!k$;1ju^8?SJY2`pC~^Q1 zwfL{bIy6bys#z>cb{Ev>auOa2=57?GFZ~Y35r+lc|ZL?VqGcrWQT+QXr#= z^UiiWoP#7=;5^hy%=Y)JRKu?lzbOl0wsGM~NxyCOhU2SyU}Fo^rXP}K5wMs3xO zZd#%qj0qeA*a=mjnP≷Q7)gZPH2`sn=Z6t5Eq@FO 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 literal 0 HcmV?d00001 diff --git a/win/unrar/x64/license.txt b/win/unrar/x64/license.txt new file mode 100644 index 0000000..afbdc87 --- /dev/null +++ b/win/unrar/x64/license.txt @@ -0,0 +1,34 @@ + ****** ***** ****** UnRAR - free utility for RAR archives + ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ****** ******* ****** License for use and distribution of + ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ** ** ** ** ** ** FREEWARE version + ~~~~~~~~~~~~~~~~ + + The UnRAR utility is freeware. This means: + + 1. All copyrights to RAR and the utility UnRAR are exclusively + owned by the author - Alexander Roshal. + + 2. The UnRAR utility may be freely distributed. It is allowed + to distribute UnRAR inside of other software packages. + + 3. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS". + NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT + YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, + DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING + OR MISUSING THIS SOFTWARE. + + 4. Neither RAR binary code, WinRAR binary code, UnRAR source or UnRAR + binary code may be used or reverse engineered to re-create the RAR + compression algorithm, which is proprietary, without written + permission of the author. + + 5. If you don't agree with terms of the license you must remove + UnRAR files from your storage devices and cease to use the + utility. + + Thank you for your interest in RAR and UnRAR. + + + Alexander L. Roshal \ No newline at end of file diff --git a/win/unzip/LICENSE b/win/unzip/LICENSE new file mode 100644 index 0000000..5e6441a --- /dev/null +++ b/win/unzip/LICENSE @@ -0,0 +1,55 @@ +This is version 2005-Feb-10 of the Info-ZIP copyright and license. +The definitive version of this document should be available at +ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely. + + +Copyright (c) 1990-2005 Info-ZIP. All rights reserved. + +For the purposes of this copyright and license, "Info-ZIP" is defined as +the following set of individuals: + + Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, + Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth, + Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, + David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, + Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, + Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda, + Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren, + Rich Wales, Mike White + +This software is provided "as is," without warranty of any kind, express +or implied. In no event shall Info-ZIP or its contributors be held liable +for any direct, indirect, incidental, special or consequential damages +arising out of the use of or inability to use this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. Redistributions of source code must retain the above copyright notice, + definition, disclaimer, and this list of conditions. + + 2. Redistributions in binary form (compiled executables) must reproduce + the above copyright notice, definition, disclaimer, and this list of + conditions in documentation and/or other materials provided with the + distribution. The sole exception to this condition is redistribution + of a standard UnZipSFX binary (including SFXWiz) as part of a + self-extracting archive; that is permitted without inclusion of this + license, as long as the normal SFX banner has not been removed from + the binary or disabled. + + 3. Altered versions--including, but not limited to, ports to new operating + systems, existing ports with new graphical interfaces, and dynamic, + shared, or static library versions--must be plainly marked as such + and must not be misrepresented as being the original source. Such + altered versions also must not be misrepresented as being Info-ZIP + releases--including, but not limited to, labeling of the altered + versions with the names "Info-ZIP" (or any variation thereof, including, + but not limited to, different capitalizations), "Pocket UnZip," "WiZ" + or "MacZip" without the explicit permission of Info-ZIP. Such altered + versions are further prohibited from misrepresentative use of the + Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s). + + 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," + "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its + own source and binary releases. diff --git a/win/unzip/README b/win/unzip/README new file mode 100644 index 0000000..202e05f --- /dev/null +++ b/win/unzip/README @@ -0,0 +1,288 @@ +This is the README file for the 28 February 2005 public release of the +Info-ZIP group's portable UnZip zipfile-extraction program (and related +utilities). + +unzip552.zip portable UnZip, version 5.52, source code distribution +unzip552.tar.Z same as above, but compress'd tar format +unzip552.tar.gz same as above, but gzip'd tar format + +__________________________________________________________________________ + +BEFORE YOU ASK: UnZip, its companion utility Zip, and related utilities +and support files can be found in many places; read the file "WHERE" for +further details. To contact the authors with suggestions, bug reports, +or fixes, continue reading this file (README) and, if this is part of a +source distribution, the file "ZipPorts" in the proginfo directory. Also +in source distributions: read "BUGS" for a list of known bugs, non-bugs +and possible future bugs; INSTALL for instructions on how to build UnZip; +and "Contents" for a commented listing of all the distributed files. +__________________________________________________________________________ + + +GENERAL INFO +------------ +UnZip is an extraction utility for archives compressed in .zip format (also +called "zipfiles"). Although highly compatible both with PKWARE's PKZIP +and PKUNZIP utilities for MS-DOS and with Info-ZIP's own Zip program, our +primary objectives have been portability and non-MSDOS functionality. + +This version of UnZip has been ported to a stupendous array of hardware-- +from micros to supercomputers--and operating systems: Unix (many flavors), +VMS, OS/2 (including DLL version), Windows NT and Windows 95 (including DLL +version), Windows CE (GUI version), Windows 3.x (including DLL version), +MS-DOS, AmigaDOS, Atari TOS, Acorn RISC OS, BeOS, Macintosh (GUI version), +SMS/QDOS, MVS, VM/CMS, FlexOS, Tandem NSK, Human68k (mostly), AOS/VS (partly) +and TOPS-20 (partly). UnZip features not found in PKUNZIP include source +code; default extraction of directory trees (with a switch to defeat this, +rather than the reverse); system-specific extended file attributes; and, of +course, the ability to run under most of your favorite operating systems. +Plus, it's free. :-) + +For source distributions, see the main Contents file for a list of what's +included, and read INSTALL for instructions on compiling (including OS- +specific comments). The individual operating systems' Contents files (for +example, vms/Contents) may list important compilation info in addition to +explaining what files are what, so be sure to read them. Some of the ports +have their own, special README files, so be sure to look for those, too. + +See unzip.1 or unzip.txt for usage (or the corresponding UnZipSFX, ZipInfo, +fUnZip and ZipGrep docs). For VMS, unzip_def.rnh or unzip_cli.help may be +compiled into unzip.hlp and installed as a normal VMS help entry; see +vms/descrip.mms. + + +CHANGES AND NEW FEATURES +------------------------ +The 5.52 maintenance release fixes a few minor problems found in the 5.51 +release, closes some more security holes, adds a new AtheOS port, and +contains a Win32 extra-field code cleanup that was not finished earlier. +The most important changes are: + + - (re)enabled unshrinking support by default, the LZW patents have expired + - fixed an extraction size bug for encrypted stored entries (12 excess bytes + were written with 5.51) + - fixed false "uncompressed size mismatch" messages when extracting + encrypted archive entries + - do not restore SUID/SGID/Tacky attribute bits on Unix (BeOS, AtheOS) + unless explicitely requested by new "-K" command line qualifier + - optional support for "-W" qualifier to modify the pattern matching syntax + (with -W: "*" stops at directory delimiter, "**" matches unlimited) + - prevent buffer overflow caused by bogus extra-long Zipfile specification + - performance enhancements for VMS port + - fixed windll interface handling of its extraction mode qualifiers + nfflag, ExtractOnlyNewer, noflag, PromptToOverwrite; added detailed + explanation of their meanings and interactions to the windll documentation + +The 5.51 maintenance release adds a command-line CE port, intended for +batch processing. With the integration of this port, the pUnZip port +has been revised and "revitalized". +The most important changes for the general public are a number of +bug fixes, mostly related to security issues: + + - repair a serious bug in the textmode output conversion code for the 16-bit + ports (16-bit MSDOS, OS/2 1.x, some variants of AMIGA, possibly others) + which was introduced by the Deflate64 support of release 5.5 + - fix a long standing bug in the the inflate decompression method that + prevented correct extraction in some rare cases + - fixed holes in parent dir traversal security code (e.g.: ".^C." slipped + through the previous version of the check code) + - fixed security hole: check naming consistency in local and central header + - fixed security hole: prevent extracted symlinks from redirecting file + extraction paths + +The main addition in the 5.5 release is support for PKWARE's new Deflate64(tm) +algorithm, which appeared first in PKZIP 4.0 (published November 2000). +As usual, some other bugfixes and clean-ups have been integrated: + + - support for Deflate64 (Zip compression method #9) + - support for extracting VMS variable length record text files on + any system + - optional "cheap autorun" feature for the SFX stub + - security fixes: + * strip leading slash from stored pathspecs, + * remove "../" parent dir path components from extracted file names + - new option "-:" to allow verbatim extraction of file names containing + "../" parent dir path specs + - fixed file handle leak for the DLL code + - repaired OS2 & WinNT ACL extraction which was broken in 5.42 + +The 5.42 maintenance release fixes more bugs and cleans up the redistribution +conditions: + + - removal of unreduce.c and amiga/timelib.c code to get rid of the last + distribution restrictions beyond the BSD-like Info-ZIP LICENSE + - new generic timelib replacement (currently used by AMIGA port) + - more reasonable mapping rules of UNIX "leading-dot" filenames to the + DOS 8.3 name convention + - repaired screensize detection in MORE paging code + (was broken for DOS/OS2/WIN32 in 5.41) + +The 5.41 maintenance release adds another new port and fixes some bugs. + + - new BSD-like LICENSE + - new Novell Netware NLM port + - supports extraction of archives with more than 64k entries + - attribute handling of VMS port was broken in UnZip 5.4 + - decryption support integrated in the main source distribution + +The 5.4 release adds new ports, again. Other important items are changes +to the listing format, new supplemental features and several bug fixes +(especially concerning time-stamp handling...): + + - new IBM OS/390 port, a UNIX derivate (POSIX with EBCDIC charset) + - complete revision of the MacOS port + - changed listing formats to enlarge the file size fields for more digits + - added capability to restore directory attributes on MSDOS, OS/2, WIN32 + - enabled support of symbolic links on BeOS + - Unix: optional Acorn filetype support, useful for volumes exported via NFS + - several changes/additions to the DLL API + - GUI SFX stub for Win16 (Windows 3.1) and Win32 (Windows 9x, Windows NT) + - new free GCC compiler environments supported on WIN32 + - many time-zone handling bug fixes for WIN32, AMIGA, ... + +The 5.32 release adds two new ports and a fix for at least one relatively +serious bug: + + - new FlexOS port + - new Tandem NSK port + - new Visual BASIC support (compatibility with the Windows DLLs) + - new -T option (set zipfile timestamp) for virtually all ports + - fix for timestamps beyond 2038 (e.g., 2097; crashed under DOS/Win95/NT) + - fix for undetected "dangling" symbolic links (i.e., no pointee) + - fix for VMS indexed-file extraction problem (stored with Zip 2.0 or 2.1) + - further performance optimizations + +The 5.31 release included nothing but small bug-fixes and typo corrections, +with the exception of some minor performance tweaks. + +The 5.3 release added still more ports and more cross-platform portability +features: + + - new BeOS port + - new SMS/QDOS port + - new Windows CE graphical port + - VM/CMS port fully updated and tested + - MVS port fully updated and tested + - updated Windows DLL port, with WiZ GUI spun off to a separate package + - full Universal Time (UTC or GMT) support for trans-timezone consistency + - cross-platform support for 8-bit characters (ISO Latin-1, OEM code pages) + - support for NT security descriptors (ACLs) + - support for overwriting OS/2 directory EAs if -o option given + - updated Solaris/SVR4 package facility + +What is (still!) not added is multi-part archive support (a.k.a. "diskette +spanning") and a unified and more powerful DLL interface. These are the +two highest priorities for the 6.x releases. Work on the former is almost +certain to have commenced by the time you read this. This time we mean it! +You betcha. :-) + +Although the DLLs are still basically a mess, the Windows DLLs (16- and 32- +bit) now have some documentation and a small example application. Note that +they should now be compatible with C/C++, Visual BASIC and Delphi. Weirder +languages (FoxBase, etc.) are probably Right Out. + +Finally, note that support for unshrinking has now been turned OFF by default, +although the source code is still available (as with unreducing). This was +done for legal reasons, not technical ones, and no, we're not any happier +about it than you are. :-( See the COPYING file for details. + + +INTERNET RESOURCES +------------------ + +Info-ZIP's web site is at http://www.info-zip.org/pub/infozip/ +and contains the most up-to-date information about coming releases, +links to binaries, and common problems. +(See http://www.info-zip.org/pub/infozip/FAQ.html for the latter.) +Files may also be retrieved via ftp://ftp.info-zip.org/pub/infozip/ . +Thanks to LEO (Munich, Germany) for hosting our primary site. + + +DISTRIBUTION +------------ +If you have a question regarding redistribution of Info-ZIP software, either +as is, as packaging for a commercial product, or as an integral part of a +commercial product, please read the Frequently Asked Questions (FAQ) section +of the included COPYING file. + +Insofar as C compilers are rare on some platforms and the authors only have +direct access to a subset of the supported systems, others may wish to pro- +vide ready-to-run executables for new systems. In general there is no prob- +lem with this; we require only that such distributions include this README +file, the WHERE file, the COPYING file (contains copyright/redistribution +information), and the appropriate documentation files (unzip.txt and/or +unzip.1 for UnZip, etc.). If the local system provides a way to make self- +extracting archives in which both the executables and text files can be +stored together, that's best (in particular, use UnZipSFX if at all possible, +even if it's a few kilobytes bigger than the alternatives); otherwise we +suggest a bare UnZip executable and a separate zipfile containing the re- +maining text and binary files. If another archiving method is in common +use on the target system (for example, Zoo or LHa), that may also be used. + + +BUGS AND NEW PORTS: CONTACTING INFO-ZIP +---------------------------------------- +All bug reports and patches (context diffs only, please!) should go to +Zip-Bugs@lists.wku.edu, which is the e-mail address for the Info-ZIP +authors. (Note that a few rare systems require the Zip-Bugs part to be +capitalized as shown; most systems work OK with lowercase "zip-bugs," +however.) DO NOT MAIL US LARGE BINARIES--EVER. If you need to send us +a problem archive that happens to be large (> 20K), contact us first for +instructions. + +"Dumb questions" that aren't adequately answered in the documentation +should also be directed to Zip-Bugs rather than to a global forum such +as Usenet. (Kindly make certain that your question *isn't* answered by +the documentation, however--a great deal of effort has gone into making +it clear and complete.) + +Suggestions for new features can be discussed on Info-ZIP@lists.wku.edu, +a mailing list for Info-ZIP beta testers and interested parties; you need +to subscribe first, however (see below). We make no promises to act on all +suggestions or even all patches, but if it is something that is manifestly +useful, sending the required patches to Zip-Bugs directly (as per the +instructions in the ZipPorts file) is likely to produce a quicker response +than asking us to do it--the authors are always ridiculously short on time. +(Please do NOT send patches or encoded zipfiles to the Info-ZIP list. +Please DO read the ZipPorts file before sending any large patch. It would +be difficult to over-emphasize this point...) + +If you are considering a port, not only should you read the ZipPorts file, +but also please check in with Zip-Bugs BEFORE getting started, since the +code is constantly being updated behind the scenes. (For example, VxWorks, +VMOS and Netware ports were once claimed to be under construction, although +we have yet to see any up-to-date patches.) We will arrange to send you the +latest sources. The alternative is the possibility that your hard work will +be tucked away in a subdirectory and mostly ignored, or completely ignored +if someone else has already done the port (and you'd be surprised how often +this has happened). + + +BETA TESTING: JOINING INFO-ZIP +------------------------------- +If you'd like to keep up to date with our UnZip (and companion Zip utility) +development, join the ranks of beta testers, add your own thoughts and +contributions, or simply lurk, you may join one of our mailing lists. +There is an announcements-only list (Info-ZIP-announce) and a general +discussion/testing list (Info-ZIP). You must be a subscriber to post, and +you can subscribe via the links on our Frequently Asked Questions page: + + http://www.info-zip.org/pub/infozip/FAQ.html#lists + +(Please note that as of late May 2004, the lists are unavailable pending +a move to a new site; we hope to have them restored shortly. In the +interim ...) Feel free to use our bug-reporting web page for bug reports +and to ask questions not answered on the FAQ page above: + + http://www.info-zip.org/zip-bug.html + +There is also a closed mailing list for internal discussions of our core +development team. This list is now kept secret to prevent us from being +flooded with spam messages. + + +-- Greg Roelofs (sometimes known as Cave Newt), principal UnZip developer + guy, with inspiration from David Kirschbaum, was Author of this text. + +-- Christian Spieler (shorthand: SPC), current UnZip maintenance coordinator, + applied the most recent changes. diff --git a/win/unzip/README.NT b/win/unzip/README.NT new file mode 100644 index 0000000..adf5f30 --- /dev/null +++ b/win/unzip/README.NT @@ -0,0 +1,40 @@ +README.NT 27 February 2005 +------------------------------------------------------------------------------- + +Contents of the UnZip 5.52 distribution archive for Win9x/NT/2K/XP/2K3 (Intel): + + README general information + LICENSE terms and conditions for using Info-Zip code + COPYING.OLD additional Copyright notes + WHERE where to get the current Info-ZIP software + unzip.txt UnZip manual (preformatted unix man page) + unzipsfx.txt UnZipSFX manual (dto.) + funzip.txt manual for fUnZip + zipinfo.txt manual for UnZip's ZipInfo mode + ziplimit.txt infos about limitations of Info-Zip's progs + README.NT this file ... + unzip.exe UnZip for NT command line utility, MSVC++ 6.0 + unzipsfx.exe console mode SFX stub for NT, MSVC++ 6.0 + funzip.exe UnZip "filter" utility + SFXWiz32.exe GUI mode SFX stub for NT, MSVC++ 6.0 + unzipsfx-gcc.exe console mode SFX stub for NT, gcc/mingw32 + SFXWiz32-gcc.exe GUI mode SFX stub for NT, gcc/mingw32 + + +The program executables were compiled with MS Visual C++ 6.0 SP6 (MSC v12.00), +using the win32/Makefile as supplied in the UnZip 5.52 source distribution +(with support for ASM_CRC enabled). Additionally, the sfx stubs have been +compressed by the free exe packer UPX 1.25. + +The alternative unzipsfx-gcc.exe and SFXWiz32-gcc.exe stubs were compiled +by gcc 3.2 using the mingw32 environment. These stubs are significantly +smaller, but require the presence of the "msvcrt.dll" C runtime DLL. +Normally, this should not be a problem, since this dll is supplied as part +of the operating system core for Win2k/XP/2K3 and Windows 98/Me. Older Windows +systems (Win95/NT4) support this runtime DLL when Internet Explorer 4.0 (or +newer) is installed. The dll is not supplied in a Win32s environment, but +this should be a minor problem. (For the text-mode stub this is not a +problem at all; Win32s cannot be used to run text-mode applications, anyway.) + +-------- +Christian Spieler diff --git a/win/unzip/WHERE b/win/unzip/WHERE new file mode 100644 index 0000000..fd4dc45 --- /dev/null +++ b/win/unzip/WHERE @@ -0,0 +1,258 @@ +__________________________________________________________________________ + + This is the Info-ZIP file ``WHERE,'' last updated on 17 February 2005. +__________________________________________________________________________ + + The latest version of this file can be found online at: + + ftp://ftp.info-zip.org/pub/infozip/doc/WHERE + + Note that some ftp sites may not yet have the latest versions of Zip + and UnZip when you read this. The latest versions always appear in + ftp://ftp.info-zip.org/pub/infozip/ (and subdirectories thereof) first, + except for encryption binaries, which always appear in + ftp://ftp.icce.rug.nl/infozip/ (and subdirectories) first. + + IF YOU FIND AN ERROR: please let us know! We don't have time to + check each and every site personally (or even collectively), so any + number of the sites listed below may have moved or disappeared en- + tirely. E-mail to Zip-Bugs@lists.wku.edu and we'll update this file. +__________________________________________________________________________ + + +Info-ZIP's home WWW site is listed on Yahoo and is at: + + ftp://ftp.info-zip.org/pub/infozip/Info-ZIP.html (master version) + http://ftp.info-zip.org/pub/infozip/ (master version) + http://www.info-zip.org/ + +Note that the old sites at http://www.cdrom.com/pub/infozip/ and +http://www.freesoftware.com/pub/infozip are PERMANENTLY BROKEN. They +cannot be updated or removed, apparently. + +The Zip and UnZip pages have links to most known mirror sites carrying our +source and/or binary distributions, and they generally are more up-to-date +and have better information than what you are reading: + + ftp://ftp.info-zip.org/pub/infozip/Zip.html + ftp://ftp.info-zip.org/pub/infozip/UnZip.html + +The related zlib package by Info-ZIP's Jean-loup Gailly and Mark Adler is at: + + http://www.zlib.org/ + +Source-code archives for Info-ZIP's portable Zip, UnZip, and related +utilities: + + zip231.zip Zip 2.31 (deflation; includes zipnote/zipsplit/zipcloak) + zip231.tar.Z ditto, compress'd tar format + + zip11.zip Zip 1.1 (shrinking, implosion; compatible w. PKUNZIP 1.1) + zip11.tar.Z ditto, compress'd tar format + + unzip552.zip UnZip 5.52 (all methods[*]; unzip/funzip/unzipsfx/zipgrep) + unzip552.tar.gz ditto, gzip'd tar format + unzip552.tar.Z ditto, compress'd tar format + + unred552.zip UnZip 5.52 add-on, contains copyrighted unreduce support + + zcrypt29.zip encryption support for Zip 2.3[**] + zcrypt10.zip encryption support for Zip 1.1 + + MacZip106src.zip contains all the GUI stuff and the project files to build + the MacZip main-app. To build MacZip successfully, both + the Zip 2.31 and UnZip 5.52 sources are required, too. + + wiz502.zip WiZ 5.02, Windows 9x/NT GUI front-end for Info-ZIP DLLs + wiz502+dlls.zip WiZ 5.02, Windows 9x/NT GUI front-end plus DLL sources + +[*] Unreducing is disabled by default, but is available as add-on. + As of July 2004, Unisys's LZW patent was expired worldwide, and + unshrinking is turned on by default since the release of UnZip 5.52. + See UnZip's INSTALL file for details. + +[**] As of January 2000, US export regulations were amended to allow export + of free encryption source code from the US. As of June 2002, these + regulations were further relaxed to allow export of encryption binaries + associated with free encryption source code. The Zip 2.31, UnZip 5.52 + and Wiz 5.02 archives now include full crypto source code. As of the + Zip 2.31 release, all official binaries include encryption support; the + former "zcr" archives ceased to exist. + (Note that restrictions may still exist in other countries, of course.) + +Executables archives (and related files) for Info-ZIP's software; not all +of these will be immediately available due to lack of access to appropriate +systems on the part of Info-ZIP members. + + zip231x.zip MSDOS executables and docs + zip231x1.zip OS/2 1.x (16-bit) executables and docs + zip231x2.zip OS/2 2/3/4.x (32-bit) executables and docs + zip231xA.zip Amiga executables and docs + zip231xB.zip BeOS executables and docs + zip231xC.zip VM/CMS executable and docs + zip231xK.zip Tandem NSK executables and docs + zip231xM.xmit MVS classic executable + zip231xM-docs.zip MVS classic port, docs only + zip231dN.zip WinNT/Win9x (Intel) DLL, header files, docs + zip231xN.zip WinNT/Win9x (Intel) executables and docs + zip231xN-axp.zip WinNT (Alpha AXP) executables and docs + zip231xN-mip.zip WinNT (MIPS R4000) executables and docs + zip231xN-ppc.zip WinNT (PowerPC) executables and docs + zip231xO.zip IBM OS/390 Open Edition binaries and docs + zip231xQ.zip SMS/QDOS executables and docs + zip231xR.zip Acorn RISC OS executables and docs + zip231xT.zip Atari TOS executables and docs + zip231-vms-axp-obj.zip + VMS (Alpha AXP) object libs, link procedure and docs + zip231-vms-axp-exe.zip + VMS (Alpha AXP) executables for VMS 6.1 or later and docs + zip231-vms-vax-decc-obj.zip + VMS (VAX) object libs (new DEC C), link procedure and docs + zip231-vms-vax-decc-exe.zip + VMS (VAX) executables (DEC C) for VMS 6.1 or later; docs + zip231-vms-vax-vaxc-obj.zip + VMS (VAX) object libs (old VAX C), link procedure and docs + zip231x.hqx Macintosh BinHex'd executables and docs + + unz552x.exe MSDOS self-extracting executable (16-bit unzip, ..., docs) + unz552x3.exe MSDOS self-extracting executable (16-, 32-bit unzip, docs) + unz552x1.exe OS/2 1.x (16-bit) self-extracting executables and docs + unz552x2.exe OS/2 2/3/4.x (32-bit) self-extracting executables and docs + unz552d2.zip OS/2 2/3/4.x (32-bit) DLL, header file, demo exe and docs + unz552xA.ami Amiga self-extracting executables and docs + unz552xA.lha Amiga executables and docs, LHa archive + unz552xB.sfx BeOS self-extracting executables and docs + unz552xB.tar.gz BeOS executables and docs, gzip'd tar archive + unz552xC.mod VM/CMS executable module in "packed" format + unz552xC-docs.zip VM/CMS docs, only + unz552xF.zip FlexOS executable and docs + unz552xK.zip Tandem NSK executable and docs + unz552xM.xmit MVS classic executable + unz552xM-docs.zip MVS classic port, docs only + unz552dN.zip NT4/W2K/XP/2K3/W9x (32-bit Intel) DLL, header files, docs + unz552xN.exe NT/2K/XP/2K3/W9x self-extracting i386 executables and docs + unz552xN-axp.exe WinNT (Alpha AXP) self-extracting executables and docs + unz552xN-mip.exe WinNT (MIPS R4000) self-extracting executables and docs + unz552xN-ppc.exe WinNT (PowerPC) self-extracting executables and docs + unz552xQ.sfx SMS/QDOS self-extracting executables and docs + unz552xO.tar.Z IBM OS/390 Open edition (Unix-like), exes and docs + unz552xR.exe Acorn RISC OS self-extracting executables and docs + unz552xR.spk Acorn RISC OS Spark'd executables and docs + unz552xT.tos Atari TOS self-extracting executables and docs + unz552x-vms-axp-obj.bck VMS backup saveset, + contains UnZip (Alpha) obj libs, link procedure, docs + unz552x-vms-axp-obj.exe VMS (Alpha AXP) SFX archive (statically linked), + contains UnZip (Alpha) obj libs, link procedure, docs + unz552x-vms-axp-exe.exe VMS (Alpha AXP) SFX archive (dynamically linked), + contains UnZip (Alpha AXP, DEC C) executables and docs, + smaller than object archive, but requires VMS 6.1 + unz552x-vms-vax-decc-obj.bck VMS backup saveset, + contains UnZip (new DEC C) obj libs, link procedure, docs + unz552x-vms-vax-decc-obj.exe VMS (VAX) SFX archive (statically linked), + contains UnZip (new DEC C) obj libs, link procedure, docs + unz552x-vms-vax-decc-exe.exe VMS (VAX) SFX archive (dynamically linked), + contains UnZip (new DEC C) executables and docs, + smaller than object archive, but requires VMS 6.1 + unz552x-vms-vax-vaxc-obj.bck VMS backup saveset, + contains UnZip (old VAX C) obj libs, link procedure, docs + unz552x-vms-vax-vaxc-obj.exe VMS (VAX) SFX archive (statically linked), + contains UnZip (old VAX C) obj libs, link procedure, docs + unz552x.hqx Macintosh BinHex'd executables and docs for unzip + (unz552x.tar.{Z,gz} Unix exes/docs for Solaris 2.x, SCO Unix, Linux, etc., + depending on directory/location; generally only provided + in cases where the OS does *not* ship with a bundled C + compiler) + + MacZip106nc.hqx Macintosh combined Zip&UnZip application with GUI, + executables and docs (no encryption) + MacZip106c.hqx Macintosh combined Zip&UnZip application with GUI, + executables and docs (with encryption) + + wiz502xN.exe WiZ 5.02 32-bit (Win9x/NT/2K/XP/2K3) app+docs (self-extr.) + + UnzpHist.zip complete changes-history of UnZip and its precursors + ZipHist.zip complete changes-history of Zip + +ftp/web sites for the US-exportable sources and executables: + + NOTE: Look for the Info-ZIP file names given above (not PKWARE or third- + party stuff) in the following locations. Some sites like to use slightly + different names, such as zip-2.31.tar.gz instead of zip231.tar.Z. + + ftp://ftp.info-zip.org/pub/infozip/ [THE INFO-ZIP HOME SITE] + ftp://sunsite.doc.ic.ac.uk/packages/zip/ [MIRRORS THE INFO-ZIP HOME SITE] + ftp://unix.hensa.ac.uk/mirrors/uunet/pub/archiving/zip/ + + ftp://ftp.cmdl.noaa.gov/aerosol/doc/archiver/{all,dos,os2,mac,vax_alpha}/ + ftp://garbo.uwasa.fi/pc/arcers/ [AND OTHER GARBO MIRRORS] + ftp://garbo.uwasa.fi/unix/arcers/ [AND OTHER GARBO MIRRORS] + ftp://ftp.elf.stuba.sk/pub/pc/pack/ [AND OTHER STUBA MIRRORS] + ftp://ftp-os2.cdrom.com/pub/os2/archiver/ + ftp://ftp-os2.nmsu.edu/os2/archiver/ + ftp://ftp.informatik.tu-muenchen.de/pub/comp/os/os2/archiver/ + ftp://sumex-aim.stanford.edu/info-mac/cmp/ + ftp://ftp.wustl.edu/pub/aminet/util/arc/ [AND OTHER AMINET MIRRORS] + ftp://atari.archive.umich.edu/pub/Archivers/ [AND OTHER UMICH MIRRORS] + http://www.umich.edu/~archive/atari/Archivers/ + ftp://jake.educom.com.au/pub/infozip/acorn/ [Acorn RISC OS] + http://www.sitec.net/maczip/ [MacZip port] + +ftp/web sites for the encryption and decryption sources and/or executables: + + Outside the US: + ftp://ftp.info-zip.org/pub/infozip/ [THE INFO-ZIP HOME SITE] + ftp://ftp.icce.rug.nl/infozip/ [THE INFO-ZIP ENCRYPTION HOME SITE] + ftp://ftp.elf.stuba.sk/pub/pc/pack/ + ftp://garbo.uwasa.fi/pc/arcers/ + ftp://ftp.inria.fr/system/arch-compr/ + ftp://ftp.leo.org/pub/comp/os/os2/leo/archiver/ + (mail server at ftp-mailer@ftp.leo.org) + + ftp://ftp.win.tue.nl/pub/compression/zip/ + ftp://ftp.uni-erlangen.de/pub/pc/msdos/arc-utils/zip/ + + +The primary distribution site for the MacZip port can be found at: + + http://www.sitec.net/maczip/ + +ftp sites for VMS-format Zip and UnZip packages (sources, object files and +executables, no encryption/decryption--see also "Mail servers" section below): + + ftp.spc.edu [192.107.46.27] and ftp.wku.edu: + + [.MACRO32]AAAREADME.TXT + [.MACRO32.SAVESETS]UNZIP.BCK or UNZIP.ZIP (if already have older version) + [.MACRO32.SAVESETS]ZIP.ZIP + +To find other ftp/web sites: + + The "archie" ftp database utility can be used to find an ftp site near + you (although the command-line versions always seem to find old ver- + sions...the `FTPsearch' server at http://ftpsearch.ntnu.no/ftpsearch + --formerly `Archie 95'--is quite up-to-date, however). Or check a stan- + dard WWW search engine like AltaVista (http://www.altavista.digital.com/) + or Yahoo (http://www.yahoo.com/). If you don't know how to use these, + DON'T ASK US--read the web sites' help pages or check the Usenet groups + news.announce.newusers or news.answers or some such, or ask your system + administrator. + +Mail servers: + + To get the encryption sources by e-mail, send the following commands + to ftp-mailer@informatik.tu-muenchen.de: + + get /pub/comp/os/os2/archiver/zcrypt29.zip + quit + + To get the VMS Zip/UnZip package by e-mail, send the following + commands in the body of a mail message to fileserv@wku.edu (the + "HELP" command is also accepted): + + SEND FILESERV_TOOLS + SEND UNZIP + SEND ZIP + + To get Atari executables by e-mail, send a message to + atari@atari.archive.umich.edu for information about the mail server. +__________________________________________________________________________ diff --git a/win/unzip/unzip.exe b/win/unzip/unzip.exe new file mode 100644 index 0000000000000000000000000000000000000000..e9dc44dfe99d067be97125be62f366ba4b579181 GIT binary patch literal 167936 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.A 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 b2p0%5gwup6!V`ocLPXfTb}8`pg#!N%y-P#P literal 0 HcmV?d00001